Function: smime-decrypt-region
smime-decrypt-region is a byte-compiled function defined in
smime.el.gz.
Signature
(smime-decrypt-region B E KEYFILE &optional FROM)
Documentation
Decrypt S/MIME message in region between B and E with key in KEYFILE.
Optional FROM specifies sender's mail address.
On success, replaces region with decrypted data and return non-nil.
Any details (stderr on success, stdout and stderr on error) are left
in the buffer specified by smime-details-buffer.
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/smime.el.gz
(defun smime-decrypt-region (b e keyfile &optional from)
"Decrypt S/MIME message in region between B and E with key in KEYFILE.
Optional FROM specifies sender's mail address.
On success, replaces region with decrypted data and return non-nil.
Any details (stderr on success, stdout and stderr on error) are left
in the buffer specified by `smime-details-buffer'."
(smime-new-details-buffer)
(let ((buffer (generate-new-buffer " *smime*"))
(passphrase (smime-ask-passphrase (expand-file-name keyfile)))
(tmpfile (make-temp-file "smime")))
(if passphrase
(setenv "GNUS_SMIME_PASSPHRASE" passphrase))
(if (prog1
(apply #'smime-call-openssl-region b e
(list buffer tmpfile)
"smime" "-decrypt" "-recip" (expand-file-name keyfile)
(if passphrase
(list "-passin" "env:GNUS_SMIME_PASSPHRASE")))
(if passphrase
(setenv "GNUS_SMIME_PASSPHRASE" "" t))
(with-current-buffer smime-details-buffer
(insert-file-contents tmpfile)
(delete-file tmpfile)))
(progn
(delete-region b e)
(when from
(insert "From: " from "\n"))
(insert-buffer-substring buffer)
(kill-buffer buffer)
t)
(with-current-buffer smime-details-buffer
(insert-buffer-substring buffer))
(kill-buffer buffer)
(delete-region b e)
(insert-buffer-substring smime-details-buffer)
nil)))