All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Berger <stefanb@linux.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,
	Stefan Berger <stefanb@linux.ibm.com>
Subject: [PATCH v2 12/14] crypto: ecc - Implement and use ecc_curve_get_nbytes to get curve's nbytes
Date: Thu, 15 Feb 2024 18:14:11 -0500	[thread overview]
Message-ID: <20240215231414.3857320-13-stefanb@linux.ibm.com> (raw)
In-Reply-To: <20240215231414.3857320-1-stefanb@linux.ibm.com>

Implement ecc_curve_get_nbytes to get a curve's number of bytes (nbytes).
The number of bytes can be derived from the nbits field of a curve, if
set, otherwise from the ndigits field.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
---
 crypto/ecc.c                  |  6 ++----
 include/crypto/internal/ecc.h | 11 +++++++++++
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/crypto/ecc.c b/crypto/ecc.c
index 73fbbfc8d69c..f643719450b8 100644
--- a/crypto/ecc.c
+++ b/crypto/ecc.c
@@ -1478,10 +1478,8 @@ static int __ecc_is_key_valid(const struct ecc_curve *curve,
 int ecc_is_key_valid(unsigned int curve_id, unsigned int ndigits,
 		     const u64 *private_key, unsigned int private_key_len)
 {
-	int nbytes;
 	const struct ecc_curve *curve = ecc_get_curve(curve_id);
-
-	nbytes = ndigits << ECC_DIGITS_TO_BYTES_SHIFT;
+	int nbytes = ecc_curve_get_nbytes(curve);
 
 	if (private_key_len != nbytes)
 		return -EINVAL;
@@ -1506,7 +1504,7 @@ int ecc_gen_privkey(unsigned int curve_id, unsigned int ndigits, u64 *privkey)
 {
 	const struct ecc_curve *curve = ecc_get_curve(curve_id);
 	u64 priv[ECC_MAX_DIGITS];
-	unsigned int nbytes = ndigits << ECC_DIGITS_TO_BYTES_SHIFT;
+	unsigned int nbytes = ecc_curve_get_nbytes(curve);
 	unsigned int nbits = vli_num_bits(curve->n, ndigits);
 	int err;
 
diff --git a/include/crypto/internal/ecc.h b/include/crypto/internal/ecc.h
index 6229aa3f3218..5d485d3221d3 100644
--- a/include/crypto/internal/ecc.h
+++ b/include/crypto/internal/ecc.h
@@ -93,6 +93,17 @@ static inline void ecc_digits_to_bytes(const u64 *in, unsigned int ndigits,
 	memcpy(out, &tmp[o], nbytes);
 }
 
+/**
+ * ecc_curve_get_nbytes() - Get the number of bytes the curve requires
+ * @curve:   The curve
+ */
+static inline unsigned int ecc_curve_get_nbytes(const struct ecc_curve *curve)
+{
+	if (curve->nbits)
+		return DIV_ROUND_UP(curve->nbits, 8);
+	return curve->g.ndigits << ECC_DIGITS_TO_BYTES_SHIFT;
+}
+
 /**
  * ecc_is_key_valid() - Validate a given ECDH private key
  *
-- 
2.43.0


  parent reply	other threads:[~2024-02-15 23:14 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-15 23:13 [PATCH v2 00/14] Add support for NIST P521 to ecdsa and ecdh Stefan Berger
2024-02-15 23:14 ` [PATCH v2 01/14] crypto: ecdsa - Convert byte arrays with key coordinates to digits Stefan Berger
2024-02-15 23:14 ` [PATCH v2 02/14] crypto: ecdsa - Adjust tests on length of key parameters Stefan Berger
2024-02-15 23:14 ` [PATCH v2 03/14] crypto: ecdsa - Extend res.x mod n calculation for NIST P521 Stefan Berger
2024-02-15 23:14 ` [PATCH v2 04/14] crypto: ecc - Implement vli_mmod_fast_521 for NIST p521 Stefan Berger
2024-02-15 23:14 ` [PATCH v2 05/14] crypto: ecc - For NIST P521 use vli_num_bits to get number of bits Stefan Berger
2024-02-15 23:14 ` [PATCH v2 06/14] crypto: ecc - Add NIST P521 curve parameters Stefan Berger
2024-02-16 18:48   ` Elliott, Robert (Servers)
2024-02-16 19:03     ` Stefan Berger
2024-02-15 23:14 ` [PATCH v2 07/14] crypto: ecdsa - Register NIST P521 and extend test suite Stefan Berger
2024-02-15 23:14 ` [PATCH v2 08/14] x509: Add OID for NIST P521 and extend parser for it Stefan Berger
2024-02-15 23:14 ` [PATCH v2 09/14] crypto: ecdh - Use properly formatted digits to check for valid key Stefan Berger
2024-02-15 23:14 ` [PATCH v2 10/14] crypto: ecc - Implement ecc_digits_to_bytes to convert digits to byte array Stefan Berger
2024-02-15 23:14 ` [PATCH v2 11/14] crypto: Add nbits field to ecc_curve structure Stefan Berger
2024-02-15 23:14 ` Stefan Berger [this message]
2024-02-15 23:14 ` [PATCH v2 13/14] crypto: ecdh - Use functions to copy digits from and to byte array Stefan Berger
2024-02-15 23:14 ` [PATCH v2 14/14] crypto: ecdh - Add support for NIST P521 and add test case Stefan Berger
2024-02-16 19:27 ` [PATCH v2 00/14] Add support for NIST P521 to ecdsa and ecdh Simo Sorce
2024-02-16 19:32   ` Stefan Berger
2024-02-16 19:40     ` Simo Sorce
2024-02-19 14:40       ` Stefan Berger

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=20240215231414.3857320-13-stefanb@linux.ibm.com \
    --to=stefanb@linux.ibm.com \
    --cc=davem@davemloft.net \
    --cc=herbert@gondor.apana.org.au \
    --cc=keyrings@vger.kernel.org \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=saulo.alessandre@tse.jus.br \
    /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.