:type 'regexp
:group 'epa-file)
+(defcustom epa-file-cache-passphrase-for-symmetric-encryption nil
+ "If t, cache passphrase for symmetric encryption."
+ :type 'boolean
+ :group 'epa-file)
+
+(defvar epa-file-encrypt-to nil
+ "*Recipient(s) used for encrypting files.
+May either be a string or a list of strings.")
+
+;;;###autoload
+(put 'epa-file-encrypt-to 'safe-local-variable
+ (lambda (val)
+ (or (stringp val)
+ (and (listp val)
+ (catch 'safe
+ (mapc (lambda (elt)
+ (unless (stringp elt)
+ (throw 'safe nil)))
+ val)
+ t)))))
+
(defvar epa-file-handler
(cons epa-file-name-regexp 'epa-file-handler))
-
+
(defvar epa-file-passphrase-alist nil)
+(if (fboundp 'encode-coding-string)
+ (defalias 'epa-file--encode-coding-string 'encode-coding-string)
+ (defalias 'epa-file--encode-coding-string 'identity))
+
+(if (fboundp 'decode-coding-string)
+ (defalias 'epa-file--decode-coding-string 'decode-coding-string)
+ (defalias 'epa-file--decode-coding-string 'identity))
+
(defun epa-file-passphrase-callback-function (context key-id file)
- (if (eq key-id 'SYM)
+ (if (and epa-file-cache-passphrase-for-symmetric-encryption
+ (eq key-id 'SYM))
(let ((entry (assoc file epa-file-passphrase-alist))
passphrase)
(or (copy-sequence (cdr entry))
(setq entry (list file)
epa-file-passphrase-alist (cons entry
epa-file-passphrase-alist)))
- (setq passphrase (epg-passphrase-callback-function context
+ (setq passphrase (epa-passphrase-callback-function context
key-id nil))
(setcdr entry (copy-sequence passphrase))
passphrase)))
- (epg-passphrase-callback-function context key-id nil)))
+ (epa-passphrase-callback-function context key-id nil)))
(defun epa-file-handler (operation &rest args)
(save-match-data
(point-min) (point-max)
(substring file 0 (string-match epa-file-name-regexp file))
visit beg end replace)))
- (insert (decode-coding-string string (or coding-system-for-read
- 'undecided)))))
+ (insert (epa-file--decode-coding-string string (or coding-system-for-read
+ 'undecided)))))
(defvar last-coding-system-used)
(defun epa-file-insert-file-contents (file &optional visit beg end replace)
context
(cons #'epa-file-passphrase-callback-function
file))
+ (epg-context-set-progress-callback context
+ #'epa-progress-callback-function)
(unwind-protect
(progn
(if replace
context
(cons #'epa-file-passphrase-callback-function
file))
+ (epg-context-set-progress-callback context
+ #'epa-progress-callback-function)
(condition-case error
(setq string
(epg-encrypt-string
context
(if (stringp start)
- (encode-coding-string start coding-system)
- (encode-coding-string (buffer-substring start end)
- coding-system))
+ (epa-file--encode-coding-string start coding-system)
+ (epa-file--encode-coding-string (buffer-substring start end)
+ coding-system))
(unless (assoc file epa-file-passphrase-alist)
(epa-select-keys
context
"Select recipents for encryption.
-If no one is selected, symmetric encryption will be performed. "))))
+If no one is selected, symmetric encryption will be performed. "
+ (cond
+ ((listp epa-file-encrypt-to) epa-file-encrypt-to)
+ ((stringp epa-file-encrypt-to) (list epa-file-encrypt-to)))))))
(error
(if (setq entry (assoc file epa-file-passphrase-alist))
(setcdr entry nil))