Add EC_GROUP_order_bits, EC_GROUP_get0_order and EC_GROUP_get0_cofactor
New functions to return internal pointer for order and cofactor. This avoids the need to allocate a new BIGNUM which to copy the value to. Simplify code to use new functions. Reviewed-by: Rich Salz <rsalz@openssl.org>
This commit is contained in:
@@ -349,21 +349,43 @@ BN_MONT_CTX *EC_GROUP_get_mont_data(const EC_GROUP *group)
|
||||
|
||||
int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx)
|
||||
{
|
||||
if (group->order == NULL)
|
||||
return 0;
|
||||
if (!BN_copy(order, group->order))
|
||||
return 0;
|
||||
|
||||
return !BN_is_zero(order);
|
||||
}
|
||||
|
||||
const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group)
|
||||
{
|
||||
return group->order;
|
||||
}
|
||||
|
||||
int EC_GROUP_order_bits(const EC_GROUP *group)
|
||||
{
|
||||
if (group->order)
|
||||
return BN_num_bits(group->order);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor,
|
||||
BN_CTX *ctx)
|
||||
{
|
||||
|
||||
if (group->cofactor == NULL)
|
||||
return 0;
|
||||
if (!BN_copy(cofactor, group->cofactor))
|
||||
return 0;
|
||||
|
||||
return !BN_is_zero(group->cofactor);
|
||||
}
|
||||
|
||||
const BIGNUM *EC_GROUP_get0_cofactor(const EC_GROUP *group)
|
||||
{
|
||||
return group->cofactor;
|
||||
}
|
||||
|
||||
void EC_GROUP_set_curve_name(EC_GROUP *group, int nid)
|
||||
{
|
||||
group->curve_name = nid;
|
||||
@@ -536,16 +558,18 @@ int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx)
|
||||
r = 1;
|
||||
|
||||
if (!r) {
|
||||
const BIGNUM *ao, *bo, *ac, *bc;
|
||||
/* compare the order and cofactor */
|
||||
if (!EC_GROUP_get_order(a, a1, ctx) ||
|
||||
!EC_GROUP_get_order(b, b1, ctx) ||
|
||||
!EC_GROUP_get_cofactor(a, a2, ctx) ||
|
||||
!EC_GROUP_get_cofactor(b, b2, ctx)) {
|
||||
ao = EC_GROUP_get0_order(a);
|
||||
bo = EC_GROUP_get0_order(b);
|
||||
ac = EC_GROUP_get0_cofactor(a);
|
||||
bc = EC_GROUP_get0_cofactor(b);
|
||||
if (ao == NULL || bo == NULL) {
|
||||
BN_CTX_end(ctx);
|
||||
BN_CTX_free(ctx_new);
|
||||
return -1;
|
||||
}
|
||||
if (BN_cmp(a1, b1) || BN_cmp(a2, b2))
|
||||
if (BN_cmp(ao, bo) || BN_cmp(ac, bc))
|
||||
r = 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user