sp_int.h and ecc.h: add one more to SP_INT_DIGITS and FP_SIZE_ECC, to accommodate extra digit used by sp_mul(), sp_mulmod(), sp_sqr(), and sp_sqrmod().

This commit is contained in:
Daniel Pouzzner
2020-12-28 18:06:18 -06:00
parent 764b3cf09d
commit b0ca598d59
2 changed files with 17 additions and 15 deletions

View File

@ -322,7 +322,8 @@ typedef struct ecc_set_type {
#endif #endif
/* determine buffer size */ /* determine buffer size */
#define FP_SIZE_ECC (FP_MAX_BITS_ECC/DIGIT_BIT) /* Add one to accommodate extra digit used by sp_mul(), sp_mulmod(), sp_sqr(), and sp_sqrmod(). */
#define FP_SIZE_ECC ((FP_MAX_BITS_ECC/DIGIT_BIT) + 1)
/* This needs to match the size of the fp_int struct, except the /* This needs to match the size of the fp_int struct, except the

View File

@ -319,9 +319,10 @@ typedef struct sp_ecc_ctx {
/* Calculate number of digits to have in an sp_int based maximum size of /* Calculate number of digits to have in an sp_int based maximum size of
* numbers in bits that will be used. * numbers in bits that will be used.
* Double the size to hold multiplication result. * Double the size to hold multiplication result.
* Add one to accommodate extra digit used by sp_mul(), sp_mulmod(), sp_sqr(), and sp_sqrmod().
*/ */
#define SP_INT_DIGITS \ #define SP_INT_DIGITS \
(((SP_INT_BITS + (SP_WORD_SIZE - 1)) * 2 + SP_WORD_SIZE) / SP_WORD_SIZE) ((((SP_INT_BITS + (SP_WORD_SIZE - 1)) * 2 + SP_WORD_SIZE) / SP_WORD_SIZE) + 1)
#endif #endif
#ifndef SP_INT_DIGITS #ifndef SP_INT_DIGITS
@ -331,41 +332,41 @@ typedef struct sp_ecc_ctx {
#if !defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_HAVE_SP_DH) && \ #if !defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_HAVE_SP_DH) && \
!defined(WOLFSSL_HAVE_SP_ECC) !defined(WOLFSSL_HAVE_SP_ECC)
#if !defined(NO_RSA) || !defined(NO_DH) || !defined(NO_DSA) #if !defined(NO_RSA) || !defined(NO_DH) || !defined(NO_DSA)
#define SP_INT_DIGITS ((6144 + SP_WORD_SIZE) / SP_WORD_SIZE) #define SP_INT_DIGITS (((6144 + SP_WORD_SIZE) / SP_WORD_SIZE) + 1)
#elif defined(HAVE_ECC) #elif defined(HAVE_ECC)
#define SP_INT_DIGITS \ #define SP_INT_DIGITS \
((2 * ( 521 + SP_WORD_SIZE) + SP_WORD_SIZE) / SP_WORD_SIZE) (((2 * ( 521 + SP_WORD_SIZE) + SP_WORD_SIZE) / SP_WORD_SIZE) + 1)
#elif !defined(NO_PWDBASED) && defined(WOLFSSL_SHA512) #elif !defined(NO_PWDBASED) && defined(WOLFSSL_SHA512)
#define SP_INT_DIGITS (( 512 + SP_WORD_SIZE) / SP_WORD_SIZE) #define SP_INT_DIGITS ((( 512 + SP_WORD_SIZE) / SP_WORD_SIZE) + 1)
#else #else
#define SP_INT_DIGITS (( 256 + SP_WORD_SIZE) / SP_WORD_SIZE) #define SP_INT_DIGITS ((( 256 + SP_WORD_SIZE) / SP_WORD_SIZE) + 1)
#endif #endif
#elif !defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_HAVE_SP_DH) #elif !defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_HAVE_SP_DH)
#ifdef WOLFSSL_SP_MATH_ALL #ifdef WOLFSSL_SP_MATH_ALL
#define SP_INT_DIGITS \ #define SP_INT_DIGITS \
((2 * ( 521 + SP_WORD_SIZE) + SP_WORD_SIZE) / SP_WORD_SIZE) (((2 * ( 521 + SP_WORD_SIZE) + SP_WORD_SIZE) / SP_WORD_SIZE) + 1)
#elif defined(WOLFSSL_SP_384) #elif defined(WOLFSSL_SP_384)
#define SP_INT_DIGITS (( 768 + SP_WORD_SIZE) / SP_WORD_SIZE) #define SP_INT_DIGITS ((( 768 + SP_WORD_SIZE) / SP_WORD_SIZE) + 1)
#else #else
#define SP_INT_DIGITS (( 512 + SP_WORD_SIZE) / SP_WORD_SIZE) #define SP_INT_DIGITS ((( 512 + SP_WORD_SIZE) / SP_WORD_SIZE) + 1)
#endif #endif
#elif defined(WOLFSSL_SP_4096) #elif defined(WOLFSSL_SP_4096)
#if defined(WOLFSSL_HAVE_SP_DH) #if defined(WOLFSSL_HAVE_SP_DH)
#define SP_INT_DIGITS ((8192 + SP_WORD_SIZE) / SP_WORD_SIZE) #define SP_INT_DIGITS (((8192 + SP_WORD_SIZE) / SP_WORD_SIZE) + 1)
#else #else
#define SP_INT_DIGITS ((4096 + SP_WORD_SIZE) / SP_WORD_SIZE) #define SP_INT_DIGITS (((4096 + SP_WORD_SIZE) / SP_WORD_SIZE) + 1)
#endif #endif
#elif !defined(WOLFSSL_SP_NO_3072) #elif !defined(WOLFSSL_SP_NO_3072)
#if defined(WOLFSSL_HAVE_SP_DH) #if defined(WOLFSSL_HAVE_SP_DH)
#define SP_INT_DIGITS ((6144 + SP_WORD_SIZE) / SP_WORD_SIZE) #define SP_INT_DIGITS (((6144 + SP_WORD_SIZE) / SP_WORD_SIZE) + 1)
#else #else
#define SP_INT_DIGITS ((3072 + SP_WORD_SIZE) / SP_WORD_SIZE) #define SP_INT_DIGITS (((3072 + SP_WORD_SIZE) / SP_WORD_SIZE) + 1)
#endif #endif
#else #else
#if defined(WOLFSSL_HAVE_SP_DH) #if defined(WOLFSSL_HAVE_SP_DH)
#define SP_INT_DIGITS ((4096 + SP_WORD_SIZE) / SP_WORD_SIZE) #define SP_INT_DIGITS (((4096 + SP_WORD_SIZE) / SP_WORD_SIZE) + 1)
#else #else
#define SP_INT_DIGITS ((2048 + SP_WORD_SIZE) / SP_WORD_SIZE) #define SP_INT_DIGITS (((2048 + SP_WORD_SIZE) / SP_WORD_SIZE) + 1)
#endif #endif
#endif #endif
#endif #endif