(eval-when-compile (require 'cl))
(require 'mm-decode)
-(defvar mml2015-use (or (progn (ignore-errors
- (load "mc-toplev"))
- (and (fboundp 'mc-encrypt-generic)
- (fboundp 'mc-sign-generic)
- (fboundp 'mc-cleanup-recipient-headers)
- 'mailcrypt))
- (progn
- (ignore-errors
- (require 'gpg))
- (and (fboundp 'gpg-sign-detached)
- 'gpg)))
+(defvar mml2015-use (or
+ (progn
+ (ignore-errors
+ (require 'gpg))
+ (and (fboundp 'gpg-sign-detached)
+ 'gpg))
+ (progn (ignore-errors
+ (load "mc-toplev"))
+ (and (fboundp 'mc-encrypt-generic)
+ (fboundp 'mc-sign-generic)
+ (fboundp 'mc-cleanup-recipient-headers)
+ 'mailcrypt)))
"The package used for PGP/MIME.")
;; Something is not RFC2015.
mm-security-handle 'gnus-info "Failed"))))
(defun mml2015-fix-micalg (alg)
- (upcase
- (if (and alg (string-match "^pgp-" alg))
- (substring alg (match-end 0))
- alg)))
+ (and alg
+ (upcase (if (string-match "^pgp-" alg)
+ (substring alg (match-end 0))
+ alg))))
(defun mml2015-mailcrypt-verify (handle ctl)
(catch 'error
(let (part)
(unless (setq part (mm-find-raw-part-by-type
- ctl (or (mail-content-type-get ctl 'protocol)
+ ctl (or (mm-handle-multipart-ctl-parameter
+ ctl 'protocol)
"application/pgp-signature")
t))
(mm-set-handle-multipart-parameter
(insert "-----BEGIN PGP SIGNED MESSAGE-----\n")
(insert (format "Hash: %s\n\n"
(or (mml2015-fix-micalg
- (mail-content-type-get ctl 'micalg))
+ (mm-handle-multipart-ctl-parameter
+ ctl 'micalg))
"SHA1")))
(save-restriction
(narrow-to-region (point) (point))
(or (y-or-n-p "Sign the message? ")
'not))))
'never)))
- (mc-encrypt-generic
- (or (message-options-get 'message-recipients)
- (message-options-set 'message-recipients
+ (mm-with-unibyte-current-buffer-mule4
+ (mc-encrypt-generic
+ (or (message-options-get 'message-recipients)
+ (message-options-set 'message-recipients
(mc-cleanup-recipient-headers
(read-string "Recipients: "))))
- nil nil nil
- (message-options-get 'message-sender)))
+ nil nil nil
+ (message-options-get 'message-sender))))
+ (goto-char (point-min))
+ (unless (looking-at "-----BEGIN PGP MESSAGE-----")
+ (error "Fail to encrypt the message."))
(let ((boundary
(funcall mml-boundary-function (incf mml-multipart-number))))
- (goto-char (point-min))
(insert (format "Content-Type: multipart/encrypted; boundary=\"%s\";\n"
boundary))
(insert "\tprotocol=\"application/pgp-encrypted\"\n\n")
(eval-and-compile
(autoload 'gpg-decrypt "gpg")
(autoload 'gpg-verify "gpg")
+ (autoload 'gpg-verify-cleartext "gpg")
(autoload 'gpg-sign-detached "gpg")
(autoload 'gpg-sign-encrypt "gpg")
(autoload 'gpg-passphrase-read "gpg"))
(prog1
(gpg-decrypt cipher (setq plain (current-buffer))
mml2015-result-buffer nil)
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details
+ (with-current-buffer mml2015-result-buffer
+ (buffer-string)))
(set-buffer cipher)
(erase-buffer)
(insert-buffer plain)))
;; Some wrong with the return value, check plain text buffer.
(if (> (point-max) (point-min))
'(t)
- (mm-set-handle-multipart-parameter
- mm-security-handle 'gnus-details
- (with-current-buffer mml2015-result-buffer
- (buffer-string)))
nil))))
(defun mml2015-gpg-decrypt (handle ctl)
(catch 'error
(let (part message signature)
(unless (setq part (mm-find-raw-part-by-type
- ctl (or (mail-content-type-get ctl 'protocol)
+ ctl (or (mm-handle-multipart-ctl-parameter
+ ctl 'protocol)
"application/pgp-signature")
t))
(mm-set-handle-multipart-parameter
(throw 'error handle))
(mm-insert-part part)
(unless (condition-case err
- (gpg-verify message signature mml2015-result-buffer)
+ (prog1
+ (gpg-verify message signature mml2015-result-buffer)
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details
+ (with-current-buffer mml2015-result-buffer
+ (buffer-string))))
(error
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-details (cadr err))
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-details "Quit.")
nil))
- (mm-set-handle-multipart-parameter
- mm-security-handle 'gnus-details
- (with-current-buffer mml2015-result-buffer
- (buffer-string)))
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-info "Failed")
(throw 'error handle)))
(defun mml2015-gpg-clear-verify ()
(if (condition-case err
- (funcall mml2015-verify-function)
+ (prog1
+ (gpg-verify-cleartext (current-buffer) mml2015-result-buffer)
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details
+ (with-current-buffer mml2015-result-buffer
+ (buffer-string))))
(error
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-details (cadr err))
(funcall mml-boundary-function (incf mml-multipart-number)))
(text (current-buffer))
cipher)
- (with-temp-buffer
- (unless (gpg-sign-encrypt
- text (setq cipher (current-buffer))
- mml2015-result-buffer
- (split-string
- (or
- (message-options-get 'message-recipients)
- (message-options-set 'message-recipients
- (read-string "Recipients: ")))
- "[ \f\t\n\r\v,]+")
- nil
- (message-options-get 'message-sender)
- t t) ; armor & textmode
- (unless (> (point-max) (point-min))
- (pop-to-buffer mml2015-result-buffer)
- (error "Encrypt error.")))
- (set-buffer text)
- (delete-region (point-min) (point-max))
- (insert (format "Content-Type: multipart/encrypted; boundary=\"%s\";\n"
- boundary))
- (insert "\tprotocol=\"application/pgp-encrypted\"\n\n")
- (insert (format "--%s\n" boundary))
- (insert "Content-Type: application/pgp-encrypted\n\n")
- (insert "Version: 1\n\n")
- (insert (format "--%s\n" boundary))
- (insert "Content-Type: application/octet-stream\n\n")
- (insert-buffer cipher)
- (goto-char (point-max))
- (insert (format "--%s--\n" boundary))
- (goto-char (point-max)))))
+ (mm-with-unibyte-current-buffer-mule4
+ (with-temp-buffer
+ (unless (gpg-sign-encrypt
+ text (setq cipher (current-buffer))
+ mml2015-result-buffer
+ (split-string
+ (or
+ (message-options-get 'message-recipients)
+ (message-options-set 'message-recipients
+ (read-string "Recipients: ")))
+ "[ \f\t\n\r\v,]+")
+ nil
+ (message-options-get 'message-sender)
+ t t) ; armor & textmode
+ (unless (> (point-max) (point-min))
+ (pop-to-buffer mml2015-result-buffer)
+ (error "Encrypt error.")))
+ (set-buffer text)
+ (delete-region (point-min) (point-max))
+ (insert (format "Content-Type: multipart/encrypted; boundary=\"%s\";\n"
+ boundary))
+ (insert "\tprotocol=\"application/pgp-encrypted\"\n\n")
+ (insert (format "--%s\n" boundary))
+ (insert "Content-Type: application/pgp-encrypted\n\n")
+ (insert "Version: 1\n\n")
+ (insert (format "--%s\n" boundary))
+ (insert "Content-Type: application/octet-stream\n\n")
+ (insert-buffer cipher)
+ (goto-char (point-max))
+ (insert (format "--%s--\n" boundary))
+ (goto-char (point-max))))))
;;; General wrapper