agent: Implement new protection mode openpgp-s2k3-ocb-aes.
authorWerner Koch <wk@gnupg.org>
Tue, 12 Apr 2016 12:37:26 +0000 (14:37 +0200)
committerWerner Koch <wk@gnupg.org>
Tue, 12 Apr 2016 12:38:44 +0000 (14:38 +0200)
commit4159567f7ed7a1139fdc3a6c92988e1648ad84ab
tree8a5261826bcbd8252763d9ae5724a53ffb9f6cfe
parent100b413d7f69f6f091fd98185df4d579ce6ce0ce
agent: Implement new protection mode openpgp-s2k3-ocb-aes.

* agent/protect.c (agent_protect): Add arg use_ocb.  Change all caller
to pass -1 for default.
* agent/protect-tool.c: New option --debug-use-ocb.
(oDebugUseOCB): New.
(opt_debug_use_ocb): New.
(main): Set option.
(read_and_protect): Implement option.

* agent/protect.c (OCB_MODE_SUPPORTED): New macro.
(PROT_DEFAULT_TO_OCB): New macro.
(do_encryption): Add args use_ocb, hashbegin, hashlen, timestamp_exp,
and timestamp_exp_len.  Implement OCB.
(agent_protect): Change to support OCB.
(do_decryption): Add new args is_ocb, aadhole_begin, and aadhole_len.
Implement OCB.
(merge_lists): Allow NULL for sha1hash.
(agent_unprotect): Change to support OCB.
(agent_private_key_type): Remove debug output.
--

Instead of using the old OpenPGP way of appending a hash of the
plaintext and encrypt that along with the plaintext, the new scheme
uses a proper authenticated encryption mode.  See keyformat.txt for a
description.  Libgcrypt 1.7 is required.

This mode is not yet enabled because there would be no way to return
to an older GnuPG version.  To test the new scheme use
gpg-protect-tool:

 ./gpg-protect-tool -av -P abc -p --debug-use-ocb <plain.key >prot.key
 ./gpg-protect-tool -av -P abc -u <prot.key

Any key from the private key storage should work.

Signed-off-by: Werner Koch <wk@gnupg.org>
agent/agent.h
agent/command-ssh.c
agent/command.c
agent/cvt-openpgp.c
agent/genkey.c
agent/keyformat.txt
agent/protect-tool.c
agent/protect.c
agent/t-protect.c