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

1.1       root        1: Newsgroups: alt.security.pgp
                      2: From: [email protected] (Michael P. Frank)
                      3: Subject: New version of Emacs interface to PGP
                      4: In-Reply-To: [email protected]'s message of Wed, 3 Mar 1993 14:06:47 +0000
                      5: Organization: MIT Laboratory for Computer Science
                      6: Distribution: alt
                      7: Date: Thu, 4 Mar 1993 22:01:03 GMT
                      8: 
                      9: Here's a somewhat improved version of my Emacs interface to PGP,
                     10: pgp.el-0.2.
                     11: 
                     12: Some bugs are fixed since the last version. The main improvement is
                     13: that if you have ange-ftp loaded, then pgp-set-passphrase will use it
                     14: to prompt for your passphrase invisibly.
                     15: 
                     16: After loading this up, type C-c p h for a usage summary.
                     17: 
                     18: Consider this a beta release. Some egregious known bugs are:
                     19: 
                     20:        * Other users on the system can see your pass phrase using
                     21:                "ps" and fortuitous timing.
                     22:        * After decrypting, pgp's output "Pass phrase is good." is
                     23:                stuck on the beginning of the plaintext.
                     24: 
                     25: Mike
                     26: ========== cut here =============
                     27: ;;;
                     28: ;;; pgp.el-0.2 -- Emacs support for PGP 2.1
                     29: ;;;
                     30: ;;; Changes from 0.1:
                     31: ;;;   pgp-clear-passphrase bug fixed.
                     32: ;;;   If ange-ftp is loaded, password is entered invisibly.
                     33: ;;;   On-line help.
                     34: ;;;   Immediately after signing in place, C-c p k can be used to delete
                     35: ;;;     pgp status garbage.
                     36: ;;;
                     37: ;;; 0.1 Changes from 0.0:
                     38: ;;;   Inconsistent naming of pgp-set-passphrase fixed.
                     39: ;;;
                     40: ;;;          WARNING: Security Holes!
                     41: ;;;
                     42: ;;; People can see your PGP passphrase if:
                     43: ;;; * You don't have ange-ftp and they see you typing in your passphrase.
                     44: ;;; * They (intentionally or accidentally) do a "ps" (with appropriate options)
                     45: ;;;     on your machine while you're decrypting/signing.
                     46: ;;; * They type C-h v pgp-passphrase after you've entered it.
                     47: ;;;
                     48: ;;; Plus the system suffers from all the normal Unix and X-windows
                     49: ;;; security holes.
                     50: ;;; 
                     51: ;;; Please report any bugs to [email protected].
                     52: ;;; You can finger me for my public key.
                     53: ;;;
                     54: 
                     55: (defvar pgp-passphrase nil
                     56:   "Variable used internally by the Emacs PGP interface to hold
                     57: the user's pass phrase.")
                     58: 
                     59: (defun pgp-set-passphrase ()
                     60:   "Prompts for PGP pass phrase. If ange-ftp is loaded, password is invisible."
                     61:   (interactive)
                     62:   (setq pgp-passphrase
                     63:        (if (boundp 'ange-ftp-version)
                     64:            (ange-ftp-read-passwd "PGP pass phrase (invisible): ")
                     65:          (read-string "PGP pass phrase (not invisible): "))))
                     66: 
                     67: (defun pgp-clear-passphrase ()
                     68:   "Clears the PGP pass phrase."
                     69:   (interactive)
                     70:   (setq pgp-passphrase nil))
                     71: 
                     72: (defun pgp-ensure-passphrase ()
                     73:   "Not an interactive command. If the passphrase is not set, prompts for it."
                     74:   (if (not pgp-passphrase)
                     75:       (call-interactively 'pgp-set-passphrase)))
                     76: 
                     77: (defun pgp-encrypt-region (start end pgp-user-id &optional flag)
                     78:   "Encrypt the region using PGP. Prompts for a PGP user ID.
                     79: With prefix arg, puts result in serparate window.
                     80: Noninteractive args are START, END, PGP-USER-ID, and optional FLAG."
                     81:   (interactive "r\nsUser ID to encrypt to: \nP")
                     82:   (shell-command-on-region start end (concat "pgp -fea " pgp-user-id)
                     83:                           (not flag)))
                     84: 
                     85: (defun pgp-decrypt-region (start end &optional flag)
                     86:   "Decrypt the region using PGP. Prompts for the user's pass phrase,
                     87: if not already known.  With prefix arg, puts result in separate window.
                     88: Noninteractive args are START and END and optional FLAG."
                     89:   (interactive "r\nP")
                     90:   (pgp-ensure-passphrase)
                     91:   (shell-command-on-region start end
                     92:                           (concat "pgp -f -z \"" pgp-passphrase "\"")
                     93:                           (not flag)))
                     94: 
                     95: (defun pgp-sign-and-encrypt-region (start end pgp-user-id &optional flag)
                     96:   "Sign and encrypt the region using PGP. Prompts for a user to
                     97: encrypt to and a pass phrase, if not already known.
                     98: With prefix arg puts result in separate window. 
                     99: Noninteractive args are START, END, and PGP-USER-ID, and optional FLAG."
                    100:   (interactive "r\nsUser ID to encrypt to: \nP")
                    101:   (pgp-ensure-passphrase)
                    102:   (shell-command-on-region start end (concat "pgp -safe " pgp-user-id
                    103:                                             " -z \"" pgp-passphrase "\"")
                    104:                           (not flag)))
                    105: 
                    106: (defun pgp-sign-region (start end &optional flag)
                    107:   "Sign the region using PGP. Prompts for a pass phrase, if not already
                    108: Known. With prefix arg puts result in separate window.
                    109: Noninteractive args are START and END and optional FLAG."
                    110:   (interactive "r\nP")
                    111:   (pgp-ensure-passphrase)
                    112:   (shell-command-on-region start end (concat "pgp -saft +clearsig=on"
                    113:                                             " -z \"" pgp-passphrase "\"")
                    114:                           (not flag)))
                    115: 
                    116: (defun pgp-verify-region (start end)
                    117:   "Verify the signature on the text in the given region using PGP."
                    118:   (interactive "r")
                    119:   (shell-command-on-region start end "pgp -f"))
                    120: 
                    121: ;; kill the status information immediately after running PGP on a region
                    122: ;; (not very robust yet).
                    123: (fset 'pgp-kill-status
                    124:    "-----
                    125: 
                    126: (defun pgp-describe ()
                    127:   "Describe the PGP package.
                    128: 
                    129: Quick usage summary:
                    130: 
                    131: Default
                    132: Key
                    133: Binding  Command name                 Description
                    134: =======  ===========================  =========================================
                    135: C-c p p  pgp-set-passphrase           Prompts for entry of passphrase. With
                    136:                                        ange-ftp loaded, this is invisible.
                    137: C-c p c  pgp-clear-passphrase         Clears the passphrase from emacs memory.
                    138:                                        (Not very thoroughly; see below.)
                    139: C-c p e  pgp-encrypt-region           Prompts for recipient. Output in place
                    140:                                        unless prefixed.
                    141: C-c p d  pgp-decrypt-region           Prompts for passphrase if unknown.
                    142:                                        Output in place unless prefixed.
                    143: C-c p s  pgp-sign-region              Uses CLEARSIG. Prompts for passphrase
                    144:                                        if unknown. Output in place unless C-u.
                    145: C-c p S  pgp-sign-and-encrypt-region  Prompts for recipient and passphrase if
                    146:                                        unknown. Output in place unless C-u.
                    147: C-c p v  pgp-verify-region            Checks signature for validity. Output in
                    148:                                        separate window.
                    149: C-c p k  pgp-kill-status              Done immediately after C-c p s,
                    150:                                        kills the PGP status information.
                    151: C-c p h  pgp-describe                 Show this documentation.
                    152: 
                    153: WARNING: Security Holes:
                    154: People can see your PGP passphrase if:
                    155: * You don't have ange-ftp and they see you typing in your passphrase.
                    156: * They (intentionally or accidentally) do a \"ps\" (with appropriate options)
                    157:     on your machine while you're decrypting/signing.
                    158: * They type C-h v pgp-passphrase after you've entered it.
                    159: 
                    160: Plus the system suffers from all the normal Unix and X-windows
                    161: security holes.
                    162: 
                    163: More documentation to come."
                    164:   (interactive)
                    165:   (describe-function 'pgp-describe))
                    166: 
                    167: (global-set-key "\C-cpp" 'pgp-set-passphrase)
                    168: (global-set-key "\C-cpc" 'pgp-clear-passphrase)
                    169: (global-set-key "\C-cpe" 'pgp-encrypt-region)
                    170: (global-set-key "\C-cpd" 'pgp-decrypt-region)
                    171: (global-set-key "\C-cps" 'pgp-sign-region)
                    172: (global-set-key "\C-cpS" 'pgp-sign-and-encrypt-region)
                    173: (global-set-key "\C-cpv" 'pgp-verify-region)
                    174: (global-set-key "\C-cpk" 'pgp-kill-status)
                    175: (global-set-key "\C-cph" 'pgp-describe)
                    176: (global-set-key "\C-cp?" 'pgp-describe)
                    177: --
                    178:    , ,                       __               MIT Lab for Computer Science
                    179:   /|/| .  _ |_   _   _  |   |_  _  _  ,_  |,  [email protected]
                    180:  / | | | (_ | | (_| (-' |   |  |  (_| | | |\  (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.