[mew-dist 22664] Re: How to select PGP key to encrypt an e-mail with

ITO Tsuyoshi tsuyoshi at example.com
2002年 12月 22日 (日) 22:36:12 JST


山本様 [mew-dist 22662] wrote:
> (1) 文字列と番号の DB を作る。
...
> (2) 番号を Draft モードから指定できるようにする。
...
を実装するのは私には難しそうなので、

I [mew-dist 22654] wrote:
> それと、少し違う話なのですが、 MIME パートを暗号化する mew-attach-pgp-
> enc コマンドでは、現状では相手の公開鍵をメールアドレスで指定することに
> なっていると思います。これを鍵 ID や fingerprint でも指定できるように
> ならないでしょうか。これも受取人の鍵が複数あるときにほしい機能です。
のほうだけ実装してみました。

mew-attach-pgp-enc コマンドでユーザの指定が 0x で始まっているときはド
メイン名を補完しないようにする、というだけで、 GnuPG 1.2.1 だと動いて
しまいました。他の PGP 処理系で動くかどうかは確認していません。

切り貼りで作ったいい加減なコードですが、私以外の誰かの役にも立つ可能性
もあるかもと思い、パッチを添付します。

このパッチだと暗号化に使う公開鍵を番号で指定したいときはその番号を入力
するしかありません。別名が使えるようにしたほうがいいのは確かですが、
そのように変更するのは私の Emacs Lisp の能力を超えています。
他力本願なことですみません。

-- 伊藤 剛志  <tsuyoshi at example.com> --
-- (東京大学大学院情報理工学系研究科       --
--        コンピュータ科学専攻 今井研究室) --
-------------- next part --------------
diff -ru orig/mew-attach.el patched/mew-attach.el
--- orig/mew-attach.el	Wed Dec 18 18:02:36 2002
+++ patched/mew-attach.el	Sun Dec 22 22:20:22 2002
@@ -676,8 +676,8 @@
        (t
 	;; ask towhom before set privacy for C-g
 	(if towhom
-	    (setq towhom (mew-input-address "To (%s): " (mew-join "," towhom)))
-	  (setq towhom (mew-input-address "To: ")))
+            (setq towhom (mew-input-pgpkey "PGP key(s) (%s): " (mew-join "," towhom)))
+          (setq towhom (mew-input-pgpkey "PGP key(s): ")))
 	;; towhom is already canonicalized.
 	(mew-syntax-set-privacy 
 	 syntax (append privacy pgp-enc))
diff -ru orig/mew-minibuf.el patched/mew-minibuf.el
--- orig/mew-minibuf.el	Wed Dec 18 18:02:36 2002
+++ patched/mew-minibuf.el	Sun Dec 22 22:19:28 2002
@@ -1052,6 +1052,41 @@
     (if (string= name "") (setq name default))
     name))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;
+;;; PGP key
+;;;
+
+(defvar mew-input-pgpkey-hist nil)
+
+(defun mew-pgpkeystr-append-domain (addr)
+  (if (and mew-addrbook-append-domain-p
+	   (not (string-match "\\`0x" addr))
+	   (not (string-match "@" addr)))
+      (concat addr "@" (mew-mail-domain)) ;; xxx
+    addr))
+
+(defun mew-input-pgpkey (prompt &optional default)
+  (mew-input-clear)
+  (let ((mew-input-complete-function 'mew-complete-address)
+	val vals addrs ret)
+    (setq val (read-from-minibuffer 
+	       (if default (format prompt default) prompt)
+	       ""
+	       mew-input-map
+	       nil
+	       'mew-input-pgpkey-hist))
+    (if (and default (string= val ""))
+	(setq val default))
+    (setq vals (mapcar 'mew-chop (mew-split-quoted val ?,)))
+    (while vals
+      (setq val (car vals))
+      (setq vals (cdr vals))
+      (setq addrs (mew-alias-expand val mew-addrbook-alist 0))
+      (setq addrs (mapcar 'mew-pgpkeystr-append-domain addrs))
+      (setq ret (nconc ret addrs)))
+    ret))
+
 (provide 'mew-minibuf)
 
 ;;; Copyright Notice:


Mew-dist メーリングリストの案内