X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/54bd972f159fb8c25b4f4042ac6db5da557d9108..2b44e4584b8b113a8fbfcca6e8980383a77a9717:/lisp/epg.el diff --git a/lisp/epg.el b/lisp/epg.el index 33c0443dd9..77181a1a34 100644 --- a/lisp/epg.el +++ b/lisp/epg.el @@ -1,5 +1,5 @@ ;;; epg.el --- the EasyPG Library -*- lexical-binding: t -*- -;; Copyright (C) 1999-2000, 2002-2013 Free Software Foundation, Inc. +;; Copyright (C) 1999-2000, 2002-2014 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Keywords: PGP, GnuPG @@ -135,7 +135,7 @@ (?f . full) (?u . ultimate))) -(defvar epg-key-capablity-alist +(defvar epg-key-capability-alist '((?e . encrypt) (?s . sign) (?c . certify) @@ -1124,7 +1124,7 @@ This function is for internal use only." ((eq (car error) 'exit) "Exit") ((eq (car error) 'quit) - "Cancelled") + "Canceled") ((eq (car error) 'no-data) (let ((entry (assq (cdr error) epg-no-data-reason-alist))) (if entry @@ -1278,37 +1278,34 @@ This function is for internal use only." (defun epg--process-filter (process input) (if epg-debug - (save-excursion - (unless epg-debug-buffer - (setq epg-debug-buffer (generate-new-buffer " *epg-debug*"))) - (set-buffer epg-debug-buffer) + (with-current-buffer + (or epg-debug-buffer + (setq epg-debug-buffer (generate-new-buffer " *epg-debug*"))) (goto-char (point-max)) (insert input))) (if (buffer-live-p (process-buffer process)) (with-current-buffer (process-buffer process) - (goto-char (point-max)) - (insert input) - (unless epg-process-filter-running - (unwind-protect - (progn - (setq epg-process-filter-running t) - (goto-char epg-read-point) - (beginning-of-line) - (while (looking-at ".*\n") ;the input line finished - (if (looking-at "\\[GNUPG:] \\([A-Z_]+\\) ?\\(.*\\)") - (let* ((status (match-string 1)) - (string (match-string 2)) - (symbol (intern-soft (concat "epg--status-" - status)))) - (if (member status epg-pending-status-list) - (setq epg-pending-status-list nil)) - (if (and symbol - (fboundp symbol)) - (funcall symbol epg-context string)) - (setq epg-last-status (cons status string)))) - (forward-line) - (setq epg-read-point (point)))) - (setq epg-process-filter-running nil)))))) + (save-excursion + (goto-char (point-max)) + (insert input) + (unless epg-process-filter-running + (let ((epg-process-filter-running t)) + (goto-char epg-read-point) + (beginning-of-line) + (while (looking-at ".*\n") ;the input line finished + (if (looking-at "\\[GNUPG:] \\([A-Z_]+\\) ?\\(.*\\)") + (let* ((status (match-string 1)) + (string (match-string 2)) + (symbol (intern-soft (concat "epg--status-" + status)))) + (if (member status epg-pending-status-list) + (setq epg-pending-status-list nil)) + (if (and symbol + (fboundp symbol)) + (funcall symbol epg-context string)) + (setq epg-last-status (cons status string)))) + (forward-line) + (setq epg-read-point (point))))))))) (defun epg-read-output (context) "Read the output file CONTEXT and return the content as a string." @@ -1925,7 +1922,7 @@ This function is for internal use only." (if (aref line 1) (cdr (assq (string-to-char (aref line 1)) epg-key-validity-alist))) (delq nil - (mapcar (lambda (char) (cdr (assq char epg-key-capablity-alist))) + (mapcar (lambda (char) (cdr (assq char epg-key-capability-alist))) (aref line 11))) (member (aref line 0) '("sec" "ssb")) (string-to-number (aref line 3)) @@ -2222,7 +2219,17 @@ SIGNED-TEXT and PLAIN are also a file if they are specified. For a detached signature, both SIGNATURE and SIGNED-TEXT should be string. For a normal or a cleartext signature, SIGNED-TEXT should be nil. In the latter case, if PLAIN is specified, the plaintext is -stored into the file after successful verification." +stored into the file after successful verification. + +Note that this function does not return verification result as t +or nil, nor signal error on failure. That's a design decision to +handle the case where SIGNATURE has multiple signature. + +To check the verification results, use `epg-context-result-for' as follows: + +\(epg-context-result-for context 'verify) + +which will return a list of `epg-signature' object." (unwind-protect (progn (if plain @@ -2249,7 +2256,17 @@ SIGNED-TEXT is a string if it is specified. For a detached signature, both SIGNATURE and SIGNED-TEXT should be string. For a normal or a cleartext signature, SIGNED-TEXT should be nil. In the latter case, this function returns the plaintext after -successful verification." +successful verification. + +Note that this function does not return verification result as t +or nil, nor signal error on failure. That's a design decision to +handle the case where SIGNATURE has multiple signature. + +To check the verification results, use `epg-context-result-for' as follows: + +\(epg-context-result-for context 'verify) + +which will return a list of `epg-signature' object." (let ((coding-system-for-write 'binary) input-file) (unwind-protect @@ -2418,9 +2435,8 @@ If you are unsure, use synchronous version of this function (list "--" (epg-data-file plain))))) ;; `gpgsm' does not read passphrase from stdin, so waiting is not needed. (unless (eq (epg-context-protocol context) 'CMS) - (if sign - (epg-wait-for-status context '("BEGIN_SIGNING")) - (epg-wait-for-status context '("BEGIN_ENCRYPTION")))) + (epg-wait-for-status context + (if sign '("BEGIN_SIGNING") '("BEGIN_ENCRYPTION")))) (when (epg-data-string plain) (if (eq (process-status (epg-context-process context)) 'run) (process-send-string (epg-context-process context)