@@ -252,19 +252,27 @@ ECC Curve Sizes:
252252#define MAX_ECC_BITS_USE MAX_ECC_BITS_NEEDED
253253#endif
254254
255- static WC_MAYBE_UNUSED WC_INLINE word32 ECC_KEY_MAX_BITS(const ecc_key *key) {
256- if (((key) == NULL) || ((key)->dp == NULL))
257- return MAX_ECC_BITS_USE;
258- else {
259- #if !defined(WOLFSSL_CUSTOM_CURVES) && (ECC_MIN_KEY_SZ > 160) && \
260- (!defined(HAVE_ECC_KOBLITZ) || (ECC_MIN_KEY_SZ > 224))
261- return (word32)((key)->dp->size * 8);
262- #else
263- /* Add one bit for cases when order is a bit greater than prime. */
264- return (word32)((key)->dp->size * 8 + 1);
265- #endif
266- }
267- }
255+ #if !defined(WOLFSSL_CUSTOM_CURVES) && (ECC_MIN_KEY_SZ > 160) && \
256+ (!defined(HAVE_ECC_KOBLITZ) || (ECC_MIN_KEY_SZ > 224))
257+
258+ #define ECC_KEY_MAX_BITS(key) \
259+ ((((key) == NULL) || ((key)->dp == NULL)) ? MAX_ECC_BITS_USE : \
260+ ((unsigned)((key)->dp->size * 8)))
261+ #define ECC_KEY_MAX_BITS_NONULLCHECK(key) \
262+ (((key)->dp == NULL) ? MAX_ECC_BITS_USE : \
263+ ((unsigned)((key)->dp->size * 8)))
264+
265+ #else
266+
267+ /* Add one bit for cases when order is a bit greater than prime. */
268+ #define ECC_KEY_MAX_BITS(key) \
269+ ((((key) == NULL) || ((key)->dp == NULL)) ? MAX_ECC_BITS_USE : \
270+ ((unsigned)((key)->dp->size * 8 + 1)))
271+ #define ECC_KEY_MAX_BITS_NONULLCHECK(key) \
272+ (((key)->dp == NULL) ? MAX_ECC_BITS_USE : \
273+ ((unsigned)((key)->dp->size * 8 + 1)))
274+
275+ #endif
268276
269277/* forward declarations */
270278static int wc_ecc_new_point_ex(ecc_point** point, void* heap);
@@ -3482,12 +3490,12 @@ static int ecc_key_tmp_init(ecc_key* key, void* heap)
34823490 XMEMSET(key, 0, sizeof(*key));
34833491
34843492#if defined(WOLFSSL_SP_MATH_ALL) && defined(WOLFSSL_SMALL_STACK)
3485- NEW_MP_INT_SIZE(key->t1, ECC_KEY_MAX_BITS (key), heap, DYNAMIC_TYPE_ECC);
3486- NEW_MP_INT_SIZE(key->t2, ECC_KEY_MAX_BITS (key), heap, DYNAMIC_TYPE_ECC);
3493+ NEW_MP_INT_SIZE(key->t1, ECC_KEY_MAX_BITS_NONULLCHECK (key), heap, DYNAMIC_TYPE_ECC);
3494+ NEW_MP_INT_SIZE(key->t2, ECC_KEY_MAX_BITS_NONULLCHECK (key), heap, DYNAMIC_TYPE_ECC);
34873495#ifdef ALT_ECC_SIZE
3488- NEW_MP_INT_SIZE(key->x, ECC_KEY_MAX_BITS (key), heap, DYNAMIC_TYPE_ECC);
3489- NEW_MP_INT_SIZE(key->y, ECC_KEY_MAX_BITS (key), heap, DYNAMIC_TYPE_ECC);
3490- NEW_MP_INT_SIZE(key->z, ECC_KEY_MAX_BITS (key), heap, DYNAMIC_TYPE_ECC);
3496+ NEW_MP_INT_SIZE(key->x, ECC_KEY_MAX_BITS_NONULLCHECK (key), heap, DYNAMIC_TYPE_ECC);
3497+ NEW_MP_INT_SIZE(key->y, ECC_KEY_MAX_BITS_NONULLCHECK (key), heap, DYNAMIC_TYPE_ECC);
3498+ NEW_MP_INT_SIZE(key->z, ECC_KEY_MAX_BITS_NONULLCHECK (key), heap, DYNAMIC_TYPE_ECC);
34913499#endif
34923500 if (key->t1 == NULL || key->t2 == NULL
34933501#ifdef ALT_ECC_SIZE
@@ -3497,20 +3505,20 @@ static int ecc_key_tmp_init(ecc_key* key, void* heap)
34973505 err = MEMORY_E;
34983506 }
34993507 if (err == 0) {
3500- err = INIT_MP_INT_SIZE(key->t1, ECC_KEY_MAX_BITS (key));
3508+ err = INIT_MP_INT_SIZE(key->t1, ECC_KEY_MAX_BITS_NONULLCHECK (key));
35013509 }
35023510 if (err == 0) {
3503- err = INIT_MP_INT_SIZE(key->t2, ECC_KEY_MAX_BITS (key));
3511+ err = INIT_MP_INT_SIZE(key->t2, ECC_KEY_MAX_BITS_NONULLCHECK (key));
35043512 }
35053513#ifdef ALT_ECC_SIZE
35063514 if (err == 0) {
3507- err = INIT_MP_INT_SIZE(key->x, ECC_KEY_MAX_BITS (key));
3515+ err = INIT_MP_INT_SIZE(key->x, ECC_KEY_MAX_BITS_NONULLCHECK (key));
35083516 }
35093517 if (err == 0) {
3510- err = INIT_MP_INT_SIZE(key->y, ECC_KEY_MAX_BITS (key));
3518+ err = INIT_MP_INT_SIZE(key->y, ECC_KEY_MAX_BITS_NONULLCHECK (key));
35113519 }
35123520 if (err == 0) {
3513- err = INIT_MP_INT_SIZE(key->z, ECC_KEY_MAX_BITS (key));
3521+ err = INIT_MP_INT_SIZE(key->z, ECC_KEY_MAX_BITS_NONULLCHECK (key));
35143522 }
35153523#endif
35163524#else
@@ -6578,26 +6586,26 @@ int wc_ecc_sign_hash(const byte* in, word32 inlen, byte* out, word32 *outlen,
65786586 err = wc_ecc_sign_hash_async(in, inlen, out, outlen, rng, key);
65796587#else
65806588
6581- NEW_MP_INT_SIZE(r, ECC_KEY_MAX_BITS (key), key->heap, DYNAMIC_TYPE_ECC);
6589+ NEW_MP_INT_SIZE(r, ECC_KEY_MAX_BITS_NONULLCHECK (key), key->heap, DYNAMIC_TYPE_ECC);
65826590#ifdef MP_INT_SIZE_CHECK_NULL
65836591 if (r == NULL)
65846592 return MEMORY_E;
65856593#endif
6586- NEW_MP_INT_SIZE(s, ECC_KEY_MAX_BITS (key), key->heap, DYNAMIC_TYPE_ECC);
6594+ NEW_MP_INT_SIZE(s, ECC_KEY_MAX_BITS_NONULLCHECK (key), key->heap, DYNAMIC_TYPE_ECC);
65876595#ifdef MP_INT_SIZE_CHECK_NULL
65886596 if (s == NULL) {
65896597 FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
65906598 return MEMORY_E;
65916599 }
65926600#endif
65936601
6594- err = INIT_MP_INT_SIZE(r, ECC_KEY_MAX_BITS (key));
6602+ err = INIT_MP_INT_SIZE(r, ECC_KEY_MAX_BITS_NONULLCHECK (key));
65956603 if (err != 0) {
65966604 FREE_MP_INT_SIZE(s, key->heap, DYNAMIC_TYPE_ECC);
65976605 FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
65986606 return err;
65996607 }
6600- err = INIT_MP_INT_SIZE(s, ECC_KEY_MAX_BITS (key));
6608+ err = INIT_MP_INT_SIZE(s, ECC_KEY_MAX_BITS_NONULLCHECK (key));
66016609 if (err != 0) {
66026610 FREE_MP_INT_SIZE(s, key->heap, DYNAMIC_TYPE_ECC);
66036611 FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
@@ -6722,16 +6730,16 @@ static int ecc_sign_hash_sw(ecc_key* key, ecc_key* pubkey, WC_RNG* rng,
67226730{
67236731 int err = MP_OKAY;
67246732 int loop_check = 0;
6725- DECL_MP_INT_SIZE_DYN(b, ECC_KEY_MAX_BITS (key), MAX_ECC_BITS_USE);
6733+ DECL_MP_INT_SIZE_DYN(b, ECC_KEY_MAX_BITS_NONULLCHECK (key), MAX_ECC_BITS_USE);
67266734
6727- NEW_MP_INT_SIZE(b, ECC_KEY_MAX_BITS (key), key->heap, DYNAMIC_TYPE_ECC);
6735+ NEW_MP_INT_SIZE(b, ECC_KEY_MAX_BITS_NONULLCHECK (key), key->heap, DYNAMIC_TYPE_ECC);
67286736#ifdef MP_INT_SIZE_CHECK_NULL
67296737 if (b == NULL)
67306738 err = MEMORY_E;
67316739#endif
67326740
67336741 if (err == MP_OKAY) {
6734- err = INIT_MP_INT_SIZE(b, ECC_KEY_MAX_BITS (key));
6742+ err = INIT_MP_INT_SIZE(b, ECC_KEY_MAX_BITS_NONULLCHECK (key));
67356743 }
67366744
67376745#ifdef WOLFSSL_CUSTOM_CURVES
@@ -7125,7 +7133,7 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
71257133 }
71267134 e = key->e;
71277135#else
7128- NEW_MP_INT_SIZE(e_lcl, ECC_KEY_MAX_BITS (key), key->heap, DYNAMIC_TYPE_ECC);
7136+ NEW_MP_INT_SIZE(e_lcl, ECC_KEY_MAX_BITS_NONULLCHECK (key), key->heap, DYNAMIC_TYPE_ECC);
71297137#ifdef MP_INT_SIZE_CHECK_NULL
71307138 if (e_lcl == NULL) {
71317139 return MEMORY_E;
@@ -7136,7 +7144,7 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
71367144
71377145 /* get the hash and load it as a bignum into 'e' */
71387146 /* init the bignums */
7139- if ((err = INIT_MP_INT_SIZE(e, ECC_KEY_MAX_BITS (key))) != MP_OKAY) {
7147+ if ((err = INIT_MP_INT_SIZE(e, ECC_KEY_MAX_BITS_NONULLCHECK (key))) != MP_OKAY) {
71407148 FREE_MP_INT_SIZE(e_lcl, key->heap, DYNAMIC_TYPE_ECC);
71417149 return err;
71427150 }
@@ -8302,25 +8310,25 @@ int wc_ecc_verify_hash(const byte* sig, word32 siglen, const byte* hash,
83028310 r = key->r;
83038311 s = key->s;
83048312#else
8305- NEW_MP_INT_SIZE(r, ECC_KEY_MAX_BITS (key), key->heap, DYNAMIC_TYPE_ECC);
8313+ NEW_MP_INT_SIZE(r, ECC_KEY_MAX_BITS_NONULLCHECK (key), key->heap, DYNAMIC_TYPE_ECC);
83068314#ifdef MP_INT_SIZE_CHECK_NULL
83078315 if (r == NULL)
83088316 return MEMORY_E;
83098317#endif
8310- NEW_MP_INT_SIZE(s, ECC_KEY_MAX_BITS (key), key->heap, DYNAMIC_TYPE_ECC);
8318+ NEW_MP_INT_SIZE(s, ECC_KEY_MAX_BITS_NONULLCHECK (key), key->heap, DYNAMIC_TYPE_ECC);
83118319#ifdef MP_INT_SIZE_CHECK_NULL
83128320 if (s == NULL) {
83138321 FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
83148322 return MEMORY_E;
83158323 }
83168324#endif
8317- err = INIT_MP_INT_SIZE(r, ECC_KEY_MAX_BITS (key));
8325+ err = INIT_MP_INT_SIZE(r, ECC_KEY_MAX_BITS_NONULLCHECK (key));
83188326 if (err != 0) {
83198327 FREE_MP_INT_SIZE(s, key->heap, DYNAMIC_TYPE_ECC);
83208328 FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
83218329 return err;
83228330 }
8323- err = INIT_MP_INT_SIZE(s, ECC_KEY_MAX_BITS (key));
8331+ err = INIT_MP_INT_SIZE(s, ECC_KEY_MAX_BITS_NONULLCHECK (key));
83248332 if (err != 0) {
83258333 FREE_MP_INT_SIZE(s, key->heap, DYNAMIC_TYPE_ECC);
83268334 FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
@@ -8621,9 +8629,9 @@ static int ecc_verify_hash(mp_int *r, mp_int *s, const byte* hash,
86218629 ecc_point lcl_mG;
86228630 ecc_point lcl_mQ;
86238631#endif
8624- DECL_MP_INT_SIZE_DYN(w, ECC_KEY_MAX_BITS (key), MAX_ECC_BITS_USE);
8632+ DECL_MP_INT_SIZE_DYN(w, ECC_KEY_MAX_BITS_NONULLCHECK (key), MAX_ECC_BITS_USE);
86258633#if !defined(WOLFSSL_ASYNC_CRYPT) || !defined(HAVE_CAVIUM_V)
8626- DECL_MP_INT_SIZE_DYN(e_lcl, ECC_KEY_MAX_BITS (key), MAX_ECC_BITS_USE);
8634+ DECL_MP_INT_SIZE_DYN(e_lcl, ECC_KEY_MAX_BITS_NONULLCHECK (key), MAX_ECC_BITS_USE);
86278635#endif
86288636 mp_int* e;
86298637 mp_int* v = NULL; /* Will be w. */
@@ -8639,15 +8647,15 @@ static int ecc_verify_hash(mp_int *r, mp_int *s, const byte* hash,
86398647
86408648 err = mp_init(e);
86418649#else
8642- NEW_MP_INT_SIZE(e_lcl, ECC_KEY_MAX_BITS (key), key->heap, DYNAMIC_TYPE_ECC);
8650+ NEW_MP_INT_SIZE(e_lcl, ECC_KEY_MAX_BITS_NONULLCHECK (key), key->heap, DYNAMIC_TYPE_ECC);
86438651#ifdef MP_INT_SIZE_CHECK_NULL
86448652 if (e_lcl == NULL) {
86458653 return MEMORY_E;
86468654 }
86478655#endif
86488656 e = e_lcl;
86498657
8650- err = INIT_MP_INT_SIZE(e, ECC_KEY_MAX_BITS (key));
8658+ err = INIT_MP_INT_SIZE(e, ECC_KEY_MAX_BITS_NONULLCHECK (key));
86518659#endif /* WOLFSSL_ASYNC_CRYPT && HAVE_CAVIUM_V */
86528660 if (err != MP_OKAY) {
86538661#ifdef WOLFSSL_SMALL_STACK
@@ -8709,7 +8717,7 @@ static int ecc_verify_hash(mp_int *r, mp_int *s, const byte* hash,
87098717 }
87108718#endif /* WOLFSSL_ASYNC_CRYPT && WC_ASYNC_ENABLE_ECC */
87118719
8712- NEW_MP_INT_SIZE(w, ECC_KEY_MAX_BITS (key), key->heap, DYNAMIC_TYPE_ECC);
8720+ NEW_MP_INT_SIZE(w, ECC_KEY_MAX_BITS_NONULLCHECK (key), key->heap, DYNAMIC_TYPE_ECC);
87138721#ifdef MP_INT_SIZE_CHECK_NULL
87148722 if (w == NULL) {
87158723 err = MEMORY_E;
@@ -8722,7 +8730,7 @@ static int ecc_verify_hash(mp_int *r, mp_int *s, const byte* hash,
87228730 v = w;
87238731 }
87248732 if (err == MP_OKAY) {
8725- err = INIT_MP_INT_SIZE(w, ECC_KEY_MAX_BITS (key));
8733+ err = INIT_MP_INT_SIZE(w, ECC_KEY_MAX_BITS_NONULLCHECK (key));
87268734 }
87278735
87288736 /* allocate points */
0 commit comments