diff --git a/wolfcrypt/src/ecc.c b/wolfcrypt/src/ecc.c index 58d57fb56..537150532 100644 --- a/wolfcrypt/src/ecc.c +++ b/wolfcrypt/src/ecc.c @@ -4917,11 +4917,13 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng, if (ecc_sets[key->idx].id == ECC_SECP256R1) { #ifdef WC_ECC_NONBLOCK if (key->nb_ctx) { - return sp_ecc_sign_256_nb(&key->nb_ctx->sp_ctx, in, inlen, rng, &key->k, r, s, sign_k, key->heap); + return sp_ecc_sign_256_nb(&key->nb_ctx->sp_ctx, in, inlen, rng, + &key->k, r, s, sign_k, key->heap); } #endif #ifndef WC_ECC_NONBLOCK_ONLY - return sp_ecc_sign_256(in, inlen, rng, &key->k, r, s, sign_k, key->heap); + return sp_ecc_sign_256(in, inlen, rng, &key->k, r, s, sign_k, + key->heap); #else return NOT_COMPILED_IN; #endif @@ -4931,11 +4933,13 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng, if (ecc_sets[key->idx].id == ECC_SECP384R1) { #ifdef WC_ECC_NONBLOCK if (key->nb_ctx) { - return sp_ecc_sign_384_nb(&key->nb_ctx->sp_ctx, in, inlen, rng, &key->k, r, s, sign_k, key->heap); + return sp_ecc_sign_384_nb(&key->nb_ctx->sp_ctx, in, inlen, rng, + &key->k, r, s, sign_k, key->heap); } #endif #ifndef WC_ECC_NONBLOCK_ONLY - return sp_ecc_sign_384(in, inlen, rng, &key->k, r, s, sign_k, key->heap); + return sp_ecc_sign_384(in, inlen, rng, &key->k, r, s, sign_k, + key->heap); #else return NOT_COMPILED_IN; #endif @@ -5985,12 +5989,12 @@ int wc_ecc_verify_hash_ex(mp_int *r, mp_int *s, const byte* hash, #if defined(WOLFSSL_DSP) && !defined(FREESCALE_LTC_ECC) if (key->handle != -1) { - return sp_dsp_ecc_verify_256(key->handle, hash, hashlen, key->pubkey.x, key->pubkey.y, - key->pubkey.z, r, s, res, key->heap); + return sp_dsp_ecc_verify_256(key->handle, hash, hashlen, key->pubkey.x, + key->pubkey.y, key->pubkey.z, r, s, res, key->heap); } if (wolfSSL_GetHandleCbSet() == 1) { - return sp_dsp_ecc_verify_256(0, hash, hashlen, key->pubkey.x, key->pubkey.y, - key->pubkey.z, r, s, res, key->heap); + return sp_dsp_ecc_verify_256(0, hash, hashlen, key->pubkey.x, + key->pubkey.y, key->pubkey.z, r, s, res, key->heap); } #endif @@ -6002,7 +6006,8 @@ int wc_ecc_verify_hash_ex(mp_int *r, mp_int *s, const byte* hash, } #endif -#if (defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_HAVE_SP_ECC)) && !defined(FREESCALE_LTC_ECC) +#if (defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_HAVE_SP_ECC)) && \ + !defined(FREESCALE_LTC_ECC) if (key->idx != ECC_CUSTOM_IDX #if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_ECC) && key->asyncDev.marker != WOLFSSL_ASYNC_MARKER_ECC @@ -6013,7 +6018,8 @@ int wc_ecc_verify_hash_ex(mp_int *r, mp_int *s, const byte* hash, #ifdef WC_ECC_NONBLOCK if (key->nb_ctx) { return sp_ecc_verify_256_nb(&key->nb_ctx->sp_ctx, hash, hashlen, - key->pubkey.x, key->pubkey.y, key->pubkey.z, r, s, res, key->heap); + key->pubkey.x, key->pubkey.y, key->pubkey.z, r, s, res, + key->heap); } #endif #ifndef WC_ECC_NONBLOCK_ONLY @@ -6029,7 +6035,8 @@ int wc_ecc_verify_hash_ex(mp_int *r, mp_int *s, const byte* hash, #ifdef WC_ECC_NONBLOCK if (key->nb_ctx) { return sp_ecc_verify_384_nb(&key->nb_ctx->sp_ctx, hash, hashlen, - key->pubkey.x, key->pubkey.y, key->pubkey.z, r, s, res, key->heap); + key->pubkey.x, key->pubkey.y, key->pubkey.z, r, s, res, + key->heap); } #endif #ifndef WC_ECC_NONBLOCK_ONLY diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index 217b17ee2..019e0b95c 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -20273,7 +20273,7 @@ static int crypto_ecc_verify(const uint8_t *key, uint32_t keySz, const uint8_t *hash, uint32_t hashSz, const uint8_t *sig, uint32_t sigSz, uint32_t curveSz, int curveId) { - int ret, verify_res = 0; + int ret, verify_res = 0, count = 0; mp_int r, s; ecc_key ecc; ecc_nb_ctx_t nb_ctx; @@ -20340,9 +20340,13 @@ static int crypto_ecc_verify(const uint8_t *key, uint32_t keySz, &verify_res, /* verification result 1=success */ &ecc ); + count++; /* TODO: Real-time work can be called here */ } while (ret == FP_WOULDBLOCK); + #ifdef DEBUG_WOLFSSL + printf("ECC non-block verify: %d times\n", count); + #endif } /* check verify result */ @@ -20354,6 +20358,8 @@ static int crypto_ecc_verify(const uint8_t *key, uint32_t keySz, mp_clear(&s); wc_ecc_free(&ecc); + (void)count; + return ret; } @@ -20362,7 +20368,7 @@ static int crypto_ecc_sign(const uint8_t *key, uint32_t keySz, const uint8_t *hash, uint32_t hashSz, uint8_t *sig, uint32_t* sigSz, uint32_t curveSz, int curveId, WC_RNG* rng) { - int ret; + int ret, count = 0; mp_int r, s; ecc_key ecc; ecc_nb_ctx_t nb_ctx; @@ -20418,9 +20424,14 @@ static int crypto_ecc_sign(const uint8_t *key, uint32_t keySz, rng, &ecc, /* random and key context */ &r, &s /* r/s as mp_int */ ); + count++; /* TODO: Real-time work can be called here */ } while (ret == FP_WOULDBLOCK); + + #ifdef DEBUG_WOLFSSL + printf("ECC non-block sign: %d times\n", count); + #endif } if (ret == 0) { @@ -20433,6 +20444,8 @@ static int crypto_ecc_sign(const uint8_t *key, uint32_t keySz, mp_clear(&s); wc_ecc_free(&ecc); + (void)count; + return ret; }