forked from wolfSSL/wolfssl
SP: CT from_mp when sp_digit bits equal mp_digit bits.
Made constant time copy of values from an mp_int int array of sp_digit. Stops OOB writes when mp_int is bigger than it should be.
This commit is contained in:
committed by
David Garske
parent
9ac3c9ec05
commit
23a01b3276
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
|
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 64
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 64
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 64
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 64
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 64
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 64
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 64
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
|
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
|
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 29
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
@ -1949,7 +1952,7 @@ static WC_INLINE sp_digit sp_2048_div_word_36(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (sp_digit)(m >> 29);
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (m >> 58) - (sp_digit)(d >> 58);
|
||||
r += (sp_digit)(m >> 58) - (sp_digit)(d >> 58);
|
||||
|
||||
m = d - ((sp_int64)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint32)m >> 31)) * 2 + 1;
|
||||
@ -3011,7 +3014,7 @@ static WC_INLINE sp_digit sp_2048_div_word_72(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (sp_digit)(m >> 29);
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (m >> 58) - (sp_digit)(d >> 58);
|
||||
r += (sp_digit)(m >> 58) - (sp_digit)(d >> 58);
|
||||
|
||||
m = d - ((sp_int64)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint32)m >> 31)) * 2 + 1;
|
||||
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 29
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
@ -5631,7 +5637,7 @@ static WC_INLINE sp_digit sp_3072_div_word_53(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (sp_digit)(m >> 29);
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (m >> 58) - (sp_digit)(d >> 58);
|
||||
r += (sp_digit)(m >> 58) - (sp_digit)(d >> 58);
|
||||
|
||||
m = d - ((sp_int64)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint32)m >> 31)) * 2 + 1;
|
||||
@ -6470,7 +6476,7 @@ static WC_INLINE sp_digit sp_3072_div_word_106(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (sp_digit)(m >> 29);
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (m >> 58) - (sp_digit)(d >> 58);
|
||||
r += (sp_digit)(m >> 58) - (sp_digit)(d >> 58);
|
||||
|
||||
m = d - ((sp_int64)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint32)m >> 31)) * 2 + 1;
|
||||
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 28
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
@ -9654,7 +9663,7 @@ static WC_INLINE sp_digit sp_3072_div_word_56(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (sp_digit)(m >> 28);
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (m >> 56) - (sp_digit)(d >> 56);
|
||||
r += (sp_digit)(m >> 56) - (sp_digit)(d >> 56);
|
||||
|
||||
m = d - ((sp_int64)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint32)m >> 31)) * 2 + 1;
|
||||
@ -10572,7 +10581,7 @@ static WC_INLINE sp_digit sp_3072_div_word_112(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (sp_digit)(m >> 28);
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (m >> 56) - (sp_digit)(d >> 56);
|
||||
r += (sp_digit)(m >> 56) - (sp_digit)(d >> 56);
|
||||
|
||||
m = d - ((sp_int64)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint32)m >> 31)) * 2 + 1;
|
||||
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 29
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
@ -13274,7 +13286,7 @@ static WC_INLINE sp_digit sp_4096_div_word_71(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (sp_digit)(m >> 29);
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (m >> 58) - (sp_digit)(d >> 58);
|
||||
r += (sp_digit)(m >> 58) - (sp_digit)(d >> 58);
|
||||
|
||||
m = d - ((sp_int64)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint32)m >> 31)) * 2 + 1;
|
||||
@ -14114,7 +14126,7 @@ static WC_INLINE sp_digit sp_4096_div_word_142(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (sp_digit)(m >> 29);
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (m >> 58) - (sp_digit)(d >> 58);
|
||||
r += (sp_digit)(m >> 58) - (sp_digit)(d >> 58);
|
||||
|
||||
m = d - ((sp_int64)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint32)m >> 31)) * 2 + 1;
|
||||
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 26
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
@ -17177,7 +17192,7 @@ static WC_INLINE sp_digit sp_4096_div_word_81(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (sp_digit)(m >> 26);
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (m >> 52) - (sp_digit)(d >> 52);
|
||||
r += (sp_digit)(m >> 52) - (sp_digit)(d >> 52);
|
||||
|
||||
m = d - ((sp_int64)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint32)m >> 31)) * 2 + 1;
|
||||
@ -18081,7 +18096,7 @@ static WC_INLINE sp_digit sp_4096_div_word_162(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (sp_digit)(m >> 26);
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (m >> 52) - (sp_digit)(d >> 52);
|
||||
r += (sp_digit)(m >> 52) - (sp_digit)(d >> 52);
|
||||
|
||||
m = d - ((sp_int64)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint32)m >> 31)) * 2 + 1;
|
||||
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 29
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 26
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 25
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
@ -43708,7 +43732,7 @@ static WC_INLINE sp_digit sp_1024_div_word_42(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (sp_digit)(m >> 25);
|
||||
m = d - ((sp_int64)r * div);
|
||||
r += (m >> 50) - (sp_digit)(d >> 50);
|
||||
r += (sp_digit)(m >> 50) - (sp_digit)(d >> 50);
|
||||
|
||||
m = d - ((sp_int64)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint32)m >> 31)) * 2 + 1;
|
||||
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 25
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
|
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 61
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
@ -869,7 +872,7 @@ static WC_INLINE sp_digit sp_2048_div_word_17(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (sp_digit)(m >> 61);
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (m >> 122) - (sp_digit)(d >> 122);
|
||||
r += (sp_digit)(m >> 122) - (sp_digit)(d >> 122);
|
||||
|
||||
m = d - ((sp_int128)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint64)m >> 63)) * 2 + 1;
|
||||
@ -1694,7 +1697,7 @@ static WC_INLINE sp_digit sp_2048_div_word_34(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (sp_digit)(m >> 61);
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (m >> 122) - (sp_digit)(d >> 122);
|
||||
r += (sp_digit)(m >> 122) - (sp_digit)(d >> 122);
|
||||
|
||||
m = d - ((sp_int128)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint64)m >> 63)) * 2 + 1;
|
||||
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 57
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
@ -4393,7 +4399,7 @@ static WC_INLINE sp_digit sp_2048_div_word_18(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (sp_digit)(m >> 57);
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (m >> 114) - (sp_digit)(d >> 114);
|
||||
r += (sp_digit)(m >> 114) - (sp_digit)(d >> 114);
|
||||
|
||||
m = d - ((sp_int128)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint64)m >> 63)) * 2 + 1;
|
||||
@ -5279,7 +5285,7 @@ static WC_INLINE sp_digit sp_2048_div_word_36(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (sp_digit)(m >> 57);
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (m >> 114) - (sp_digit)(d >> 114);
|
||||
r += (sp_digit)(m >> 114) - (sp_digit)(d >> 114);
|
||||
|
||||
m = d - ((sp_int128)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint64)m >> 63)) * 2 + 1;
|
||||
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 60
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
@ -7732,7 +7741,7 @@ static WC_INLINE sp_digit sp_3072_div_word_26(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (sp_digit)(m >> 60);
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (m >> 120) - (sp_digit)(d >> 120);
|
||||
r += (sp_digit)(m >> 120) - (sp_digit)(d >> 120);
|
||||
|
||||
m = d - ((sp_int128)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint64)m >> 63)) * 2 + 1;
|
||||
@ -8563,7 +8572,7 @@ static WC_INLINE sp_digit sp_3072_div_word_52(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (sp_digit)(m >> 60);
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (m >> 120) - (sp_digit)(d >> 120);
|
||||
r += (sp_digit)(m >> 120) - (sp_digit)(d >> 120);
|
||||
|
||||
m = d - ((sp_int128)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint64)m >> 63)) * 2 + 1;
|
||||
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 57
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
@ -11400,7 +11412,7 @@ static WC_INLINE sp_digit sp_3072_div_word_27(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (sp_digit)(m >> 57);
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (m >> 114) - (sp_digit)(d >> 114);
|
||||
r += (sp_digit)(m >> 114) - (sp_digit)(d >> 114);
|
||||
|
||||
m = d - ((sp_int128)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint64)m >> 63)) * 2 + 1;
|
||||
@ -12297,7 +12309,7 @@ static WC_INLINE sp_digit sp_3072_div_word_54(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (sp_digit)(m >> 57);
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (m >> 114) - (sp_digit)(d >> 114);
|
||||
r += (sp_digit)(m >> 114) - (sp_digit)(d >> 114);
|
||||
|
||||
m = d - ((sp_int128)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint64)m >> 63)) * 2 + 1;
|
||||
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 59
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
@ -14792,7 +14807,7 @@ static WC_INLINE sp_digit sp_4096_div_word_35(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (sp_digit)(m >> 59);
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (m >> 118) - (sp_digit)(d >> 118);
|
||||
r += (sp_digit)(m >> 118) - (sp_digit)(d >> 118);
|
||||
|
||||
m = d - ((sp_int128)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint64)m >> 63)) * 2 + 1;
|
||||
@ -15618,7 +15633,7 @@ static WC_INLINE sp_digit sp_4096_div_word_70(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (sp_digit)(m >> 59);
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (m >> 118) - (sp_digit)(d >> 118);
|
||||
r += (sp_digit)(m >> 118) - (sp_digit)(d >> 118);
|
||||
|
||||
m = d - ((sp_int128)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint64)m >> 63)) * 2 + 1;
|
||||
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 53
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
@ -18510,7 +18528,7 @@ static WC_INLINE sp_digit sp_4096_div_word_39(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (sp_digit)(m >> 53);
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (m >> 106) - (sp_digit)(d >> 106);
|
||||
r += (sp_digit)(m >> 106) - (sp_digit)(d >> 106);
|
||||
|
||||
m = d - ((sp_int128)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint64)m >> 63)) * 2 + 1;
|
||||
@ -19408,7 +19426,7 @@ static WC_INLINE sp_digit sp_4096_div_word_78(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (sp_digit)(m >> 53);
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (m >> 106) - (sp_digit)(d >> 106);
|
||||
r += (sp_digit)(m >> 106) - (sp_digit)(d >> 106);
|
||||
|
||||
m = d - ((sp_int128)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint64)m >> 63)) * 2 + 1;
|
||||
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 52
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 55
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 58
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
@ -43170,7 +43197,7 @@ static WC_INLINE sp_digit sp_1024_div_word_18(sp_digit d1, sp_digit d0,
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (sp_digit)(m >> 57);
|
||||
m = d - ((sp_int128)r * div);
|
||||
r += (m >> 114) - (sp_digit)(d >> 114);
|
||||
r += (sp_digit)(m >> 114) - (sp_digit)(d >> 114);
|
||||
|
||||
m = d - ((sp_int128)r * div);
|
||||
sign = (sp_digit)(0 - ((sp_uint64)m >> 63)) * 2 + 1;
|
||||
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 57
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
|
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 32
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
|
@ -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)
|
||||
{
|
||||
#if DIGIT_BIT == 64
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 64
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 64
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 64
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 64
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 64
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
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)
|
||||
{
|
||||
#if DIGIT_BIT == 64
|
||||
int j;
|
||||
int i;
|
||||
int j = 0;
|
||||
|
||||
XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
|
||||
|
||||
for (j = a->used; j < size; j++) {
|
||||
r[j] = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
sp_digit mask =
|
||||
(((sp_digit)(a->used - i - 1)) >> (SP_WORD_SIZE - 1)) - 1;
|
||||
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
|
||||
int i;
|
||||
|
Reference in New Issue
Block a user