All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Berger <stefanb@linux.vnet.ibm.com>
To: keyrings@vger.kernel.org, linux-crypto@vger.kernel.org,
	herbert@gondor.apana.org.au, davem@davemloft.net
Cc: linux-kernel@vger.kernel.org, saulo.alessandre@tse.jus.br,
	lukas@wunner.de, bbhushan2@marvell.com, jarkko@kernel.org,
	Stefan Berger <stefanb@linux.ibm.com>
Subject: [PATCH v6 04/13] crypto: ecdsa - Extend res.x mod n calculation for NIST P521
Date: Tue, 12 Mar 2024 14:36:09 -0400	[thread overview]
Message-ID: <20240312183618.1211745-5-stefanb@linux.vnet.ibm.com> (raw)
In-Reply-To: <20240312183618.1211745-1-stefanb@linux.vnet.ibm.com>

From: Stefan Berger <stefanb@linux.ibm.com>

res.x has been calculated by ecc_point_mult_shamir, which uses
'mod curve_prime'. The curve_prime 'p' is typically larger than the
curve_order 'n' and therefore it is possible that p > res.x >= n.

If res.x >= n then res.x mod n can be calculated by iteratively sub-
tracting n from res.x until n > res.x. For NIST P192/256/384 this can be
done in a single subtraction. This can also be done in a single
subtraction for NIST P521.

The mathematical reason why a single subtraction is sufficient is
due to the values of 'p' and 'n' of the NIST curves where the following
holds true:

   note: max(res.x) = p - 1

   max(res.x) - n < n
       p - 1  - n < n
       p - 1      < 2n  => true for the NIST curves

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Tested-by: Lukas Wunner <lukas@wunner.de>
---
 crypto/ecdsa.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/crypto/ecdsa.c b/crypto/ecdsa.c
index 64e1e69d53ba..1814f009f971 100644
--- a/crypto/ecdsa.c
+++ b/crypto/ecdsa.c
@@ -122,7 +122,7 @@ static int _ecdsa_verify(struct ecc_ctx *ctx, const u64 *hash, const u64 *r, con
 
 	/* res.x = res.x mod n (if res.x > order) */
 	if (unlikely(vli_cmp(res.x, curve->n, ndigits) == 1))
-		/* faster alternative for NIST p384, p256 & p192 */
+		/* faster alternative for NIST p521, p384, p256 & p192 */
 		vli_sub(res.x, res.x, curve->n, ndigits);
 
 	if (!vli_cmp(res.x, r, ndigits))
-- 
2.43.0


  parent reply	other threads:[~2024-03-12 18:37 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-12 18:36 [PATCH v6 00/13] Add support for NIST P521 to ecdsa Stefan Berger
2024-03-12 18:36 ` [PATCH v6 01/13] crypto: ecc - Use ECC_CURVE_NIST_P192/256/384_DIGITS where possible Stefan Berger
2024-03-18 20:08   ` Jarkko Sakkinen
2024-03-12 18:36 ` [PATCH v6 02/13] crypto: ecdsa - Convert byte arrays with key coordinates to digits Stefan Berger
2024-03-18 20:21   ` Jarkko Sakkinen
2024-03-18 20:35     ` Lukas Wunner
2024-03-18 22:20       ` Jarkko Sakkinen
2024-03-12 18:36 ` [PATCH v6 03/13] crypto: ecdsa - Adjust tests on length of key parameters Stefan Berger
2024-03-18 20:25   ` Jarkko Sakkinen
2024-03-18 20:32     ` Lukas Wunner
2024-03-18 22:25       ` Jarkko Sakkinen
2024-03-12 18:36 ` Stefan Berger [this message]
2024-03-18 20:33   ` [PATCH v6 04/13] crypto: ecdsa - Extend res.x mod n calculation for NIST P521 Jarkko Sakkinen
2024-03-18 20:39     ` Lukas Wunner
2024-03-18 22:19       ` Jarkko Sakkinen
2024-03-12 18:36 ` [PATCH v6 05/13] crypto: ecc - Add nbits field to ecc_curve structure Stefan Berger
2024-03-18 20:34   ` Jarkko Sakkinen
2024-03-12 18:36 ` [PATCH v6 06/13] crypto: ecc - Implement vli_mmod_fast_521 for NIST p521 Stefan Berger
2024-03-18  5:47   ` [EXTERNAL] " Bharat Bhushan
2024-03-18 18:38     ` Stefan Berger
2024-03-19  3:53       ` Bharat Bhushan
2024-03-18 20:35   ` Jarkko Sakkinen
2024-03-12 18:36 ` [PATCH v6 07/13] crypto: ecc - Add special case for NIST P521 in ecc_point_mult Stefan Berger
2024-03-18 20:50   ` Jarkko Sakkinen
2024-03-12 18:36 ` [PATCH v6 08/13] crypto: ecc - Add NIST P521 curve parameters Stefan Berger
2024-03-18 21:05   ` Jarkko Sakkinen
2024-03-18 22:54     ` Stefan Berger
2024-03-12 18:36 ` [PATCH v6 09/13] crypto: ecdsa - Replace ndigits with nbits where precision is needed Stefan Berger
2024-03-18 21:06   ` Jarkko Sakkinen
2024-03-12 18:36 ` [PATCH v6 10/13] crypto: ecdsa - Rename keylen to bufsize where necessary Stefan Berger
2024-03-18 21:07   ` Jarkko Sakkinen
2024-03-12 18:36 ` [PATCH v6 11/13] crypto: ecdsa - Register NIST P521 and extend test suite Stefan Berger
2024-03-18 21:08   ` Jarkko Sakkinen
2024-03-12 18:36 ` [PATCH v6 12/13] crypto: asymmetric_keys - Adjust signature size calculation for NIST P521 Stefan Berger
2024-03-18  5:58   ` [EXTERNAL] " Bharat Bhushan
2024-03-18  7:06     ` Lukas Wunner
2024-03-19  3:38       ` Bharat Bhushan
2024-03-18 21:12   ` Jarkko Sakkinen
2024-03-18 22:42     ` Stefan Berger
2024-03-19 18:21       ` Jarkko Sakkinen
2024-03-12 18:36 ` [PATCH v6 13/13] crypto: x509 - Add OID for NIST P521 and extend parser for it Stefan Berger
2024-03-15 17:10 ` [PATCH v6 00/13] Add support for NIST P521 to ecdsa Stefan Berger
2024-03-18 18:48 ` Lukas Wunner
2024-03-18 22:42   ` Stefan Berger
2024-03-19 18:22     ` Jarkko Sakkinen
2024-03-19 18:25       ` Jarkko Sakkinen
2024-03-19 18:55       ` Stefan Berger
2024-03-19 19:14         ` Jarkko Sakkinen
2024-03-20  5:40       ` Lukas Wunner
2024-03-20 14:41         ` Konstantin Ryabitsev
2024-03-21 16:17           ` Jarkko Sakkinen
2024-03-21 16:19             ` Jarkko Sakkinen
2024-03-21 16:36               ` Stefan Berger
2024-03-21 16:50                 ` Jarkko Sakkinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240312183618.1211745-5-stefanb@linux.vnet.ibm.com \
    --to=stefanb@linux.vnet.ibm.com \
    --cc=bbhushan2@marvell.com \
    --cc=davem@davemloft.net \
    --cc=herbert@gondor.apana.org.au \
    --cc=jarkko@kernel.org \
    --cc=keyrings@vger.kernel.org \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lukas@wunner.de \
    --cc=saulo.alessandre@tse.jus.br \
    --cc=stefanb@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.