summaryrefslogtreecommitdiffstats
path: root/security/keys/compat.c
diff options
context:
space:
mode:
authorStephan Mueller <smueller@chronox.de>2016-08-19 20:39:09 +0200
committerDavid Howells <dhowells@redhat.com>2017-04-04 22:33:38 +0100
commitf1c316a3ab9d24df6022682422fe897492f2c0c8 (patch)
tree369b53c45d1f0c2bbd4c6f745cb9a694e1b28cbe /security/keys/compat.c
parentf0df90cd7cf2f4a8195c3fff0d2f4c85088fd39c (diff)
downloadlinux-f1c316a3ab9d24df6022682422fe897492f2c0c8.tar.gz
linux-f1c316a3ab9d24df6022682422fe897492f2c0c8.tar.bz2
linux-f1c316a3ab9d24df6022682422fe897492f2c0c8.zip
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>
Diffstat (limited to 'security/keys/compat.c')
-rw-r--r--security/keys/compat.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/security/keys/compat.c b/security/keys/compat.c
index bb98f2b8dd7d..e87c89c0177c 100644
--- a/security/keys/compat.c
+++ b/security/keys/compat.c
@@ -133,8 +133,9 @@ COMPAT_SYSCALL_DEFINE5(keyctl, u32, option,
return keyctl_get_persistent(arg2, arg3);
case KEYCTL_DH_COMPUTE:
- return keyctl_dh_compute(compat_ptr(arg2), compat_ptr(arg3),
- arg4, compat_ptr(arg5));
+ return compat_keyctl_dh_compute(compat_ptr(arg2),
+ compat_ptr(arg3),
+ arg4, compat_ptr(arg5));
case KEYCTL_RESTRICT_KEYRING:
return keyctl_restrict_keyring(arg2, compat_ptr(arg3),