From 25577ab96ce369ab11ab0e503955d3d45c4079e2 Mon Sep 17 00:00:00 2001 From: JacobBarthelmeh Date: Thu, 23 Mar 2023 06:58:03 -0700 Subject: [PATCH] fix for check on ecc public key size with FIPS and compressed keys --- wolfcrypt/src/asn.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index b0437e1d7..90e376a05 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -24427,7 +24427,19 @@ static int SetEccPublicKey(byte* output, ecc_key* key, int outLen, if (ret == 0) { /* Calculate the size of the encoded public point. */ PRIVATE_KEY_UNLOCK(); + #if defined(HAVE_COMP_KEY) && defined(HAVE_FIPS) && \ + defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION == 2) + /* in earlier versions of FIPS the get length functionality is not + * available with compressed keys */ + pubSz = key->dp ? key->dp->size : MAX_ECC_BYTES; + if (comp) + pubSz = 1 + pubSz; + else + pubSz = 1 + 2 * pubSz; + ret = LENGTH_ONLY_E; + #else ret = wc_ecc_export_x963_ex(key, NULL, &pubSz, comp); + #endif PRIVATE_KEY_LOCK(); /* LENGTH_ONLY_E on success. */ if (ret == LENGTH_ONLY_E) {