Re: pkcs7-mime
Kazuhiro Ito <[email protected]> Mon, 24 Jun 2019 23:58:03 +0900
| Newsgroups | gmane.mail.wanderlust.general |
|---|---|
| Message-ID | <86imsvqbd0.wl--xmue__22082.0677511924$1561388352$gmane$org@d1.dion.ne.jp> |
> Content-Type: application/pkcs7-mime; smime-type=signed-data; name="smime.p7m"
> Content-Disposition: attachment; filename="smime.p7m"
> Content-Transfer-Encoding: base64
At present, Wanderlust (SEMI-EPG) does not support unencrypted
pkcs7-mime part.
As workaround, try the below code. The content would be displayed
inline. You still need " *epg-debug*" buffer for the result of
verification.
(eval-after-load "mime-pgp"
'(progn
(defun mime-preview-application/pkcs7-mime (entity situation)
(let ((smime-type (cdr (assoc "smime-type" situation)))
p buffer decrypted-entity failed)
(setq smime-type (or (and smime-type
(intern (downcase smime-type)))
'enveloped-data))
(when (memq smime-type '(enveloped-data signed-data))
(goto-char (setq p (point-max)))
(save-restriction
(narrow-to-region p p)
(setq buffer (generate-new-buffer
(concat mime-temp-buffer-name "PKCS7*")))
(with-current-buffer buffer
(condition-case error
(insert
(prog1
(decode-coding-string
(funcall
(cdr (assq smime-type
'((enveloped-data . mime-pgp-decrypt-string)
(signed-data . mime-pgp-verify-string))))
(epg-make-context 'CMS) (mime-entity-content entity))
'raw-text)
))
(error (setq failed error)))
(unless failed
(setq decrypted-entity
(mime-parse-message
(mm-expand-class-name 'buffer)
nil entity (mime-entity-node-id-internal entity))
buffer-read-only t)))
(if failed
(progn
(insert (format "%s" (cdr failed)))
(kill-buffer buffer))
(add-hook 'kill-buffer-hook 'mime-pgp-kill-decrypted-buffers nil t)
(make-local-variable 'mime-pgp-decrypted-buffers)
(add-to-list 'mime-pgp-decrypted-buffers buffer)
(mime-display-entity
decrypted-entity nil '((header . visible)
(body . visible)
(entity-button . invisible))))))))
(defun mime-pgp-verify-string (context cipher)
(let ((string (epg-verify-string context cipher)))
;; Remove CRs if header contains CR.
(if (string-match "\\`.*\r\n" string)
(let (inhibit-eol-conversion)
(decode-coding-string string 'raw-text-dos))
string)))
))
--
Kazuhiro Ito