home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / security / pgp / pgp22 / contrib / emacs / pgp.el2 < prev    next >
Encoding:
Text File  |  1993-03-02  |  5.1 KB  |  130 lines

  1. Newsgroups: alt.security.pgp
  2. From: mpf@theory.lcs.mit.edu (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 <bs891@cleveland.Freenet.Edu> 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.   /|/| .  _ |_   _   _  |   |_  _  _  ,_  |,  mpf@medg.lcs.mit.edu
  129.  / | | | (_ | | (_| (-' |   |  |  (_| | | |\  (Finger for PGP Public Key)
  130.