Remove EC_FLAGS_DEFAULT_OCT.
authorjsing <jsing@openbsd.org>
Wed, 8 Mar 2023 04:50:27 +0000 (04:50 +0000)
committerjsing <jsing@openbsd.org>
Wed, 8 Mar 2023 04:50:27 +0000 (04:50 +0000)
The EC code has an amazing array of function pointer hooks, such that a
method can hook into almost any operation... and then there is the
EC_FLAGS_DEFAULT_OCT flag, which adds a bunch of complex code and #ifdef
so you can avoid setting three of those function pointers!

Remove EC_FLAGS_DEFAULT_OCT, the now unused flags field from EC_METHOD,
along with the various code that was wrapped in EC_FLAGS_DEFAULT_OCT,
setting the three function pointers that need to be set in each of the
EC_METHODs.

ok beck@ tb@

lib/libcrypto/ec/ec2_smpl.c
lib/libcrypto/ec/ec_local.h
lib/libcrypto/ec/ec_oct.c
lib/libcrypto/ec/ecp_mont.c
lib/libcrypto/ec/ecp_nist.c
lib/libcrypto/ec/ecp_smpl.c

index c7ea0d9..f995ff8 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ec2_smpl.c,v 1.31 2023/03/07 09:27:10 jsing Exp $ */
+/* $OpenBSD: ec2_smpl.c,v 1.32 2023/03/08 04:50:27 jsing Exp $ */
 /* ====================================================================
  * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
  *
@@ -724,7 +724,6 @@ ec_GF2m_simple_field_div(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a,
 }
 
 static const EC_METHOD ec_GF2m_simple_method = {
-       .flags = EC_FLAGS_DEFAULT_OCT,
        .field_type = NID_X9_62_characteristic_two_field,
        .group_init = ec_GF2m_simple_group_init,
        .group_finish = ec_GF2m_simple_group_finish,
@@ -744,6 +743,10 @@ static const EC_METHOD ec_GF2m_simple_method = {
            ec_GF2m_simple_point_set_affine_coordinates,
        .point_get_affine_coordinates =
            ec_GF2m_simple_point_get_affine_coordinates,
+       .point_set_compressed_coordinates =
+           ec_GF2m_simple_set_compressed_coordinates,
+       .point2oct = ec_GF2m_simple_point2oct,
+       .oct2point = ec_GF2m_simple_oct2point,
        .add = ec_GF2m_simple_add,
        .dbl = ec_GF2m_simple_dbl,
        .invert = ec_GF2m_simple_invert,
index a1d7c9d..d4cb777 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ec_local.h,v 1.9 2023/03/07 05:50:59 jsing Exp $ */
+/* $OpenBSD: ec_local.h,v 1.10 2023/03/08 04:50:27 jsing Exp $ */
 /*
  * Originally written by Bodo Moeller for the OpenSSL project.
  */
@@ -86,17 +86,7 @@ __BEGIN_HIDDEN_DECLS
 # endif
 #endif
 
-/* Use default functions for poin2oct, oct2point and compressed coordinates */
-#define EC_FLAGS_DEFAULT_OCT   0x1
-
 struct ec_method_st {
-
-       /*
-        * Methods and members exposed directly by the public API.
-        */
-
-       int flags;
-
        int field_type;
 
        int (*group_init)(EC_GROUP *);
index 0e65199..ef17ec5 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ec_oct.c,v 1.9 2022/11/26 16:08:52 tb Exp $ */
+/* $OpenBSD: ec_oct.c,v 1.10 2023/03/08 04:50:27 jsing Exp $ */
 /*
  * Originally written by Bodo Moeller for the OpenSSL project.
  */
@@ -74,8 +74,7 @@ int
 EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *point,
     const BIGNUM *x, int y_bit, BN_CTX *ctx)
 {
-       if (group->meth->point_set_compressed_coordinates == NULL &&
-           !(group->meth->flags & EC_FLAGS_DEFAULT_OCT)) {
+       if (group->meth->point_set_compressed_coordinates == NULL) {
                ECerror(ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
                return 0;
        }
@@ -83,29 +82,8 @@ EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *point,
                ECerror(EC_R_INCOMPATIBLE_OBJECTS);
                return 0;
        }
-       if (group->meth->flags & EC_FLAGS_DEFAULT_OCT) {
-               if (group->meth->field_type == NID_X9_62_prime_field)
-                       return ec_GFp_simple_set_compressed_coordinates(
-                           group, point, x, y_bit, ctx);
-               else
-#ifdef OPENSSL_NO_EC2M
-               {
-                       ECerror(EC_R_GF2M_NOT_SUPPORTED);
-                       return 0;
-               }
-#else
-                       return ec_GF2m_simple_set_compressed_coordinates(
-                           group, point, x, y_bit, ctx);
-#endif
-       }
-       if (!group->meth->point_set_compressed_coordinates(group, point, x,
-           y_bit, ctx))
-               return 0;
-       if (EC_POINT_is_on_curve(group, point, ctx) <= 0) {
-               ECerror(EC_R_POINT_IS_NOT_ON_CURVE);
-               return 0;
-       }
-       return 1;
+       return group->meth->point_set_compressed_coordinates(group, point,
+           x, y_bit, ctx);
 }
 
 int
@@ -129,8 +107,7 @@ EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *point,
     point_conversion_form_t form,
     unsigned char *buf, size_t len, BN_CTX *ctx)
 {
-       if (group->meth->point2oct == 0
-           && !(group->meth->flags & EC_FLAGS_DEFAULT_OCT)) {
+       if (group->meth->point2oct == NULL) { 
                ECerror(ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
                return 0;
        }
@@ -138,21 +115,6 @@ EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *point,
                ECerror(EC_R_INCOMPATIBLE_OBJECTS);
                return 0;
        }
-       if (group->meth->flags & EC_FLAGS_DEFAULT_OCT) {
-               if (group->meth->field_type == NID_X9_62_prime_field)
-                       return ec_GFp_simple_point2oct(group, point,
-                           form, buf, len, ctx);
-               else
-#ifdef OPENSSL_NO_EC2M
-               {
-                       ECerror(EC_R_GF2M_NOT_SUPPORTED);
-                       return 0;
-               }
-#else
-                       return ec_GF2m_simple_point2oct(group, point,
-                           form, buf, len, ctx);
-#endif
-       }
        return group->meth->point2oct(group, point, form, buf, len, ctx);
 }
 
@@ -160,8 +122,7 @@ int
 EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *point,
     const unsigned char *buf, size_t len, BN_CTX *ctx)
 {
-       if (group->meth->oct2point == 0 &&
-           !(group->meth->flags & EC_FLAGS_DEFAULT_OCT)) {
+       if (group->meth->oct2point == NULL) {
                ECerror(ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
                return 0;
        }
@@ -169,20 +130,5 @@ EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *point,
                ECerror(EC_R_INCOMPATIBLE_OBJECTS);
                return 0;
        }
-       if (group->meth->flags & EC_FLAGS_DEFAULT_OCT) {
-               if (group->meth->field_type == NID_X9_62_prime_field)
-                       return ec_GFp_simple_oct2point(group, point,
-                           buf, len, ctx);
-               else
-#ifdef OPENSSL_NO_EC2M
-               {
-                       ECerror(EC_R_GF2M_NOT_SUPPORTED);
-                       return 0;
-               }
-#else
-                       return ec_GF2m_simple_oct2point(group, point,
-                           buf, len, ctx);
-#endif
-       }
        return group->meth->oct2point(group, point, buf, len, ctx);
 }
index f26107c..d0d497b 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ecp_mont.c,v 1.25 2023/03/07 05:41:18 jsing Exp $ */
+/* $OpenBSD: ecp_mont.c,v 1.26 2023/03/08 04:50:27 jsing Exp $ */
 /*
  * Originally written by Bodo Moeller for the OpenSSL project.
  */
@@ -233,7 +233,6 @@ ec_GFp_mont_field_set_to_one(const EC_GROUP *group, BIGNUM *r, BN_CTX *ctx)
 }
 
 static const EC_METHOD ec_GFp_mont_method = {
-       .flags = EC_FLAGS_DEFAULT_OCT,
        .field_type = NID_X9_62_prime_field,
        .group_init = ec_GFp_mont_group_init,
        .group_finish = ec_GFp_mont_group_finish,
@@ -257,6 +256,10 @@ static const EC_METHOD ec_GFp_mont_method = {
            ec_GFp_simple_point_set_affine_coordinates,
        .point_get_affine_coordinates =
            ec_GFp_simple_point_get_affine_coordinates,
+       .point_set_compressed_coordinates =
+           ec_GFp_simple_set_compressed_coordinates,
+       .point2oct = ec_GFp_simple_point2oct,
+       .oct2point = ec_GFp_simple_oct2point,
        .add = ec_GFp_simple_add,
        .dbl = ec_GFp_simple_dbl,
        .invert = ec_GFp_simple_invert,
index 3a81a0e..e3c13f7 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ecp_nist.c,v 1.22 2023/03/07 05:45:14 jsing Exp $ */
+/* $OpenBSD: ecp_nist.c,v 1.23 2023/03/08 04:50:27 jsing Exp $ */
 /*
  * Written by Nils Larsch for the OpenSSL project.
  */
@@ -168,7 +168,6 @@ ec_GFp_nist_field_sqr(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a,
 }
 
 static const EC_METHOD ec_GFp_nist_method = {
-       .flags = EC_FLAGS_DEFAULT_OCT,
        .field_type = NID_X9_62_prime_field,
        .group_init = ec_GFp_simple_group_init,
        .group_finish = ec_GFp_simple_group_finish,
@@ -192,6 +191,10 @@ static const EC_METHOD ec_GFp_nist_method = {
            ec_GFp_simple_point_set_affine_coordinates,
        .point_get_affine_coordinates =
            ec_GFp_simple_point_get_affine_coordinates,
+       .point_set_compressed_coordinates =
+           ec_GFp_simple_set_compressed_coordinates,
+       .point2oct = ec_GFp_simple_point2oct,
+       .oct2point = ec_GFp_simple_oct2point,
        .add = ec_GFp_simple_add,
        .dbl = ec_GFp_simple_dbl,
        .invert = ec_GFp_simple_invert,
index df98064..c33347a 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ecp_smpl.c,v 1.40 2023/03/07 09:27:10 jsing Exp $ */
+/* $OpenBSD: ecp_smpl.c,v 1.41 2023/03/08 04:50:27 jsing Exp $ */
 /* Includes code written by Lenka Fibikova <fibikova@exp-math.uni-essen.de>
  * for the OpenSSL project.
  * Includes code written by Bodo Moeller for the OpenSSL project.
@@ -1654,7 +1654,6 @@ ec_GFp_simple_mul_double_nonct(const EC_GROUP *group, EC_POINT *r,
 }
 
 static const EC_METHOD ec_GFp_simple_method = {
-       .flags = EC_FLAGS_DEFAULT_OCT,
        .field_type = NID_X9_62_prime_field,
        .group_init = ec_GFp_simple_group_init,
        .group_finish = ec_GFp_simple_group_finish,
@@ -1678,6 +1677,10 @@ static const EC_METHOD ec_GFp_simple_method = {
            ec_GFp_simple_point_set_affine_coordinates,
        .point_get_affine_coordinates =
            ec_GFp_simple_point_get_affine_coordinates,
+       .point_set_compressed_coordinates =
+           ec_GFp_simple_set_compressed_coordinates,
+       .point2oct = ec_GFp_simple_point2oct,
+       .oct2point = ec_GFp_simple_oct2point,
        .add = ec_GFp_simple_add,
        .dbl = ec_GFp_simple_dbl,
        .invert = ec_GFp_simple_invert,