Index: man/pgg.texi =================================================================== RCS file: /cvsroot/emacs/emacs/man/pgg.texi,v retrieving revision 1.5 diff -u -r1.5 pgg.texi --- man/pgg.texi 16 Sep 2005 22:11:00 -0000 1.5 +++ man/pgg.texi 5 Oct 2005 16:09:13 -0000 @@ -98,6 +98,8 @@ @lisp (autoload 'pgg-encrypt-region "pgg" "Encrypt the current region." t) +(autoload 'pgg-encrypt-symmetric-region "pgg" + "Encrypt the current region with symmetric algorithm." t) (autoload 'pgg-decrypt-region "pgg" "Decrypt the current region." t) (autoload 'pgg-sign-region "pgg" @@ -140,6 +142,13 @@ with GnuPG. @end deffn address@hidden Command pgg-encrypt-symmetric-region start end +Encrypt the current region between @var{start} and @var{end} using a +symmetric cipher. After invocation you are asked for a passphrase. + +This is currently only implemented for GnuPG. address@hidden deffn + @deffn Command pgg-decrypt-region start end Decrypt the current region between @var{start} and @var{end}. If decryption is successful, it replaces the current region contents (in @@ -305,6 +314,10 @@ @var{recipients}. If @var{sign} is address@hidden, do a combined sign and encrypt. If encryption is successful, it returns @code{t}, otherwise @code{nil}. + +If @var{recipients} equals @code{:symmetric} a symmetric cipher together +with a passphrase is used and @var{sign} is ignored. This feature is +currently only implemented for GnuPG. @end deffn @deffn Method pgg-scheme-decrypt-region scheme start end Index: man/ChangeLog =================================================================== RCS file: /cvsroot/emacs/emacs/man/ChangeLog,v retrieving revision 1.681 diff -u -r1.681 ChangeLog --- man/ChangeLog 4 Oct 2005 22:52:16 -0000 1.681 +++ man/ChangeLog 5 Oct 2005 16:09:16 -0000 @@ -1,3 +1,11 @@ +2005-10-05 Sascha Wilde + + * pgg.texi (How to use): Added autoload line for + `pgg-encrypt-symmetric-region'. + (User Commands): Description of `pgg-encrypt-symmetric-region'. + (Backend methods): Describe new symmetric encryption feature in + `pgg-scheme-encrypt-region'. + 2005-10-05 Nick Roberts * speedbar.texi (GDB): Describe use of watch expressions. Index: lisp/gnus/pgg.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/gnus/pgg.el,v retrieving revision 1.8 diff -u -r1.8 pgg.el --- lisp/gnus/pgg.el 26 Aug 2005 00:02:05 -0000 1.8 +++ lisp/gnus/pgg.el 5 Oct 2005 16:09:17 -0000 @@ -4,6 +4,7 @@ ;; 2005 Free Software Foundation, Inc. ;; Author: Daiki Ueno +;; Symmetric encryption added by: Sascha Wilde ;; Created: 1999/10/28 ;; Keywords: PGP @@ -232,6 +233,34 @@ (pgg-save-coding-system start end (pgg-invoke "encrypt-region" (or pgg-scheme pgg-default-scheme) (point-min) (point-max) rcpts sign)))) + (when (interactive-p) + (pgg-display-output-buffer start end status)) + status)) + +;;;###autoload +(defun pgg-encrypt-symmetric-region (start end) + "Encrypt the current region between START and END symmetric with passphrase." + (interactive "r") + (when (not (member (or pgg-scheme pgg-default-scheme) + pgg-symmetric-encryption-schemes)) + (error "Symmetric encryption is not implemented for selected scheme.")) + (let ((status + (pgg-save-coding-system start end + (pgg-invoke "encrypt-region" (or pgg-scheme pgg-default-scheme) + (point-min) (point-max) :symmetric)))) + (when (interactive-p) + (pgg-display-output-buffer start end status)) + status)) + +;;;###autoload +(defun pgg-encrypt-symmetric (&optional start end) + "Encrypt the current buffer symmetric with passphrase. +If optional arguments START and END are specified, only encrypt within +the region." + (interactive) + (let* ((start (or start (point-min))) + (end (or end (point-max))) + (status (pgg-encrypt-symmetric-region start end))) (when (interactive-p) (pgg-display-output-buffer start end status)) status)) Index: lisp/gnus/pgg-gpg.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/gnus/pgg-gpg.el,v retrieving revision 1.6 diff -u -r1.6 pgg-gpg.el --- lisp/gnus/pgg-gpg.el 6 Aug 2005 19:51:42 -0000 1.6 +++ lisp/gnus/pgg-gpg.el 5 Oct 2005 16:09:17 -0000 @@ -4,6 +4,7 @@ ;; 2005 Free Software Foundation, Inc. ;; Author: Daiki Ueno +;; Symmetric encryption added by: Sascha Wilde ;; Created: 1999/10/28 ;; Keywords: PGP, OpenPGP, GnuPG @@ -141,24 +142,32 @@ (defun pgg-gpg-encrypt-region (start end recipients &optional sign) "Encrypt the current region between START and END. +If recipients is :symmetric do symmetric encryption 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)) + (symmetric-encryption (eq recipients :symmetric)) (passphrase - (when sign - (pgg-read-passphrase - (format "GnuPG passphrase for %s: " pgg-gpg-user-id) - pgg-gpg-user-id))) + (if symmetric-encryption + (pgg-read-passphrase + "GnuPG passphrase for symmetric encryption: ") + (when sign + (pgg-read-passphrase + (format "GnuPG passphrase for %s: " pgg-gpg-user-id) + pgg-gpg-user-id)))) (args (append - (list "--batch" "--armor" "--always-trust" "--encrypt") + (list "--batch" "--armor" "--always-trust" + (if symmetric-encryption "--symmetric" "--encrypt")) (if sign (list "--sign" "--local-user" pgg-gpg-user-id)) - (if recipients - (apply #'nconc - (mapcar (lambda (rcpt) - (list pgg-gpg-recipient-argument rcpt)) - (append recipients - (if pgg-encrypt-for-me - (list pgg-gpg-user-id))))))))) + (if symmetric-encryption + nil + (if recipients + (apply #'nconc + (mapcar (lambda (rcpt) + (list pgg-gpg-recipient-argument rcpt)) + (append recipients + (if pgg-encrypt-for-me + (list pgg-gpg-user-id)))))))))) (pgg-as-lbt start end 'CRLF (pgg-gpg-process-region start end passphrase pgg-gpg-program args)) (when sign @@ -180,7 +189,10 @@ (pgg-gpg-user-id (or key pgg-gpg-user-id pgg-default-user-id)) (passphrase (pgg-read-passphrase - (format "GnuPG passphrase for %s: " pgg-gpg-user-id) + (format (if (pgg-gpg-symmetric-key-p message-keys) + "Passphrase for symmetric dencryption: " + "GnuPG passphrase for %s: ") + pgg-gpg-user-id) pgg-gpg-user-id)) (args '("--batch" "--decrypt"))) (pgg-gpg-process-region start end passphrase pgg-gpg-program args) @@ -188,6 +200,13 @@ (pgg-gpg-possibly-cache-passphrase passphrase pgg-gpg-user-id) (goto-char (point-min)) (re-search-forward "^\\[GNUPG:] DECRYPTION_OKAY\\>" nil t)))) + +(defun pgg-gpg-symmetric-key-p (message-keys) + "Check if MESSAGE-KEYS contains a symmetric encryption indicator." + (dolist (key message-keys result) + (when (and (eq (car key) 3) + (member '(symmetric-key-algorithm) key)) + (setq result key)))) (defun pgg-gpg-select-matching-key (message-keys secret-keys) "Choose a key from MESSAGE-KEYS that matches one of the keys in SECRET-KEYS." Index: lisp/gnus/pgg-def.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/gnus/pgg-def.el,v retrieving revision 1.7 diff -u -r1.7 pgg-def.el --- lisp/gnus/pgg-def.el 6 Aug 2005 19:51:42 -0000 1.7 +++ lisp/gnus/pgg-def.el 5 Oct 2005 16:09:17 -0000 @@ -3,6 +3,7 @@ ;; Copyright (C) 1999, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: Daiki Ueno +;; Symmetric encryption added by: Sascha Wilde ;; Created: 1999/11/02 ;; Keywords: PGP, OpenPGP, GnuPG @@ -83,6 +84,9 @@ (defvar pgg-scheme nil "Current scheme of PGP implementation.") + +(defconst pgg-symmetric-encryption-schemes '(gpg) + "Schemes of PGP implementation for which symmetric encrypt is implemented.") (defmacro pgg-truncate-key-identifier (key) `(if (> (length ,key) 8) (substring ,key 8) ,key)) Index: lisp/gnus/ChangeLog =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/gnus/ChangeLog,v retrieving revision 1.388 diff -u -r1.388 ChangeLog --- lisp/gnus/ChangeLog 4 Oct 2005 22:51:06 -0000 1.388 +++ lisp/gnus/ChangeLog 5 Oct 2005 16:09:19 -0000 @@ -1,3 +1,15 @@ +2005-10-05 Sascha Wilde + + * pgg-def.el (pgg-symmetric-encryption-schemes): List of schemes + with symmetric encryption support. + + * pgg-gpg.el (pgg-gpg-encrypt-region): Added symmetric encryption. + (pgg-gpg-symmetric-key-p): New function to check for an symmetric + encrypted session key. + + * pgg.el (pgg-encrypt-symmetric,pgg-encrypt-symmetric-region): + New user commands for symmetric encryption. + 2005-10-04 Reiner Steib * mm-url.el (mm-url-predefined-programs): Add switches for curl.