2004-09-04 13:13:48 +00:00
|
|
|
|
;;; mml1991.el --- Old PGP message format (RFC 1991) support for MML
|
2005-08-06 19:51:42 +00:00
|
|
|
|
|
2011-01-25 04:08:28 +00:00
|
|
|
|
;; Copyright (C) 1998-2011 Free Software Foundation, Inc.
|
2004-09-04 13:13:48 +00:00
|
|
|
|
|
2009-01-09 03:01:50 +00:00
|
|
|
|
;; Author: Sascha L<>decke <sascha@meta-x.de>,
|
2004-09-04 13:13:48 +00:00
|
|
|
|
;; Simon Josefsson <simon@josefsson.org> (Mailcrypt interface, Gnus glue)
|
|
|
|
|
;; Keywords PGP
|
|
|
|
|
|
|
|
|
|
;; This file is part of GNU Emacs.
|
|
|
|
|
|
2008-05-06 03:56:49 +00:00
|
|
|
|
;; GNU Emacs is free software: you can redistribute it and/or modify
|
2004-09-04 13:13:48 +00:00
|
|
|
|
;; it under the terms of the GNU General Public License as published by
|
2008-05-06 03:56:49 +00:00
|
|
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
|
|
|
;; (at your option) any later version.
|
2004-09-04 13:13:48 +00:00
|
|
|
|
|
|
|
|
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
|
|
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
2008-05-06 03:56:49 +00:00
|
|
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
2004-09-04 13:13:48 +00:00
|
|
|
|
;; GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
2008-05-06 03:56:49 +00:00
|
|
|
|
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
2004-09-04 13:13:48 +00:00
|
|
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
|
|
|
|
|
;;; Code:
|
|
|
|
|
|
2007-12-11 05:28:13 +00:00
|
|
|
|
(eval-and-compile
|
2010-10-11 23:29:33 +00:00
|
|
|
|
;; For Emacs <22.2 and XEmacs.
|
Stop message.el from loading about 40 libraries it doesn't always need.
The general approach is to autoload rather than require, and to
require in the specific functions rather than the file. (Bug#5642)
* url/url.el: Move mailcap require earlier in the file.
* gnus/gmm-utils.el: Don't require wid-edit.
(widget-create-child-value, widget-convert, widget-default-get):
Autoload.
* gnus/gnus-util.el: Don't require time-date, netrc.
(message-fetch-field, gnus-group-name-decode): Declare rather than
autoloading.
(gnus-fetch-field): Require message.
(gnus-decode-newsgroups): Require gnus-group.
* gnus/ietf-drums.el: Don't require time-date.
* gnus/message.el: Don't require hashcash, canlock, ecomplete.
Do require mail-utils. Require nnheader only when compiling.
(smtpmail-default-smtp-server): Remove declaration.
(message-send-mail-function): Check smtpmail-default-smtp-server
is bound rather than requiring smtpmail.
(message-auto-save-directory, message-insert-signature): Use
expand-file-name rather than nnheader-concat.
(nnheader-insert-file-contents): Autoload.
(hashcash-wait-async): Declare.
(message-send-mail): Only call gnus-setup-posting-charset if
gnus-group-posting-charset-alist is bound. Require hashcash if needed.
(message-send-mail-with-sendmail): Require sendmail.
(canlock-password, canlock-password-for-verify): Declare.
(message-canlock-password): Require canlock.
(nnheader-get-report): Autoload.
(gnus-setup-posting-charset): Declare.
(message-send-news): Require gnus-msg.
(message-make-references, message-make-in-reply-to): Use mail-header-id
rather than the alias mail-header-message-id.
(ecomplete-add-item, ecomplete-save): Declare.
(message-put-addresses-in-ecomplete): Require ecomplete.
(ecomplete-display-matches): Autoload.
* gnus/mm-decode.el: Don't require mailcap, gnus-util.
(gnus-map-function, gnus-replace-in-string, gnus-read-shell-command)
(message-fetch-field, mailcap-parse-mailcaps, mailcap-mime-info):
Autoload.
(mailcap-mime-extensions): Declare.
* gnus/mm-encode.el: Don't require mailcap.
(mailcap-extension-to-mime): Autoload.
* gnus/mml-sec.el: Don't require password-cache.
* gnus/mml.el (gnus-setup-posting-charset): Declare rather than autoload.
(mailcap-parse-mimetypes, mailcap-mime-types): Declare.
(mml-minibuffer-read-type): Require mailcap.
(mml-preview): Require gnus-msg.
* gnus/mml1991.el: Require password-cache.
(password-cache-expiry): Remove declaration.
* gnus/mml2015.el: Require password-cache.
(password-cache-expiry): Remove declaration.
* gnus/nneething.el (mailcap): Require mailcap.
* gnus/nnheader.el: (declare-function): Add compatibility stub.
(message-remove-header): Declare rather than autoload.
(nnheader-replace-header): Require message.
* gnus/nnimap.el (declare-function): Add compatibility stub.
(netrc-parse, netrc-machine-user-or-password): Declare.
(nnimap-open-connection): Require netrc.
* gnus/nntp.el (declare-function): Add compatibility stub.
(netrc-parse, netrc-machine, netrc-get): Declare.
(nntp-send-authinfo): Require netrc.
* gnus/rfc2047.el: Don't require qp.
(quoted-printable-encode-region, quoted-printable-decode-string):
Autoload.
* gnus/sieve-mode.el: Don't require easymenu.
(easy-menu-add-item): Autoload it.
* gnus/spam-stat.el (time-to-number-of-days): Autoload it.
* password-cache.el (password-cache, password-cache-expiry):
Autoload.
2010-03-19 02:55:37 +00:00
|
|
|
|
(unless (fboundp 'declare-function) (defmacro declare-function (&rest r)))
|
|
|
|
|
|
|
|
|
|
(if (locate-library "password-cache")
|
|
|
|
|
(require 'password-cache)
|
|
|
|
|
(require 'password)))
|
2007-12-11 05:28:13 +00:00
|
|
|
|
|
2004-09-04 13:13:48 +00:00
|
|
|
|
(eval-when-compile
|
|
|
|
|
(require 'cl)
|
|
|
|
|
(require 'mm-util))
|
|
|
|
|
|
2009-09-28 12:09:01 +00:00
|
|
|
|
(require 'mm-encode)
|
2007-10-28 09:18:39 +00:00
|
|
|
|
(require 'mml-sec)
|
|
|
|
|
|
2005-08-31 13:10:00 +00:00
|
|
|
|
(defvar mc-pgp-always-sign)
|
|
|
|
|
|
2004-09-04 13:13:48 +00:00
|
|
|
|
(autoload 'quoted-printable-decode-region "qp")
|
|
|
|
|
(autoload 'quoted-printable-encode-region "qp")
|
|
|
|
|
|
2007-12-11 05:28:13 +00:00
|
|
|
|
(autoload 'mm-decode-content-transfer-encoding "mm-bodies")
|
|
|
|
|
(autoload 'mm-encode-content-transfer-encoding "mm-bodies")
|
|
|
|
|
(autoload 'message-options-get "message")
|
|
|
|
|
(autoload 'message-options-set "message")
|
|
|
|
|
|
2004-09-04 13:13:48 +00:00
|
|
|
|
(defvar mml1991-use mml2015-use
|
|
|
|
|
"The package used for PGP.")
|
|
|
|
|
|
|
|
|
|
(defvar mml1991-function-alist
|
|
|
|
|
'((mailcrypt mml1991-mailcrypt-sign
|
|
|
|
|
mml1991-mailcrypt-encrypt)
|
|
|
|
|
(pgg mml1991-pgg-sign
|
2007-10-28 09:18:39 +00:00
|
|
|
|
mml1991-pgg-encrypt)
|
|
|
|
|
(epg mml1991-epg-sign
|
|
|
|
|
mml1991-epg-encrypt))
|
2004-09-04 13:13:48 +00:00
|
|
|
|
"Alist of PGP functions.")
|
|
|
|
|
|
2007-10-28 09:18:39 +00:00
|
|
|
|
(defvar mml1991-cache-passphrase mml-secure-cache-passphrase
|
|
|
|
|
"If t, cache passphrase.")
|
|
|
|
|
|
|
|
|
|
(defvar mml1991-passphrase-cache-expiry mml-secure-passphrase-cache-expiry
|
|
|
|
|
"How many seconds the passphrase is cached.
|
|
|
|
|
Whether the passphrase is cached at all is controlled by
|
|
|
|
|
`mml1991-cache-passphrase'.")
|
|
|
|
|
|
|
|
|
|
(defvar mml1991-signers nil
|
|
|
|
|
"A list of your own key ID which will be used to sign a message.")
|
|
|
|
|
|
|
|
|
|
(defvar mml1991-encrypt-to-self nil
|
|
|
|
|
"If t, add your own key ID to recipient list when encryption.")
|
|
|
|
|
|
2004-09-04 13:13:48 +00:00
|
|
|
|
;;; mailcrypt wrapper
|
|
|
|
|
|
2008-06-11 03:13:28 +00:00
|
|
|
|
(autoload 'mc-sign-generic "mc-toplev")
|
2004-09-04 13:13:48 +00:00
|
|
|
|
|
|
|
|
|
(defvar mml1991-decrypt-function 'mailcrypt-decrypt)
|
|
|
|
|
(defvar mml1991-verify-function 'mailcrypt-verify)
|
|
|
|
|
|
|
|
|
|
(defun mml1991-mailcrypt-sign (cont)
|
|
|
|
|
(let ((text (current-buffer))
|
|
|
|
|
headers signature
|
|
|
|
|
(result-buffer (get-buffer-create "*GPG Result*")))
|
|
|
|
|
;; Save MIME Content[^ ]+: headers from signing
|
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
(while (looking-at "^Content[^ ]+:") (forward-line))
|
|
|
|
|
(unless (bobp)
|
|
|
|
|
(setq headers (buffer-string))
|
|
|
|
|
(delete-region (point-min) (point)))
|
|
|
|
|
(goto-char (point-max))
|
|
|
|
|
(unless (bolp)
|
|
|
|
|
(insert "\n"))
|
|
|
|
|
(quoted-printable-decode-region (point-min) (point-max))
|
|
|
|
|
(with-temp-buffer
|
|
|
|
|
(setq signature (current-buffer))
|
|
|
|
|
(insert-buffer-substring text)
|
|
|
|
|
(unless (mc-sign-generic (message-options-get 'message-sender)
|
|
|
|
|
nil nil nil nil)
|
|
|
|
|
(unless (> (point-max) (point-min))
|
|
|
|
|
(pop-to-buffer result-buffer)
|
|
|
|
|
(error "Sign error")))
|
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
(while (re-search-forward "\r+$" nil t)
|
|
|
|
|
(replace-match "" t t))
|
|
|
|
|
(quoted-printable-encode-region (point-min) (point-max))
|
|
|
|
|
(set-buffer text)
|
|
|
|
|
(delete-region (point-min) (point-max))
|
|
|
|
|
(if headers (insert headers))
|
|
|
|
|
(insert "\n")
|
|
|
|
|
(insert-buffer-substring signature)
|
|
|
|
|
(goto-char (point-max)))))
|
|
|
|
|
|
2007-12-11 05:28:13 +00:00
|
|
|
|
(declare-function mc-encrypt-generic "ext:mc-toplev"
|
|
|
|
|
(&optional recipients scheme start end from sign))
|
|
|
|
|
|
2004-09-04 13:13:48 +00:00
|
|
|
|
(defun mml1991-mailcrypt-encrypt (cont &optional sign)
|
|
|
|
|
(let ((text (current-buffer))
|
|
|
|
|
(mc-pgp-always-sign
|
|
|
|
|
(or mc-pgp-always-sign
|
|
|
|
|
sign
|
|
|
|
|
(eq t (or (message-options-get 'message-sign-encrypt)
|
|
|
|
|
(message-options-set
|
|
|
|
|
'message-sign-encrypt
|
|
|
|
|
(or (y-or-n-p "Sign the message? ")
|
|
|
|
|
'not))))
|
|
|
|
|
'never))
|
|
|
|
|
cipher
|
|
|
|
|
(result-buffer (get-buffer-create "*GPG Result*")))
|
2008-06-27 02:41:14 +00:00
|
|
|
|
;; Strip MIME Content[^ ]: headers since it will be ASCII ARMORED
|
2004-09-04 13:13:48 +00:00
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
(while (looking-at "^Content[^ ]+:") (forward-line))
|
|
|
|
|
(unless (bobp)
|
|
|
|
|
(delete-region (point-min) (point)))
|
2011-05-30 17:21:59 +00:00
|
|
|
|
(with-temp-buffer
|
|
|
|
|
(inline (mm-disable-multibyte))
|
|
|
|
|
(setq cipher (current-buffer))
|
|
|
|
|
(insert-buffer-substring text)
|
|
|
|
|
(unless (mc-encrypt-generic
|
|
|
|
|
(or
|
|
|
|
|
(message-options-get 'message-recipients)
|
|
|
|
|
(message-options-set 'message-recipients
|
|
|
|
|
(read-string "Recipients: ")))
|
|
|
|
|
nil
|
|
|
|
|
(point-min) (point-max)
|
|
|
|
|
(message-options-get 'message-sender)
|
|
|
|
|
'sign)
|
|
|
|
|
(unless (> (point-max) (point-min))
|
|
|
|
|
(pop-to-buffer result-buffer)
|
|
|
|
|
(error "Encrypt error")))
|
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
(while (re-search-forward "\r+$" nil t)
|
|
|
|
|
(replace-match "" t t))
|
|
|
|
|
(set-buffer text)
|
|
|
|
|
(delete-region (point-min) (point-max))
|
|
|
|
|
;;(insert "Content-Type: application/pgp-encrypted\n\n")
|
|
|
|
|
;;(insert "Version: 1\n\n")
|
|
|
|
|
(insert "\n")
|
|
|
|
|
(insert-buffer-substring cipher)
|
|
|
|
|
(goto-char (point-max)))))
|
2004-09-04 13:13:48 +00:00
|
|
|
|
|
|
|
|
|
;; pgg wrapper
|
|
|
|
|
|
2010-12-21 02:30:36 +00:00
|
|
|
|
(autoload 'pgg-sign-region "pgg")
|
|
|
|
|
(autoload 'pgg-encrypt-region "pgg")
|
|
|
|
|
|
* smime.el (from):
* rfc2047.el (message-posting-charset):
* qp.el (mm-use-ultra-safe-encoding):
* pop3.el (parse-time-months):
* nnrss.el (mm-text-html-renderer, mm-text-html-washer-alist):
* nnml.el (files):
* nnheader.el (gnus-newsgroup-name, nnheader-file-coding-system)
(jka-compr-compression-info-list, ange-ftp-path-format)
(efs-path-regexp):
* nndiary.el (files):
* mml2015.el (mc-default-scheme, mc-schemes, pgg-default-user-id)
(pgg-errors-buffer, pgg-output-buffer, epg-user-id-alist)
(epg-digest-algorithm-alist, inhibit-redisplay)
(password-cache-expiry):
* mml1991.el (pgg-default-user-id, pgg-errors-buffer)
(pgg-output-buffer, password-cache-expiry):
* mml.el (mml-dnd-protocol-alist, ange-ftp-name-format)
(efs-path-regexp):
* mml-smime.el (epg-user-id-alist, epg-digest-algorithm-alist)
(inhibit-redisplay):
* mm-uu.el (file-name, start-point, end-point, entry)
(gnus-newsgroup-name, gnus-newsgroup-charset):
* mm-util.el (mm-mime-mule-charset-alist, latin-unity-coding-systems)
(latin-unity-ucs-list):
* mm-bodies.el (mm-uu-yenc-decode-function, mm-uu-decode-function)
(mm-uu-binhex-decode-function):
* message.el (gnus-message-group-art, gnus-list-identifiers, )
(rmail-enable-mime-composing, gnus-local-organization)
(gnus-post-method, gnus-select-method, gnus-active-hashtb)
(gnus-read-active-file, facemenu-add-face-function)
(facemenu-remove-face-function, gnus-article-decoded-p)
(tool-bar-mode):
* mail-source.el (display-time-mail-function):
* gnus-util.el (nnmail-pathname-coding-system)
(nnmail-active-file-coding-system, gnus-emphasize-whitespace-regexp)
(gnus-original-article-buffer, gnus-user-agent)
(rmail-default-rmail-file, mm-text-coding-system, tool-bar-mode)
(xemacs-codename, sxemacs-codename, emacs-program-version):
* gnus-sum.el (tool-bar-mode, gnus-tmp-header, number):
* gnus-start.el (gnus-agent-covered-methods)
(gnus-agent-file-loading-local, gnus-agent-file-loading-cache)
(gnus-current-headers, gnus-thread-indent-array, gnus-newsgroup-name)
(gnus-newsgroup-headers, gnus-group-list-mode)
(gnus-group-mark-positions, gnus-newsgroup-data)
(gnus-newsgroup-unreads, nnoo-state-alist)
(gnus-current-select-method, mail-sources)
(nnmail-scan-directory-mail-source-once, nnmail-split-history)
(nnmail-spool-file, gnus-cache-active-hashtb):
* gnus-mh.el (mh-lib-progs):
* gnus-ems.el (gnus-tmp-unread, gnus-tmp-replied)
(gnus-tmp-score-char, gnus-tmp-indentation, gnus-tmp-opening-bracket)
(gnus-tmp-lines, gnus-tmp-name, gnus-tmp-closing-bracket)
(gnus-tmp-subject-or-nil, gnus-check-before-posting, gnus-mouse-face)
(gnus-group-buffer):
* gnus-cite.el (font-lock-defaults-computed, font-lock-keywords)
(font-lock-set-defaults):
* gnus-art.el (tool-bar-map, w3m-minor-mode-map)
(gnus-face-properties-alist, charset, gnus-summary-article-menu)
(gnus-summary-post-menu, total-parts, type, condition, length):
* gnus-agent.el (gnus-agent-read-agentview):
* flow-fill.el (show-trailing-whitespace):
* gnus-group.el (tool-bar-mode, nnrss-group-alist): Remove unnecessary
eval-and-compile wrappers for byte compiler pacifiers.
* mm-view.el (mm-inline-image-xemacs): Only do something for XEmacs.
(mm-display-inline-fontify): Check for featurep 'xemacs not
extent-list.
* mm-decode.el (mm-display-external): Check for featurep 'xemacs not
itimer-list.
(mm-create-image-xemacs): Only do something for XEmacs.
(mm-image-fit-p): Check for featurep 'xemacs not glyph-width.
* mm-util.el (mm-find-buffer-file-coding-system): Add check for XEmacs.
* gnus-registry.el (gnus-adaptive-word-syntax-table):
* gnus-fun.el (gnus-face-properties-alist): Pacify byte compiler.
* textmodes/reftex-dcr.el (reftex-start-itimer-once): Add check
for XEmacs.
* calc/calc-menu.el (calc-mode-map): Pacify byte compiler.
* doc-view.el (doc-view-resolution): Add missing :group.
2007-11-16 16:50:35 +00:00
|
|
|
|
(defvar pgg-default-user-id)
|
|
|
|
|
(defvar pgg-errors-buffer)
|
|
|
|
|
(defvar pgg-output-buffer)
|
2004-09-04 13:13:48 +00:00
|
|
|
|
|
|
|
|
|
(defun mml1991-pgg-sign (cont)
|
2006-02-10 05:08:29 +00:00
|
|
|
|
(let ((pgg-text-mode t)
|
2006-04-26 21:58:05 +00:00
|
|
|
|
(pgg-default-user-id (or (message-options-get 'mml-sender)
|
|
|
|
|
pgg-default-user-id))
|
2006-02-10 05:08:29 +00:00
|
|
|
|
headers cte)
|
2004-09-04 13:13:48 +00:00
|
|
|
|
;; Don't sign headers.
|
|
|
|
|
(goto-char (point-min))
|
2006-04-26 21:58:05 +00:00
|
|
|
|
(when (re-search-forward "^$" nil t)
|
2004-09-04 13:13:48 +00:00
|
|
|
|
(setq headers (buffer-substring (point-min) (point)))
|
2006-04-26 21:58:05 +00:00
|
|
|
|
(save-restriction
|
|
|
|
|
(narrow-to-region (point-min) (point))
|
|
|
|
|
(setq cte (mail-fetch-field "content-transfer-encoding")))
|
|
|
|
|
(forward-line 1)
|
|
|
|
|
(delete-region (point-min) (point))
|
|
|
|
|
(when cte
|
|
|
|
|
(setq cte (intern (downcase cte)))
|
|
|
|
|
(mm-decode-content-transfer-encoding cte)))
|
|
|
|
|
(unless (pgg-sign-region (point-min) (point-max) t)
|
2004-09-04 13:13:48 +00:00
|
|
|
|
(pop-to-buffer pgg-errors-buffer)
|
|
|
|
|
(error "Encrypt error"))
|
|
|
|
|
(delete-region (point-min) (point-max))
|
|
|
|
|
(mm-with-unibyte-current-buffer
|
|
|
|
|
(insert-buffer-substring pgg-output-buffer)
|
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
(while (re-search-forward "\r+$" nil t)
|
|
|
|
|
(replace-match "" t t))
|
2006-04-26 21:58:05 +00:00
|
|
|
|
(when cte
|
|
|
|
|
(mm-encode-content-transfer-encoding cte))
|
2004-09-04 13:13:48 +00:00
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
(when headers
|
|
|
|
|
(insert headers))
|
|
|
|
|
(insert "\n"))
|
|
|
|
|
t))
|
|
|
|
|
|
|
|
|
|
(defun mml1991-pgg-encrypt (cont &optional sign)
|
2006-04-26 21:58:05 +00:00
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
(when (re-search-forward "^$" nil t)
|
|
|
|
|
(let ((cte (save-restriction
|
|
|
|
|
(narrow-to-region (point-min) (point))
|
|
|
|
|
(mail-fetch-field "content-transfer-encoding"))))
|
2008-06-27 02:41:14 +00:00
|
|
|
|
;; Strip MIME headers since it will be ASCII armored.
|
2006-04-26 21:58:05 +00:00
|
|
|
|
(forward-line 1)
|
|
|
|
|
(delete-region (point-min) (point))
|
|
|
|
|
(when cte
|
|
|
|
|
(mm-decode-content-transfer-encoding (intern (downcase cte))))))
|
2006-04-29 03:51:50 +00:00
|
|
|
|
(unless (let ((pgg-text-mode t))
|
|
|
|
|
(pgg-encrypt-region
|
|
|
|
|
(point-min) (point-max)
|
|
|
|
|
(split-string
|
|
|
|
|
(or
|
|
|
|
|
(message-options-get 'message-recipients)
|
|
|
|
|
(message-options-set 'message-recipients
|
|
|
|
|
(read-string "Recipients: ")))
|
|
|
|
|
"[ \f\t\n\r\v,]+")
|
|
|
|
|
sign))
|
2006-04-26 21:58:05 +00:00
|
|
|
|
(pop-to-buffer pgg-errors-buffer)
|
|
|
|
|
(error "Encrypt error"))
|
|
|
|
|
(delete-region (point-min) (point-max))
|
|
|
|
|
(insert "\n")
|
|
|
|
|
(insert-buffer-substring pgg-output-buffer)
|
|
|
|
|
t)
|
2004-09-04 13:13:48 +00:00
|
|
|
|
|
2007-10-28 09:18:39 +00:00
|
|
|
|
;; epg wrapper
|
|
|
|
|
|
* smime.el (from):
* rfc2047.el (message-posting-charset):
* qp.el (mm-use-ultra-safe-encoding):
* pop3.el (parse-time-months):
* nnrss.el (mm-text-html-renderer, mm-text-html-washer-alist):
* nnml.el (files):
* nnheader.el (gnus-newsgroup-name, nnheader-file-coding-system)
(jka-compr-compression-info-list, ange-ftp-path-format)
(efs-path-regexp):
* nndiary.el (files):
* mml2015.el (mc-default-scheme, mc-schemes, pgg-default-user-id)
(pgg-errors-buffer, pgg-output-buffer, epg-user-id-alist)
(epg-digest-algorithm-alist, inhibit-redisplay)
(password-cache-expiry):
* mml1991.el (pgg-default-user-id, pgg-errors-buffer)
(pgg-output-buffer, password-cache-expiry):
* mml.el (mml-dnd-protocol-alist, ange-ftp-name-format)
(efs-path-regexp):
* mml-smime.el (epg-user-id-alist, epg-digest-algorithm-alist)
(inhibit-redisplay):
* mm-uu.el (file-name, start-point, end-point, entry)
(gnus-newsgroup-name, gnus-newsgroup-charset):
* mm-util.el (mm-mime-mule-charset-alist, latin-unity-coding-systems)
(latin-unity-ucs-list):
* mm-bodies.el (mm-uu-yenc-decode-function, mm-uu-decode-function)
(mm-uu-binhex-decode-function):
* message.el (gnus-message-group-art, gnus-list-identifiers, )
(rmail-enable-mime-composing, gnus-local-organization)
(gnus-post-method, gnus-select-method, gnus-active-hashtb)
(gnus-read-active-file, facemenu-add-face-function)
(facemenu-remove-face-function, gnus-article-decoded-p)
(tool-bar-mode):
* mail-source.el (display-time-mail-function):
* gnus-util.el (nnmail-pathname-coding-system)
(nnmail-active-file-coding-system, gnus-emphasize-whitespace-regexp)
(gnus-original-article-buffer, gnus-user-agent)
(rmail-default-rmail-file, mm-text-coding-system, tool-bar-mode)
(xemacs-codename, sxemacs-codename, emacs-program-version):
* gnus-sum.el (tool-bar-mode, gnus-tmp-header, number):
* gnus-start.el (gnus-agent-covered-methods)
(gnus-agent-file-loading-local, gnus-agent-file-loading-cache)
(gnus-current-headers, gnus-thread-indent-array, gnus-newsgroup-name)
(gnus-newsgroup-headers, gnus-group-list-mode)
(gnus-group-mark-positions, gnus-newsgroup-data)
(gnus-newsgroup-unreads, nnoo-state-alist)
(gnus-current-select-method, mail-sources)
(nnmail-scan-directory-mail-source-once, nnmail-split-history)
(nnmail-spool-file, gnus-cache-active-hashtb):
* gnus-mh.el (mh-lib-progs):
* gnus-ems.el (gnus-tmp-unread, gnus-tmp-replied)
(gnus-tmp-score-char, gnus-tmp-indentation, gnus-tmp-opening-bracket)
(gnus-tmp-lines, gnus-tmp-name, gnus-tmp-closing-bracket)
(gnus-tmp-subject-or-nil, gnus-check-before-posting, gnus-mouse-face)
(gnus-group-buffer):
* gnus-cite.el (font-lock-defaults-computed, font-lock-keywords)
(font-lock-set-defaults):
* gnus-art.el (tool-bar-map, w3m-minor-mode-map)
(gnus-face-properties-alist, charset, gnus-summary-article-menu)
(gnus-summary-post-menu, total-parts, type, condition, length):
* gnus-agent.el (gnus-agent-read-agentview):
* flow-fill.el (show-trailing-whitespace):
* gnus-group.el (tool-bar-mode, nnrss-group-alist): Remove unnecessary
eval-and-compile wrappers for byte compiler pacifiers.
* mm-view.el (mm-inline-image-xemacs): Only do something for XEmacs.
(mm-display-inline-fontify): Check for featurep 'xemacs not
extent-list.
* mm-decode.el (mm-display-external): Check for featurep 'xemacs not
itimer-list.
(mm-create-image-xemacs): Only do something for XEmacs.
(mm-image-fit-p): Check for featurep 'xemacs not glyph-width.
* mm-util.el (mm-find-buffer-file-coding-system): Add check for XEmacs.
* gnus-registry.el (gnus-adaptive-word-syntax-table):
* gnus-fun.el (gnus-face-properties-alist): Pacify byte compiler.
* textmodes/reftex-dcr.el (reftex-start-itimer-once): Add check
for XEmacs.
* calc/calc-menu.el (calc-mode-map): Pacify byte compiler.
* doc-view.el (doc-view-resolution): Add missing :group.
2007-11-16 16:50:35 +00:00
|
|
|
|
(defvar epg-user-id-alist)
|
2007-10-28 09:18:39 +00:00
|
|
|
|
|
2008-06-11 03:13:28 +00:00
|
|
|
|
(autoload 'epg-make-context "epg")
|
|
|
|
|
(autoload 'epg-passphrase-callback-function "epg")
|
|
|
|
|
(autoload 'epa-select-keys "epa")
|
|
|
|
|
(autoload 'epg-list-keys "epg")
|
|
|
|
|
(autoload 'epg-context-set-armor "epg")
|
|
|
|
|
(autoload 'epg-context-set-textmode "epg")
|
|
|
|
|
(autoload 'epg-context-set-signers "epg")
|
|
|
|
|
(autoload 'epg-context-set-passphrase-callback "epg")
|
|
|
|
|
(autoload 'epg-sign-string "epg")
|
|
|
|
|
(autoload 'epg-encrypt-string "epg")
|
|
|
|
|
(autoload 'epg-configuration "epg-config")
|
|
|
|
|
(autoload 'epg-expand-group "epg-config")
|
2007-10-28 09:18:39 +00:00
|
|
|
|
|
|
|
|
|
(defvar mml1991-epg-secret-key-id-list nil)
|
|
|
|
|
|
|
|
|
|
(defun mml1991-epg-passphrase-callback (context key-id ignore)
|
|
|
|
|
(if (eq key-id 'SYM)
|
|
|
|
|
(epg-passphrase-callback-function context key-id nil)
|
|
|
|
|
(let* ((entry (assoc key-id epg-user-id-alist))
|
|
|
|
|
(passphrase
|
|
|
|
|
(password-read
|
|
|
|
|
(format "GnuPG passphrase for %s: "
|
|
|
|
|
(if entry
|
|
|
|
|
(cdr entry)
|
|
|
|
|
key-id))
|
|
|
|
|
(if (eq key-id 'PIN)
|
|
|
|
|
"PIN"
|
|
|
|
|
key-id))))
|
|
|
|
|
(when passphrase
|
|
|
|
|
(let ((password-cache-expiry mml1991-passphrase-cache-expiry))
|
|
|
|
|
(password-cache-add key-id passphrase))
|
|
|
|
|
(setq mml1991-epg-secret-key-id-list
|
|
|
|
|
(cons key-id mml1991-epg-secret-key-id-list))
|
|
|
|
|
(copy-sequence passphrase)))))
|
|
|
|
|
|
|
|
|
|
(defun mml1991-epg-sign (cont)
|
|
|
|
|
(let ((context (epg-make-context))
|
|
|
|
|
headers cte signers signature)
|
2009-09-28 12:09:01 +00:00
|
|
|
|
(if (eq mm-sign-option 'guided)
|
2007-10-28 09:18:39 +00:00
|
|
|
|
(setq signers (epa-select-keys context "Select keys for signing.
|
|
|
|
|
If no one is selected, default secret key is used. "
|
|
|
|
|
mml1991-signers t))
|
|
|
|
|
(if mml1991-signers
|
|
|
|
|
(setq signers (mapcar (lambda (name)
|
|
|
|
|
(car (epg-list-keys context name t)))
|
|
|
|
|
mml1991-signers))))
|
|
|
|
|
(epg-context-set-armor context t)
|
|
|
|
|
(epg-context-set-textmode context t)
|
|
|
|
|
(epg-context-set-signers context signers)
|
|
|
|
|
(if mml1991-cache-passphrase
|
|
|
|
|
(epg-context-set-passphrase-callback
|
|
|
|
|
context
|
|
|
|
|
#'mml1991-epg-passphrase-callback))
|
|
|
|
|
;; Don't sign headers.
|
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
(when (re-search-forward "^$" nil t)
|
|
|
|
|
(setq headers (buffer-substring (point-min) (point)))
|
|
|
|
|
(save-restriction
|
|
|
|
|
(narrow-to-region (point-min) (point))
|
|
|
|
|
(setq cte (mail-fetch-field "content-transfer-encoding")))
|
|
|
|
|
(forward-line 1)
|
|
|
|
|
(delete-region (point-min) (point))
|
|
|
|
|
(when cte
|
|
|
|
|
(setq cte (intern (downcase cte)))
|
|
|
|
|
(mm-decode-content-transfer-encoding cte)))
|
|
|
|
|
(condition-case error
|
|
|
|
|
(setq signature (epg-sign-string context (buffer-string) 'clear)
|
|
|
|
|
mml1991-epg-secret-key-id-list nil)
|
|
|
|
|
(error
|
|
|
|
|
(while mml1991-epg-secret-key-id-list
|
|
|
|
|
(password-cache-remove (car mml1991-epg-secret-key-id-list))
|
|
|
|
|
(setq mml1991-epg-secret-key-id-list
|
|
|
|
|
(cdr mml1991-epg-secret-key-id-list)))
|
|
|
|
|
(signal (car error) (cdr error))))
|
|
|
|
|
(delete-region (point-min) (point-max))
|
|
|
|
|
(mm-with-unibyte-current-buffer
|
|
|
|
|
(insert signature)
|
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
(while (re-search-forward "\r+$" nil t)
|
|
|
|
|
(replace-match "" t t))
|
|
|
|
|
(when cte
|
|
|
|
|
(mm-encode-content-transfer-encoding cte))
|
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
(when headers
|
|
|
|
|
(insert headers))
|
|
|
|
|
(insert "\n"))
|
|
|
|
|
t))
|
|
|
|
|
|
|
|
|
|
(defun mml1991-epg-encrypt (cont &optional sign)
|
|
|
|
|
(goto-char (point-min))
|
|
|
|
|
(when (re-search-forward "^$" nil t)
|
|
|
|
|
(let ((cte (save-restriction
|
|
|
|
|
(narrow-to-region (point-min) (point))
|
|
|
|
|
(mail-fetch-field "content-transfer-encoding"))))
|
2008-06-27 02:41:14 +00:00
|
|
|
|
;; Strip MIME headers since it will be ASCII armored.
|
2007-10-28 09:18:39 +00:00
|
|
|
|
(forward-line 1)
|
|
|
|
|
(delete-region (point-min) (point))
|
|
|
|
|
(when cte
|
|
|
|
|
(mm-decode-content-transfer-encoding (intern (downcase cte))))))
|
|
|
|
|
(let ((context (epg-make-context))
|
|
|
|
|
(recipients
|
|
|
|
|
(if (message-options-get 'message-recipients)
|
|
|
|
|
(split-string
|
|
|
|
|
(message-options-get 'message-recipients)
|
|
|
|
|
"[ \f\t\n\r\v,]+")))
|
|
|
|
|
cipher signers config)
|
|
|
|
|
;; We should remove this check if epg-0.0.6 is released.
|
|
|
|
|
(if (and (condition-case nil
|
|
|
|
|
(require 'epg-config)
|
|
|
|
|
(error))
|
|
|
|
|
(functionp #'epg-expand-group))
|
|
|
|
|
(setq config (epg-configuration)
|
|
|
|
|
recipients
|
|
|
|
|
(apply #'nconc
|
|
|
|
|
(mapcar (lambda (recipient)
|
|
|
|
|
(or (epg-expand-group config recipient)
|
|
|
|
|
(list recipient)))
|
|
|
|
|
recipients))))
|
2009-09-28 12:09:01 +00:00
|
|
|
|
(if (eq mm-encrypt-option 'guided)
|
2007-10-28 09:18:39 +00:00
|
|
|
|
(setq recipients
|
|
|
|
|
(epa-select-keys context "Select recipients for encryption.
|
|
|
|
|
If no one is selected, symmetric encryption will be performed. "
|
|
|
|
|
recipients))
|
|
|
|
|
(setq recipients
|
|
|
|
|
(delq nil (mapcar (lambda (name)
|
|
|
|
|
(car (epg-list-keys context name)))
|
|
|
|
|
recipients))))
|
|
|
|
|
(if mml1991-encrypt-to-self
|
|
|
|
|
(if mml1991-signers
|
|
|
|
|
(setq recipients
|
|
|
|
|
(nconc recipients
|
|
|
|
|
(mapcar (lambda (name)
|
|
|
|
|
(car (epg-list-keys context name)))
|
|
|
|
|
mml1991-signers)))
|
|
|
|
|
(error "mml1991-signers not set")))
|
|
|
|
|
(when sign
|
2009-09-28 12:09:01 +00:00
|
|
|
|
(if (eq mm-sign-option 'guided)
|
2007-10-28 09:18:39 +00:00
|
|
|
|
(setq signers (epa-select-keys context "Select keys for signing.
|
|
|
|
|
If no one is selected, default secret key is used. "
|
|
|
|
|
mml1991-signers t))
|
|
|
|
|
(if mml1991-signers
|
|
|
|
|
(setq signers (mapcar (lambda (name)
|
|
|
|
|
(car (epg-list-keys context name t)))
|
|
|
|
|
mml1991-signers))))
|
|
|
|
|
(epg-context-set-signers context signers))
|
|
|
|
|
(epg-context-set-armor context t)
|
|
|
|
|
(epg-context-set-textmode context t)
|
|
|
|
|
(if mml1991-cache-passphrase
|
|
|
|
|
(epg-context-set-passphrase-callback
|
|
|
|
|
context
|
|
|
|
|
#'mml1991-epg-passphrase-callback))
|
|
|
|
|
(condition-case error
|
|
|
|
|
(setq cipher
|
|
|
|
|
(epg-encrypt-string context (buffer-string) recipients sign)
|
|
|
|
|
mml1991-epg-secret-key-id-list nil)
|
|
|
|
|
(error
|
|
|
|
|
(while mml1991-epg-secret-key-id-list
|
|
|
|
|
(password-cache-remove (car mml1991-epg-secret-key-id-list))
|
|
|
|
|
(setq mml1991-epg-secret-key-id-list
|
|
|
|
|
(cdr mml1991-epg-secret-key-id-list)))
|
|
|
|
|
(signal (car error) (cdr error))))
|
|
|
|
|
(delete-region (point-min) (point-max))
|
|
|
|
|
(insert "\n" cipher))
|
|
|
|
|
t)
|
|
|
|
|
|
2004-09-04 13:13:48 +00:00
|
|
|
|
;;;###autoload
|
|
|
|
|
(defun mml1991-encrypt (cont &optional sign)
|
|
|
|
|
(let ((func (nth 2 (assq mml1991-use mml1991-function-alist))))
|
|
|
|
|
(if func
|
|
|
|
|
(funcall func cont sign)
|
|
|
|
|
(error "Cannot find encrypt function"))))
|
|
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
|
(defun mml1991-sign (cont)
|
|
|
|
|
(let ((func (nth 1 (assq mml1991-use mml1991-function-alist))))
|
|
|
|
|
(if func
|
|
|
|
|
(funcall func cont)
|
|
|
|
|
(error "Cannot find sign function"))))
|
|
|
|
|
|
|
|
|
|
(provide 'mml1991)
|
|
|
|
|
|
|
|
|
|
;; Local Variables:
|
|
|
|
|
;; coding: iso-8859-1
|
|
|
|
|
;; End:
|
|
|
|
|
|
|
|
|
|
;;; mml1991.el ends here
|