ECC library bugfixes.
Submitted by: Emilia Kapser (Google)
This commit is contained in:
parent
92a97e52a0
commit
d4ba6424a1
3 changed files with 17 additions and 6 deletions
4
CHANGES
4
CHANGES
|
@ -4,6 +4,10 @@
|
||||||
|
|
||||||
Changes between 0.9.8o and 0.9.8p [xx XXX xxxx]
|
Changes between 0.9.8o and 0.9.8p [xx XXX xxxx]
|
||||||
|
|
||||||
|
*) ec2_GF2m_simple_mul bugfix: compute correct result if the output EC_POINT
|
||||||
|
is also one of the inputs.
|
||||||
|
[Emilia Käsper <emilia.kasper@esat.kuleuven.be> (Google)]
|
||||||
|
|
||||||
*) Don't repeatedly append PBE algorithms to table if they already exist.
|
*) Don't repeatedly append PBE algorithms to table if they already exist.
|
||||||
Sort table on each new add. This effectively makes the table read only
|
Sort table on each new add. This effectively makes the table read only
|
||||||
after all algorithms are added and subsequent calls to PKCS12_pbe_add
|
after all algorithms are added and subsequent calls to PKCS12_pbe_add
|
||||||
|
|
|
@ -318,6 +318,7 @@ int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
size_t i;
|
size_t i;
|
||||||
EC_POINT *p=NULL;
|
EC_POINT *p=NULL;
|
||||||
|
EC_POINT *acc = NULL;
|
||||||
|
|
||||||
if (ctx == NULL)
|
if (ctx == NULL)
|
||||||
{
|
{
|
||||||
|
@ -337,15 +338,16 @@ int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((p = EC_POINT_new(group)) == NULL) goto err;
|
if ((p = EC_POINT_new(group)) == NULL) goto err;
|
||||||
|
if ((acc = EC_POINT_new(group)) == NULL) goto err;
|
||||||
|
|
||||||
if (!EC_POINT_set_to_infinity(group, r)) goto err;
|
if (!EC_POINT_set_to_infinity(group, acc)) goto err;
|
||||||
|
|
||||||
if (scalar)
|
if (scalar)
|
||||||
{
|
{
|
||||||
if (!ec_GF2m_montgomery_point_multiply(group, p, scalar, group->generator, ctx)) goto err;
|
if (!ec_GF2m_montgomery_point_multiply(group, p, scalar, group->generator, ctx)) goto err;
|
||||||
if (BN_is_negative(scalar))
|
if (BN_is_negative(scalar))
|
||||||
if (!group->meth->invert(group, p, ctx)) goto err;
|
if (!group->meth->invert(group, p, ctx)) goto err;
|
||||||
if (!group->meth->add(group, r, r, p, ctx)) goto err;
|
if (!group->meth->add(group, acc, acc, p, ctx)) goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < num; i++)
|
for (i = 0; i < num; i++)
|
||||||
|
@ -353,13 +355,16 @@ int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *scalar,
|
||||||
if (!ec_GF2m_montgomery_point_multiply(group, p, scalars[i], points[i], ctx)) goto err;
|
if (!ec_GF2m_montgomery_point_multiply(group, p, scalars[i], points[i], ctx)) goto err;
|
||||||
if (BN_is_negative(scalars[i]))
|
if (BN_is_negative(scalars[i]))
|
||||||
if (!group->meth->invert(group, p, ctx)) goto err;
|
if (!group->meth->invert(group, p, ctx)) goto err;
|
||||||
if (!group->meth->add(group, r, r, p, ctx)) goto err;
|
if (!group->meth->add(group, acc, acc, p, ctx)) goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!EC_POINT_copy(r, acc)) goto err;
|
||||||
|
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
if (p) EC_POINT_free(p);
|
if (p) EC_POINT_free(p);
|
||||||
|
if (acc) EC_POINT_free(acc);
|
||||||
if (new_ctx != NULL)
|
if (new_ctx != NULL)
|
||||||
BN_CTX_free(new_ctx);
|
BN_CTX_free(new_ctx);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -169,11 +169,13 @@ static void ec_pre_comp_clear_free(void *pre_)
|
||||||
EC_POINT **p;
|
EC_POINT **p;
|
||||||
|
|
||||||
for (p = pre->points; *p != NULL; p++)
|
for (p = pre->points; *p != NULL; p++)
|
||||||
|
{
|
||||||
EC_POINT_clear_free(*p);
|
EC_POINT_clear_free(*p);
|
||||||
OPENSSL_cleanse(pre->points, sizeof pre->points);
|
OPENSSL_cleanse(p, sizeof *p);
|
||||||
|
}
|
||||||
OPENSSL_free(pre->points);
|
OPENSSL_free(pre->points);
|
||||||
}
|
}
|
||||||
OPENSSL_cleanse(pre, sizeof pre);
|
OPENSSL_cleanse(pre, sizeof *pre);
|
||||||
OPENSSL_free(pre);
|
OPENSSL_free(pre);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue