KEYS: add SP800-56A KDF support for DH
authorStephan Mueller <smueller@chronox.de>
Fri, 19 Aug 2016 18:39:09 +0000 (20:39 +0200)
committerDavid Howells <dhowells@redhat.com>
Tue, 4 Apr 2017 21:33:38 +0000 (22:33 +0100)
commitf1c316a3ab9d24df6022682422fe897492f2c0c8
tree369b53c45d1f0c2bbd4c6f745cb9a694e1b28cbe
parentf0df90cd7cf2f4a8195c3fff0d2f4c85088fd39c
KEYS: add SP800-56A KDF support for DH

SP800-56A defines the use of DH with key derivation function based on a
counter. The input to the KDF is defined as (DH shared secret || other
information). The value for the "other information" is to be provided by
the caller.

The KDF is implemented using the hash support from the kernel crypto API.
The implementation uses the symmetric hash support as the input to the
hash operation is usually very small. The caller is allowed to specify
the hash name that he wants to use to derive the key material allowing
the use of all supported hashes provided with the kernel crypto API.

As the KDF implements the proper truncation of the DH shared secret to
the requested size, this patch fills the caller buffer up to its size.

The patch is tested with a new test added to the keyutils user space
code which uses a CAVS test vector testing the compliance with
SP800-56A.

Signed-off-by: Stephan Mueller <smueller@chronox.de>
Signed-off-by: David Howells <dhowells@redhat.com>
Documentation/security/keys.txt
include/linux/compat.h
include/uapi/linux/keyctl.h
security/keys/Kconfig
security/keys/Makefile
security/keys/compat.c
security/keys/compat_dh.c [new file with mode: 0644]
security/keys/dh.c
security/keys/internal.h
security/keys/keyctl.c