2007-07-25 [長年日記]

GnuPGの--status-fd, --passphrase-fd, --command-fd

GnuPGで復号・署名用にパスワードを要求するときに、実際に必要になってからユーザIDを提示しつつ要求する方法を調べました。パスワードが必要になると、--status-fdで指定したパイプにNEED_PASSPHARSEの通知があるので、これに反応して--passphrase-fdで指定したパイプに書き込めば良いはずと思って試してみたところ、gpg.exeのプロセスを起動した直後に固まってしまいます。GnuPGのソースを見てみたところ、--passphrase-fdに指定したパイプからは起動直後にパスフレーズを読み込むとするため、通知があるまで書き込みを遅延させることはできないようです。

GPGMEのソースを見てみたところ、このような場合には--command-fdにパイプのハンドルを指定して使えばよいようです。--command-fdを指定すると、NEED_PASSPHARSEの後にGET_HIDDEN passphrase.enterという通知が来るので、そこで--command-fdに指定したパイプに書き込んでやればOKです。また、--command-fdを使用する場合には--batchを指定しないようにしないと意味がなくなってしまいます。

ちなみに、--status-fdにも2の代わりに別に作った継承するパイプのハンドルを指定してやると他の標準エラー出力と混じらないので処理が楽になります。

[]

トップ «前の日記(2007-06-30) 最新 次の日記(2007-08-01)»