]> www.infradead.org Git - users/willy/xarray.git/commitdiff
crypto: ecdh - check validity of Z before export
authorStephan Müller <smueller@chronox.de>
Mon, 20 Jul 2020 17:07:48 +0000 (19:07 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 31 Jul 2020 08:08:58 +0000 (18:08 +1000)
SP800-56A rev3 section 5.7.1.2 step 2 mandates that the validity of the
calculated shared secret is verified before the data is returned to the
caller. Thus, the export function and the validity check functions are
reversed. In addition, the sensitive variables of priv and rand_z are
zeroized.

Signed-off-by: Stephan Mueller <smueller@chronox.de>
Reviewed-by: Vitaly Chikunov <vt@altlinux.org>
Acked-by: Neil Horman <nhorman@redhat.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/ecc.c

index 86c324936a2bb36bed63975d2f2220c9e82d42ff..c8b259e597041795c9d7df5cf7ee853ef6ee6896 100644 (file)
@@ -1495,11 +1495,16 @@ int crypto_ecdh_shared_secret(unsigned int curve_id, unsigned int ndigits,
 
        ecc_point_mult(product, pk, priv, rand_z, curve, ndigits);
 
-       ecc_swap_digits(product->x, secret, ndigits);
-
-       if (ecc_point_is_zero(product))
+       if (ecc_point_is_zero(product)) {
                ret = -EFAULT;
+               goto err_validity;
+       }
+
+       ecc_swap_digits(product->x, secret, ndigits);
 
+err_validity:
+       memzero_explicit(priv, sizeof(priv));
+       memzero_explicit(rand_z, sizeof(rand_z));
        ecc_free_point(product);
 err_alloc_product:
        ecc_free_point(pk);