;ELC   
;;; Compiled by nelhage@localhost.localdomain on Tue Dec 13 12:30:43 2005
;;; from file /home/nelhage/Desktop/mailcrypt-3.5.8/mc-pgp.el
;;; in Emacs version 22.0.50.7
;;; with all optimizations.

;;; This file uses dynamic docstrings, first added in Emacs 19.29.
(if (and (boundp 'emacs-version)
	 (< (aref emacs-version (1- (length emacs-version))) ?A)
	 (or (and (boundp 'epoch::version) epoch::version)
	     (string-lessp emacs-version "19.29")))
    (error "`mc-pgp.el' was compiled for Emacs 19.29 or later"))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(require 'mailcrypt)
#@35 *PGP ID of your default identity.
(defvar mc-pgp-user-id (user-login-name) (#$ . -615))
#@22 *The PGP executable.
(defvar mc-pgp-path "pgp" (#$ . -709))
#@57 *If t, pop up the PGP output window when snarfing keys.
(defvar mc-pgp-display-snarf-output nil (#$ . -775))
#@100 *If t, always fetch missing keys. If nil, prompt user. If 'never,
never fetch keys, and don't ask.
(defvar mc-pgp-always-fetch nil (#$ . -891))
#@44 *Public keyring to use instead of default.
(defvar mc-pgp-alternate-keyring nil (#$ . -1041))
#@83 *Comment field to appear in ASCII armor output.  If nil, let PGP
use its default.
(defvar mc-pgp-comment (format "Processed by Mailcrypt %s, an Emacs/PGP interface" mc-version) (#$ . -1141))
#@42 Text for start of PGP message delimiter.
(defconst mc-pgp-msg-begin-line "^-----BEGIN PGP MESSAGE-----?$" (#$ . 1338))
#@40 Text for end of PGP message delimiter.
(defconst mc-pgp-msg-end-line "^-----END PGP MESSAGE-----?$" (#$ . 1464))
#@40 Text for start of PGP signed messages.
(defconst mc-pgp-signed-begin-line "^-----BEGIN PGP SIGNED MESSAGE-----?$" (#$ . 1584))
#@38 Text for end of PGP signed messages.
(defconst mc-pgp-signed-end-line "^-----END PGP SIGNATURE-----?$" (#$ . 1718))
#@35 Text for start of PGP public key.
(defconst mc-pgp-key-begin-line "^-----BEGIN PGP PUBLIC KEY BLOCK-----?$" (#$ . 1841))
#@33 Text for end of PGP public key.
(defconst mc-pgp-key-end-line "^-----END PGP PUBLIC KEY BLOCK-----?$" (#$ . 1969))
#@47 Regular expression matching an error from PGP
(defconst mc-pgp-error-re "^\\(ERROR:\\|WARNING:\\).*" (#$ . 2091))
#@64 Regular expression matching a PGP signature validation message
(defconst mc-pgp-sigok-re "^.*Good signature.*" (#$ . 2211))
#@53 Regular expression matching a PGP key snarf message
(defconst mc-pgp-newkey-re "^[ 	]*\\(No\\|[0-9]+\\) +new [ku].*" (#$ . 2341))
#@56 Regular expression matching a PGP missing-key messsage
(defconst mc-pgp-nokey-re "Cannot find the public key matching userid '\\(.+\\)'$" (#$ . 2477))
(byte-code "\301B\302\303!\207" [current-load-list mc-pgp-key-expected-re (lambda (#1=#:defconst-tmp-var) (defconst mc-pgp-key-expected-re #1#)) "Key matching expected Key ID \\(\\S +\\) not found"] 2)
#@41 Directory in which keyrings are stored.
(defvar mc-pgp-keydir nil (#$ . 2838))
(defalias 'mc-get-pgp-keydir #[nil "\204, \304\305!p\306\216\307\310\n\310\311\312\313\314&\210\nq\210eb\210\315\316!\210\317\320\321\224\321\225\"!+\207" [mc-pgp-keydir obuf buffer mc-pgp-path generate-new-buffer " *mailcrypt temp*" ((byte-code "q\210\302	!\207" [obuf buffer kill-buffer] 2)) call-process nil "+verbose=1" "+language=en" "-kv" "XXXXXXXXXX" re-search-forward "^Key ring:\\s *'\\(.*\\)'" file-name-directory buffer-substring-no-properties 1] 9])
#@143 Association list mapping PGP IDs to canonical "keys".  A "key"
is a pair (USER-ID . KEY-ID) which identifies the canonical IDs of the
PGP ID.
(defvar mc-pgp-key-cache nil (#$ . 3394))
(defalias 'mc-pgp-lookup-key #[(str) "\306\232?\205\220 \307 \310P\311	\"\243\312\313p\314\211\211\204\211 \315\216\316\317!\320\314\f\314\321\322&\210\fq\210eb\210\204\210 \323\314\324#\203\210 \325\326\224\326\225\"\327\325\330\224\330\225\"PB\331\224\331\225\214\n}\210eb\210\323\314\324#\203} \314\202\204 B	B)\202A )\210.\207" [str mc-pgp-key-cache key-end key-start buffer obuf "***** CONVENTIONAL *****" mc-get-pgp-keydir "secring" assoc "^\\(\\(pub\\|sec\\)\\s +[^/]+/\\(\\S *\\)\\s +\\S +\\s +\\(.*\\)\\)$" "REVOKED" nil ((byte-code "\203 \302!\210	q\207" [buffer obuf kill-buffer] 2)) generate-new-buffer " *mailcrypt temp" call-process "+language=en" "-kv" re-search-forward t buffer-substring-no-properties 4 "0x" 3 1 revoke-regexp key-regexp result keyring mc-pgp-path] 9])
(defalias 'mc-pgp-generic-parser #[(result) "\304eb\210	\305=\204& \304\306\307p\"\203 \310\311!\210\202W \306\np\312\313	\"#\210\202W \314\304\311#\2032 \304\202W eb\205W \314\315\304\311#\205W \305\224\211\205W db\205W \316\317\304\311#\205W \305\225B)\207" [start result mc-pgp-error-re mc-pgp-nokey-re nil 0 mc-message "^Error: +Bad pass phrase\\.$" mc-deactivate-passwd t format "PGP exited with status %d" re-search-forward "-----BEGIN PGP.*-----$" re-search-backward "^-----END PGP.*-----\n"] 7])
(defalias 'mc-pgp-encrypt-region #[(recipients start end &optional id sign) "\306	!\np\307\211\211\211\211\211\211012345\310\311\312\313F16\203. \314\202/ \3153\316\3173\"26\203C \3201B17\203R \316\3217\"1B18\203c \3221\316\3238\"C\"1\n\324=\204\271 \n\204x 9\204x \325\326!\203\271 \327\330:\206\202 ;!\2110\204\215 \331\332!\210\3330A\316\3340@0A#\"1\335\3360AE\2441\337\340\341\"\210\316\34230@#2\202\273 \3240\204\306 \330;!06\203\330 <\203\330 0A6B6\32216\"1\343\3442\"\210\345=>?1\3465&\2125q\210eb\210\347@\307\327#\203M\f\203\331\350!\210\351\352\224\352\225\"A\324=\204BA\204+\325\316\353\"!\203B\354\307B!\2104q\210\3556=>:$\202X\356@5\"\210\307\202X\f\205X\343\3572\"\210\327.\f\207" [process-environment mc-buffer-name mc-pgp-always-sign pgp-id result passwd get-buffer-create nil "+encrypttoself=off +verbose=1" "+batchmode" "+language=en" "-fat" "Encrypting" "Armoring" format "%s..." "-e" "+comment=%s" append "+pubring=%s" never y-or-n-p "Sign the message? " t mc-pgp-lookup-key error "No key available for signing." mc-activate-passwd "PGP passphrase for %s (%s): " "-s" "-u" setenv "PGPPASSFD" "0" "%s+signing as %s ..." message "%s" mc-process-region mc-pgp-generic-parser re-search-forward "This should never happen." buffer-substring-no-properties 1 "Key for '%s' not found; try to fetch? " mc-pgp-fetch-key mc-pgp-encrypt-region mc-message "%s Done." key args msg action obuf buffer recipients mc-pgp-comment mc-pgp-alternate-keyring sign id mc-pgp-user-id mc-encrypt-for-me start end mc-pgp-path mc-pgp-nokey-re mc-pgp-always-fetch] 12])
(defalias 'mc-pgp-decrypt-parser #[(result) "eb\210\301=\203 \302\303!\210\304\305!\203 \301\225b\210`dB\207\306=\203H \302\307!\210\310\224\310\225=\203: \304\311!\203D \301\225b\210\202D \304\312!\203D \301\225b\210`dB\207\313\207" [result 0 re-search-forward "^Signature made.*\n" looking-at "\nWARNING:  Because this public key.*\n.*\n.*\n" 1 "\\(\\(^File is conven.*\\)?Just a moment\\.+\\)\\|\\(^\\.\\)" 2 "\nFile has signature.*\\(\n.*\n\\)*\nWARNING:.*\n" "Pass phrase appears good\\. \\." nil] 2])
(defalias 'mc-pgp-decrypt-region #[(start end &optional id) "\306	!\307\211\211\211\211\211123\310 \210\3114\206  5!\2111\203= \3121A4\2059 \313\3141@1A#\"\202B \3124\315\"\211\203L \316\317\320\"\210\32126\203` \3222\313\3236\"C\"2\324\325!\210\32678\f92\3273&\211\203\331 \324\330!\210\2123q\210eb\210\331:\307\332#\203\226 \333\334\335\224\335\225\"P)\n\203\312 ;\336=\204\312 ;\204\260 \337\313\340\n\"!\203\312 \341\307\nB!\203\312 \342 \210\343\335!\210\344784#\202{\345:3\"\210\332\346=B\202{\2123q\205eb\205\331\347\307\332#\205\311\350\334\335\224\335\225\"P!\211\2054\2051\232?)\203\34478A#\202{\2123q\205&eb\205&\331\351\307\332#)\203=1\2043\352\332!\210\34478\353#\202{\2123q\205Neb\205N\331\354\307\332#)\203\\\345<3\355#\202{\3563!\210\345\3573\"\203p\352\332!\210\202x\345<3\360#\210\307\211B.\207" [process-environment mc-buffer-name pgp-id result passwd new-key get-buffer-create nil undo-boundary mc-pgp-lookup-key mc-activate-passwd format "PGP passphrase for %s (%s): " "PGP passphrase for conventional decryption: " setenv "PGPPASSFD" "0" ("+verbose=1" "+batchmode" "+language=en" "-f") append "+pubring=%s" message "Decrypting..." mc-process-region mc-pgp-decrypt-parser "Decrypting... Done." re-search-forward t "0x" buffer-substring-no-properties 1 never y-or-n-p "Key %s not found; attempt to fetch? " mc-pgp-fetch-key undo-start undo-more mc-pgp-decrypt-region mc-message 0 "^Key for user ID:.*\n.*Key ID \\([0-9A-F]+\\)" "0x" "^File is conventionally encrypted" mc-deactivate-passwd "***** CONVENTIONAL *****" "Unsupported packet format" "Not encrypted for PGP 2.6" mc-display-buffer "^Error: +Bad pass phrase\\.$" "Error decrypting buffer" key args buffer id mc-pgp-user-id mc-pgp-alternate-keyring start end mc-pgp-path mc-pgp-key-expected-re mc-pgp-always-fetch mc-pgp-error-re] 9])
(defalias 'mc-pgp-sign-region #[(start end &optional id unclear) "\306	!\307\211\211\310 \206 !!\211\204 \311\312!\210\313\nA\314\315\n@\nA#\"\316\317\320\"\210\321\322\323\314\324\"\203= \325\202> \326\"\327\330\nA\257#\203S \314\331#\"B\332\333\n@\"\210\334$%\f&\335&\205p \332\336\n@\"\210\337-\207" [process-environment mc-buffer-name key args passwd buffer get-buffer-create nil mc-pgp-lookup-key error "No key available for signing." mc-activate-passwd format "PGP passphrase for %s (%s): " setenv "PGPPASSFD" "0" "-fast" "+verbose=1" "+language=en" "+clearsig=%s" "off" "on" "+batchmode" "-u" "+comment=%s" message "Signing as %s ..." mc-process-region mc-pgp-generic-parser "Signing as %s ... Done." t id mc-pgp-user-id unclear mc-pgp-comment start end mc-pgp-path] 9])
(defalias 'mc-pgp-verify-parser #[(result) "\303=\203 \304	p\305#\210\306\207\307=\203 \304\np\310#\210\311\207\304\np\312\313\"#\210\311\207" [result mc-pgp-sigok-re mc-pgp-error-re 0 mc-message "Good signature" t 1 "Bad signature" nil format "PGP exited with status %d"] 6])
(defalias 'mc-pgp-verify-region #[(start end &optional no-fetch) "\306!p\307\211\310\203 \311\n\312\313\"C\"\314\315!\210\316\307\n\317\f&\2031 \320\202\207 \212\fq\210eb\210\204 \321\307\320#\203 \322\323\324\224\324\225\"P\211\203  \325=\204  \204h \326\312\327	\"!\203 \330\307	B!\203 q\203 \331\320#\202\206 \332!\f\"\210\307),\207" [mc-buffer-name pgp-id args obuf buffer mc-pgp-alternate-keyring get-buffer-create nil ("+verbose=1" "+batchmode" "+language=en" "-f") append format "+pubring=%s" message "Verifying..." mc-process-region mc-pgp-verify-parser t re-search-forward "0x" buffer-substring-no-properties 1 never y-or-n-p "Key %s not found; attempt to fetch? " mc-pgp-fetch-key mc-pgp-verify-region mc-message start end mc-pgp-path no-fetch mc-pgp-key-expected-re mc-pgp-always-fetch mc-pgp-error-re] 8])
(defalias 'mc-pgp-insert-public-key #[(&optional id) "\306!\307\206 \f\310\311\312\313\257\203 \314\315\"	B\203. \316	\314\317\"C\"\320``\307	\321\n&\205B \322\323\n\"\210\324*\207" [mc-buffer-name args buffer id mc-pgp-user-id mc-pgp-comment get-buffer-create nil "+verbose=1" "+batchmode" "+language=en" "-kxaf" format "+comment=%s" append "+pubring=%s" mc-process-region mc-pgp-generic-parser mc-message "Key for user ID: .*" t mc-pgp-alternate-keyring mc-pgp-path] 8])
(defalias 'mc-pgp-snarf-parser #[(result) "\301=\207" [result 0] 2])
(defalias 'mc-pgp-snarf-keys #[(start end) "\306!\307\211\310\f\203 \311	\312\313\f\"C\"\314\315!\210\316\307	\317&\203\\ \212q\210eb\210\320\307\321#\205X \203C \322!\210\323\324\224\324\225\"\211\325\232\203T \326\202X \327\n!@)\202h \322!\210\330\331#\210\326+\207" [mc-buffer-name args tmpstr buffer mc-pgp-alternate-keyring start get-buffer-create nil ("+verbose=1" "+batchmode" "+language=en" "-kaf") append format "+pubring=%s" message "Snarfing..." mc-process-region mc-pgp-snarf-parser re-search-forward t mc-display-buffer buffer-substring-no-properties 1 "No" 0 read-from-string mc-message "Error snarfing PGP keys" end mc-pgp-path mc-pgp-newkey-re mc-pgp-display-snarf-output mc-pgp-error-re] 9])
(defalias 'mc-scheme-pgp #[nil "\306\307B\310\311B\312\313B\314\315B\316\317B\320\321B\322B\323	B\324\nB\325B\326\fB\327B\330B\257\207" [mc-pgp-msg-begin-line mc-pgp-msg-end-line mc-pgp-signed-begin-line mc-pgp-signed-end-line mc-pgp-key-begin-line mc-pgp-key-end-line encryption-func mc-pgp-encrypt-region decryption-func mc-pgp-decrypt-region signing-func mc-pgp-sign-region verification-func mc-pgp-verify-region key-insertion-func mc-pgp-insert-public-key snarf-func mc-pgp-snarf-keys msg-begin-line msg-end-line signed-begin-line signed-end-line key-begin-line key-end-line user-id mc-pgp-user-id] 14])
#@72 *If t, always attempt to fetch missing keys, or never fetch if
'never.
(defvar mc-pgp-always-fetch nil (#$ . -12844))
#@35 The URL to pass to the keyserver.
(defvar mc-pgp-keyserver-url-template "/pks/lookup?op=get&search=%s" (#$ . 12968))
#@25 Host name of keyserver.
(defvar mc-pgp-keyserver-address "pgp.ai.mit.edu" (#$ . 13091))
#@50 Port on which the keyserver's HTTP daemon lives.
(defvar mc-pgp-keyserver-port 11371 (#$ . 13185))
#@63 *Timeout, in seconds, for any particular key fetch operation.
(defvar mc-pgp-fetch-timeout 20 (#$ . -13290))
#@87 *List of strings which are filenames of public keyrings to search
when fetching keys.
(defvar mc-pgp-fetch-keyring-list nil (#$ . -13405))
#@70 Return the first key block in BUF as a string, or nil if none found.
(defalias 'mc-pgp-buffer-get-key #[(buf) "\212\304	q\210eb\210\305\n\304\306#\205% \307\224\211\205% \305\304\306#\205% \310\307\225\"*\207" [start buf mc-pgp-key-begin-line mc-pgp-key-end-line nil re-search-forward t 0 buffer-substring-no-properties] 4 (#$ . 13550)])
(put 'mc-pgp-buffer-get-key 'byte-optimizer 'byte-compile-inline-expand)
(defalias 'mc-pgp-fetch-from-keyrings #[(id) "\306\211\211\307\216\310\311A\206 @\"\210	\204\201 \f\203\201 \312\313!\314\315\316\317\320\321\322\f@\"A\2065 @&\323\n\324\"\210\325\n!\326=\203M \327\n\330\"\210\202= \212\306q\210eb\210\331\306\332#\205y \333\224\211\205y \331 \306\332#\205y \334\333\225\"+\fA\202 	-\207" [mc-pgp-fetch-keyring-list key proc buf keyring-list id nil ((byte-code "\203 \302!\210	\203 \303	!\304=\203 \305	!\210\302\207" [buf proc kill-buffer process-status run interrupt-process] 2)) message "Fetching %s from keyrings..." generate-new-buffer " *mailcrypt temp*" start-process "*PGP*" "-kxaf" "+verbose=0" "+batchmode" format "+pubring=%s" process-send-string "\n" process-status run accept-process-output 5 re-search-forward t 0 buffer-substring-no-properties mc-pgp-path start mc-pgp-key-begin-line mc-pgp-key-end-line] 10])
(defalias 'mc-pgp-fetch-from-http #[(id) "\306\211\307\216\310\311\nA\206 \n@#\210\312\313!\314\315	\f$\316\317\320\nA\206) \n@\"\321Q\"\210\322!\323=\203> \324\"\204. 	\212\306	q\210eb\210\325\306\326#\205j \327\224\211\205j \325\306\326#\205j \330\327\225\".\207" [connection buf id mc-pgp-keyserver-address mc-pgp-keyserver-port mc-pgp-keyserver-url-template nil ((byte-code "\203 \302!\210	\203 \303	!\210\302\207" [buf connection kill-buffer delete-process] 2)) message "Fetching %s via HTTP to %s..." generate-new-buffer " *mailcrypt temp*" open-network-stream "*key fetch*" process-send-string "GET " format "\n" process-status open accept-process-output re-search-forward t 0 buffer-substring-no-properties mc-pgp-fetch-timeout start mc-pgp-key-begin-line mc-pgp-key-end-line] 6])
(defalias 'mc-pgp-fetch-from-finger #[(id) "\305\211\211\211\306\216\f@\2055 \307\310\f@\"\2055 \311\312\f@\"\210\f@\313\224\313\225O\f@\314\224\314\225O\315\316!\305\317\320\217-\207" [host user connection buf id nil ((byte-code "\203 \302!\210	\203 \303	!\210\302\207" [buf connection kill-buffer delete-process] 2)) string-match "^\\(.+\\)@\\([^@]+\\)$" message "Trying finger %s..." 1 2 generate-new-buffer " *mailcrypt temp*" (byte-code "\306\307	\310$\311\n\312\313Q\"\210\314\n!\315=\203 \316\n\f\"\204 \212\317q\210eb\210\320\317\321#\205G \322\224\211\205G \320\317\321#\205G \323\322\225\"+\207" [buf host connection user mc-pgp-fetch-timeout start open-network-stream "*key fetch*" 79 process-send-string "/W " "\n" process-status open accept-process-output nil re-search-forward t 0 buffer-substring-no-properties mc-pgp-key-begin-line mc-pgp-key-end-line] 5) ((error))] 4])
#@202 List of methods to try when attempting to fetch a key.  Each
element is a function to call with an ID as argument.  See the
documentation for the function mc-pgp-fetch-key for a description of
the ID.
(defvar mc-pgp-fetch-methods '(mc-pgp-fetch-from-keyrings mc-pgp-fetch-from-finger mc-pgp-fetch-from-http) (#$ . 16600))
#@428 Attempt to fetch a key for addition to PGP keyring.  Interactively,
prompt for string matching key to fetch.

Non-interactively, ID must be a pair.  The CAR must be a bare Email
address and the CDR a keyID (with "0x" prefix).  Either, but not
both, may be nil.

Return t if we think we were successful; nil otherwise.  Note that nil
is not necessarily an error, since we may have merely fired off an Email
request for the key.
(defalias 'mc-pgp-fetch-key #[(&optional id) "\306\211\211\211\211\204 \307\310!\306B\f\2041 \2031 @!A\202 \f;\204> \311\312!\210\306\202C \313\216\314\213).\207" [mc-pgp-fetch-methods args buf proc key process-connection-type nil read-string "Fetch key for: " message "Key not found." ((byte-code "\203 \301!\210\301\207" [buf kill-buffer] 2)) ((byte-code "\306\307!\310!\210\311 \312 \313\245W\203 \314\312 \313\245\311 Z!\210\315\n\203+ \316	\317\320\n\"C\"\321\322\323	%\324\f\325\"\210\324\f\"\210\324\f\326\"\210\327\f!\210q\210\330\f!\331=\203\\ \332\f\333\"\210eb\210\202I \334\335!\205\223 \316	\336\"\321\322\337	%\324\f\340\"\210\324\f\"\210\324\f\341\"\210\327\f!\210\330\f!\331=\203\222 \332\f\333\"\210\202\202 \342\207" [buf args mc-pgp-alternate-keyring mc-pgp-path proc key generate-new-buffer " *PGP Key Info*" pop-to-buffer window-height frame-height 2 enlarge-window ("-f" "+verbose=0" "+batchmode") append format "+pubring=%s" apply start-process "*PGP*" process-send-string "\n" "\n" process-send-eof process-status run accept-process-output 5 y-or-n-p "Add this key to keyring? " ("-ka") "*PGP*" "\n" "\n" t] 6)) methods id] 6 (#$ . 16929) nil])
