;;;
(defvar pgg-fetch-key-function (if (fboundp 'url-insert-file-contents)
- function pgg-fetch-key-with-w3))
+ (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)
(pgg-display-output-buffer start end status))
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)
(pgg-display-output-buffer start end status))
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.
(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))
pgg-errors-buffer)))))
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."
(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))