Fixed.
[elisp/epg.git] / pgg-epg.el
index d2f09c5..1c8a133 100644 (file)
@@ -1,3 +1,30 @@
+;;; pgg-epg.el --- Gnus/PGG backend of EasyPG.
+;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
+;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 2006 Daiki Ueno
+
+;; Author: Daiki Ueno <ueno@unixuser.org>
+;; Keywords: PGP, GnuPG
+
+;; This file is part of EasyPG.
+
+;; This program 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 2, or (at your option)
+;; any later version.
+
+;; This program 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.
+
+;;; Code:
+
 (require 'epg)
 (eval-when-compile (require 'pgg))
 
@@ -21,6 +48,7 @@ passphrase cache or user."
                                     sign t))
     (save-excursion
       (set-buffer (get-buffer-create pgg-output-buffer))
+      (erase-buffer)
       (insert cipher))
     t))
 
@@ -47,6 +75,7 @@ passphrase cache or user."
     (setq plain (epg-decrypt-string context (buffer-substring start end)))
     (save-excursion
       (set-buffer (get-buffer-create pgg-output-buffer))
+      (erase-buffer)
       (insert plain))
     t))
 
@@ -68,7 +97,9 @@ passphrase cache or user."
     (save-excursion
       (set-buffer (get-buffer-create pgg-output-buffer))
       (insert signature))
-    t)
+    t))
+
+(defvar pgg-epg-signature nil)
 
 (defun pgg-epg-verify-region (start end &optional signature)
   "This function is for internal use only.
@@ -79,9 +110,23 @@ Verify region between START and END as the detached signature SIGNATURE."
     (epg-context-set-armor context t)
     (epg-context-set-textmode context pgg-text-mode)
     (if signature
-       (epg-verify-file context signature (buffer-substring start end))
+       (epg-verify-file context signature (buffer-substring start end) nil)
       (epg-verify-string context (buffer-substring start end)))
-    (reverse (epg-context-result-for context 'verify)))
+    (setq signature (reverse (epg-context-result-for context 'verify))
+         pointer signature)
+    (save-excursion
+      (set-buffer (get-buffer-create pgg-errors-buffer))
+      (make-local-variable 'pgg-epg-signature)
+      (setq pgg-epg-signature (car signature))
+      (erase-buffer)
+      (while pointer
+       (insert (format "%s: %s %s %s\n"
+                       (epg-signature-status (car pointer))
+                       (epg-signature-key-id (car pointer))
+                       (epg-signature-user-id (car pointer))
+                       (epg-signature-validity (car pointer))))
+       (setq pointer (cdr pointer))))
+    signature))
 
 (defun pgg-epg-insert-key ()
   "This function is for internal use only.
@@ -103,6 +148,28 @@ Add all public keys in region between START and END to the keyring."
     (epg-context-set-textmode context pgg-text-mode)
     (epg-import-keys context (buffer-substring start end))))
 
+(defun mml2015-gpg-extract-signature-details ()
+  (if pgg-epg-signature
+      (let* ((expired (eq (epg-signature-status pgg-epg-signature)
+                         'key-expired))
+            (signer (cons (epg-signature-key-id pgg-epg-signature)
+                          (epg-signature-user-id pgg-epg-signature)))
+            (fprint (epg-signature-fingerprint pgg-epg-signature))
+            (trust-good-enough-p
+             (memq (epg-signature-validity pgg-epg-signature)
+                   '(marginal fully ultimate))))
+       (cond ((and signer fprint)
+              (concat (cdr signer)
+                      (unless trust-good-enough-p
+                        (concat "\nUntrusted, Fingerprint: "
+                                (mml2015-gpg-pretty-print-fpr fprint)))
+                      (when expired
+                        (format "\nWARNING: Signature from expired key (%s)"
+                                (car signer)))))
+             (t
+              "From unknown user")))
+    "From unknown user"))
+
 (provide 'pgg-epg)
 
 ;;; pgg-epg.el ends here