No need to create and copy BIGNUM p, a and b, just call
EC_GROUP_get0_field() instead.
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Yang <kaishen.yy@antfin.com>
(Merged from https://github.com/openssl/openssl/pull/23313)
static size_t ec_field_size(const EC_GROUP *group)
{
- /* Is there some simpler way to do this? */
- BIGNUM *p = BN_new();
- BIGNUM *a = BN_new();
- BIGNUM *b = BN_new();
- size_t field_size = 0;
+ const BIGNUM *p = EC_GROUP_get0_field(group);
- if (p == NULL || a == NULL || b == NULL)
- goto done;
-
- if (!EC_GROUP_get_curve(group, p, a, b, NULL))
- goto done;
- field_size = (BN_num_bits(p) + 7) / 8;
-
- done:
- BN_free(p);
- BN_free(a);
- BN_free(b);
+ if (p == NULL)
+ return 0;
- return field_size;
+ return BN_num_bytes(p);
}
int ossl_sm2_plaintext_size(const unsigned char *ct, size_t ct_size,