From 9170cc0398222778065e098e396b8eb8cd0de1d3 Mon Sep 17 00:00:00 2001 From: K1 Date: Tue, 16 Jan 2024 21:07:38 +0800 Subject: [PATCH] Optimize the implementation of ec_field_size() No need to create and copy BIGNUM p, a and b, just call EC_GROUP_get0_field() instead. Reviewed-by: Tomas Mraz Reviewed-by: Paul Yang (Merged from https://github.com/openssl/openssl/pull/23313) --- crypto/sm2/sm2_crypt.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/crypto/sm2/sm2_crypt.c b/crypto/sm2/sm2_crypt.c index 971d348cce4..b2d048cb594 100644 --- a/crypto/sm2/sm2_crypt.c +++ b/crypto/sm2/sm2_crypt.c @@ -46,25 +46,12 @@ IMPLEMENT_ASN1_FUNCTIONS(SM2_Ciphertext) 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, -- 2.47.2