sig-notation)))
(aset (cdr sig-notation) 1 value))
+(defun epg-make-import-status (fingerprint reason new user-id signature sub-key
+ secret)
+ "Return a import status object."
+ (cons 'epg-import-status (vector fingerprint reason new user-id signature
+ sub-key secret)))
+
+(defun epg-import-status-fingerprint (import-status)
+ "Return the fingerprint of the key that was considered."
+ (unless (eq (car-safe import-status) 'epg-import-status)
+ (signal 'wrong-type-argument (list 'epg-import-status-p import-status)))
+ (aref (cdr import-status) 0))
+
+(defun epg-import-status-reason (import-status)
+ "Return the reason code for import failure."
+ (unless (eq (car-safe import-status) 'epg-import-status)
+ (signal 'wrong-type-argument (list 'epg-import-status-p import-status)))
+ (aref (cdr import-status) 1))
+
+(defun epg-import-status-new (import-status)
+ "Return t if the imported key was new."
+ (unless (eq (car-safe import-status) 'epg-import-status)
+ (signal 'wrong-type-argument (list 'epg-import-status-p import-status)))
+ (aref (cdr import-status) 2))
+
+(defun epg-import-status-user-id (import-status)
+ "Return t if the imported key contained new user IDs."
+ (unless (eq (car-safe import-status) 'epg-import-status)
+ (signal 'wrong-type-argument (list 'epg-import-status-p import-status)))
+ (aref (cdr import-status) 3))
+
+(defun epg-import-status-signature (import-status)
+ "Return t if the imported key contained new signatures."
+ (unless (eq (car-safe import-status) 'epg-import-status)
+ (signal 'wrong-type-argument (list 'epg-import-status-p import-status)))
+ (aref (cdr import-status) 4))
+
+(defun epg-import-status-sub-key (import-status)
+ "Return t if the imported key contained new sub keys."
+ (unless (eq (car-safe import-status) 'epg-import-status)
+ (signal 'wrong-type-argument (list 'epg-import-status-p import-status)))
+ (aref (cdr import-status) 5))
+
+(defun epg-import-status-secret (import-status)
+ "Return t if the imported key contained a secret key."
+ (unless (eq (car-safe import-status) 'epg-import-status)
+ (signal 'wrong-type-argument (list 'epg-import-status-p import-status)))
+ (aref (cdr import-status) 6))
+
+(defun epg-make-import-result (considered no-user-id imported imported-rsa
+ unchanged new-user-id new-sub-key
+ new-signature new-revocation
+ secret-read secret-imported
+ secret-unchanged not-imported)
+ "Return a import result object."
+ (cons 'epg-import-result (vector considered no-user-id imported imported-rsa
+ unchanged new-user-ids new-sub-keys
+ new-signatures new-revocations secret-read
+ secret-imported secret-unchanged
+ not-imported nil)))
+
+(defun epg-import-result-considered (import-result)
+ "Return the total number of considered keys."
+ (unless (eq (car-safe import-result) 'epg-import-result)
+ (signal 'wrong-type-argument (list 'epg-import-result-p import-result)))
+ (aref (cdr import-result) 0))
+
+(defun epg-import-result-no-user-id (import-result)
+ "Return the number of keys without user ID."
+ (unless (eq (car-safe import-result) 'epg-import-result)
+ (signal 'wrong-type-argument (list 'epg-import-result-p import-result)))
+ (aref (cdr import-result) 1))
+
+(defun epg-import-result-imported (import-result)
+ "Return the number of imported keys."
+ (unless (eq (car-safe import-result) 'epg-import-result)
+ (signal 'wrong-type-argument (list 'epg-import-result-p import-result)))
+ (aref (cdr import-result) 2))
+
+(defun epg-import-result-imported-rsa (import-result)
+ "Return the number of imported RSA keys."
+ (unless (eq (car-safe import-result) 'epg-import-result)
+ (signal 'wrong-type-argument (list 'epg-import-result-p import-result)))
+ (aref (cdr import-result) 3))
+
+(defun epg-import-result-unchanged (import-result)
+ "Return the number of unchanged keys."
+ (unless (eq (car-safe import-result) 'epg-import-result)
+ (signal 'wrong-type-argument (list 'epg-import-result-p import-result)))
+ (aref (cdr import-result) 4))
+
+(defun epg-import-result-new-user-ids (import-result)
+ "Return the number of new user IDs."
+ (unless (eq (car-safe import-result) 'epg-import-result)
+ (signal 'wrong-type-argument (list 'epg-import-result-p import-result)))
+ (aref (cdr import-result) 5))
+
+(defun epg-import-result-new-sub-keys (import-result)
+ "Return the number of new sub keys."
+ (unless (eq (car-safe import-result) 'epg-import-result)
+ (signal 'wrong-type-argument (list 'epg-import-result-p import-result)))
+ (aref (cdr import-result) 6))
+
+(defun epg-import-result-new-signatures (import-result)
+ "Return the number of new signatures."
+ (unless (eq (car-safe import-result) 'epg-import-result)
+ (signal 'wrong-type-argument (list 'epg-import-result-p import-result)))
+ (aref (cdr import-result) 7))
+
+(defun epg-import-result-new-revocations (import-result)
+ "Return the number of new revocations."
+ (unless (eq (car-safe import-result) 'epg-import-result)
+ (signal 'wrong-type-argument (list 'epg-import-result-p import-result)))
+ (aref (cdr import-result) 8))
+
+(defun epg-import-result-secret-read (import-result)
+ "Return the total number of secret keys read."
+ (unless (eq (car-safe import-result) 'epg-import-result)
+ (signal 'wrong-type-argument (list 'epg-import-result-p import-result)))
+ (aref (cdr import-result) 9))
+
+(defun epg-import-result-secret-imported (import-result)
+ "Return the number of imported secret keys."
+ (unless (eq (car-safe import-result) 'epg-import-result)
+ (signal 'wrong-type-argument (list 'epg-import-result-p import-result)))
+ (aref (cdr import-result) 10))
+
+(defun epg-import-result-secret-unchanged (import-result)
+ "Return the number of unchanged secret keys."
+ (unless (eq (car-safe import-result) 'epg-import-result)
+ (signal 'wrong-type-argument (list 'epg-import-result-p import-result)))
+ (aref (cdr import-result) 11))
+
+(defun epg-import-result-not-imported (import-result)
+ "Return the number of keys not imported."
+ (unless (eq (car-safe import-result) 'epg-import-result)
+ (signal 'wrong-type-argument (list 'epg-import-result-p import-result)))
+ (aref (cdr import-result) 12))
+
+(defun epg-import-result-imports (import-result)
+ "Return the list of `epg-import-status' objects."
+ (unless (eq (car-safe import-result) 'epg-import-result)
+ (signal 'wrong-type-argument (list 'epg-import-result-p import-result)))
+ (aref (cdr import-result) 13))
+
(defun epg-context-result-for (context name)
"Return the result of CONTEXT associated with NAME."
(cdr (assq name (epg-context-result context))))
(if entry
(setcdr entry user-id)
(setq epg-user-id-alist (cons (cons key-id user-id)
- epg-user-id-alist)))
- (epg-context-set-result-for
- context 'import
- (cons (list (cons 'key-id key-id)
- (cons 'user-id user-id))
- (epg-context-result-for context 'import))))))
+ epg-user-id-alist))))))
(defun epg--status-IMPORT_OK (context string)
- (let ((result (epg-context-result-for context 'import)))
- (if (and result
- (string-match "\\`\\([0-9]+\\)\\( \\(.+\\)\\)?" string))
- (setcar result
- (append (list (cons 'reason
- (string-to-number
- (match-string 1 string))))
- (if (match-beginning 2)
- (list (cons 'fingerprint
- (match-string 3 string))))
- (car result))))))
+ (if (string-match "\\`\\([0-9]+\\)\\( \\(.+\\)\\)?" string)
+ (let ((reason (string-to-number (match-string 1 string))))
+ (epg-context-set-result-for
+ context 'import-status
+ (cons (epg-make-import-status (if (match-beginning 2)
+ (match-string 3 string))
+ nil
+ (/= (logand reason 1) 0)
+ (/= (logand reason 2) 0)
+ (/= (logand reason 4) 0)
+ (/= (logand reason 8) 0)
+ (/= (logand reason 16) 0))
+ (epg-context-result-for context 'import-status))))))
(defun epg--status-IMPORT_PROBLEM (context string)
(if (string-match "\\`\\([0-9]+\\)\\( \\(.+\\)\\)?" string)
(epg-context-set-result-for
- context 'error
- (cons (cons 'import-problem
- (append (list (cons 'reason
- (string-to-number
- (match-string 1 string))))
- (if (match-beginning 2)
- (list (cons 'fingerprint
- (match-string 3 string))))))
- (epg-context-result-for context 'error)))))
+ context 'import-status
+ (cons (epg-make-import-status
+ (if (match-beginning 2)
+ (match-string 3 string))
+ (string-to-number (match-string 1 string)))
+ (epg-context-result-for context 'import-status)))))
+
+(defun epg--status-IMPORT_RES (context string)
+ (when (string-match "\\`\\([0-9]+\\) \\([0-9]+\\) \\([0-9]+\\) \\([0-9]+\\) \
+\\([0-9]+\\) \\([0-9]+\\) \\([0-9]+\\) \\([0-9]+\\) \\([0-9]+\\) \\([0-9]+\\) \
+\\([0-9]+\\) \\([0-9]+\\) \\([0-9]+\\)" string)
+ (epg-context-set-result-for
+ context 'import
+ (cons (epg-make-import-result
+ (string-to-number (match-string 1 string))
+ (string-to-number (match-string 2 string))
+ (string-to-number (match-string 3 string))
+ (string-to-number (match-string 4 string))
+ (string-to-number (match-string 5 string))
+ (string-to-number (match-string 6 string))
+ (string-to-number (match-string 7 string))
+ (string-to-number (match-string 8 string))
+ (string-to-number (match-string 9 string))
+ (string-to-number (match-string 10 string))
+ (string-to-number (match-string 11 string))
+ (string-to-number (match-string 12 string))
+ (string-to-number (match-string 13 string))
+ (epg-context-result-for context 'import-status))
+ (epg-context-result-for context 'import)))
+ (epg-context-set-result-for context 'import-status nil)))
(defun epg-passphrase-callback-function (context key-id handback)
(if (eq key-id 'SYM)