]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Optimize the implementation of ec_field_size()
authorK1 <dongbeiouba@gmail.com>
Tue, 16 Jan 2024 13:07:38 +0000 (21:07 +0800)
committerMatt Caswell <matt@openssl.org>
Wed, 31 Jan 2024 10:27:51 +0000 (10:27 +0000)
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)

crypto/sm2/sm2_crypt.c

index 971d348cce43c367ebf705a68ae354d2738be527..b2d048cb5948b431719ff2b20684c0da8434f522 100644 (file)
@@ -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,