add support for elliptic curves over binary fields
[openssl.git] / crypto / ec / ecp_smpl.c
index a453f4f..27b4472 100644 (file)
  * Hudson (tjh@cryptsoft.com).
  *
  */
  * Hudson (tjh@cryptsoft.com).
  *
  */
+/* ====================================================================
+ * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
+ * Portions of this software developed by SUN MICROSYSTEMS, INC.,
+ * and contributed to the OpenSSL project.
+ */
 
 #include <openssl/err.h>
 #include <openssl/symhacks.h>
 
 #include <openssl/err.h>
 #include <openssl/symhacks.h>
@@ -70,6 +75,7 @@ const EC_METHOD *EC_GFp_simple_method(void)
                ec_GFp_simple_group_copy,
                ec_GFp_simple_group_set_curve_GFp,
                ec_GFp_simple_group_get_curve_GFp,
                ec_GFp_simple_group_copy,
                ec_GFp_simple_group_set_curve_GFp,
                ec_GFp_simple_group_get_curve_GFp,
+               ec_GFp_simple_group_get_degree,
                ec_GFp_simple_group_check_discriminant,
                ec_GFp_simple_point_init,
                ec_GFp_simple_point_finish,
                ec_GFp_simple_group_check_discriminant,
                ec_GFp_simple_point_init,
                ec_GFp_simple_point_finish,
@@ -86,6 +92,8 @@ const EC_METHOD *EC_GFp_simple_method(void)
                ec_GFp_simple_add,
                ec_GFp_simple_dbl,
                ec_GFp_simple_invert,
                ec_GFp_simple_add,
                ec_GFp_simple_dbl,
                ec_GFp_simple_invert,
+               0 /* mul */,
+               0 /* precompute_mult */,
                ec_GFp_simple_is_at_infinity,
                ec_GFp_simple_is_on_curve,
                ec_GFp_simple_cmp,
                ec_GFp_simple_is_at_infinity,
                ec_GFp_simple_is_on_curve,
                ec_GFp_simple_cmp,
@@ -93,6 +101,7 @@ const EC_METHOD *EC_GFp_simple_method(void)
                ec_GFp_simple_points_make_affine,
                ec_GFp_simple_field_mul,
                ec_GFp_simple_field_sqr,
                ec_GFp_simple_points_make_affine,
                ec_GFp_simple_field_mul,
                ec_GFp_simple_field_sqr,
+               0 /* field_div */,
                0 /* field_encode */,
                0 /* field_decode */,
                0 /* field_set_to_one */ };
                0 /* field_encode */,
                0 /* field_decode */,
                0 /* field_set_to_one */ };
@@ -245,6 +254,12 @@ int ec_GFp_simple_group_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *
        }
 
 
        }
 
 
+int ec_GFp_simple_group_get_degree(const EC_GROUP *group)
+       {
+       return BN_num_bits(&group->field);
+       }
+
+
 int ec_GFp_simple_group_check_discriminant(const EC_GROUP *group, BN_CTX *ctx)
        {
        int ret = 0;
 int ec_GFp_simple_group_check_discriminant(const EC_GROUP *group, BN_CTX *ctx)
        {
        int ret = 0;