crypto: ecc - Add special case for NIST P521 in ecc_point_mult
authorStefan Berger <stefanb@linux.ibm.com>
Thu, 4 Apr 2024 14:18:50 +0000 (10:18 -0400)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 12 Apr 2024 07:07:52 +0000 (15:07 +0800)
In ecc_point_mult use the number of bits of the NIST P521 curve + 2. The
change is required specifically for NIST P521 to pass mathematical tests
on the public key.

Tested-by: Lukas Wunner <lukas@wunner.de>
Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/ecc.c

index 8914e43..d15ef07 100644 (file)
@@ -1320,7 +1320,10 @@ static void ecc_point_mult(struct ecc_point *result,
        carry = vli_add(sk[0], scalar, curve->n, ndigits);
        vli_add(sk[1], sk[0], curve->n, ndigits);
        scalar = sk[!carry];
-       num_bits = sizeof(u64) * ndigits * 8 + 1;
+       if (curve->nbits == 521)        /* NIST P521 */
+               num_bits = curve->nbits + 2;
+       else
+               num_bits = sizeof(u64) * ndigits * 8 + 1;
 
        vli_set(rx[1], point->x, ndigits);
        vli_set(ry[1], point->y, ndigits);