Re: [PATCH v4 01/12] crypto: ecdsa - Convert byte arrays with key coordinates to digits

From: Stefan Berger
Date: Sun Mar 03 2024 - 11:35:10 EST




On 3/2/24 16:34, Lukas Wunner wrote:
On Thu, Feb 29, 2024 at 09:19:56PM -0500, Stefan Berger wrote:
--- a/crypto/ecdsa.c
+++ b/crypto/ecdsa.c
@@ -222,9 +222,8 @@ static int ecdsa_ecc_ctx_reset(struct ecc_ctx *ctx)
static int ecdsa_set_pub_key(struct crypto_akcipher *tfm, const void *key, unsigned int keylen)
{
struct ecc_ctx *ctx = akcipher_tfm_ctx(tfm);
+ unsigned int digitlen, ndigits;
const unsigned char *d = key;
- const u64 *digits = (const u64 *)&d[1];
- unsigned int ndigits;
int ret;
ret = ecdsa_ecc_ctx_reset(ctx);

Hm, the removal of digits isn't strictly necessary. If you would keep it,
the patch would become simpler (fewer lines changes).


@@ -238,12 +237,17 @@ static int ecdsa_set_pub_key(struct crypto_akcipher *tfm, const void *key, unsig
return -EINVAL;
keylen--;
- ndigits = (keylen >> 1) / sizeof(u64);
+ digitlen = keylen >> 1;
+
+ ndigits = DIV_ROUND_UP(digitlen, sizeof(u64));

Instead of introducing an additional digitlen variable, you could just
use keylen. It seems it's not used in the remainder of the function,
so modifying it is harmless:

keylen--;
+ keylen >>= 1;
- ndigits = (keylen >> 1) / sizeof(u64);
+ ndigits = DIV_ROUND_UP(digitlen, sizeof(u64));

Just a suggestion.

I would prefer 'digitlen' rather than repurposing keylen and giving it a different meaning...

Stefan

Thanks,

Lukas