@@ -251,16 +251,27 @@ ECC Curve Sizes:
251251#else
252252#define MAX_ECC_BITS_USE MAX_ECC_BITS_NEEDED
253253#endif
254+
254255#if !defined(WOLFSSL_CUSTOM_CURVES) && (ECC_MIN_KEY_SZ > 160) && \
255256 (!defined(HAVE_ECC_KOBLITZ) || (ECC_MIN_KEY_SZ > 224))
257+
256258#define ECC_KEY_MAX_BITS(key) \
257259 ((((key) == NULL) || ((key)->dp == NULL)) ? MAX_ECC_BITS_USE : \
258260 ((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+
259265#else
266+
260267/* Add one bit for cases when order is a bit greater than prime. */
261268#define ECC_KEY_MAX_BITS(key) \
262269 ((((key) == NULL) || ((key)->dp == NULL)) ? MAX_ECC_BITS_USE : \
263270 ((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+
264275#endif
265276
266277/* forward declarations */
@@ -3479,12 +3490,12 @@ static int ecc_key_tmp_init(ecc_key* key, void* heap)
34793490 XMEMSET(key, 0, sizeof(*key));
34803491
34813492#if defined(WOLFSSL_SP_MATH_ALL) && defined(WOLFSSL_SMALL_STACK)
3482- NEW_MP_INT_SIZE(key->t1, ECC_KEY_MAX_BITS (key), heap, DYNAMIC_TYPE_ECC);
3483- 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);
34843495#ifdef ALT_ECC_SIZE
3485- NEW_MP_INT_SIZE(key->x, ECC_KEY_MAX_BITS (key), heap, DYNAMIC_TYPE_ECC);
3486- NEW_MP_INT_SIZE(key->y, ECC_KEY_MAX_BITS (key), heap, DYNAMIC_TYPE_ECC);
3487- 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);
34883499#endif
34893500 if (key->t1 == NULL || key->t2 == NULL
34903501#ifdef ALT_ECC_SIZE
@@ -3494,20 +3505,20 @@ static int ecc_key_tmp_init(ecc_key* key, void* heap)
34943505 err = MEMORY_E;
34953506 }
34963507 if (err == 0) {
3497- 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));
34983509 }
34993510 if (err == 0) {
3500- 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));
35013512 }
35023513#ifdef ALT_ECC_SIZE
35033514 if (err == 0) {
3504- 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));
35053516 }
35063517 if (err == 0) {
3507- 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));
35083519 }
35093520 if (err == 0) {
3510- 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));
35113522 }
35123523#endif
35133524#else
@@ -6575,26 +6586,26 @@ int wc_ecc_sign_hash(const byte* in, word32 inlen, byte* out, word32 *outlen,
65756586 err = wc_ecc_sign_hash_async(in, inlen, out, outlen, rng, key);
65766587#else
65776588
6578- 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);
65796590#ifdef MP_INT_SIZE_CHECK_NULL
65806591 if (r == NULL)
65816592 return MEMORY_E;
65826593#endif
6583- 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);
65846595#ifdef MP_INT_SIZE_CHECK_NULL
65856596 if (s == NULL) {
65866597 FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
65876598 return MEMORY_E;
65886599 }
65896600#endif
65906601
6591- err = INIT_MP_INT_SIZE(r, ECC_KEY_MAX_BITS (key));
6602+ err = INIT_MP_INT_SIZE(r, ECC_KEY_MAX_BITS_NONULLCHECK (key));
65926603 if (err != 0) {
65936604 FREE_MP_INT_SIZE(s, key->heap, DYNAMIC_TYPE_ECC);
65946605 FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
65956606 return err;
65966607 }
6597- err = INIT_MP_INT_SIZE(s, ECC_KEY_MAX_BITS (key));
6608+ err = INIT_MP_INT_SIZE(s, ECC_KEY_MAX_BITS_NONULLCHECK (key));
65986609 if (err != 0) {
65996610 FREE_MP_INT_SIZE(s, key->heap, DYNAMIC_TYPE_ECC);
66006611 FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
@@ -6719,16 +6730,16 @@ static int ecc_sign_hash_sw(ecc_key* key, ecc_key* pubkey, WC_RNG* rng,
67196730{
67206731 int err = MP_OKAY;
67216732 int loop_check = 0;
6722- 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);
67236734
6724- 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);
67256736#ifdef MP_INT_SIZE_CHECK_NULL
67266737 if (b == NULL)
67276738 err = MEMORY_E;
67286739#endif
67296740
67306741 if (err == MP_OKAY) {
6731- err = INIT_MP_INT_SIZE(b, ECC_KEY_MAX_BITS (key));
6742+ err = INIT_MP_INT_SIZE(b, ECC_KEY_MAX_BITS_NONULLCHECK (key));
67326743 }
67336744
67346745#ifdef WOLFSSL_CUSTOM_CURVES
@@ -7122,7 +7133,7 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
71227133 }
71237134 e = key->e;
71247135#else
7125- 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);
71267137#ifdef MP_INT_SIZE_CHECK_NULL
71277138 if (e_lcl == NULL) {
71287139 return MEMORY_E;
@@ -7133,7 +7144,7 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
71337144
71347145 /* get the hash and load it as a bignum into 'e' */
71357146 /* init the bignums */
7136- 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) {
71377148 FREE_MP_INT_SIZE(e_lcl, key->heap, DYNAMIC_TYPE_ECC);
71387149 return err;
71397150 }
@@ -7263,10 +7274,10 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
72637274 pubkey = (ecc_key*)XMALLOC(sizeof(ecc_key), key->heap, DYNAMIC_TYPE_ECC);
72647275 if (pubkey == NULL)
72657276 err = MEMORY_E;
7277+ else
72667278 #endif
7267-
7279+ {
72687280 /* don't use async for key, since we don't support async return here */
7269- if (err == MP_OKAY) {
72707281 err = wc_ecc_init_ex(pubkey, key->heap, INVALID_DEVID);
72717282 if (err == MP_OKAY) {
72727283 err = ecc_sign_hash_sw(key, pubkey, rng, curve, e, r, s);
@@ -8299,25 +8310,25 @@ int wc_ecc_verify_hash(const byte* sig, word32 siglen, const byte* hash,
82998310 r = key->r;
83008311 s = key->s;
83018312#else
8302- 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);
83038314#ifdef MP_INT_SIZE_CHECK_NULL
83048315 if (r == NULL)
83058316 return MEMORY_E;
83068317#endif
8307- 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);
83088319#ifdef MP_INT_SIZE_CHECK_NULL
83098320 if (s == NULL) {
83108321 FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
83118322 return MEMORY_E;
83128323 }
83138324#endif
8314- err = INIT_MP_INT_SIZE(r, ECC_KEY_MAX_BITS (key));
8325+ err = INIT_MP_INT_SIZE(r, ECC_KEY_MAX_BITS_NONULLCHECK (key));
83158326 if (err != 0) {
83168327 FREE_MP_INT_SIZE(s, key->heap, DYNAMIC_TYPE_ECC);
83178328 FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
83188329 return err;
83198330 }
8320- err = INIT_MP_INT_SIZE(s, ECC_KEY_MAX_BITS (key));
8331+ err = INIT_MP_INT_SIZE(s, ECC_KEY_MAX_BITS_NONULLCHECK (key));
83218332 if (err != 0) {
83228333 FREE_MP_INT_SIZE(s, key->heap, DYNAMIC_TYPE_ECC);
83238334 FREE_MP_INT_SIZE(r, key->heap, DYNAMIC_TYPE_ECC);
@@ -8618,9 +8629,9 @@ static int ecc_verify_hash(mp_int *r, mp_int *s, const byte* hash,
86188629 ecc_point lcl_mG;
86198630 ecc_point lcl_mQ;
86208631#endif
8621- 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);
86228633#if !defined(WOLFSSL_ASYNC_CRYPT) || !defined(HAVE_CAVIUM_V)
8623- 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);
86248635#endif
86258636 mp_int* e;
86268637 mp_int* v = NULL; /* Will be w. */
@@ -8636,15 +8647,15 @@ static int ecc_verify_hash(mp_int *r, mp_int *s, const byte* hash,
86368647
86378648 err = mp_init(e);
86388649#else
8639- 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);
86408651#ifdef MP_INT_SIZE_CHECK_NULL
86418652 if (e_lcl == NULL) {
86428653 return MEMORY_E;
86438654 }
86448655#endif
86458656 e = e_lcl;
86468657
8647- err = INIT_MP_INT_SIZE(e, ECC_KEY_MAX_BITS (key));
8658+ err = INIT_MP_INT_SIZE(e, ECC_KEY_MAX_BITS_NONULLCHECK (key));
86488659#endif /* WOLFSSL_ASYNC_CRYPT && HAVE_CAVIUM_V */
86498660 if (err != MP_OKAY) {
86508661#ifdef WOLFSSL_SMALL_STACK
@@ -8706,7 +8717,7 @@ static int ecc_verify_hash(mp_int *r, mp_int *s, const byte* hash,
87068717 }
87078718#endif /* WOLFSSL_ASYNC_CRYPT && WC_ASYNC_ENABLE_ECC */
87088719
8709- 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);
87108721#ifdef MP_INT_SIZE_CHECK_NULL
87118722 if (w == NULL) {
87128723 err = MEMORY_E;
@@ -8719,7 +8730,7 @@ static int ecc_verify_hash(mp_int *r, mp_int *s, const byte* hash,
87198730 v = w;
87208731 }
87218732 if (err == MP_OKAY) {
8722- err = INIT_MP_INT_SIZE(w, ECC_KEY_MAX_BITS (key));
8733+ err = INIT_MP_INT_SIZE(w, ECC_KEY_MAX_BITS_NONULLCHECK (key));
87238734 }
87248735
87258736 /* allocate points */
0 commit comments