;ELC ;;; compiled by gsstark@portnoy on Fri Feb 2 23:53:58 1996 ;;; from file /afs/sipb.mit.edu/contrib/emacs/packages/mailcrypt-3.3/mc-remail.el ;;; emacs version 19.30.1. ;;; bytecomp version FSF 2.10 ;;; optimization is on. ;;; this file uses opcodes which do not exist in Emacs 18. (if (and (boundp 'emacs-version) (or (and (boundp 'epoch::version) epoch::version) (string-lessp emacs-version "19.29"))) (error "`mc-remail.el' was compiled for Emacs 19.29 or later")) (byte-code "!!!\"\"ʏ" [require mail-utils sendmail mailcrypt autoload mc-cleanup-recipient-headers "mc-toplev" mc-encrypt-message nil (byte-code "!" [require mailalias] 2) ((error))] 3) #@381 Create a remailer structure. ADDR is the remailer's Email address, a string. ID is the remailer's public key ID (a string) or nil if the same as ADDR. PROP is a list of properties, as strings. PRE-ENCR is a list of pre-encryption functions. Its elements will be called with the remailer structure itself as argument. POST-ENCR is similar, but for post-encryption functions. (defalias 'mc-remailer-create #[(addr id prop pre-encr post-encr) " \n \f " [remailer addr id prop pre-encr post-encr] 6 (#$ . 708)]) (put (quote mc-remailer-create) (quote byte-optimizer) (quote byte-compile-inline-expand)) #@51 Test whether REMAILER is a valid remailer struct. (defalias 'mc-remailerp #[(remailer) "< =" [remailer] 2 (#$ . 1323)]) (put (quote mc-remailerp) (quote byte-optimizer) (quote byte-compile-inline-expand)) #@39 Return the Email address of REMAILER. (defalias 'mc-remailer-address #[(remailer) "A@" [remailer] 1 (#$ . 1541)]) (put (quote mc-remailer-address) (quote byte-optimizer) (quote byte-compile-inline-expand)) #@70 Return the userid with which to look up the public key for REMAILER. (defalias 'mc-remailer-userid #[(remailer) " 8 A@)!A@" [2 remailer mail-extract-address-components] 3 (#$ . 1755)]) (put (quote mc-remailer-userid) (quote byte-optimizer) (quote byte-compile-inline-expand)) #@39 Return the property list for REMAILER (defalias 'mc-remailer-properties #[(remailer) " 8" [3 remailer] 2 (#$ . 2045)]) (put (quote mc-remailer-properties) (quote byte-optimizer) (quote byte-compile-inline-expand)) #@55 Return the list of pre-encryption hooks for REMAILER. (defalias 'mc-remailer-pre-encrypt-hooks #[(remailer) " 8" [4 remailer] 2 (#$ . 2267)]) (put (quote mc-remailer-pre-encrypt-hooks) (quote byte-optimizer) (quote byte-compile-inline-expand)) #@56 Return the list of post-encryption hooks for REMAILER. (defalias 'mc-remailer-post-encrypt-hooks #[(remailer) " 8" [5 remailer] 2 (#$ . 2519)]) (put (quote mc-remailer-post-encrypt-hooks) (quote byte-optimizer) (quote byte-compile-inline-expand)) #@175 List of header fields to include in response blocks. These will be copied into the deepest layer of the response block to help you identify it when it is used to Email you. (defvar mc-response-block-included-headers (quote ("From" "To" "Newsgroups")) (#$ . 2775)) #@67 A string which marks an Email address as belonging to a remailer. (defvar mc-remailer-tag "(*REMAILER*)" (#$ . 3046)) #@475 The file containing a Levien format list of remailers. The file is read by `mc-read-levien-file' and `mc-reread-levien-file'. The file should include lines of the following form (other lines are ignored): $remailer{"NAME"} = " PROPERTIES"; PROPERTIES is a space-separated set of strings. This format is named after Raphael Levien, who maintains a list of active remailers. Do "finger remailer-list@kiwi.cs.berkeley.edu" for the latest copy of his list. (defvar mc-levien-file-name "~/.remailers" (#$ . 3171)) #@688 An alist of remailer chains defined by the user. Format is ((NAME . REMAILER-LIST) (NAME . REMAILER-LIST) ...) NAME must be a string. REMAILER-LIST may be an arbitrary sequence, not just a list. Its elements may be any of the following: 1) A remailer structure created by `mc-remailer-create'. This is the base case. 2) A string naming another remailer chain to be spliced in at this point. 3) An arbitrary Lisp form to be evaluated, which should return another REMAILER-LIST to be recursively processed and spliced in at this point. The complete alist of chains is given by the union of the two lists `mc-remailer-internal-chains' and `mc-remailer-user-chains'. (defvar mc-remailer-user-chains nil (#$ . 3708)) #@337 List of "internal" remailer chains. This variable is normally generated automatically from a human-readable list of remailers; see, for example, the function `mc-reread-levien-file'. To define your own chains, you probably want to use the variable `mc-remailer-user-chains'. See that variable's documentation for format information. (defvar mc-remailer-internal-chains nil (#$ . 4451)) #@380 A function called to generate response block text. Value should be a function taking three arguments (ADDR LINES BLOCK). ADDR is the address to which the response should be sent. LINES is the number of lines in the encrypted response block. BLOCK is the response block itself. Function should return a string to be inserted into the buffer by mc-remailer-insert-response-block. (defvar mc-remailer-user-response-block #[(addr lines block) " \"\"" [";;;\n" format "To reply to this message, take the following %d-line block, remove\n" lines "leading \"- \" constructs (if any), and place it at the top of a\n" "message to %s :\n" addr block] 6] (#$ . 4847)) #@140 *A list of your pseudonyms. This is a list of strings. Completion against it will be available when you are prompted for your pseudonym. (defvar mc-remailer-pseudonyms nil (#$ . -5525)) #@237 *Header fields which are preserved as hashmark headers when rewriting. This is a list of strings naming the preserved headers. Note that "Subject", "Newsgroups", and "To" are handled specially and should not be included in this list. (defvar mc-remailer-preserved-headers (quote ("References" "Followup-to" "In-reply-to")) (#$ . -5720)) (defalias 'mc-parse-levien-buffer #[nil "eb#Ȕȕ\"ɔɕ\n \f  b\n#D Ҕҕ\"C\" + @\f A  _ m r r\f } --\n \nD B +" [nil remailer-name remailer chains re-search-forward "^\\$remailer{\"\\(.+\\)\"}[ ]*=[ ]*\"\\(.*\\)\";" t buffer-substring-no-properties 1 2 value-end value-start address property-list name "[^ ]+" no-error append 0 "pgp" "pgp." "cpunk" "eric" (mc-generic-pre-encrypt-function) (mc-generic-post-encrypt-function) post-encr pre-encr prop id addr] 6]) #@201 Read the Levien format file specified in `mc-levien-file-name'. Return an alist of length-1 chains, one for each remailer, named after the remailer. Only include remailers supporting PGP encryption. (defalias 'mc-read-levien-file #[nil " ! ! )" [file-readable-p mc-levien-file-name find-file-read-only mc-parse-levien-buffer bury-buffer] 2 (#$ . 6643)]) #@216 Read the Levien format file specified in `mc-levien-file-name'. Place result in `mc-remailer-internal-chains'. See the documentation for the variable `mc-levien-file-name' for a description of Levien file format. (defalias 'mc-reread-levien-file #[nil " " [mc-read-levien-file mc-remailer-internal-chains] 2 (#$ . 7017) nil]) (defalias 'mc-remailer-canonicalize-elmt #[(elmt chains-alist) "< =)C; \f\"A\f\"!\f\"" [elmt remailer mc-remailer-canonicalize-chain assoc chains-alist eval] 5]) (defalias 'mc-remailer-canonicalize-chain #[(chain chains-alist) ";<\n=)\f\"Ŝ\"A\f\"\f\"\"*" [chain nil remailer mc-remailer-canonicalize-elmt chains-alist 0 append rest first mc-remailer-canonicalize-chain] 6]) (byte-code "\nB\nB" ["^\\(.+\\)" mc-field-name-regexp current-load-list "\\(.*\\(\n[ ].*\\)*\n\\)" mc-field-body-regexp] 2) #@303 Get all header fields within BOUNDS. Return as an alist ((FIELD-NAME . FIELD-BODY) (FIELD-NAME . FIELD-BODY) ...). Argument MATCHING, if present, is a regexp which each FIELD-NAME must match exactly. Matching is case-insensitive. Optional arg NUKE, if non-nil, means eliminate all fields returned. (defalias 'mc-get-fields #[(&optional matching bounds nuke) " Qĉ \n \f%\fQ\f2@A}db\n#yҔҕԔԕ\"ՔՕ{\fb\f\"5B B 5 |5 . " [t mc-field-name-regexp ":" mc-field-body-regexp nil field-end field-start body name ret header-field-regexp case-fold-search matching "^\\(" "\\)$" bounds re-search-backward move 0 buffer-substring-no-properties 1 2 string-match nuke] 7 (#$ . 7930)]) (defalias 'mc-nuke-field #[(field &optional bounds) " \n#" [mc-get-fields field bounds t] 4]) (put (quote mc-nuke-field) (quote byte-optimizer) (quote byte-compile-inline-expand)) (defalias 'mc-replace-field #[(field-name replacement header) "\n\" \nP\n\"\nP! \n @ A}eb R#  #*\n," [string-match "^[ ]" replacement " " "\n$" "\n" t regexp-quote field-name field-regexp case-fold-search header re-search-forward "^" ":" mc-field-body-regexp nil bounds field mc-get-fields] 5]) (defalias 'mc-find-main-header #[(&optional ignored) "eb !Q!ye!`!)B" [re-search-forward "^" regexp-quote mail-header-separator "\n" -1 copy-marker] 4]) (defalias 'mc-find-colon-header #[(&optional insert) "eb !Q!!y&8!y8`\f#\f!`!)B)" [re-search-forward "^" regexp-quote mail-header-separator "\n" looking-at "::\n" 1 insert insert-before-markers "::\n\n" -1 start "^$" nil move copy-marker] 4]) (defalias 'mc-find-hash-header #[(&optional insert) "eb !Q!!y?!1#1!1y?\fQ!yQ`#!`!)B)" [re-search-forward "^" regexp-quote mail-header-separator "\n" looking-at "##\n" 1 "::\n" "^\n" nil move insert insert-before-markers "##\n\n" -1 start "^$" copy-marker] 4]) (defalias 'mc-replace-main-field #[(field replacement) " \n!#" [mc-replace-field field replacement mc-find-main-header t] 5]) (put (quote mc-replace-main-field) (quote byte-optimizer) (quote byte-compile-inline-expand)) (defalias 'mc-replace-hash-field #[(field replacement) " \n!#" [mc-replace-field field replacement mc-find-hash-header t] 5]) (put (quote mc-replace-hash-field) (quote byte-optimizer) (quote byte-compile-inline-expand)) (defalias 'mc-replace-colon-field #[(field replacement) " \n!#" [mc-replace-field field replacement mc-find-colon-header t] 5]) (put (quote mc-replace-colon-field) (quote byte-optimizer) (quote byte-compile-inline-expand)) (defalias 'mc-recipient-is-remailerp #[nil " \"! @A\")" [mc-get-fields "To" mc-find-main-header to string-match regexp-quote mc-remailer-tag] 4]) (defalias 'mc-generic-post-encrypt-function #[(remailer) " ! #  A@) Q\f#*" [mc-find-main-header mc-find-colon-header t colon-header main-header mc-replace-field "Encrypted" "PGP" "To" remailer " " mc-remailer-tag] 6]) (defalias 'mc-generic-pre-encrypt-function #[(remailer) "A@)8) !ʼn \n \f ! #>!Ab\" V\fV \" \"\fm \"\f| \"!! @ A\" \"#  \" \"\n\"\f \n# -..-#*." [remailer 3 mc-find-main-header mc-find-colon-header t nil preserved preserved-regexp to-field to colon-header main-header props addr mc-disjunction-regexp mc-remailer-preserved-headers mc-get-fields mc-find-hash-header mapcar #[(c) "@A" [c ":"] 3] "hash" error "Remailer %s does not support hashmarks" "Newsgroups" "post" "Remailer %s does not support posting" mc-rewrite-news-to-mail featurep mailalias mail-aliases expand-mail-aliases mapconcat #[(c) "A" [c] 1] "To" ", " string-match "," "Remailer %s does not support multiple recipients." "From" "Send-To" "eric" "Anon-Send-To" "Request-Remailing-To" mc-replace-field "Reply-to" bounds field] 9]) (defalias 'mc-disjunction-regexp #[(regexps) " #Q" ["\\(" mapconcat identity regexps "\\)\\|\\(" "\\)"] 5]) #@53 Figure out the user's Email address as best we can. (defalias 'mc-user-mail-address #[nil ";!\n Q" [mail-default-reply-to boundp user-mail-address user-login-name "@" system-name] 3 (#$ . 12122)]) (defalias 'mc-remailer-make-chains-alist #[nil "  \"" [mc-remailer-internal-chains mc-reread-levien-file append mc-remailer-user-chains] 3]) (put (quote mc-remailer-make-chains-alist) (quote byte-optimizer) (quote byte-compile-inline-expand)) #@146 Insert pseudonym as a From field in the hash-mark header. See the documentation for the variable `mc-remailer-pseudonyms' for more information. (defalias 'mc-remailer-insert-pseudonym #[nil "\n!\"\"\"!P \f\f !#+" [mc-remailer-pseudonyms read-from-minibuffer "Pseudonym: " completing-read mapcar list pseudonym string-match "\\S +@\\S +" " " "From" replacement field mc-replace-field mc-find-colon-header t] 5 (#$ . 12595) nil]) #@108 *Path to the Mixmaster binary. If defined, Mixmaster chains will be passed to this program for rewriting. (defvar mc-mixmaster-path nil (#$ . -13075)) #@41 *Path to the Mixmaster type2.list file. (defvar mc-mixmaster-list-path nil (#$ . -13233)) (defalias 'mc-mixmaster-process #[(beg end recipients preserved mix-chain) " !\f ! b\"c \"c \" `W0` щ &\f=L! b! ֔|)" [nil ret markerp end copy-marker beg mapcar #[(x) "" [x 10] 2] recipients 10 #[(x) "c" [x] 1] preserved #[(x) "\n\"" [format "%d" x] 3] mix-chain apply call-process-region mc-mixmaster-path t "-f" "-o" "stdout" "-l" 0 error "Mixmaster barfed." re-search-forward "^::$"] 14]) (defalias 'mc-mixmaster-build-alist #[(&optional n) "Ž \n!q#)Ĕĕ\" B \\!B+" [nil buf ((byte-code "!" [buf kill-buffer] 2)) n 1 find-file-noselect mc-mixmaster-list-path re-search-forward "^[^ ]+[ ]+\\([^ ]+\\)" t buffer-substring-no-properties mc-mixmaster-build-alist] 5]) (byte-code "! B‡" [boundp mc-mixmaster-alist nil current-load-list] 2) (defalias 'mc-mixmaster-alist #[nil " " [mc-mixmaster-alist mc-mixmaster-build-alist] 2]) (put (quote mc-mixmaster-alist) (quote byte-optimizer) (quote byte-compile-inline-expand)) (defalias 'mc-mixmaster-translate-chain #[(chain) "?@\n8)??0@A@)!A@) \"AA!B" [chain "mix" remailer 3 assoc mail-extract-address-components mc-mixmaster-alist mc-mixmaster-build-alist mc-mixmaster-translate-chain] 5]) (defalias 'mc-mixmaster-skip #[(chain) "@ 8)A!" [chain nil "mix" remailer 3 mc-mixmaster-skip] 3]) (defalias 'mc-rewrite-for-mixmaster #[(chain &optional pause) " ! ʼn \n \f  @ N@8)N@A1  o \"  @by` A\\|\" \" @by`A\\|!@A\"##!\f#\n8)A@)\"\n\"\f\"\f,B!# \"  \" Aby`d\f % A@)1Q#. " [mc-mixmaster-translate-chain chain mc-find-main-header mc-find-colon-header mc-find-hash-header nil preserved-regexp rest last first newsgroups preserved recipients hash-header colon-header main-header mix-chain "mix" remailer 3 mc-recipient-is-remailerp mc-get-fields -1 1 append "From" featurep mailalias mail-aliases expand-mail-aliases mc-cleanup-recipient-headers mapconcat cdr "To" t ", " "Newsgroups" "post" error "Remailer %s does not support posting" mapcar #[(c) " AP" ["Post:" c] 2] mc-disjunction-regexp "Subject" mc-remailer-preserved-headers #[(c) "@AQ" [c ":"] 3] mc-mixmaster-process mc-replace-field " " mc-remailer-tag] 12]) (defalias 'mc-rewrite-news-to-mail #[(remailer) "  #\n@A  !#* *" [mc-find-main-header nil newsgroups main-header mc-get-fields "Newsgroups" t "Post-To" replacement field mc-replace-field mc-find-colon-header mail-mode] 5]) (defalias 'mc-rewrite-for-remailer #[(remailer &optional pause) "A@)  \nAbyc8)\"!@b\n#\"C \" ) Aby8fA@)!A@)`#*8)\"#*#*8A@)!A@)\"*" [remailer mc-find-main-header main-header addr mc-recipient-is-remailerp 1 "::\n\n" mapcar #[(hook) " !" [hook remailer] 2] 4 mc-find-colon-header t #[(f) "@A" [f ":"] 3] mc-get-fields "Subject" pause cursor-in-echo-area message "SPC to encrypt for %s : " read-char-exclusive never nil mc-encrypt-for-me mc-pgp-always-sign mc-encrypt-message 2 mail-extract-address-components #[(hook) " !" [hook remailer] 2] 5 "Comment" bounds field "From" error "Unable to encrypt message to %s"] 7]) (defalias 'mc-rewrite-for-chain #[(chain &optional pause) "\n \f!\f\f6 \f= A \" \f=1\f@!6\f\")" [nil rest mc-mixmaster-path mc-mixmaster-skip chain mc-rewrite-for-chain pause mc-rewrite-for-remailer mc-rewrite-for-mixmaster] 3]) (defalias 'mc-unparse-chain #[(chain) "@A@)A!Q" [chain remailer "\n" mc-unparse-chain] 5]) (defalias 'mc-disallow-field #[(field &optional header) "\n \n@b!Q\nA#%ɔb\")" [t case-fold-search header mc-find-main-header re-search-forward "^" regexp-quote field ":" 0 error "Cannot use a %s field."] 4]) #@126 Encrypt message for a remailer chain, prompting for chain to use. With \[universal-argument], pause before each encryption. (defalias 'mc-remailer-encrypt-for-chain #[(&optional pause) "  \" !Ɖ \n!!!\n$\n\"A\n\"\"^ q ! \")," [mc-remailer-internal-chains mc-reread-levien-file append mc-remailer-user-chains get-buffer-create mc-buffer-name nil chain chain-name buffer chains mc-disallow-field "CC" "FCC" "BCC" completing-read "Choose a remailer or chain: " strict-match mc-remailer-canonicalize-chain assoc mc-rewrite-for-chain pause erase-buffer "Rewritten for chain `" "':\n\n" mc-unparse-chain message "Done. See %s buffer for details."] 5 (#$ . 17340) "P"]) #@171 Insert response block at point, prompting for chain to use. With \[universal-argument], enter a recursive edit of the innermost layer of the block before encrypting it. (defalias 'mc-remailer-insert-response-block #[(&optional arg) "V!q  \"\f@A!A@Q Aby`d{`d\"!)` \n#cb) #* !#." [nil lines block addr to main-header buf mc-remailer-make-response-block arg 1 t mc-find-main-header mc-get-fields "To" "<" mail-extract-address-components ">" count-lines kill-buffer opoint mc-remailer-user-response-block "Reply-to" bounds field replacement mc-replace-field mc-find-hash-header] 7 (#$ . 18079) "p"]) (defalias 'mc-remailer-make-response-block #[(&optional recurse) "!p‰ A ] &]!\f \"q ұ ұ \"b!!\" q !)." [generate-new-buffer " *Remailer Response Block*" nil included included-regexp all-headers mc-mixmaster-path original-buf buf mc-find-main-header mc-find-colon-header 0 mc-find-hash-header mc-disjunction-regexp mc-response-block-included-headers mc-get-fields "To: " mc-user-mail-address "\n" mail-header-separator ";; Response block created " current-time-string mapcar #[(c) " @ A" ["; " c ":"] 4] recurse switch-to-buffer message "Editing response block ; %s when done." substitute-command-keys "\\[exit-recursive-edit]" recursive-edit mc-remailer-encrypt-for-chain] 7])