(defvar pgg-epg-secret-key-id-list nil)
-(defun pgg-epg-passphrase-callback (key-id ignore)
+(defun pgg-epg-passphrase-callback (context key-id ignore)
(if (eq key-id 'SYM)
- (pgg-read-passphrase "GnuPG passphrase for symmetric encryption: ")
- (let ((passphrase
- (pgg-read-passphrase
- (format "GnuPG passphrase for %s: "
- (if entry
- (cdr entry)
- pgg-gpg-key-id))
- (if (eq pgg-gpg-key-id 'PIN)
- "PIN"
- pgg-gpg-key-id))))
+ (epg-passphrase-callback-function context key-id nil)
+ (let* ((entry (assoc key-id epg-user-id-alist))
+ (passphrase
+ (pgg-read-passphrase
+ (format "GnuPG passphrase for %s: "
+ (if entry
+ (cdr entry)
+ key-id))
+ (if (eq key-id 'PIN)
+ "PIN"
+ key-id))))
(when passphrase
(pgg-add-passphrase-to-cache key-id passphrase)
- (copy-sequence passphrase)
(setq pgg-epg-secret-key-id-list
- (cons key-id pgg-epg-secret-key-id-list))))))
+ (cons key-id pgg-epg-secret-key-id-list))
+ (copy-sequence passphrase)))))
(defun pgg-epg-encrypt-region (start end recipients &optional sign passphrase)
"This function is for internal use only.
If optional PASSPHRASE is not specified, it will be obtained from the
passphrase cache or user."
(let ((context (epg-make-context))
+ (inhibit-redisplay t) ;Some Gnus users hate flickering
cipher)
(epg-context-set-armor context t)
(epg-context-set-textmode context pgg-text-mode)
(epg-context-set-passphrase-callback context #'pgg-epg-passphrase-callback)
+ (get-buffer-create pgg-output-buffer)
+ (get-buffer-create pgg-errors-buffer)
(condition-case error
(setq cipher
(epg-encrypt-string context
(buffer-substring start end)
- (if pgg-encrypt-for-me
- (cons pgg-default-user-id recipients)
- recipients)
- sign t))
+ (mapcar
+ (lambda (recipient)
+ (car (epg-list-keys recipient)))
+ (if pgg-encrypt-for-me
+ (cons pgg-default-user-id recipients)
+ recipients))
+ sign t)
+ pgg-epg-secret-key-id-list nil)
(error
(while pgg-epg-secret-key-id-list
(pgg-remove-passphrase-from-cache (car pgg-epg-secret-key-id-list))
If optional PASSPHRASE is not specified, it will be obtained from the
passphrase cache or user."
(let ((context (epg-make-context))
+ (inhibit-redisplay t) ;Some Gnus users hate flickering
plain)
(epg-context-set-armor context t)
(epg-context-set-textmode context pgg-text-mode)
(epg-context-set-passphrase-callback context #'pgg-epg-passphrase-callback)
+ (get-buffer-create pgg-output-buffer)
+ (get-buffer-create pgg-errors-buffer)
(condition-case error
- (setq plain (epg-decrypt-string context (buffer-substring start end)))
+ (setq plain (epg-decrypt-string context (buffer-substring start end))
+ pgg-epg-secret-key-id-list nil)
(error
(while pgg-epg-secret-key-id-list
(pgg-remove-passphrase-from-cache (car pgg-epg-secret-key-id-list))
If optional PASSPHRASE is not specified, it will be obtained from the
passphrase cache or user."
(let ((context (epg-make-context))
+ (inhibit-redisplay t) ;Some Gnus users hate flickering
signature)
(epg-context-set-armor context t)
(epg-context-set-textmode context pgg-text-mode)
(epg-context-set-passphrase-callback context #'pgg-epg-passphrase-callback)
+ (get-buffer-create pgg-output-buffer)
+ (get-buffer-create pgg-errors-buffer)
(condition-case error
(setq signature
(epg-sign-string context
(buffer-substring start end)
(if cleartext
'clearsign
- 'detached)))
+ 'detached))
+ pgg-epg-secret-key-id-list nil)
(error
(while pgg-epg-secret-key-id-list
(pgg-remove-passphrase-from-cache (car pgg-epg-secret-key-id-list))
"This function is for internal use only.
Verify region between START and END as the detached signature SIGNATURE."
- (let ((context (epg-make-context)))
+ (let ((context (epg-make-context))
+ (inhibit-redisplay t)) ;Some Gnus users hate flickering
(epg-context-set-armor context t)
(epg-context-set-textmode context pgg-text-mode)
+ (get-buffer-create pgg-output-buffer)
+ (get-buffer-create pgg-errors-buffer)
(if signature
(epg-verify-string context
(with-temp-buffer
Insert public key at point."
(let ((context (epg-make-context))
+ (inhibit-redisplay t) ;Some Gnus users hate flickering
pointer)
(epg-context-set-armor context t)
(epg-context-set-textmode context pgg-text-mode)
Add all public keys in region between START and END to the keyring."
(let ((context (epg-make-context))
+ (inhibit-redisplay t) ;Some Gnus users hate flickering
pointer)
(epg-context-set-armor context t)
(epg-context-set-textmode context pgg-text-mode)