forked from wolfSSL/wolfssl
Merge pull request #4930 from SparkiDev/tfm_alloc_fails
TFM: handle more alloc failure cases gracefully
This commit is contained in:
@ -1457,7 +1457,7 @@ int fp_invmod_mont_ct(fp_int *a, fp_int *b, fp_int *c, fp_digit mp)
|
|||||||
err |= fp_montgomery_reduce(&pre[i], b, mp);
|
err |= fp_montgomery_reduce(&pre[i], b, mp);
|
||||||
}
|
}
|
||||||
|
|
||||||
fp_sub_d(b, 2, e);
|
err |= fp_sub_d(b, 2, e);
|
||||||
/* Highest bit is always set. */
|
/* Highest bit is always set. */
|
||||||
j = 1;
|
j = 1;
|
||||||
for (i = fp_count_bits(e)-2; i >= 0; i--) {
|
for (i = fp_count_bits(e)-2; i >= 0; i--) {
|
||||||
@ -1805,7 +1805,11 @@ int fp_exptmod_nb(exptModNb_t* nb, fp_int* G, fp_int* X, fp_int* P, fp_int* Y)
|
|||||||
/* reduce G -> R[1] */
|
/* reduce G -> R[1] */
|
||||||
if (fp_cmp_mag(P, G) != FP_GT) {
|
if (fp_cmp_mag(P, G) != FP_GT) {
|
||||||
/* G > P so we reduce it first */
|
/* G > P so we reduce it first */
|
||||||
fp_mod(G, P, &nb->R[1]);
|
err = fp_mod(G, P, &nb->R[1]);
|
||||||
|
if (err != FP_OKAY) {
|
||||||
|
nb->state = TFM_EXPTMOD_NB_INIT;
|
||||||
|
return err;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
fp_copy(G, &nb->R[1]);
|
fp_copy(G, &nb->R[1]);
|
||||||
}
|
}
|
||||||
@ -2199,11 +2203,23 @@ static int _fp_exptmod_nct(fp_int * G, fp_int * X, fp_int * P, fp_int * Y)
|
|||||||
/* now set M[1] to G * R mod m */
|
/* now set M[1] to G * R mod m */
|
||||||
if (fp_cmp_mag(P, G) != FP_GT) {
|
if (fp_cmp_mag(P, G) != FP_GT) {
|
||||||
/* G > P so we reduce it first */
|
/* G > P so we reduce it first */
|
||||||
fp_mod(G, P, &M[1]);
|
err = fp_mod(G, P, &M[1]);
|
||||||
|
if (err != FP_OKAY) {
|
||||||
|
#ifndef WOLFSSL_NO_MALLOC
|
||||||
|
XFREE(M, NULL, DYNAMIC_TYPE_BIGINT);
|
||||||
|
#endif
|
||||||
|
return err;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
fp_copy(G, &M[1]);
|
fp_copy(G, &M[1]);
|
||||||
}
|
}
|
||||||
fp_mulmod (&M[1], res, P, &M[1]);
|
err = fp_mulmod (&M[1], res, P, &M[1]);
|
||||||
|
if (err != FP_OKAY) {
|
||||||
|
#ifndef WOLFSSL_NO_MALLOC
|
||||||
|
XFREE(M, NULL, DYNAMIC_TYPE_BIGINT);
|
||||||
|
#endif
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
/* compute the value at M[1<<(winsize-1)] by
|
/* compute the value at M[1<<(winsize-1)] by
|
||||||
* squaring M[1] (winsize-1) times */
|
* squaring M[1] (winsize-1) times */
|
||||||
@ -4101,7 +4117,8 @@ int fp_sub_d(fp_int *a, fp_digit b, fp_int *c)
|
|||||||
if (c->size < FP_SIZE) {
|
if (c->size < FP_SIZE) {
|
||||||
err = fp_sub(a, tmp, tmp);
|
err = fp_sub(a, tmp, tmp);
|
||||||
fp_copy(tmp, c);
|
fp_copy(tmp, c);
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
err = fp_sub(a, tmp, c);
|
err = fp_sub(a, tmp, c);
|
||||||
|
Reference in New Issue
Block a user