X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fmml2015.el;h=838813e0f19e27d3bc7fa1f2cd20494fc46e2b3f;hb=0f63151c0cfcb3498678c203edb84e6a1d2b57e0;hp=8add5e5215f27170c17c8bd5256b762825464732;hpb=fc9d1de3b9014466008751849d606de63c6a83ae;p=gnus diff --git a/lisp/mml2015.el b/lisp/mml2015.el index 8add5e521..838813e0f 100644 --- a/lisp/mml2015.el +++ b/lisp/mml2015.el @@ -1,27 +1,25 @@ ;;; mml2015.el --- MIME Security with Pretty Good Privacy (PGP) -;; Copyright (C) 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, +;; 2008, 2009, 2010 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu ;; Keywords: PGP MIME MML ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published -;; by the Free Software Foundation; either version 3, or (at your -;; option) any later version. +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. -;; GNU Emacs is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -32,7 +30,11 @@ ;; For Emacs < 22.2. (eval-and-compile - (unless (fboundp 'declare-function) (defmacro declare-function (&rest r)))) + (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))) + + (if (locate-library "password-cache") + (require 'password-cache) + (require 'password))) (eval-when-compile (require 'cl)) (require 'mm-decode) @@ -184,13 +186,12 @@ Whether the passphrase is cached at all is controlled by ;;; mailcrypt wrapper -(eval-and-compile - (autoload 'mailcrypt-decrypt "mailcrypt") - (autoload 'mailcrypt-verify "mailcrypt") - (autoload 'mc-pgp-always-sign "mailcrypt") - (autoload 'mc-encrypt-generic "mc-toplev") - (autoload 'mc-cleanup-recipient-headers "mc-toplev") - (autoload 'mc-sign-generic "mc-toplev")) +(autoload 'mailcrypt-decrypt "mailcrypt") +(autoload 'mailcrypt-verify "mailcrypt") +(autoload 'mc-pgp-always-sign "mailcrypt") +(autoload 'mc-encrypt-generic "mc-toplev") +(autoload 'mc-cleanup-recipient-headers "mc-toplev") +(autoload 'mc-sign-generic "mc-toplev") (defvar mc-default-scheme) (defvar mc-schemes) @@ -455,14 +456,13 @@ Whether the passphrase is cached at all is controlled by ;;; gpg wrapper -(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-encrypt "gpg") - (autoload 'gpg-passphrase-read "gpg")) +(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-encrypt "gpg") +(autoload 'gpg-passphrase-read "gpg") (defun mml2015-gpg-passphrase () (or (message-options-get 'gpg-passphrase) @@ -680,6 +680,7 @@ Whether the passphrase is cached at all is controlled by cipher) (mm-with-unibyte-current-buffer (with-temp-buffer + (mm-disable-multibyte) ;; set up a function to call the correct gpg encrypt routine ;; with the right arguments. (FIXME: this should be done ;; differently.) @@ -733,12 +734,11 @@ Whether the passphrase is cached at all is controlled by (defvar pgg-errors-buffer) (defvar pgg-output-buffer) -(eval-and-compile - (autoload 'pgg-decrypt-region "pgg") - (autoload 'pgg-verify-region "pgg") - (autoload 'pgg-sign-region "pgg") - (autoload 'pgg-encrypt-region "pgg") - (autoload 'pgg-parse-armor "pgg-parse")) +(autoload 'pgg-decrypt-region "pgg") +(autoload 'pgg-verify-region "pgg") +(autoload 'pgg-sign-region "pgg") +(autoload 'pgg-encrypt-region "pgg") +(autoload 'pgg-parse-armor "pgg-parse") (defun mml2015-pgg-decrypt (handle ctl) (catch 'error @@ -970,36 +970,37 @@ Whether the passphrase is cached at all is controlled by (defvar epg-digest-algorithm-alist) (defvar inhibit-redisplay) -(eval-and-compile - (autoload 'epg-make-context "epg") - (autoload 'epg-context-set-armor "epg") - (autoload 'epg-context-set-textmode "epg") - (autoload 'epg-context-set-signers "epg") - (autoload 'epg-context-result-for "epg") - (autoload 'epg-new-signature-digest-algorithm "epg") - (autoload 'epg-verify-result-to-string "epg") - (autoload 'epg-list-keys "epg") - (autoload 'epg-decrypt-string "epg") - (autoload 'epg-verify-string "epg") - (autoload 'epg-sign-string "epg") - (autoload 'epg-encrypt-string "epg") - (autoload 'epg-passphrase-callback-function "epg") - (autoload 'epg-context-set-passphrase-callback "epg") - (autoload 'epg-key-sub-key-list "epg") - (autoload 'epg-sub-key-capability "epg") - (autoload 'epg-sub-key-validity "epg") - (autoload 'epg-configuration "epg-config") - (autoload 'epg-expand-group "epg-config") - (autoload 'epa-select-keys "epa")) - -(defvar password-cache-expiry) +(autoload 'epg-make-context "epg") +(autoload 'epg-context-set-armor "epg") +(autoload 'epg-context-set-textmode "epg") +(autoload 'epg-context-set-signers "epg") +(autoload 'epg-context-result-for "epg") +(autoload 'epg-new-signature-digest-algorithm "epg") +(autoload 'epg-verify-result-to-string "epg") +(autoload 'epg-list-keys "epg") +(autoload 'epg-decrypt-string "epg") +(autoload 'epg-verify-string "epg") +(autoload 'epg-sign-string "epg") +(autoload 'epg-encrypt-string "epg") +(autoload 'epg-passphrase-callback-function "epg") +(autoload 'epg-context-set-passphrase-callback "epg") +(autoload 'epg-key-sub-key-list "epg") +(autoload 'epg-sub-key-capability "epg") +(autoload 'epg-sub-key-validity "epg") +(autoload 'epg-configuration "epg-config") +(autoload 'epg-expand-group "epg-config") +(autoload 'epa-select-keys "epa") (defvar mml2015-epg-secret-key-id-list nil) (defun mml2015-epg-passphrase-callback (context key-id ignore) (if (eq key-id 'SYM) (epg-passphrase-callback-function context key-id nil) - (let* (entry + (let* ((password-cache-key-id + (if (eq key-id 'PIN) + "PIN" + key-id)) + entry (passphrase (password-read (if (eq key-id 'PIN) @@ -1007,14 +1008,12 @@ Whether the passphrase is cached at all is controlled by (if (setq entry (assoc key-id epg-user-id-alist)) (format "Passphrase for %s %s: " key-id (cdr entry)) (format "Passphrase for %s: " key-id))) - (if (eq key-id 'PIN) - "PIN" - key-id)))) + password-cache-key-id))) (when passphrase (let ((password-cache-expiry mml2015-passphrase-cache-expiry)) - (password-cache-add key-id passphrase)) + (password-cache-add password-cache-key-id passphrase)) (setq mml2015-epg-secret-key-id-list - (cons key-id mml2015-epg-secret-key-id-list)) + (cons password-cache-key-id mml2015-epg-secret-key-id-list)) (copy-sequence passphrase))))) (defun mml2015-epg-find-usable-key (keys usage) @@ -1023,6 +1022,7 @@ Whether the passphrase is cached at all is controlled by (let ((pointer (epg-key-sub-key-list (car keys)))) (while pointer (if (and (memq usage (epg-sub-key-capability (car pointer))) + (not (memq 'disabled (epg-sub-key-capability (car pointer)))) (not (memq (epg-sub-key-validity (car pointer)) '(revoked expired)))) (throw 'found (car keys))) @@ -1191,7 +1191,7 @@ Whether the passphrase is cached at all is controlled by (or (message-options-get 'mml2015-epg-signers) (message-options-set 'mml2015-epg-signers - (if mml2015-verbose + (if (eq mm-sign-option 'guided) (epa-select-keys context "\ Select keys for signing. If no one is selected, default secret key is used. " @@ -1273,7 +1273,7 @@ If no one is selected, default secret key is used. " (unless mml2015-signers (error "mml2015-signers not set")) (setq recipients (nconc recipients mml2015-signers))) - (if mml2015-verbose + (if (eq mm-encrypt-option 'guided) (setq recipients (epa-select-keys context "\ Select recipients for encryption. @@ -1301,7 +1301,7 @@ If no one is selected, symmetric encryption will be performed. " (or (message-options-get 'mml2015-epg-signers) (message-options-set 'mml2015-epg-signers - (if mml2015-verbose + (if (eq mm-sign-option 'guided) (epa-select-keys context "\ Select keys for signing. If no one is selected, default secret key is used. " @@ -1420,5 +1420,4 @@ If no one is selected, default secret key is used. " (provide 'mml2015) -;;; arch-tag: b04701d5-0b09-44d8-bed8-de901bf435f2 ;;; mml2015.el ends here