Merge pull request #3124 from SparkiDev/sp_add_d

Fix sp_add_d
This commit is contained in:
toddouska
2020-07-16 10:56:28 -07:00
committed by GitHub

View File

@ -1003,26 +1003,31 @@ void sp_zero(sp_int* a)
int sp_add_d(sp_int* a, sp_int_digit d, sp_int* r) int sp_add_d(sp_int* a, sp_int_digit d, sp_int* r)
{ {
int i = 0; int i = 0;
sp_int_digit t;
r->used = a->used; r->used = a->used;
if (a->used == 0) { if (a->used == 0) {
r->used = 1; r->used = d > 0;
} }
r->dp[0] = a->dp[0] + d; t = a->dp[0] + d;
if (r->dp[i] < a->dp[i]) { if (t < a->dp[0]) {
for (; i < a->used; i++) { for (++i; i < a->used; i++) {
r->dp[i] = a->dp[i] + 1; r->dp[i] = a->dp[i] + 1;
if (r->dp[i] != 0) if (r->dp[i] != 0) {
break; break;
}
} }
if (i == a->used) { if (i == a->used) {
r->used++; r->used++;
r->dp[i] = 1; r->dp[i] = 1;
} }
} }
for (; i < a->used; i++) r->dp[0] = t;
r->dp[i] = a->dp[i]; if (r != a) {
for (++i; i < a->used; i++) {
r->dp[i] = a->dp[i];
}
}
return MP_OKAY; return MP_OKAY;
} }