X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=mime-pgp.el;h=0facca07130d83eb05ec2e2c779f9b2d4df57cae;hb=cc0a722ec13e11cd7aa00db6929cb2505d1c9556;hp=b27c3145f36da237c0b7930d12ffc64067116ed4;hpb=dbae10fbd822fdee5adea0174cd09c387eae1d1d;p=elisp%2Fsemi.git diff --git a/mime-pgp.el b/mime-pgp.el index b27c314..0facca0 100644 --- a/mime-pgp.el +++ b/mime-pgp.el @@ -41,32 +41,39 @@ ;; by Kazuhiko Yamamoto (1995/10; ;; expired) -;; PGP/MIME and PGP-kazu may be contrary to each other. You should -;; decide which you support (Maybe you should not use PGP-kazu). - ;;; Code: (require 'mime-play) +;;; @ Internal method for multipart/signed +;;; +;;; It is based on RFC 1847 (security-multipart). + +(defun mime-verify-multipart/signed (entity situation) + "Internal method to verify multipart/signed." + (mime-raw-play-entity + (nth 1 (mime-entity-children entity)) ; entity-info of signature + (cdr (assq 'mode situation)) ; play-mode + )) + + ;;; @ internal method for application/pgp ;;; ;;; It is based on draft-kazu-pgp-mime-00.txt (PGP-kazu). -(defun mime-method-for-application/pgp (entity cal) - (let* ((start (mime-entity-point-min entity)) - (end (mime-entity-point-max entity)) - (entity-number (mime-raw-point-to-entity-number start)) - (p-win (or (get-buffer-window mime-preview-buffer) +(defun mime-view-application/pgp (entity situation) + (let* ((p-win (or (get-buffer-window mime-preview-buffer) (get-largest-window))) - (new-name (format "%s-%s" (buffer-name) entity-number)) + (new-name + (format "%s-%s" (buffer-name) (mime-entity-number entity))) (the-buf (current-buffer)) (mother mime-preview-buffer) - (mode major-mode) representation-type) (set-buffer (get-buffer-create new-name)) (erase-buffer) - (insert-buffer-substring the-buf start end) + (insert-buffer-substring + the-buf (mime-entity-point-min entity) (mime-entity-point-max entity)) (cond ((progn (goto-char (point-min)) (re-search-forward "^-+BEGIN PGP SIGNED MESSAGE-+$" nil t)) @@ -85,9 +92,8 @@ (while (re-search-forward "^- -" nil t) (replace-match "-") ) - (setq representation-type - (cdr (or (assq mode mime-raw-representation-type-alist) - (assq t mime-raw-representation-type-alist)))) + (setq representation-type (if (mime-entity-cooked-p entity) + 'cooked)) ) ((progn (goto-char (point-min)) @@ -98,27 +104,15 @@ (and (search-forward "\n\n") (match-end 0))) - (setq representation-type (function mime-text-decode-buffer)) + (setq representation-type 'binary) )) (setq major-mode 'mime-show-message-mode) - (setq mime-raw-representation-type representation-type) - (save-window-excursion (mime-view-mode mother)) + (save-window-excursion (mime-view-buffer nil nil mother + nil representation-type)) (set-window-buffer p-win mime-preview-buffer) )) -;;; @ Internal method for multipart/signed -;;; -;;; It is based on RFC 1847 (security-multipart). - -(defun mime-method-to-verify-multipart/signed (entity cal) - "Internal method to verify multipart/signed." - (mime-raw-play-entity - (nth 1 (mime-entity-children entity)) ; entity-info of signature - (cdr (assq 'mode cal)) ; play-mode - )) - - ;;; @ Internal method for application/pgp-signature ;;; ;;; It is based on RFC 2015 (PGP/MIME). @@ -160,26 +154,23 @@ It should be ISO 639 2 letter language code such as en, ja, ...") (t "Bad signature"))) )))) -(defun mime-method-to-verify-application/pgp-signature (entity cal) +(defun mime-verify-application/pgp-signature (entity situation) "Internal method to check PGP/MIME signature." (let* ((start (mime-entity-point-min entity)) (end (mime-entity-point-max entity)) - (encoding (cdr (assq 'encoding cal))) + (encoding (cdr (assq 'encoding situation))) (entity-node-id (mime-raw-point-to-entity-node-id start)) - (mother-node-id (cdr entity-node-id)) + (mother (mime-entity-parent entity)) (knum (car entity-node-id)) (onum (if (> knum 0) (1- knum) (1+ knum))) - (oinfo (mime-raw-find-entity-from-node-id - (cons onum mother-node-id) mime-raw-message-info)) - (basename (expand-file-name "tm" mime-temp-directory)) + (orig-entity (nth onum (mime-entity-children mother))) + (basename (expand-file-name "tm" temporary-file-directory)) (orig-file (make-temp-name basename)) (sig-file (concat orig-file ".sig")) ) - (mime-raw-write-region (mime-entity-point-min oinfo) - (mime-entity-point-max oinfo) - orig-file) + (mime-write-entity orig-entity orig-file) (save-excursion (mime-show-echo-buffer)) (mime-write-decoded-region (save-excursion (goto-char start) @@ -224,16 +215,15 @@ It should be ISO 639 2 letter language code such as en, ja, ...") ;;; ;;; It is based on RFC 2015 (PGP/MIME). -(defun mime-method-to-decrypt-application/pgp-encrypted (entity cal) +(defun mime-decrypt-application/pgp-encrypted (entity situation) (let* ((entity-node-id (mime-entity-node-id entity)) - (mother-node-id (cdr entity-node-id)) + (mother (mime-entity-parent entity)) (knum (car entity-node-id)) (onum (if (> knum 0) (1- knum) (1+ knum))) - (oinfo (mime-raw-find-entity-from-node-id - (cons onum mother-node-id) mime-raw-message-info))) - (mime-method-for-application/pgp oinfo cal) + (orig-entity (nth onum (mime-entity-children mother)))) + (mime-view-application/pgp orig-entity situation) )) @@ -241,12 +231,12 @@ It should be ISO 639 2 letter language code such as en, ja, ...") ;;; ;;; It is based on RFC 2015 (PGP/MIME). -(defun mime-method-to-add-application/pgp-keys (entity cal) +(defun mime-add-application/pgp-keys (entity situation) (let* ((start (mime-entity-point-min entity)) (end (mime-entity-point-max entity)) (entity-number (mime-raw-point-to-entity-number start)) (new-name (format "%s-%s" (buffer-name) entity-number)) - (encoding (cdr (assq 'encoding cal))) + (encoding (cdr (assq 'encoding situation))) str) (setq str (buffer-substring start end)) (switch-to-buffer new-name)