- (setq epg-key-id (match-string 1 line)
- line (epg-pgp50i--wait-for-line context))
- (when (and line
- (string-match "\"\\([^\"]+\\)\"" line))
- (setq user-id (match-string 1 line)
- entry (assoc epg-key-id epg-user-id-alist))
- (if entry
- (setcdr entry user-id)
- (setq epg-user-id-alist (cons (cons epg-key-id user-id)
- epg-user-id-alist)))))))
+ (setq key-id (match-string 1 line))
+ (while (and (setq line (epg-pgp50i--read-line context))
+ (string-match "\"\\([^\"]+\\)\"" line))
+ (setq user-id-list (cons (match-string 1 line) user-id-list)))
+ (cons key-id user-id-list))))
+
+(defun epg-pgp50i--status-NEED_PASSPHRASE_TO_DECRYPT_KEY (context message)
+ (let* ((key (epg-pgp50i--read-key context))
+ (entry (assoc (car key) epg-user-id-alist)))
+ (if entry
+ (setcdr entry (car (cdr key)))
+ (setq epg-user-id-alist (cons (cons (car key) (car (cdr key)))
+ epg-user-id-alist)))
+ (setq epg-key-id (car key))))
+
+(defun epg-pgp50i--status-CANNOT_DECRYPT (context message)
+ (epg-context-set-result-for
+ context 'error
+ (cons (cons 'decryption-failed
+ (epg-pgp50i--read-key context))
+ (epg-context-result-for context 'error))))
+
+(defun epg-pgp50i--parse-time (string)
+ (if (string-match "\\`\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\) \
+\\([0-9][0-9]\\):\\([0-9][0-9]\\) GMT\\'" string)
+ (encode-time 0
+ (string-to-number (match-string 5 string))
+ (string-to-number (match-string 4 string))
+ (string-to-number (match-string 3 string))
+ (string-to-number (match-string 2 string))
+ (string-to-number (match-string 1 string))
+ 0)))
+
+(defun epg-pgp50i--status-GOOD_SIGNATURE (context message)
+ (if (string-match "Good signature made \\(.*\\) by key:" message)
+ (let ((time (epg-pgp50i--parse-time (match-string 1 message)))
+ (key (epg-pgp50i--read-key context)))
+ (epg--status-*SIG context 'good (concat (car key) " " (car (cdr key))))
+ (epg-signature-set-creation-time
+ (car (epg-context-result-for context 'verify))
+ time))))
+
+(defun epg-pgp50i--status-BAD_SIGNATURE (context message)
+ (if (string-match "BAD signature made \\(.*\\) by key:" message)
+ (let ((time (epg-pgp50i--parse-time (match-string 1 message)))
+ (key (epg-pgp50i--read-key context)))
+ (epg--status-*SIG context 'good (concat (car key) " " (car (cdr key))))
+ (epg-signature-set-creation-time
+ (car (epg-context-result-for context 'verify))
+ time))))