(require 'mime-view)
(require 'signature)
(require 'alist)
-(require 'pgg-def)
-(require 'pgg-parse)
-
-(autoload 'pgg-encrypt-region "pgg"
- "PGP encryption of current region." t)
-(autoload 'pgg-sign-region "pgg"
- "PGP signature of current region." t)
-(autoload 'pgg-insert-key "pgg"
- "Insert PGP public key at point." t)
+(require 'epa)
+
(autoload 'smime-encrypt-buffer "smime"
"S/MIME encryption of current buffer.")
(autoload 'smime-sign-buffer "smime"
") "
(if (fboundp 'apel-version)
(concat (apel-version) " "))
+ "EasyPG/ " epg-version-number " "
(if (featurep 'xemacs)
(concat (cond ((and (featurep 'chise)
(boundp 'xemacs-chise-version))
(ctype (car ret))
(encoding (nth 1 ret))
(pgp-boundary (concat "pgp-sign-" boundary))
+ (context (epg-make-context))
+ signature
micalg)
(mime-edit-delete-trailing-whitespace) ; RFC3156
(goto-char beg)
(if encoding
(insert (format "Content-Transfer-Encoding: %s\n" encoding)))
(insert "\n")
- (or (let ((pgg-default-user-id
- (or mime-edit-pgp-user-id
- (if from
- (nth 1 (std11-extract-address-components from))
- pgg-default-user-id))))
- (pgg-sign-region (point-min)(point-max)))
- (throw 'mime-edit-error 'pgp-error))
- (setq micalg
- (cdr (assq 'hash-algorithm
- (cdar (with-current-buffer pgg-output-buffer
- (pgg-parse-armor-region
- (point-min)(point-max))))))
- micalg
- (if micalg
- (concat "; micalg=pgp-" (downcase (symbol-name micalg)))
- ""))
+ (epg-context-set-armor context t)
+ (epg-context-set-textmode context t)
+ (epg-context-set-signers
+ context
+ (epa-select-keys
+ "\
+Select keys for signing.
+If no one is selected, default secret key is used. "
+ (if from
+ (list (nth 1 (std11-extract-address-components from))))
+ t))
+ (condition-case error
+ (setq signature
+ (epg-sign-string context
+ (buffer-substring (point-min) (point-max))
+ 'detached))
+ (error (signal 'mime-edit-error (cdr error))))
+ (setq micalg (cdr (assq 'digest-algorithm
+ (car (epg-context-result-for context 'sign)))))
(goto-char beg)
(insert (format "--[[multipart/signed;
boundary=\"%s\"%s;
protocol=\"application/pgp-signature\"][7bit]]
--%s
-" pgp-boundary micalg pgp-boundary))
+"
+ pgp-boundary
+ (if micalg
+ (concat "; micalg=pgp-"
+ (downcase
+ (cdr (assq micalg
+ epg-digest-algorithm-alist))))
+ "")
+ pgp-boundary))
(goto-char (point-max))
(insert (format "\n--%s
Content-Type: application/pgp-signature
Content-Transfer-Encoding: 7bit
" pgp-boundary))
- (insert-buffer-substring pgg-output-buffer)
+ (insert signature)
(goto-char (point-max))
(insert (format "\n--%s--\n" pgp-boundary))))))
(defun mime-edit-encrypt-pgp-mime (beg end boundary)
(save-excursion
(save-restriction
- (let (from recipients header)
+ (let (recipients header)
(let ((ret (mime-edit-make-encrypt-recipient-header)))
- (setq from (aref ret 0)
- recipients (aref ret 1)
+ (setq recipients (aref ret 1)
header (aref ret 2)))
(narrow-to-region beg end)
(let* ((ret
(mime-edit-translate-region beg end boundary))
(ctype (car ret))
(encoding (nth 1 ret))
- (pgp-boundary (concat "pgp-" boundary)))
+ (pgp-boundary (concat "pgp-" boundary))
+ (context (epg-make-context))
+ cipher)
(goto-char beg)
(insert header)
(insert (format "Content-Type: %s\n" ctype))
(insert (format "Content-Transfer-Encoding: %s\n" encoding)))
(insert "\n")
(mime-encode-header-in-buffer)
- (or (let ((pgg-default-user-id
- (or mime-edit-pgp-user-id
- (if from
- (nth 1 (std11-extract-address-components from))
- pgg-default-user-id))))
- (pgg-encrypt-region
- (point-min) (point-max)
- (mapcar (lambda (recipient)
- (nth 1 (std11-extract-address-components
- recipient)))
- (split-string recipients
- "\\([ \t\n]*,[ \t\n]*\\)+"))))
- (throw 'mime-edit-error 'pgp-error))
+ (epg-context-set-armor context t)
+ (condition-case error
+ (setq cipher
+ (epg-encrypt-string
+ context
+ (buffer-substring (point-min) (point-max))
+ (epa-select-keys
+ "\
+Select recipents for encryption.
+If no one is selected, symmetric encryption will be performed. "
+ (mapcar (lambda (recipient)
+ (nth 1 (std11-extract-address-components
+ recipient)))
+ (split-string recipients
+ "\\([ \t\n]*,[ \t\n]*\\)+")))))
+ (error (signal 'mime-edit-error (cdr error))))
(delete-region (point-min)(point-max))
(goto-char beg)
(insert (format "--[[multipart/encrypted;
Content-Transfer-Encoding: 7bit
" pgp-boundary pgp-boundary pgp-boundary))
- (insert-buffer-substring pgg-output-buffer)
+ (insert cipher)
(goto-char (point-max))
(insert (format "\n--%s--\n" pgp-boundary)))))))
(let* ((ret
(mime-edit-translate-region beg end boundary))
(ctype (car ret))
- (encoding (nth 1 ret)))
+ (encoding (nth 1 ret))
+ (context (epg-make-context))
+ signature)
(goto-char beg)
(insert (format "Content-Type: %s\n" ctype))
(if encoding
(insert (format "Content-Transfer-Encoding: %s\n" encoding)))
(insert "\n")
- (or (pgg-sign-region beg (point-max) 'clearsign)
- (throw 'mime-edit-error 'pgp-error))
+ (condition-case error
+ (setq signature
+ (epg-sign-string context
+ (buffer-substring beg (point-max))
+ 'clearsign))
+ (error (signal 'mime-edit-error (cdr error))))
(goto-char beg)
(insert
"--[[application/pgp; format=mime][7bit]]\n")
(let* ((ret
(mime-edit-translate-region beg end boundary))
(ctype (car ret))
- (encoding (nth 1 ret)))
+ (encoding (nth 1 ret))
+ (context (epg-make-context))
+ cipher)
(goto-char beg)
(insert header)
(insert (format "Content-Type: %s\n" ctype))
(if encoding
(insert (format "Content-Transfer-Encoding: %s\n" encoding)))
(insert "\n")
- (or (pgg-encrypt-region beg (point-max) recipients)
- (throw 'mime-edit-error 'pgp-error))
+ (epg-context-set-armor context t)
+ (condition-case error
+ (setq cipher
+ (epg-encrypt-string
+ context
+ (buffer-substring beg (point-max))
+ (epa-select-keys
+ "\
+Select recipents for encryption.
+If no one is selected, symmetric encryption will be performed. "
+ (mapcar (lambda (recipient)
+ (nth 1 (std11-extract-address-components
+ recipient)))
+ (split-string recipients
+ "\\([ \t\n]*,[ \t\n]*\\)+")))))
+ (error (signal 'mime-edit-error (cdr error))))
(goto-char beg)
(insert
- "--[[application/pgp; format=mime][7bit]]\n")
+ "--[[application/pgp; format=mime][7bit]]\n" cipher)
)))))
(defun mime-edit-sign-smime (beg end boundary)
(interactive "P")
(mime-edit-insert-tag "application" "pgp-keys")
(mime-edit-define-encoding "7bit")
- (pgg-insert-key)
+ (let ((context (epg-make-context)))
+ (epg-context-set-armor t)
+ (epg-export-keys-to-string context
+ (epa-select-keys "Select keys for export. ")))
(if (and (not (eobp))
(not (looking-at mime-edit-single-part-tag-regexp)))
(insert (mime-make-text-tag) "\n")))
nil t))
(prog1
(save-window-excursion
- (pgg-decrypt-region (match-beginning 0)
- (point-max)))
+ (epg-decrypt-string
+ (epg-make-context)
+ (buffer-substring
+ (match-beginning 0)
+ (point-max))))
(delete-region (point-min)(point-max))))
(insert-buffer-substring pgg-output-buffer)
(mime-edit-decode-message-in-buffer
;;; Code:
(require 'mime-play)
-(require 'pgg-def)
-
-(autoload 'pgg-decrypt-region "pgg"
- "PGP decryption of current region." t)
-(autoload 'pgg-verify-region "pgg"
- "PGP verification of current region." t)
-(autoload 'pgg-snarf-keys-region "pgg"
- "Snarf PGP public keys in current region." t)
+(require 'epg)
;;; @ Internal method for multipart/signed
;;;
(format "%s-%s" (buffer-name) (mime-entity-number entity)))
(mother (current-buffer))
(preview-buffer (concat "*Preview-" (buffer-name) "*"))
- representation-type message-buf)
+ representation-type message-buf context signature plain)
(set-buffer (setq message-buf (get-buffer-create new-name)))
(erase-buffer)
(mime-insert-entity entity)
(cond ((progn
(goto-char (point-min))
(re-search-forward "^-+BEGIN PGP SIGNED MESSAGE-+$" nil t))
- (pgg-verify-region (match-beginning 0)(point-max) nil 'fetch)
+ (setq context (epg-make-context))
+ (epg-verify-string
+ context
+ (buffer-substring (match-beginning 0)(point-max)))
+ (setq signature
+ (reverse (epg-context-result-for context 'verify)))
+ (while signature
+ (message "%s: %s %s %s"
+ (epg-signature-status (car signature))
+ (epg-signature-key-id (car signature))
+ (epg-signature-user-id (car signature))
+ (epg-signature-validity (car signature)))
+ (setq signature (cdr signature)))
(goto-char (point-min))
(delete-region
(point-min)
((progn
(goto-char (point-min))
(re-search-forward "^-+BEGIN PGP MESSAGE-+$" nil t))
- (pgg-decrypt-region (point-min)(point-max))
+ (setq context (epg-make-context))
+ (setq plain
+ (epg-decrypt-string
+ context
+ (buffer-substring (point-min)(point-max))))
(delete-region (point-min)(point-max))
- (insert-buffer pgg-output-buffer)
+ (insert plain)
(setq representation-type 'binary)))
(setq major-mode 'mime-show-message-mode)
(save-window-excursion
(1- knum)
(1+ knum)))
(orig-entity (nth onum (mime-entity-children mother)))
- (sig-file (make-temp-file "tm" nil ".asc")))
- (save-excursion
- (mime-show-echo-buffer)
- (set-buffer mime-echo-buffer-name)
- (set-window-start
- (get-buffer-window mime-echo-buffer-name)
- (point-max)))
- (mime-write-entity-content entity sig-file)
- (unwind-protect
- (with-temp-buffer
- (mime-insert-entity orig-entity)
- (goto-char (point-min))
- (while (progn (end-of-line) (not (eobp)))
- (insert "\r")
- (forward-line 1))
- (pgg-verify-region (point-min)(point-max)
- sig-file 'fetch)
- (save-excursion
- (set-buffer mime-echo-buffer-name)
- (insert-buffer-substring pgg-errors-buffer)))
- (delete-file sig-file))))
+ (context (epg-make-context))
+ signature)
+ (epg-verify-string context
+ (mime-entity-content entity)
+ (with-temp-buffer
+ (if (fboundp 'set-buffer-multibyte)
+ (set-buffer-multibyte nil))
+ (mime-insert-entity orig-entity)
+ (buffer-substring)))
+ (setq signature
+ (reverse (epg-context-result-for context 'verify)))
+ (while signature
+ (message "%s: %s %s %s"
+ (epg-signature-status (car signature))
+ (epg-signature-key-id (car signature))
+ (epg-signature-user-id (car signature))
+ (epg-signature-validity (car signature)))
+ (setq signature (cdr signature)))))
;;; @ Internal method for application/pgp-encrypted
;;; draft-ietf-openpgp-mime-02.txt (OpenPGP/MIME).
(defun mime-add-application/pgp-keys (entity situation)
- (save-excursion
- (mime-show-echo-buffer)
- (set-buffer mime-echo-buffer-name)
- (set-window-start
- (get-buffer-window mime-echo-buffer-name)
- (point-max)))
(with-temp-buffer
(mime-insert-entity-content entity)
(mime-decode-region (point-min) (point-max)
(cdr (assq 'encoding situation)))
- (pgg-snarf-keys-region (point-min)(point-max))
- (save-excursion
- (set-buffer mime-echo-buffer-name)
- (insert-buffer-substring pgg-errors-buffer))))
+ (epg-import-keys-from-string (epg-make-context)
+ (buffer-substring (point-min)(point-max)))
+ (epa-list-keys)))
;;; @ Internal method for application/pkcs7-signature