Fix error checking and memory leaks in NISTZ256 precomputation.
Thanks to Brian Smith for reporting these issues. Reviewed-by: Rich Salz <rsalz@openssl.org> (cherry picked from commit 53dd4ddf71ad79a64be934ca19445b1cf560adab)
This commit is contained in:
parent
7238a82c8a
commit
9ed55313a7
@ -743,6 +743,7 @@ static int ecp_nistz256_mult_precompute(EC_GROUP *group, BN_CTX *ctx)
|
|||||||
EC_POINT *P = NULL, *T = NULL;
|
EC_POINT *P = NULL, *T = NULL;
|
||||||
const EC_POINT *generator;
|
const EC_POINT *generator;
|
||||||
EC_PRE_COMP *pre_comp;
|
EC_PRE_COMP *pre_comp;
|
||||||
|
BN_CTX *new_ctx = NULL;
|
||||||
int i, j, k, ret = 0;
|
int i, j, k, ret = 0;
|
||||||
size_t w;
|
size_t w;
|
||||||
|
|
||||||
@ -772,7 +773,7 @@ static int ecp_nistz256_mult_precompute(EC_GROUP *group, BN_CTX *ctx)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (ctx == NULL) {
|
if (ctx == NULL) {
|
||||||
ctx = BN_CTX_new();
|
ctx = new_ctx = BN_CTX_new();
|
||||||
if (ctx == NULL)
|
if (ctx == NULL)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
@ -803,15 +804,19 @@ static int ecp_nistz256_mult_precompute(EC_GROUP *group, BN_CTX *ctx)
|
|||||||
|
|
||||||
P = EC_POINT_new(group);
|
P = EC_POINT_new(group);
|
||||||
T = EC_POINT_new(group);
|
T = EC_POINT_new(group);
|
||||||
|
if (P == NULL || T == NULL)
|
||||||
|
goto err;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The zero entry is implicitly infinity, and we skip it, storing other
|
* The zero entry is implicitly infinity, and we skip it, storing other
|
||||||
* values with -1 offset.
|
* values with -1 offset.
|
||||||
*/
|
*/
|
||||||
EC_POINT_copy(T, generator);
|
if (!EC_POINT_copy(T, generator))
|
||||||
|
goto err;
|
||||||
|
|
||||||
for (k = 0; k < 64; k++) {
|
for (k = 0; k < 64; k++) {
|
||||||
EC_POINT_copy(P, T);
|
if (!EC_POINT_copy(P, T))
|
||||||
|
goto err;
|
||||||
for (j = 0; j < 37; j++) {
|
for (j = 0; j < 37; j++) {
|
||||||
/*
|
/*
|
||||||
* It would be faster to use
|
* It would be faster to use
|
||||||
@ -850,6 +855,8 @@ static int ecp_nistz256_mult_precompute(EC_GROUP *group, BN_CTX *ctx)
|
|||||||
err:
|
err:
|
||||||
if (ctx != NULL)
|
if (ctx != NULL)
|
||||||
BN_CTX_end(ctx);
|
BN_CTX_end(ctx);
|
||||||
|
BN_CTX_free(new_ctx);
|
||||||
|
|
||||||
if (pre_comp)
|
if (pre_comp)
|
||||||
ecp_nistz256_pre_comp_free(pre_comp);
|
ecp_nistz256_pre_comp_free(pre_comp);
|
||||||
if (precomp_storage)
|
if (precomp_storage)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user