gpg: Add pinentry-mode feature.
authorWerner Koch <wk@gnupg.org>
Thu, 7 Feb 2013 19:37:58 +0000 (20:37 +0100)
committerWerner Koch <wk@gnupg.org>
Thu, 7 Feb 2013 19:37:58 +0000 (20:37 +0100)
commit21feecd48f990b2569cb4b385dea3e57b9501525
tree522f58116f53c4b2d93e3f96755f00c4fe8e57c9
parent84de484bc3eaeeba755412918b01bc8444a532ee
gpg: Add pinentry-mode feature.

* g10/gpg.c: Include shareddefs.h.
(main): Add option --pinentry-mode.
* g10/options.h (struct opt): Add field pinentry_mode.
* g10/passphrase.c: Include shareddefs.h.
(have_static_passphrase): Take care of loopback pinentry_mode.
(read_passphrase_from_fd): Ditto.
(get_static_passphrase): New.
(passphrase_to_dek_ext): Factor some code out to ...
(emit_status_need_passphrase): new.
* g10/call-agent.c (start_agent): Send the pinentry mode.
(default_inq_cb): Take care of the PASSPHRASE inquiry.  Return a
proper error code.
(agent_pksign): Add args keyid, mainkeyid and pubkey_algo.
(agent_pkdecrypt): Ditto.
* g10/pubkey-enc.c (get_it): Pass new args.
* g10/sign.c (do_sign): Pass new args.

* g10/call-agent.c (struct default_inq_parm_s): New.  Change all
similar structs to reference this one.  Change all users and inquire
callback to use this struct, instead of NULL or some undefined but not
used structs.  This change will help to eventually get rid of global
variables.
--

This new features allows to use gpg without a Pinentry.  As a
prerequisite the agent must be configured to allow the loopback
pinentry mode (option --allow-loopback-pinentry).  For example

  gpg2 --pinentry-mode=loopback FILE.gpg

may be used to decrypt FILE.gpg while entering the passphrase on the
tty.  If batch is used, --passphrase et al. may be used, if
--command-fd is used, the passphrase may be provided by another
process.  Note that there are no try-again prompts in case of a bad
passphrase.
NEWS
doc/gpg.texi
g10/call-agent.c
g10/call-agent.h
g10/gpg.c
g10/keydb.h
g10/options.h
g10/passphrase.c
g10/pubkey-enc.c
g10/sign.c