Merge pull request #5403 from SparkiDev/ecc_import_priv_order

ECC import priv: validate priv is less than order
This commit is contained in:
David Garske
2022-08-15 21:36:46 -07:00
committed by GitHub
8 changed files with 462 additions and 270 deletions

View File

@@ -9952,6 +9952,36 @@ int wc_ecc_import_private_key_ex(const byte* priv, word32 privSz,
ret = ASN_GETINT_E; ret = ASN_GETINT_E;
} }
#endif /* HAVE_WOLF_BIGINT */ #endif /* HAVE_WOLF_BIGINT */
#ifdef WOLFSSL_VALIDATE_ECC_IMPORT
if (ret == 0) {
#ifdef WOLFSSL_SMALL_STACK
mp_int* order = NULL;
#else
mp_int order[1];
#endif
#ifdef WOLFSSL_SMALL_STACK
order = (mp_int*)XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_ECC);
if (order == NULL) {
ret = MEMORY_E;
}
#endif
if (ret == 0) {
ret = mp_init(order);
}
if (ret == 0) {
ret = mp_read_radix(order, key->dp->order, MP_RADIX_HEX);
}
if ((ret == 0) && (mp_cmp(&key->k, order) != MP_LT)) {
ret = ECC_PRIV_KEY_E;
}
#ifdef WOLFSSL_SMALL_STACK
XFREE(order, key->heap, DYNAMIC_TYPE_ECC);
#endif
}
#endif /* WOLFSSL_VALIDATE_ECC_IMPORT */
#endif /* WOLFSSL_CRYPTOCELL */ #endif /* WOLFSSL_CRYPTOCELL */

View File

@@ -112,12 +112,15 @@ static void sp_2048_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -17676,12 +17679,15 @@ static void sp_3072_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -44710,12 +44716,15 @@ static void sp_4096_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -64715,12 +64724,15 @@ static int sp_256_mod_mul_norm_8(sp_digit* r, const sp_digit* a, const sp_digit*
static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -86096,12 +86108,15 @@ static int sp_384_mod_mul_norm_12(sp_digit* r, const sp_digit* a, const sp_digit
static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -112020,12 +112035,15 @@ static int sp_521_mod_mul_norm_17(sp_digit* r, const sp_digit* a, const sp_digit
static void sp_521_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_521_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -140879,12 +140897,15 @@ static void sp_1024_point_free_32(sp_point_1024* p, int clear, void* heap)
static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;

View File

@@ -153,12 +153,15 @@ static void sp_2048_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 64 #if DIGIT_BIT == 64
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 64 #elif DIGIT_BIT > 64
int i; int i;
@@ -7007,12 +7010,15 @@ static void sp_3072_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 64 #if DIGIT_BIT == 64
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 64 #elif DIGIT_BIT > 64
int i; int i;
@@ -16571,12 +16577,15 @@ static void sp_4096_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 64 #if DIGIT_BIT == 64
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 64 #elif DIGIT_BIT > 64
int i; int i;
@@ -22063,12 +22072,15 @@ static int sp_256_mod_mul_norm_4(sp_digit* r, const sp_digit* a, const sp_digit*
static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 64 #if DIGIT_BIT == 64
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 64 #elif DIGIT_BIT > 64
int i; int i;
@@ -42457,12 +42469,15 @@ static int sp_384_mod_mul_norm_6(sp_digit* r, const sp_digit* a, const sp_digit*
static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 64 #if DIGIT_BIT == 64
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 64 #elif DIGIT_BIT > 64
int i; int i;
@@ -69617,12 +69632,15 @@ static int sp_521_mod_mul_norm_9(sp_digit* r, const sp_digit* a,
static void sp_521_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_521_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 64 #if DIGIT_BIT == 64
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 64 #elif DIGIT_BIT > 64
int i; int i;
@@ -114078,12 +114096,15 @@ static void sp_1024_point_free_16(sp_point_1024* p, int clear, void* heap)
static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 64 #if DIGIT_BIT == 64
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 64 #elif DIGIT_BIT > 64
int i; int i;

View File

@@ -112,12 +112,15 @@ static void sp_2048_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -30295,12 +30298,15 @@ static void sp_3072_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -83381,12 +83387,15 @@ static void sp_4096_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -97778,12 +97787,15 @@ static int sp_256_mod_mul_norm_8(sp_digit* r, const sp_digit* a, const sp_digit*
static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -109284,12 +109296,15 @@ static int sp_384_mod_mul_norm_12(sp_digit* r, const sp_digit* a, const sp_digit
static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -120367,12 +120382,15 @@ static int sp_521_mod_mul_norm_17(sp_digit* r, const sp_digit* a, const sp_digit
static void sp_521_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_521_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -201987,12 +202005,15 @@ static void sp_1024_point_free_32(sp_point_1024* p, int clear, void* heap)
static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;

View File

@@ -132,12 +132,15 @@ static void sp_2048_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 29 #if DIGIT_BIT == 29
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 29 #elif DIGIT_BIT > 29
int i; int i;
@@ -4882,12 +4885,15 @@ static void sp_3072_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 29 #if DIGIT_BIT == 29
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 29 #elif DIGIT_BIT > 29
int i; int i;
@@ -8184,12 +8190,15 @@ static void sp_3072_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 28 #if DIGIT_BIT == 28
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 28 #elif DIGIT_BIT > 28
int i; int i;
@@ -12516,12 +12525,15 @@ static void sp_4096_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 29 #if DIGIT_BIT == 29
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 29 #elif DIGIT_BIT > 29
int i; int i;
@@ -15686,12 +15698,15 @@ static void sp_4096_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 26 #if DIGIT_BIT == 26
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 26 #elif DIGIT_BIT > 26
int i; int i;
@@ -20388,12 +20403,15 @@ SP_NOINLINE static int sp_256_sub_9(sp_digit* r, const sp_digit* a,
static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 29 #if DIGIT_BIT == 29
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 29 #elif DIGIT_BIT > 29
int i; int i;
@@ -27588,12 +27606,15 @@ SP_NOINLINE static int sp_384_sub_15(sp_digit* r, const sp_digit* a,
static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 26 #if DIGIT_BIT == 26
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 26 #elif DIGIT_BIT > 26
int i; int i;
@@ -35173,12 +35194,15 @@ SP_NOINLINE static int sp_521_sub_21(sp_digit* r, const sp_digit* a,
static void sp_521_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_521_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 25 #if DIGIT_BIT == 25
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 25 #elif DIGIT_BIT > 25
int i; int i;
@@ -43937,12 +43961,15 @@ static void sp_1024_point_free_42(sp_point_1024* p, int clear, void* heap)
static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 25 #if DIGIT_BIT == 25
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 25 #elif DIGIT_BIT > 25
int i; int i;

View File

@@ -133,12 +133,15 @@ static void sp_2048_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 61 #if DIGIT_BIT == 61
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 61 #elif DIGIT_BIT > 61
int i; int i;
@@ -3409,12 +3412,15 @@ static void sp_2048_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 57 #if DIGIT_BIT == 57
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 57 #elif DIGIT_BIT > 57
int i; int i;
@@ -7071,12 +7077,15 @@ static void sp_3072_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 60 #if DIGIT_BIT == 60
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 60 #elif DIGIT_BIT > 60
int i; int i;
@@ -10278,12 +10287,15 @@ static void sp_3072_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 57 #if DIGIT_BIT == 57
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 57 #elif DIGIT_BIT > 57
int i; int i;
@@ -14125,12 +14137,15 @@ static void sp_4096_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 59 #if DIGIT_BIT == 59
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 59 #elif DIGIT_BIT > 59
int i; int i;
@@ -17191,12 +17206,15 @@ static void sp_4096_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 53 #if DIGIT_BIT == 53
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 53 #elif DIGIT_BIT > 53
int i; int i;
@@ -21432,12 +21450,15 @@ SP_NOINLINE static int sp_256_sub_5(sp_digit* r, const sp_digit* a,
static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 52 #if DIGIT_BIT == 52
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 52 #elif DIGIT_BIT > 52
int i; int i;
@@ -28159,12 +28180,15 @@ SP_NOINLINE static int sp_384_sub_7(sp_digit* r, const sp_digit* a,
static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 55 #if DIGIT_BIT == 55
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 55 #elif DIGIT_BIT > 55
int i; int i;
@@ -35575,12 +35599,15 @@ SP_NOINLINE static int sp_521_sub_9(sp_digit* r, const sp_digit* a,
static void sp_521_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_521_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 58 #if DIGIT_BIT == 58
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 58 #elif DIGIT_BIT > 58
int i; int i;
@@ -43399,12 +43426,15 @@ static void sp_1024_point_free_18(sp_point_1024* p, int clear, void* heap)
static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 57 #if DIGIT_BIT == 57
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 57 #elif DIGIT_BIT > 57
int i; int i;

View File

@@ -121,12 +121,15 @@ static void sp_2048_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -5921,12 +5924,15 @@ static void sp_3072_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -11728,12 +11734,15 @@ static void sp_4096_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -16971,12 +16980,15 @@ static int sp_256_mod_mul_norm_8(sp_digit* r, const sp_digit* a, const sp_digit*
static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -25523,12 +25535,15 @@ static int sp_384_mod_mul_norm_12(sp_digit* r, const sp_digit* a, const sp_digit
static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -32721,12 +32736,15 @@ static int sp_521_mod_mul_norm_17(sp_digit* r, const sp_digit* a, const sp_digit
static void sp_521_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_521_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;
@@ -42411,12 +42429,15 @@ static void sp_1024_point_free_32(sp_point_1024* p, int clear, void* heap)
static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 32 #if DIGIT_BIT == 32
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 32 #elif DIGIT_BIT > 32
int i; int i;

View File

@@ -110,12 +110,15 @@ static void sp_2048_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 64 #if DIGIT_BIT == 64
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 64 #elif DIGIT_BIT > 64
int i; int i;
@@ -3055,12 +3058,15 @@ static void sp_3072_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 64 #if DIGIT_BIT == 64
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 64 #elif DIGIT_BIT > 64
int i; int i;
@@ -5935,12 +5941,15 @@ static void sp_4096_from_bin(sp_digit* r, int size, const byte* a, int n)
static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 64 #if DIGIT_BIT == 64
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 64 #elif DIGIT_BIT > 64
int i; int i;
@@ -8117,12 +8126,15 @@ static int sp_256_mod_mul_norm_4(sp_digit* r, const sp_digit* a, const sp_digit*
static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 64 #if DIGIT_BIT == 64
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 64 #elif DIGIT_BIT > 64
int i; int i;
@@ -27097,12 +27109,15 @@ static int sp_384_mod_mul_norm_6(sp_digit* r, const sp_digit* a, const sp_digit*
static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 64 #if DIGIT_BIT == 64
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 64 #elif DIGIT_BIT > 64
int i; int i;
@@ -51884,12 +51899,15 @@ static int sp_521_mod_mul_norm_9(sp_digit* r, const sp_digit* a, const sp_digit*
static void sp_521_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_521_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 64 #if DIGIT_BIT == 64
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 64 #elif DIGIT_BIT > 64
int i; int i;
@@ -93037,12 +93055,15 @@ static void sp_1024_point_free_16(sp_point_1024* p, int clear, void* heap)
static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a) static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a)
{ {
#if DIGIT_BIT == 64 #if DIGIT_BIT == 64
int j; int i;
int j = 0;
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used); for (i = 0; i < size; i++) {
sp_digit mask =
for (j = a->used; j < size; j++) { (((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
r[j] = 0; r[i] = a->dp[j] & mask;
j += (int)(((sp_digit)1) -
(((sp_digit)(a->used - i - 2)) >> (SP_WORD_SIZE - 1)));
} }
#elif DIGIT_BIT > 64 #elif DIGIT_BIT > 64
int i; int i;