-----BEGIN PGP SIGNED MESSAGE----- I suppose this should be added to the the ftp site on soda. -Pete -----BEGIN PGP SIGNATURE----- Version: 2.3 iQBVAgUBLDyRNHynuL1gkffFAQGWigH6A6/aLAoAtJElN++r0qyMyD+aWQTVr7FH gGb8C+4wNozzPAmr+wIpN0oBW7Cti7U1+G4oOW+FMQKdOljAyLJxQA== =cinp -----END PGP SIGNATURE----- ;; ;; ;; From: mpf@theory.lcs.mit.edu (Michael P. Frank) ;; A quick summary: ;; ;; Key Command name Notes ;; ------- ------------------ ---------------- ;; C-c p e pgp-encrypt-region Prompts for recipient's ID. ;; C-c p d pgp-decrypt-region The first time, prompts for your pass phrase. ;; C-c p s pgp-sign-region Ditto. Uses CLEARSIG. ;; C-c p S pgp-sign-and-encrypt-region Doesn't use CLEARSIG. Encrypts also. ;; C-c p v pgp-verify-region Checks signature (in a new window). ;; C-c p p pgp-set-passphrase Sets or changes PGP pass phrase. ;; C-c p c pgp-clear-passphrase Erases pass phrase. ;; ;; Thanks are due to Bob Anderson <bs891@cleveland.Freenet.Edu> for ;; writing a very helpful explanation of how to do the guts of these ;; commands. However, any bugs are my own. ;; ;; Enjoy! ;; ;; -Mike ;; ;;; ;;; Emacs Support for PGP ;;; ;;; People can see your PGP passphrase if: ;;; * They watch over your shoulder as you type it. (It's not invisible.) ;;; * They do "ps auxww" (SunOS) on your machine while you're ;;; decrypting/signing. ;;; * They type C-h v *pgp-passphrase* in your emacs after you've ;;; entered your passphrase. ;;; ;;; Plus the system suffers from all the normal Unix and X-windows ;;; security holes. ;;; (defun pgp-set-passphrase (arg) "Prompts for PGP pass phrase." (interactive "sPGP pass phrase: ") (setq *pgp-passphrase* arg)) (defun pgp-clear-passphrase () "Clears the PGP pass phrase." (interactive) (makunbound '*pgp-passphrase*)) (defun pgp-encrypt-region (start end pgp-user-id &optional flag) "Encrypt the region using PGP. Prompts for a PGP user ID. With prefix arg, puts result in serparate window. Noninteractive args are START, END, PGP-USER-ID, and optional FLAG." (interactive "r\nsUser ID to encrypt to: \nP") (shell-command-on-region start end (concat "pgp -fea " pgp-user-id) (not flag))) (defun pgp-decrypt-region (start end &optional flag) "Decrypt the region using PGP. Prompts for the user's pass phrase, if not already known. With prefix arg, puts result in separate window. Noninteractive args are START and END and optional FLAG." (interactive "r\nP") (if (not (boundp '*pgp-passphrase*)) (call-interactively 'pgp-set-passphrase)) (shell-command-on-region start end (concat "pgp -f -z \"" *pgp-passphrase* "\"") (not flag))) (defun pgp-sign-and-encrypt-region (start end pgp-user-id &optional flag) "Sign and encrypt the region using PGP. Prompts for a user to encrypt to and a pass phrase, if not already known. With prefix arg puts result in separate window. Noninteractive args are START, END, and PGP-USER-ID, and optional FLAG." (interactive "r\nsUser ID to encrypt to: \nP") (if (not (boundp '*pgp-passphrase*)) (call-interactively 'pgp-set-passphrase)) (shell-command-on-region start end (concat "pgp -safe " pgp-user-id " -z \"" *pgp-passphrase* "\"") (not flag))) (defun pgp-sign-region (start end &optional flag) "Sign the region using PGP. Prompts for a pass phrase, if not already Known. With prefix arg puts result in separate window. Noninteractive args are START and END and optional FLAG." (interactive "r\nP") (if (not (boundp '*pgp-passphrase*)) (call-interactively 'pgp-set-passphrase)) (shell-command-on-region start end (concat "pgp -saft +clearsig=on" " -z \"" *pgp-passphrase* "\"") (not flag))) (defun pgp-verify-region (start end) "Verify the signature on the text in the given region using PGP." (interactive "r") (shell-command-on-region start end "pgp -f")) (global-set-key "\C-cpp" 'pgp-set-passphrase) (global-set-key "\C-cpc" 'pgp-clear-passphrase) (global-set-key "\C-cpe" 'pgp-encrypt-region) (global-set-key "\C-cpd" 'pgp-decrypt-region) (global-set-key "\C-cps" 'pgp-sign-region) (global-set-key "\C-cpS" 'pgp-sign-and-encrypt-region) (global-set-key "\C-cpv" 'pgp-verify-region)
;;; * They do "ps auxww" (SunOS) on your machine while you're ;;; decrypting/signing. It should be possible, with pgp 2.2, to eliminate this vulnerability.
;;; * They type C-h v *pgp-passphrase* in your emacs after you've That's easy to clear optionally. What's hard to clear is "m-x view-lossage" which has the raw characters. (I think emacs should have support for safe reading and clearing, but I don't know if rms would go for it. You'd need an excuse *other* than passwords.)
;;; * They watch over your shoulder as you type it. (It's not invisible.) Didn't read-password or read-no-echo ever make it into an emacs release? Here are some ancient bits that I use. _Mark_ <eichin@athena.mit.edu> MIT Student Information Processing Board Cygnus Support <eichin@cygnus.com>
;; ucbvax!brahms!weemba Matthew P Wiener/UCB Math Dept/Berkeley CA 94720 ;;; GNU Emacs library to read in passwords from the minibuffer ;;; Standard GNU copying privileges apply (setq minibuffer-local-no-echo-map (make-keymap)) (mapcar '(lambda (x) (aset minibuffer-local-no-echo-map (car x) (cdr x))) (cdr minibuffer-local-map)) (let ((i ?\040)) (while (< i ?\177) (aset minibuffer-local-no-echo-map i 'read-char-no-echo) (setq i (1+ i)))) (aset minibuffer-local-no-echo-map ?\177 'delete-char-no-echo) ;; This function squirrels each typed-in character away. (defun read-char-no-echo () (interactive) (setq no-echo-list (append no-echo-list (list (this-command-keys))))) ;; This function erases the last character from the input list. (defun delete-char-no-echo () (interactive) (setq no-echo-list (nreverse (cdr (nreverse no-echo-list))))) ;; This is the function the user actually uses. (defun read-string-no-echo (prompt) "Get a password from the minibuffer, prompting with PROMPT." (let (no-echo-list) (read-from-minibuffer prompt nil minibuffer-local-no-echo-map) (mapconcat 'identity no-echo-list nil))) ;;;;;;;;;;;;;;;;;;;;;This crudity is just for demo!;;;;;;;;;;;;;;;;;;;; (defun read-password () "Prompts for a password, and doesn't echo it, stores it in 'secret'" (interactive) (setq secret (read-string-no-echo "Password: "))) (defun shell-password () "Prompts for password, no echo, and sends it to the shell" (interactive) (process-send-string (get-buffer-process (current-buffer)) (concat (read-string-no-echo "Password: ") "\n")))
participants (2)
-
eichin@cygnus.com
-
Peter shipley