Annotation of pgp/contrib/emacs/pgp.el2, revision 1.1.1.1

1.1       root        1: Newsgroups: alt.security.pgp
                      2: From: [email protected] (Michael P. Frank)
                      3: Subject: Here's a simple Emacs interface to PGP 2.1. (w. bug fix)
                      4: Organization: MIT Laboratory for Computer Science
                      5: Distribution: alt
                      6: Date: Tue, 2 Mar 1993 23:14:16 GMT
                      7: 
                      8: (This supersedes an earlier posting that had inconsistent function names
                      9: due to some last-minute changes.)
                     10: 
                     11: Hi, PGP fans.
                     12: 
                     13: Below are some new emacs commands I wrote, for using PGP 2.1 to easily
                     14: encrypt/decrypt/sign/verify regions of text under GNU emacs.  Perhaps
                     15: this has already been done, but I haven't seen it anywhere.
                     16: 
                     17: To use a command, select a region of text to manipulate, then execute
                     18: the command.  The region of text will be passed as input to pgp with
                     19: the appropriate options, and pgp's output will appear in its place.
                     20: (Unwanted parts of this output, such as PGP status information, can
                     21: usually be easily deleted by hand.) If you make a mistake you can
                     22: always undo the operation (with C-_, C-x u, or M-x undo).  If you
                     23: precede a command with C-u, the output will go to a separate emacs
                     24: window instead of replacing the input text.
                     25: 
                     26: A quick summary:
                     27: 
                     28: Key      Command name          Notes
                     29: -------          ------------------    ----------------
                     30: C-c p e   pgp-encrypt-region   Prompts for recipient's ID.
                     31: C-c p d          pgp-decrypt-region    The first time, prompts for your pass phrase.
                     32: C-c p s          pgp-sign-region              Ditto. Uses CLEARSIG.
                     33: C-c p S          pgp-sign-and-encrypt-region  Doesn't use CLEARSIG. Encrypts also.
                     34: C-c p v          pgp-verify-region            Checks signature (in a new window).
                     35: C-c p p          pgp-set-passphrase    Sets or changes PGP pass phrase.
                     36: C-c p c          pgp-clear-passphrase  Erases pass phrase.
                     37: 
                     38: Thanks are due to Bob Anderson <[email protected]> for
                     39: writing a very helpful explanation of how to do the guts of these
                     40: commands.  However, any bugs are my own.
                     41: 
                     42: Enjoy!
                     43: 
                     44: -Mike
                     45: 
                     46: ---------------- program starts here ---------------
                     47: ;;;
                     48: ;;; Emacs Support for PGP
                     49: ;;;
                     50: ;;; People can see your PGP passphrase if:
                     51: ;;; * They watch over your shoulder as you type it. (It's not invisible.)
                     52: ;;; * They do "ps auxww" (SunOS) on your machine while you're
                     53: ;;;     decrypting/signing.
                     54: ;;; * They type C-h v *pgp-passphrase* in your emacs after you've
                     55: ;;;     entered your passphrase.
                     56: ;;;
                     57: ;;; Plus the system suffers from all the normal Unix and X-windows
                     58: ;;; security holes.
                     59: ;;; 
                     60: 
                     61: (defun pgp-set-passphrase (arg)
                     62:   "Prompts for PGP pass phrase."
                     63:   (interactive "sPGP pass phrase: ")
                     64:   (setq *pgp-passphrase* arg))
                     65: 
                     66: (defun pgp-clear-passphrase ()
                     67:   "Clears the PGP pass phrase."
                     68:   (interactive)
                     69:   (makunbound *pgp-passphrase*))
                     70: 
                     71: (defun pgp-encrypt-region (start end pgp-user-id &optional flag)
                     72:   "Encrypt the region using PGP. Prompts for a PGP user ID.
                     73: With prefix arg, puts result in serparate window.
                     74: Noninteractive args are START, END, PGP-USER-ID, and optional FLAG."
                     75:   (interactive "r\nsUser ID to encrypt to: \nP")
                     76:   (shell-command-on-region start end (concat "pgp -fea " pgp-user-id)
                     77:                           (not flag)))
                     78: 
                     79: (defun pgp-decrypt-region (start end &optional flag)
                     80:   "Decrypt the region using PGP. Prompts for the user's pass phrase,
                     81: if not already known.  With prefix arg, puts result in separate window.
                     82: Noninteractive args are START and END and optional FLAG."
                     83:   (interactive "r\nP")
                     84:   (if (not (boundp '*pgp-passphrase*))
                     85:       (call-interactively 'pgp-set-passphrase))
                     86:   (shell-command-on-region start end
                     87:                           (concat "pgp -f -z \"" *pgp-passphrase*
                     88:                                   "\"")
                     89:                           (not flag)))
                     90: 
                     91: (defun pgp-sign-and-encrypt-region (start end pgp-user-id &optional flag)
                     92:   "Sign and encrypt the region using PGP. Prompts for a user to
                     93: encrypt to and a pass phrase, if not already known.
                     94: With prefix arg puts result in separate window. 
                     95: Noninteractive args are START, END, and PGP-USER-ID, and optional FLAG."
                     96:   (interactive "r\nsUser ID to encrypt to: \nP")
                     97:   (if (not (boundp '*pgp-passphrase*))
                     98:       (call-interactively 'pgp-set-passphrase))
                     99:   (shell-command-on-region start end (concat "pgp -safe " pgp-user-id
                    100:                                             " -z \"" *pgp-passphrase*
                    101:                                             "\"") (not flag)))
                    102: 
                    103: (defun pgp-sign-region (start end &optional flag)
                    104:   "Sign the region using PGP. Prompts for a pass phrase, if not already
                    105: Known. With prefix arg puts result in separate window.
                    106: Noninteractive args are START and END and optional FLAG."
                    107:   (interactive "r\nP")
                    108:   (if (not (boundp '*pgp-passphrase*))
                    109:       (call-interactively 'pgp-set-passphrase))
                    110:   (shell-command-on-region start end (concat "pgp -saft +clearsig=on"
                    111:                                             " -z \"" *pgp-passphrase* "\"")
                    112:                           (not flag)))
                    113: 
                    114: (defun pgp-verify-region (start end)
                    115:   "Verify the signature on the text in the given region using PGP."
                    116:   (interactive "r")
                    117:   (shell-command-on-region start end "pgp -f"))
                    118: 
                    119: (global-set-key "\C-cpp" 'pgp-set-passphrase)
                    120: (global-set-key "\C-cpc" 'pgp-clear-passphrase)
                    121: (global-set-key "\C-cpe" 'pgp-encrypt-region)
                    122: (global-set-key "\C-cpd" 'pgp-decrypt-region)
                    123: (global-set-key "\C-cps" 'pgp-sign-region)
                    124: (global-set-key "\C-cpS" 'pgp-sign-and-encrypt-region)
                    125: (global-set-key "\C-cpv" 'pgp-verify-region)
                    126: --
                    127:    , ,                       __               MIT Lab for Computer Science
                    128:   /|/| .  _ |_   _   _  |   |_  _  _  ,_  |,  [email protected]
                    129:  / | | | (_ | | (_| (-' |   |  |  (_| | | |\  (Finger for PGP Public Key)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.