Anonymous avatar Anonymous committed 4831097

2002-11-11 Simon Josefsson <jas@extundo.com>;

* pgg.el (pgg-encrypt, pgg-decrypt, pgg-sign, pgg-verify): Display
output when called interactively.

2002-11-02 Simon Josefsson <jas@extundo.com>;

* pgg-gpg.el (pgg-gpg-encrypt-region): Makes PGG respect the
setting of the default user ID. From Raymond Scholz
<ray-2002@zonix.de>;.

2002-10-30 Simon Josefsson <jas@extundo.com>;

* pgg-def.el (pgg-passphrase-cache-expiry): New, defcustom.

* pgg.el (pgg-passphrase-cache-expiry): Removed.

2002-10-22 TSUCHIYA Masatoshi <tsuchiya@namazu.org>;

* pgg.el (pgg-snarf-keys): Do not refer unbinded local variables.

2002-10-22 Simon Josefsson <jas@extundo.com>;

* pgg.el (pgg-encrypt, pgg-decrypt, pgg-sign, pgg-verify)
(pgg-snarf-keys): Add.

2002-10-10 Simon Josefsson <jas@extundo.com>;

* pgg-gpg.el (pgg-gpg-verify-region): Filter out stuff into output
buffer and error buffer depending on type of information.

* pgg.el (pgg-verify-region): Use it.

* pgg-def.el (pgg-query-keyserver): New variable.

* pgg.el (pgg-decrypt-region): Bind pgg-default-user-id to
key-identifier in packet. Is this a good idea?

2002-10-09 Simon Josefsson <jas@extundo.com>;

* pgg.el (pgg-insert-url-with-w3): Ignore errors.
(pgg-fetch-key-function): Nil if w3 is not installed.

Comments (0)

Files changed (5)

+2002-11-11  Simon Josefsson  <jas@extundo.com>
+
+	* pgg.el (pgg-encrypt, pgg-decrypt, pgg-sign, pgg-verify): Display
+	output when called interactively.
+
+2002-11-02  Simon Josefsson  <jas@extundo.com>
+
+	* pgg-gpg.el (pgg-gpg-encrypt-region): Makes PGG respect the
+	setting of the default user ID.  From Raymond Scholz
+	<ray-2002@zonix.de>.
+
+2002-10-30  Simon Josefsson  <jas@extundo.com>
+
+	* pgg-def.el (pgg-passphrase-cache-expiry): New, defcustom.
+
+	* pgg.el (pgg-passphrase-cache-expiry): Removed.
+
+2002-10-22  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
+
+	* pgg.el (pgg-snarf-keys): Do not refer unbinded local variables.
+
+2002-10-22  Simon Josefsson  <jas@extundo.com>
+
+	* pgg.el (pgg-encrypt, pgg-decrypt, pgg-sign, pgg-verify)
+	(pgg-snarf-keys): Add.
+
+2002-10-10  Simon Josefsson  <jas@extundo.com>
+
+	* pgg-gpg.el (pgg-gpg-verify-region): Filter out stuff into output
+	buffer and error buffer depending on type of information.
+
+	* pgg.el (pgg-verify-region): Use it.
+
+	* pgg-def.el (pgg-query-keyserver): New variable.
+
+	* pgg.el (pgg-decrypt-region): Bind pgg-default-user-id to
+	key-identifier in packet.  Is this a good idea?
+
+2002-10-09  Simon Josefsson  <jas@extundo.com>
+
+	* pgg.el (pgg-insert-url-with-w3): Ignore errors.
+	(pgg-fetch-key-function): Nil if w3 is not installed.
+
 2002-10-29  Rendhalver [Peter Brown]  <rendhalver@xemacs.org>
 
 	* Makefile (VERSION): XEmacs package 1.01 released.
   :group 'pgg
   :type 'string)
 
+(defcustom pgg-query-keyserver nil
+  "Whether PGG queries keyservers for missing keys when verifying messages."
+  :group 'pgg
+  :type 'boolean)
+
 (defcustom pgg-encrypt-for-me nil
   "If t, encrypt all outgoing messages with user's public key."
   :group 'pgg
   :group 'pgg
   :type 'boolean)
 
+(defcustom pgg-passphrase-cache-expiry 16
+  "How many seconds the passphrase is cached.
+Whether the passphrase is cached at all is controlled by
+`pgg-cache-passphrase'."
+  :group 'pgg
+  :type 'integer)
+
 (defvar pgg-messages-coding-system nil
   "Coding system used when reading from a PGP external process.")
 
   "Encrypt the current region between START and END.
 If optional argument SIGN is non-nil, do a combined sign and encrypt."
   (let* ((pgg-gpg-user-id (or pgg-gpg-user-id pgg-default-user-id))
+	 (passphrase
+	  (when sign
+	    (pgg-read-passphrase
+	     (format "GnuPG passphrase for %s: " pgg-gpg-user-id)
+	     (pgg-gpg-lookup-key pgg-gpg-user-id 'encrypt))))
 	 (args
 	  (append
 	   (list "--batch" "--armor" "--always-trust" "--encrypt")
-	   (if sign '("--sign"))
+	   (if sign (list "--sign" "--local-user" pgg-gpg-user-id))
 	   (if recipients
 	       (apply #'nconc
 		      (mapcar (lambda (rcpt)
 				      (if pgg-encrypt-for-me
 					  (list pgg-gpg-user-id)))))))))
     (pgg-as-lbt start end 'CRLF
-      (pgg-gpg-process-region start end nil pgg-gpg-program args))
+      (pgg-gpg-process-region start end passphrase pgg-gpg-program args))
+    (when sign
+      (with-current-buffer pgg-errors-buffer
+	(pgg-gpg-possibly-cache-passphrase passphrase)))
     (pgg-process-when-success)))
 
 (defun pgg-gpg-decrypt-region (start end)
     (pgg-gpg-process-region start end nil pgg-gpg-program args)
     (with-current-buffer pgg-errors-buffer
       (goto-char (point-min))
-      (while (re-search-forward "^gpg: " nil t)
-	(replace-match ""))
+      (while (re-search-forward "^gpg: \\(.*\\)\n" nil t)
+	(with-current-buffer pgg-output-buffer
+	  (insert-buffer-substring pgg-errors-buffer
+				   (match-beginning 1) (match-end 0)))
+	(delete-region (match-beginning 0) (match-end 0)))
       (goto-char (point-min))
-      (prog1 (re-search-forward "^\\[GNUPG:] GOODSIG\\>" nil t)
-	(goto-char (point-min))
-	(delete-matching-lines "^warning\\|\\[GNUPG:]")
-	(set-buffer pgg-output-buffer)
-	(insert-buffer-substring pgg-errors-buffer)))))
+      (re-search-forward "^\\[GNUPG:] GOODSIG\\>" nil t))))
 
 (defun pgg-gpg-insert-key ()
   "Insert public key at point."
 (defcustom pgg-pgp-extra-args nil
   "Extra arguments for every PGP invocation."
   :group 'pgg-pgp
-  :type '(choice 
+  :type '(choice
 	  (const :tag "None" nil)
 	  (string :tag "Arguments")))
 
 ;;; @ utility functions
 ;;;
 
-(defvar pgg-fetch-key-function (function pgg-fetch-key-with-w3))
+(defvar pgg-fetch-key-function (if (fboundp 'url-insert-file-contents)
+				   (function pgg-fetch-key-with-w3)))
 
 (defun pgg-invoke (func scheme &rest args)
   (progn
 	(set-buffer standard-output)
 	(insert-buffer-substring pgg-errors-buffer)))))
 
-(defvar pgg-passphrase-cache-expiry 16)
 (defvar pgg-passphrase-cache (make-vector 7 0))
 
 (defvar pgg-read-passphrase nil)
     status))
 
 ;;;###autoload
+(defun pgg-encrypt (rcpts &optional sign start end)
+  "Encrypt the current buffer for RCPTS.
+If optional argument SIGN is non-nil, do a combined sign and encrypt.
+If optional arguments START and END are specified, only encrypt within
+the region."
+  (interactive (list (split-string (read-string "Recipients: ") "[ \t,]+")))
+  (let* ((start (or start (point-min)))
+	 (end (or end (point-max)))
+	 (status (pgg-encrypt-region start end rcpts sign)))
+    (when (interactive-p)
+      (pgg-display-output-buffer start end status))
+    status))
+
+;;;###autoload
 (defun pgg-decrypt-region (start end)
   "Decrypt the current region between START and END."
   (interactive "r")
-  (let ((status
-	 (pgg-save-coding-system start end
-	   (pgg-invoke "decrypt-region" (or pgg-scheme pgg-default-scheme)
-		       (point-min) (point-max)))))
+  (let* ((buf (current-buffer))
+	 (packet (cdr (assq 1 (with-temp-buffer
+				(insert-buffer buf)
+				(pgg-decode-armor-region
+				 (point-min) (point-max))))))
+	 (key (cdr (assq 'key-identifier packet)))
+	 (pgg-default-user-id 
+	  (if key
+	      (concat "0x" (pgg-truncate-key-identifier key))
+	    pgg-default-user-id))
+	 (status
+	  (pgg-save-coding-system start end
+	    (pgg-invoke "decrypt-region" (or pgg-scheme pgg-default-scheme)
+			(point-min) (point-max)))))
+    (when (interactive-p)
+      (pgg-display-output-buffer start end status))
+    status))
+
+;;;###autoload
+(defun pgg-decrypt (&optional start end)
+  "Decrypt the current buffer.
+If optional arguments START and END are specified, only decrypt within
+the region."
+  (interactive "")
+  (let* ((start (or start (point-min)))
+	 (end (or end (point-max)))
+	 (status (pgg-decrypt-region start end)))
     (when (interactive-p)
       (pgg-display-output-buffer start end status))
     status))
 (defun pgg-sign-region (start end &optional cleartext)
   "Make the signature from text between START and END.
 If the optional 3rd argument CLEARTEXT is non-nil, it does not create
-a detached signature."
+a detached signature.
+If this function is called interactively, CLEARTEXT is enabled
+and the the output is displayed."
   (interactive "r")
   (let ((status (pgg-save-coding-system start end
 		  (pgg-invoke "sign-region" (or pgg-scheme pgg-default-scheme)
     status))
 
 ;;;###autoload
+(defun pgg-sign (&optional cleartext start end)
+  "Sign the current buffer.
+If the optional argument CLEARTEXT is non-nil, it does not create a
+detached signature.
+If optional arguments START and END are specified, only sign data
+within the region.
+If this function is called interactively, CLEARTEXT is enabled
+and the the output is displayed."
+  (interactive "")
+  (let* ((start (or start (point-min)))
+	 (end (or end (point-max)))
+	 (status (pgg-sign-region start end (or (interactive-p) cleartext))))
+    (when (interactive-p)
+      (pgg-display-output-buffer start end status))
+    status))
+  
+;;;###autoload
 (defun pgg-verify-region (start end &optional signature fetch)
   "Verify the current region between START and END.
 If the optional 3rd argument SIGNATURE is non-nil, it is treated as
 	 (key (cdr (assq 'key-identifier packet)))
 	 status keyserver)
     (and (stringp key)
+	 pgg-query-keyserver
 	 (setq key (concat "0x" (pgg-truncate-key-identifier key)))
 	 (null (pgg-lookup-key key))
 	 (or fetch (interactive-p))
     status))
 
 ;;;###autoload
+(defun pgg-verify (&optional signature fetch start end)
+  "Verify the current buffer.
+If the optional argument SIGNATURE is non-nil, it is treated as
+the detached signature of the current region.
+If the optional argument FETCH is non-nil, we attempt to fetch the
+signer's public key from `pgg-default-keyserver-address'.
+If optional arguments START and END are specified, only verify data
+within the region."
+  (interactive "")
+  (let* ((start (or start (point-min)))
+	 (end (or end (point-max)))
+	 (status (pgg-verify-region start end signature fetch)))
+    (when (interactive-p)
+      (let ((temp-buffer-show-function
+	     (function pgg-temp-buffer-show-function)))
+	(with-output-to-temp-buffer pgg-echo-buffer
+	  (set-buffer standard-output)
+	  (insert-buffer-substring (if status pgg-output-buffer
+				     pgg-errors-buffer)))))))
+
+;;;###autoload
 (defun pgg-insert-key ()
   "Insert the ASCII armored public key."
   (interactive)
     (pgg-invoke "snarf-keys-region" (or pgg-scheme pgg-default-scheme)
 		start end)))
 
+;;;###autoload
+(defun pgg-snarf-keys ()
+  "Import public keys in the current buffer."
+  (interactive "")
+  (pgg-snarf-keys-region (point-min) (point-max)))
+
 (defun pgg-lookup-key (string &optional type)
   (pgg-invoke "lookup-key" (or pgg-scheme pgg-default-scheme) string type))
 
 (defvar pgg-insert-url-function  (function pgg-insert-url-with-w3))
 
 (defun pgg-insert-url-with-w3 (url)
-  (require 'w3)
-  (require 'url)
-  (let (buffer-file-name)
-    (url-insert-file-contents url)))
+  (ignore-errors
+    (require 'w3)
+    (require 'url)
+    (let (buffer-file-name)
+      (url-insert-file-contents url))))
 
 (defvar pgg-insert-url-extra-arguments nil)
 (defvar pgg-insert-url-program nil)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.