From ca9c64e28f098bd2e0e9b6762f584f09dd033595 Mon Sep 17 00:00:00 2001 From: ueno Date: Fri, 5 Nov 1999 13:40:08 +0000 Subject: [PATCH] * mime-pgp.el: Add autoload for `pgg-decrypt-region', `pgg-verify-region', `pgg-snarf-keys-region'. (mime-view-application/pgp): Don't use `pgp-function'. (mime-verify-application/pgp-signature): Ditto. (mime-add-application/pgp-keys): Ditto. (mime-pgp-command): Abolish. (mime-pgp-default-language): Abolish. (mime-pgp-good-signature-regexp-alist): Abolish. (mime-pgp-key-expected-regexp-alist): Abolish (mime-pgp-check-signature): Abolish. * semi-def.el (pgp-function-alist): Abolish. (pgp-function): Abolish. * mime-edit.el: Add autoload for `pgg-encrypt-region', `pgg-sign-region', `pgg-insert-key'. (mime-edit-sign-pgp-mime): Throw an error when `pgg-sign-region' returns nil; don't use `pgp-function'. (mime-edit-encrypt-pgp-mime): Throw an error when `pgg-encrypt-region' returns nil; don't use `pgp-function'. (mime-edit-sign-pgp-kazu): Don't use `pgp-function'. (mime-edit-encrypt-pgp-mime): Ditto. --- mime-edit.el | 30 ++++++++++++++----------- mime-pgp.el | 69 ++++++++++++++++++---------------------------------------- semi-def.el | 37 ------------------------------- 3 files changed, 38 insertions(+), 98 deletions(-) diff --git a/mime-edit.el b/mime-edit.el index 51763f3..f81bafc 100644 --- a/mime-edit.el +++ b/mime-edit.el @@ -117,6 +117,13 @@ (require 'pgg-def) (require 'pgg-parse) +(autoload 'pgg-encrypt-region "pgg" + "PGP encryption of current region." t) +(autoload 'pgg-sign-region "pgg" + "PGP signature of current region." t) +(autoload 'pgg-insert-key "pgg" + "Insert PGP public key at point." t) + ;;; @ version ;;; @@ -1754,8 +1761,9 @@ Parameter must be '(PROMPT CHOICE1 (CHOISE2 ...))." (insert (format "Content-Transfer-Encoding: %s\n" encoding)) ) (insert "\n") - (funcall (pgp-function 'sign) - (point-min)(point-max)) + (or (pgg-sign-region (point-min)(point-max)) + (throw 'mime-edit-error 'pgp-error) + ) (setq micalg (cdr (assq 'hash-algorithm (cdar (with-current-buffer pgg-output-buffer @@ -1836,9 +1844,10 @@ Content-Transfer-Encoding: 7bit (insert (format "Content-Transfer-Encoding: %s\n" encoding)) ) (insert "\n") - (let ((pgg-default-user-id (or from pgg-default-user-id))) - (funcall (pgp-function 'encrypt) - (point-min) (point-max) recipients)) + (or (let ((pgg-default-user-id (or from pgg-default-user-id))) + (pgg-encrypt-region (point-min) (point-max) recipients)) + (throw 'mime-edit-error 'pgp-error) + ) (delete-region (point-min)(point-max)) (goto-char beg) (insert (format "--[[multipart/encrypted; @@ -1871,9 +1880,7 @@ Content-Transfer-Encoding: 7bit (insert (format "Content-Transfer-Encoding: %s\n" encoding)) ) (insert "\n") - (or (as-binary-process - (funcall (pgp-function 'traditional-sign) - beg (point-max))) + (or (pgg-sign-region beg (point-max) 'clearsign) (throw 'mime-edit-error 'pgp-error) ) (goto-char beg) @@ -1902,10 +1909,7 @@ Content-Transfer-Encoding: 7bit (insert (format "Content-Transfer-Encoding: %s\n" encoding)) ) (insert "\n") - (or (as-binary-process - (funcall (pgp-function 'encrypt) - recipients beg (point-max) nil 'maybe) - ) + (or (pgg-sign-region beg (point-max) recipients) (throw 'mime-edit-error 'pgp-error) ) (goto-char beg) @@ -2336,7 +2340,7 @@ and insert data encoded as ENCODING." (interactive "P") (mime-edit-insert-tag "application" "pgp-keys") (mime-edit-define-encoding "7bit") - (funcall (pgp-function 'insert-key)) + (pgg-insert-key) ) diff --git a/mime-pgp.el b/mime-pgp.el index a42af5a..c3ef1fd 100644 --- a/mime-pgp.el +++ b/mime-pgp.el @@ -42,11 +42,22 @@ ;; by Kazuhiko Yamamoto (1995/10; ;; expired) +;; [OpenPGP/MIME] draft-yamamoto-openpgp-mime-00.txt: "MIME +;; Security with OpenPGP (OpenPGP/MIME)" by Kazuhiko YAMAMOTO +;; (1998/1) + ;;; Code: (require 'mime-play) (require 'pgg-def) +(autoload 'pgg-decrypt-region "pgg" + "PGP decryption of current region." t) +(autoload 'pgg-verify-region "pgg" + "PGP verification of current region." t) +(autoload 'pgg-snarf-keys-region "pgg" + "Snarf PGP public keys in current region." t) + ;;; @ Internal method for multipart/signed ;;; @@ -78,8 +89,7 @@ (cond ((progn (goto-char (point-min)) (re-search-forward "^-+BEGIN PGP SIGNED MESSAGE-+$" nil t)) - (funcall (pgp-function 'verify) - (point-min)(point-max)) + (pgg-verify-region (match-beginning 0)(point-max) nil 'fetch) (goto-char (point-min)) (delete-region (point-min) @@ -100,8 +110,7 @@ ((progn (goto-char (point-min)) (re-search-forward "^-+BEGIN PGP MESSAGE-+$" nil t)) - (funcall (pgp-function 'decrypt) - (point-min)(point-max)) + (pgg-decrypt-region (point-min)(point-max)) (delete-region (point-min)(point-max)) (insert-buffer pgg-output-buffer) (setq representation-type 'binary) @@ -115,44 +124,8 @@ ;;; @ Internal method for application/pgp-signature ;;; -;;; It is based on RFC 2015 (PGP/MIME). - -(defvar mime-pgp-command "pgp" - "*Name of the PGP command.") - -(defvar mime-pgp-default-language 'en - "*Symbol of language for pgp. -It should be ISO 639 2 letter language code such as en, ja, ...") - -(defvar mime-pgp-good-signature-regexp-alist - '((en . "Good signature from user.*$")) - "Alist of language vs regexp to detect ``Good signature''.") - -(defvar mime-pgp-key-expected-regexp-alist - '((en . "Key matching expected Key ID \\(\\S +\\) not found")) - "Alist of language vs regexp to detect ``Key expected''.") - -(defun mime-pgp-check-signature (output-buffer sig-file orig-file) - (save-excursion - (set-buffer output-buffer) - (erase-buffer)) - (let* ((lang (or mime-pgp-default-language 'en)) - (status (call-process-region (point-min)(point-max) - mime-pgp-command - nil output-buffer nil - sig-file orig-file (format "+language=%s" lang))) - (regexp (cdr (assq lang mime-pgp-good-signature-regexp-alist)))) - (if (= status 0) - (save-excursion - (set-buffer output-buffer) - (goto-char (point-min)) - (message - (cond ((not (stringp regexp)) - "Please specify right regexp for specified language") - ((re-search-forward regexp nil t) - (buffer-substring (match-beginning 0) (match-end 0))) - (t "Bad signature"))) - )))) +;;; It is based on RFC 2015 (PGP/MIME) and +;;; draft-yamamoto-openpgp-mime-00.txt (OpenPGP/MIME). (defun mime-verify-application/pgp-signature (entity situation) "Internal method to check PGP/MIME signature." @@ -176,15 +149,15 @@ It should be ISO 639 2 letter language code such as en, ja, ...") (insert "\r") (forward-line 1)) (let ((pgg-output-buffer mime-echo-buffer-name)) - (funcall (pgp-function 'verify) - (point-min)(point-max) sig-file 'fetch))) + (pgg-verify-region (point-min)(point-max) sig-file 'fetch))) (delete-file sig-file)) )) ;;; @ Internal method for application/pgp-encrypted ;;; -;;; It is based on RFC 2015 (PGP/MIME). +;;; It is based on RFC 2015 (PGP/MIME) and +;;; draft-yamamoto-openpgp-mime-00.txt (OpenPGP/MIME). (defun mime-decrypt-application/pgp-encrypted (entity situation) (let* ((entity-node-id (mime-entity-node-id entity)) @@ -200,7 +173,8 @@ It should be ISO 639 2 letter language code such as en, ja, ...") ;;; @ Internal method for application/pgp-keys ;;; -;;; It is based on RFC 2015 (PGP/MIME). +;;; It is based on RFC 2015 (PGP/MIME) and +;;; draft-yamamoto-openpgp-mime-00.txt (OpenPGP/MIME). (defun mime-add-application/pgp-keys (entity situation) (save-excursion (mime-show-echo-buffer)) @@ -209,8 +183,7 @@ It should be ISO 639 2 letter language code such as en, ja, ...") (mime-decode-region (point-min) (point-max) (cdr (assq 'encoding situation))) (let ((pgg-output-buffer mime-echo-buffer-name)) - (funcall (pgp-function 'snarf-keys) - (point-min)(point-max))))) + (pgg-snarf-keys-region (point-min)(point-max))))) ;;; @ end diff --git a/semi-def.el b/semi-def.el index 605256e..f1d4778 100644 --- a/semi-def.el +++ b/semi-def.el @@ -165,43 +165,6 @@ ) -;;; @ PGP -;;; - -(defvar pgp-function-alist - '( - ;; for mime-pgp - (verify pgg-verify-region "pgg") - (decrypt pgg-decrypt-region "pgg") - (snarf-keys pgg-snarf-keys-region "pgg") - ;; for mime-edit - (sign pgg-sign-region "pgg") - (encrypt pgg-encrypt-region "pgg") - (insert-key pgg-insert-key "pgg") - ) - "Alist of service names vs. corresponding functions and its filenames. -Each element looks like (SERVICE FUNCTION FILE). - -SERVICE is a symbol of PGP processing. It allows `verify', `decrypt', -`fetch-key', `snarf-keys', `mime-sign', `traditional-sign', `encrypt' -or `insert-key'. - -Function is a symbol of function to do specified SERVICE. - -FILE is string of filename which has definition of corresponding -FUNCTION.") - -(defmacro pgp-function (method) - "Return function to do service METHOD." - `(cadr (assq ,method (symbol-value 'pgp-function-alist)))) - -(mapcar (function - (lambda (method) - (autoload (cadr method)(nth 2 method)) - )) - pgp-function-alist) - - ;;; @ Other Utility ;;; -- 1.7.10.4