@@ -75,6 +75,12 @@ struct xmalloc_slot {
7575 #define MP_POINT_SIZE (196)
7676 #define MP_DIGITS_BUFFER_SIZE_0 (MP_DIGIT_SIZE * 18 * 8)
7777 #define MP_DIGITS_BUFFER_SIZE_1 (MP_DIGIT_SIZE * 2 * 8 * 6)
78+ #elif SP_WORD_SIZE == 64
79+ #define MP_POINT_SIZE (200)
80+ #define MP_DIGITS_BUFFER_SIZE_0 (MP_DIGIT_SIZE * 18 * 4)
81+ #define MP_DIGITS_BUFFER_SIZE_1 (MP_DIGIT_SIZE * (2 * 4 * 6))
82+ #define MP_DIGITS_BUFFER_SIZE_2 (MP_DIGIT_SIZE * (2 * 4 * 6))
83+ #define MP_MONTGOMERY_SIZE (sizeof(int64_t) * 2 * 8)
7884 #else
7985 #define MP_POINT_SIZE (220)
8086 #define MP_DIGITS_BUFFER_SIZE_0 (MP_DIGIT_SIZE * 18 * 9)
@@ -91,6 +97,12 @@ struct xmalloc_slot {
9197 #define MP_DIGITS_BUFFER_SIZE_0 (MP_DIGIT_SIZE * 18 * 12)
9298 #define MP_DIGITS_BUFFER_SIZE_1 (MP_DIGIT_SIZE * 2 * 12 * 6)
9399 #define MP_MONTGOMERY_SIZE (sizeof(int64_t) * 12)
100+ #elif SP_WORD_SIZE == 64
101+ #define MP_POINT_SIZE (344)
102+ #define MP_DIGITS_BUFFER_SIZE_0 (MP_DIGIT_SIZE * 18 * 7)
103+ #define MP_DIGITS_BUFFER_SIZE_1 (MP_DIGIT_SIZE * (2 * 7 * 6))
104+ #define MP_DIGITS_BUFFER_SIZE_2 (MP_DIGIT_SIZE * (2 * 7 * 6))
105+ #define MP_MONTGOMERY_SIZE (sizeof(int64_t) * 2 * 12)
94106 #else
95107 #define MP_POINT_SIZE (364)
96108 #define MP_DIGITS_BUFFER_SIZE_0 (MP_DIGIT_SIZE * 18 * 15)
@@ -107,6 +119,12 @@ struct xmalloc_slot {
107119 #define MP_DIGITS_BUFFER_SIZE_0 (MP_DIGIT_SIZE * 18 * 17)
108120 #define MP_DIGITS_BUFFER_SIZE_1 (MP_DIGIT_SIZE * 2 * 17 * 6)
109121 #define MP_MONTGOMERY_SIZE (sizeof(int64_t) * 12)
122+ #elif SP_WORD_SIZE == 64
123+ #define MP_POINT_SIZE (440)
124+ #define MP_DIGITS_BUFFER_SIZE_0 (MP_DIGIT_SIZE * 18 * 9)
125+ #define MP_DIGITS_BUFFER_SIZE_1 (MP_DIGIT_SIZE * (2 * 9 * 6))
126+ #define MP_DIGITS_BUFFER_SIZE_2 (MP_DIGIT_SIZE * (2 * 9 * 6))
127+ #define MP_MONTGOMERY_SIZE (sizeof(int64_t) * 2 * 12)
110128 #else
111129 #define MP_POINT_SIZE (508)
112130 #define MP_DIGITS_BUFFER_SIZE_0 (MP_DIGIT_SIZE * 18 * 21)
@@ -129,7 +147,13 @@ struct xmalloc_slot {
129147 #endif
130148 static uint8_t mp_points_0 [MP_POINT_SIZE * 2 ];
131149 static uint8_t mp_points_1 [MP_POINT_SIZE * 3 ];
150+ /* x86_64 SP always uses win_add_sub with 33+2 precomputed points,
151+ * even when WOLFSSL_SP_SMALL is defined */
152+ #if SP_WORD_SIZE == 64
153+ static uint8_t mp_points_2 [MP_POINT_SIZE * (33 + 2 )];
154+ #else
132155 static uint8_t mp_points_2 [MP_POINT_SIZE * (16 + 1 )];
156+ #endif
133157 static uint8_t mp_digits_buffer_0 [MP_DIGITS_BUFFER_SIZE_0 ];
134158 static uint8_t mp_digits_buffer_1 [MP_DIGITS_BUFFER_SIZE_1 ];
135159 #if !defined(WOLFSSL_SP_ARM_CORTEX_M_ASM ) && (defined(WOLFBOOT_SIGN_ECC256 ) || defined(WOLFBOOT_SIGN_ECC384 ) || defined(WOLFBOOT_SIGN_ECC521 ))
@@ -234,7 +258,11 @@ static struct xmalloc_slot xmalloc_pool[] = {
234258 { (uint8_t * )mp_digits_buffer_2 , MP_DIGITS_BUFFER_SIZE_2 , 0 },
235259 { (uint8_t * )mp_montgomery , MP_MONTGOMERY_SIZE , 0 },
236260 #endif
261+ #if SP_WORD_SIZE == 64
262+ { (uint8_t * )mp_points_2 , MP_POINT_SIZE * (33 + 2 ), 0 },
263+ #else
237264 { (uint8_t * )mp_points_2 , MP_POINT_SIZE * (16 + 1 ), 0 },
265+ #endif
238266 { (uint8_t * )mp_digits_buffer_0 , MP_DIGITS_BUFFER_SIZE_0 , 0 },
239267 { (uint8_t * )mp_digits_buffer_1 , MP_DIGITS_BUFFER_SIZE_1 , 0 },
240268 #ifndef WC_NO_CACHE_RESISTANT
0 commit comments