RT3676: Expose ECgroup i2d functions
authorRich Salz <rsalz@akamai.com>
Wed, 9 Mar 2016 16:56:42 +0000 (11:56 -0500)
committerRich Salz <rsalz@openssl.org>
Wed, 9 Mar 2016 17:25:21 +0000 (12:25 -0500)
Reviewed-by: Dr. Stephen Henson <steve@openssl.org>
crypto/ec/ec_asn1.c
crypto/ec/ec_err.c
doc/crypto/EC_GROUP_new.pod
include/openssl/ec.h
util/libcrypto.num

index b2ae892..3b0ba2e 100644 (file)
@@ -250,7 +250,7 @@ ASN1_SEQUENCE(ECPARAMETERS) = {
         ASN1_SIMPLE(ECPARAMETERS, base, ASN1_OCTET_STRING),
         ASN1_SIMPLE(ECPARAMETERS, order, ASN1_INTEGER),
         ASN1_OPT(ECPARAMETERS, cofactor, ASN1_INTEGER)
-} static_ASN1_SEQUENCE_END(ECPARAMETERS)
+} ASN1_SEQUENCE_END(ECPARAMETERS)
 
 DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS)
 IMPLEMENT_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS)
@@ -259,7 +259,7 @@ ASN1_CHOICE(ECPKPARAMETERS) = {
         ASN1_SIMPLE(ECPKPARAMETERS, value.named_curve, ASN1_OBJECT),
         ASN1_SIMPLE(ECPKPARAMETERS, value.parameters, ECPARAMETERS),
         ASN1_SIMPLE(ECPKPARAMETERS, value.implicitlyCA, ASN1_NULL)
-} static_ASN1_CHOICE_END(ECPKPARAMETERS)
+} ASN1_CHOICE_END(ECPKPARAMETERS)
 
 DECLARE_ASN1_FUNCTIONS_const(ECPKPARAMETERS)
 DECLARE_ASN1_ENCODE_FUNCTIONS_const(ECPKPARAMETERS, ECPKPARAMETERS)
@@ -282,28 +282,6 @@ IMPLEMENT_ASN1_FUNCTIONS_const(EC_PRIVATEKEY)
 static int ec_asn1_group2fieldid(const EC_GROUP *, X9_62_FIELDID *);
 /* ec_asn1_group2curve() sets the values in a X9_62_CURVE object */
 static int ec_asn1_group2curve(const EC_GROUP *, X9_62_CURVE *);
-/*
- * ec_asn1_parameters2group() creates a EC_GROUP object from a ECPARAMETERS
- * object
- */
-static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *);
-/*
- * ec_asn1_group2parameters() creates a ECPARAMETERS object from a EC_GROUP
- * object
- */
-static ECPARAMETERS *ec_asn1_group2parameters(const EC_GROUP *,
-                                              ECPARAMETERS *);
-/*
- * ec_asn1_pkparameters2group() creates a EC_GROUP object from a
- * ECPKPARAMETERS object
- */
-static EC_GROUP *ec_asn1_pkparameters2group(const ECPKPARAMETERS *);
-/*
- * ec_asn1_group2pkparameters() creates a ECPKPARAMETERS object from a
- * EC_GROUP object
- */
-static ECPKPARAMETERS *ec_asn1_group2pkparameters(const EC_GROUP *,
-                                                  ECPKPARAMETERS *);
 
 /* the function definitions */
 
@@ -535,8 +513,8 @@ static int ec_asn1_group2curve(const EC_GROUP *group, X9_62_CURVE *curve)
     return (ok);
 }
 
-static ECPARAMETERS *ec_asn1_group2parameters(const EC_GROUP *group,
-                                              ECPARAMETERS *param)
+ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group,
+                                               ECPARAMETERS *params)
 {
     size_t len = 0;
     ECPARAMETERS *ret = NULL;
@@ -545,32 +523,32 @@ static ECPARAMETERS *ec_asn1_group2parameters(const EC_GROUP *group,
     const EC_POINT *point = NULL;
     point_conversion_form_t form;
 
-    if (param == NULL) {
+    if (params == NULL) {
         if ((ret = ECPARAMETERS_new()) == NULL) {
-            ECerr(EC_F_EC_ASN1_GROUP2PARAMETERS, ERR_R_MALLOC_FAILURE);
+            ECerr(EC_F_EC_GROUP_GET_ECPARAMETERS, ERR_R_MALLOC_FAILURE);
             goto err;
         }
     } else
-        ret = param;
+        ret = params;
 
     /* set the version (always one) */
     ret->version = (long)0x1;
 
     /* set the fieldID */
     if (!ec_asn1_group2fieldid(group, ret->fieldID)) {
-        ECerr(EC_F_EC_ASN1_GROUP2PARAMETERS, ERR_R_EC_LIB);
+        ECerr(EC_F_EC_GROUP_GET_ECPARAMETERS, ERR_R_EC_LIB);
         goto err;
     }
 
     /* set the curve */
     if (!ec_asn1_group2curve(group, ret->curve)) {
-        ECerr(EC_F_EC_ASN1_GROUP2PARAMETERS, ERR_R_EC_LIB);
+        ECerr(EC_F_EC_GROUP_GET_ECPARAMETERS, ERR_R_EC_LIB);
         goto err;
     }
 
     /* set the base point */
     if ((point = EC_GROUP_get0_generator(group)) == NULL) {
-        ECerr(EC_F_EC_ASN1_GROUP2PARAMETERS, EC_R_UNDEFINED_GENERATOR);
+        ECerr(EC_F_EC_GROUP_GET_ECPARAMETERS, EC_R_UNDEFINED_GENERATOR);
         goto err;
     }
 
@@ -578,27 +556,27 @@ static ECPARAMETERS *ec_asn1_group2parameters(const EC_GROUP *group,
 
     len = EC_POINT_point2buf(group, point, form, &buffer, NULL);
     if (len == 0) {
-        ECerr(EC_F_EC_ASN1_GROUP2PARAMETERS, ERR_R_EC_LIB);
+        ECerr(EC_F_EC_GROUP_GET_ECPARAMETERS, ERR_R_EC_LIB);
         goto err;
     }
     if (ret->base == NULL && (ret->base = ASN1_OCTET_STRING_new()) == NULL) {
-        ECerr(EC_F_EC_ASN1_GROUP2PARAMETERS, ERR_R_MALLOC_FAILURE);
+        ECerr(EC_F_EC_GROUP_GET_ECPARAMETERS, ERR_R_MALLOC_FAILURE);
         goto err;
     }
     if (!ASN1_OCTET_STRING_set(ret->base, buffer, len)) {
-        ECerr(EC_F_EC_ASN1_GROUP2PARAMETERS, ERR_R_ASN1_LIB);
+        ECerr(EC_F_EC_GROUP_GET_ECPARAMETERS, ERR_R_ASN1_LIB);
         goto err;
     }
 
     /* set the order */
     tmp = EC_GROUP_get0_order(group);
     if (tmp == NULL) {
-        ECerr(EC_F_EC_ASN1_GROUP2PARAMETERS, ERR_R_EC_LIB);
+        ECerr(EC_F_EC_GROUP_GET_ECPARAMETERS, ERR_R_EC_LIB);
         goto err;
     }
     ret->order = BN_to_ASN1_INTEGER(tmp, ret->order);
     if (ret->order == NULL) {
-        ECerr(EC_F_EC_ASN1_GROUP2PARAMETERS, ERR_R_ASN1_LIB);
+        ECerr(EC_F_EC_GROUP_GET_ECPARAMETERS, ERR_R_ASN1_LIB);
         goto err;
     }
 
@@ -607,7 +585,7 @@ static ECPARAMETERS *ec_asn1_group2parameters(const EC_GROUP *group,
     if (tmp != NULL) {
         ret->cofactor = BN_to_ASN1_INTEGER(tmp, ret->cofactor);
         if (ret->cofactor == NULL) {
-            ECerr(EC_F_EC_ASN1_GROUP2PARAMETERS, ERR_R_ASN1_LIB);
+            ECerr(EC_F_EC_GROUP_GET_ECPARAMETERS, ERR_R_ASN1_LIB);
             goto err;
         }
     }
@@ -615,21 +593,21 @@ static ECPARAMETERS *ec_asn1_group2parameters(const EC_GROUP *group,
     return ret;
 
  err:
-    if (!param)
+    if (params == NULL)
         ECPARAMETERS_free(ret);
     OPENSSL_free(buffer);
     return NULL;
 }
 
-ECPKPARAMETERS *ec_asn1_group2pkparameters(const EC_GROUP *group,
-                                           ECPKPARAMETERS *params)
+ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group,
+                                            ECPKPARAMETERS *params)
 {
     int ok = 1, tmp;
     ECPKPARAMETERS *ret = params;
 
     if (ret == NULL) {
         if ((ret = ECPKPARAMETERS_new()) == NULL) {
-            ECerr(EC_F_EC_ASN1_GROUP2PKPARAMETERS, ERR_R_MALLOC_FAILURE);
+            ECerr(EC_F_EC_GROUP_GET_ECPKPARAMETERS, ERR_R_MALLOC_FAILURE);
             return NULL;
         }
     } else {
@@ -655,7 +633,7 @@ ECPKPARAMETERS *ec_asn1_group2pkparameters(const EC_GROUP *group,
         /* use the ECPARAMETERS structure */
         ret->type = 1;
         if ((ret->value.parameters =
-             ec_asn1_group2parameters(group, NULL)) == NULL)
+             EC_GROUP_get_ecparameters(group, NULL)) == NULL)
             ok = 0;
     }
 
@@ -666,7 +644,7 @@ ECPKPARAMETERS *ec_asn1_group2pkparameters(const EC_GROUP *group,
     return ret;
 }
 
-static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params)
+EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params)
 {
     int ok = 0, tmp;
     EC_GROUP *ret = NULL;
@@ -676,7 +654,7 @@ static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params)
 
     if (!params->fieldID || !params->fieldID->fieldType ||
         !params->fieldID->p.ptr) {
-        ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_ASN1_ERROR);
         goto err;
     }
 
@@ -684,17 +662,17 @@ static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params)
     if (!params->curve || !params->curve->a ||
         !params->curve->a->data || !params->curve->b ||
         !params->curve->b->data) {
-        ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_ASN1_ERROR);
         goto err;
     }
     a = BN_bin2bn(params->curve->a->data, params->curve->a->length, NULL);
     if (a == NULL) {
-        ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_BN_LIB);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, ERR_R_BN_LIB);
         goto err;
     }
     b = BN_bin2bn(params->curve->b->data, params->curve->b->length, NULL);
     if (b == NULL) {
-        ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_BN_LIB);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, ERR_R_BN_LIB);
         goto err;
     }
 
@@ -703,7 +681,7 @@ static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params)
     if (tmp == NID_X9_62_characteristic_two_field)
 #ifdef OPENSSL_NO_EC2M
     {
-        ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_GF2M_NOT_SUPPORTED);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_GF2M_NOT_SUPPORTED);
         goto err;
     }
 #else
@@ -714,12 +692,12 @@ static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params)
 
         field_bits = char_two->m;
         if (field_bits > OPENSSL_ECC_MAX_FIELD_BITS) {
-            ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_FIELD_TOO_LARGE);
+            ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_FIELD_TOO_LARGE);
             goto err;
         }
 
         if ((p = BN_new()) == NULL) {
-            ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_MALLOC_FAILURE);
+            ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, ERR_R_MALLOC_FAILURE);
             goto err;
         }
 
@@ -730,14 +708,14 @@ static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params)
             long tmp_long;
 
             if (!char_two->p.tpBasis) {
-                ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR);
+                ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_ASN1_ERROR);
                 goto err;
             }
 
             tmp_long = ASN1_INTEGER_get(char_two->p.tpBasis);
 
             if (!(char_two->m > tmp_long && tmp_long > 0)) {
-                ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP,
+                ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS,
                       EC_R_INVALID_TRINOMIAL_BASIS);
                 goto err;
             }
@@ -754,14 +732,14 @@ static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params)
 
             penta = char_two->p.ppBasis;
             if (!penta) {
-                ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR);
+                ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_ASN1_ERROR);
                 goto err;
             }
 
             if (!
                 (char_two->m > penta->k3 && penta->k3 > penta->k2
                  && penta->k2 > penta->k1 && penta->k1 > 0)) {
-                ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP,
+                ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS,
                       EC_R_INVALID_PENTANOMIAL_BASIS);
                 goto err;
             }
@@ -778,11 +756,11 @@ static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params)
             if (!BN_set_bit(p, 0))
                 goto err;
         } else if (tmp == NID_X9_62_onBasis) {
-            ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_NOT_IMPLEMENTED);
+            ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_NOT_IMPLEMENTED);
             goto err;
         } else {                /* error */
 
-            ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR);
+            ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_ASN1_ERROR);
             goto err;
         }
 
@@ -794,35 +772,35 @@ static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params)
         /* we have a curve over a prime field */
         /* extract the prime number */
         if (!params->fieldID->p.prime) {
-            ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR);
+            ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_ASN1_ERROR);
             goto err;
         }
         p = ASN1_INTEGER_to_BN(params->fieldID->p.prime, NULL);
         if (p == NULL) {
-            ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_ASN1_LIB);
+            ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, ERR_R_ASN1_LIB);
             goto err;
         }
 
         if (BN_is_negative(p) || BN_is_zero(p)) {
-            ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_INVALID_FIELD);
+            ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_INVALID_FIELD);
             goto err;
         }
 
         field_bits = BN_num_bits(p);
         if (field_bits > OPENSSL_ECC_MAX_FIELD_BITS) {
-            ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_FIELD_TOO_LARGE);
+            ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_FIELD_TOO_LARGE);
             goto err;
         }
 
         /* create the EC_GROUP structure */
         ret = EC_GROUP_new_curve_GFp(p, a, b, NULL);
     } else {
-        ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_INVALID_FIELD);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_INVALID_FIELD);
         goto err;
     }
 
     if (ret == NULL) {
-        ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_EC_LIB);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, ERR_R_EC_LIB);
         goto err;
     }
 
@@ -830,7 +808,7 @@ static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params)
     if (params->curve->seed != NULL) {
         OPENSSL_free(ret->seed);
         if ((ret->seed = OPENSSL_malloc(params->curve->seed->length)) == NULL) {
-            ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_MALLOC_FAILURE);
+            ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, ERR_R_MALLOC_FAILURE);
             goto err;
         }
         memcpy(ret->seed, params->curve->seed->data,
@@ -839,7 +817,7 @@ static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params)
     }
 
     if (!params->order || !params->base || !params->base->data) {
-        ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_ASN1_ERROR);
         goto err;
     }
 
@@ -853,21 +831,21 @@ static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params)
     /* extract the ec point */
     if (!EC_POINT_oct2point(ret, point, params->base->data,
                             params->base->length, NULL)) {
-        ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_EC_LIB);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, ERR_R_EC_LIB);
         goto err;
     }
 
     /* extract the order */
     if ((a = ASN1_INTEGER_to_BN(params->order, a)) == NULL) {
-        ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_ASN1_LIB);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, ERR_R_ASN1_LIB);
         goto err;
     }
     if (BN_is_negative(a) || BN_is_zero(a)) {
-        ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_INVALID_GROUP_ORDER);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_INVALID_GROUP_ORDER);
         goto err;
     }
     if (BN_num_bits(a) > (int)field_bits + 1) { /* Hasse bound */
-        ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_INVALID_GROUP_ORDER);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_INVALID_GROUP_ORDER);
         goto err;
     }
 
@@ -876,12 +854,12 @@ static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params)
         BN_free(b);
         b = NULL;
     } else if ((b = ASN1_INTEGER_to_BN(params->cofactor, b)) == NULL) {
-        ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_ASN1_LIB);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, ERR_R_ASN1_LIB);
         goto err;
     }
     /* set the generator, order and cofactor (if present) */
     if (!EC_GROUP_set_generator(ret, point, a, b)) {
-        ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_EC_LIB);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, ERR_R_EC_LIB);
         goto err;
     }
 
@@ -900,36 +878,36 @@ static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params)
     return (ret);
 }
 
-EC_GROUP *ec_asn1_pkparameters2group(const ECPKPARAMETERS *params)
+EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params)
 {
     EC_GROUP *ret = NULL;
     int tmp = 0;
 
     if (params == NULL) {
-        ECerr(EC_F_EC_ASN1_PKPARAMETERS2GROUP, EC_R_MISSING_PARAMETERS);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS, EC_R_MISSING_PARAMETERS);
         return NULL;
     }
 
     if (params->type == 0) {    /* the curve is given by an OID */
         tmp = OBJ_obj2nid(params->value.named_curve);
         if ((ret = EC_GROUP_new_by_curve_name(tmp)) == NULL) {
-            ECerr(EC_F_EC_ASN1_PKPARAMETERS2GROUP,
+            ECerr(EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS,
                   EC_R_EC_GROUP_NEW_BY_NAME_FAILURE);
             return NULL;
         }
         EC_GROUP_set_asn1_flag(ret, OPENSSL_EC_NAMED_CURVE);
     } else if (params->type == 1) { /* the parameters are given by a
                                      * ECPARAMETERS structure */
-        ret = ec_asn1_parameters2group(params->value.parameters);
+        ret = EC_GROUP_new_from_ecparameters(params->value.parameters);
         if (!ret) {
-            ECerr(EC_F_EC_ASN1_PKPARAMETERS2GROUP, ERR_R_EC_LIB);
+            ECerr(EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS, ERR_R_EC_LIB);
             return NULL;
         }
         EC_GROUP_set_asn1_flag(ret, 0x0);
     } else if (params->type == 2) { /* implicitlyCA */
         return NULL;
     } else {
-        ECerr(EC_F_EC_ASN1_PKPARAMETERS2GROUP, EC_R_ASN1_ERROR);
+        ECerr(EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS, EC_R_ASN1_ERROR);
         return NULL;
     }
 
@@ -950,7 +928,7 @@ EC_GROUP *d2i_ECPKParameters(EC_GROUP **a, const unsigned char **in, long len)
         return NULL;
     }
 
-    if ((group = ec_asn1_pkparameters2group(params)) == NULL) {
+    if ((group = EC_GROUP_new_from_ecpkparameters(params)) == NULL) {
         ECerr(EC_F_D2I_ECPKPARAMETERS, EC_R_PKPARAMETERS2GROUP_FAILURE);
         ECPKPARAMETERS_free(params);
         return NULL;
@@ -969,7 +947,7 @@ EC_GROUP *d2i_ECPKParameters(EC_GROUP **a, const unsigned char **in, long len)
 int i2d_ECPKParameters(const EC_GROUP *a, unsigned char **out)
 {
     int ret = 0;
-    ECPKPARAMETERS *tmp = ec_asn1_group2pkparameters(a, NULL);
+    ECPKPARAMETERS *tmp = EC_GROUP_get_ecpkparameters(a, NULL);
     if (tmp == NULL) {
         ECerr(EC_F_I2D_ECPKPARAMETERS, EC_R_GROUP2PKPARAMETERS_FAILURE);
         return 0;
@@ -1006,7 +984,7 @@ EC_KEY *d2i_ECPrivateKey(EC_KEY **a, const unsigned char **in, long len)
 
     if (priv_key->parameters) {
         EC_GROUP_clear_free(ret->group);
-        ret->group = ec_asn1_pkparameters2group(priv_key->parameters);
+        ret->group = EC_GROUP_new_from_ecpkparameters(priv_key->parameters);
     }
 
     if (ret->group == NULL) {
@@ -1097,7 +1075,7 @@ int i2d_ECPrivateKey(EC_KEY *a, unsigned char **out)
 
     if (!(a->enc_flag & EC_PKEY_NO_PARAMETERS)) {
         if ((priv_key->parameters =
-             ec_asn1_group2pkparameters(a->group,
+             EC_GROUP_get_ecpkparameters(a->group,
                                         priv_key->parameters)) == NULL) {
             ECerr(EC_F_I2D_ECPRIVATEKEY, ERR_R_EC_LIB);
             goto err;
index b1af918..8e2a7fc 100644 (file)
@@ -107,10 +107,6 @@ static ERR_STRING_DATA EC_str_functs[] = {
     {ERR_FUNC(EC_F_ECP_NIST_MOD_521), "ECP_NIST_MOD_521"},
     {ERR_FUNC(EC_F_EC_ASN1_GROUP2CURVE), "ec_asn1_group2curve"},
     {ERR_FUNC(EC_F_EC_ASN1_GROUP2FIELDID), "ec_asn1_group2fieldid"},
-    {ERR_FUNC(EC_F_EC_ASN1_GROUP2PARAMETERS), "ec_asn1_group2parameters"},
-    {ERR_FUNC(EC_F_EC_ASN1_GROUP2PKPARAMETERS), "ec_asn1_group2pkparameters"},
-    {ERR_FUNC(EC_F_EC_ASN1_PARAMETERS2GROUP), "ec_asn1_parameters2group"},
-    {ERR_FUNC(EC_F_EC_ASN1_PKPARAMETERS2GROUP), "ec_asn1_pkparameters2group"},
     {ERR_FUNC(EC_F_EC_EX_DATA_SET_DATA), "EC_EX_DATA_set_data"},
     {ERR_FUNC(EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY),
      "ec_GF2m_montgomery_point_multiply"},
@@ -189,6 +185,9 @@ static ERR_STRING_DATA EC_str_functs[] = {
     {ERR_FUNC(EC_F_EC_GROUP_GET_CURVE_GF2M), "EC_GROUP_get_curve_GF2m"},
     {ERR_FUNC(EC_F_EC_GROUP_GET_CURVE_GFP), "EC_GROUP_get_curve_GFp"},
     {ERR_FUNC(EC_F_EC_GROUP_GET_DEGREE), "EC_GROUP_get_degree"},
+    {ERR_FUNC(EC_F_EC_GROUP_GET_ECPARAMETERS), "EC_GROUP_get_ecparameters"},
+    {ERR_FUNC(EC_F_EC_GROUP_GET_ECPKPARAMETERS),
+     "EC_GROUP_get_ecpkparameters"},
     {ERR_FUNC(EC_F_EC_GROUP_GET_ORDER), "EC_GROUP_get_order"},
     {ERR_FUNC(EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS),
      "EC_GROUP_get_pentanomial_basis"},
@@ -197,6 +196,10 @@ static ERR_STRING_DATA EC_str_functs[] = {
     {ERR_FUNC(EC_F_EC_GROUP_NEW), "EC_GROUP_new"},
     {ERR_FUNC(EC_F_EC_GROUP_NEW_BY_CURVE_NAME), "EC_GROUP_new_by_curve_name"},
     {ERR_FUNC(EC_F_EC_GROUP_NEW_FROM_DATA), "ec_group_new_from_data"},
+    {ERR_FUNC(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS),
+     "EC_GROUP_new_from_ecparameters"},
+    {ERR_FUNC(EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS),
+     "EC_GROUP_new_from_ecpkparameters"},
     {ERR_FUNC(EC_F_EC_GROUP_PRECOMPUTE_MULT), "EC_GROUP_precompute_mult"},
     {ERR_FUNC(EC_F_EC_GROUP_SET_CURVE_GF2M), "EC_GROUP_set_curve_GF2m"},
     {ERR_FUNC(EC_F_EC_GROUP_SET_CURVE_GFP), "EC_GROUP_set_curve_GFp"},
index 70d9955..bbd3dfb 100644 (file)
@@ -2,7 +2,13 @@
 
 =head1 NAME
 
-EC_GROUP_new, EC_GROUP_free, EC_GROUP_clear_free, EC_GROUP_new_curve_GFp, EC_GROUP_new_curve_GF2m, EC_GROUP_new_by_curve_name, EC_GROUP_set_curve_GFp, EC_GROUP_get_curve_GFp, EC_GROUP_set_curve_GF2m, EC_GROUP_get_curve_GF2m, EC_get_builtin_curves - Functions for creating and destroying B<EC_GROUP> objects.
+EC_GROUP_new, EC_GROUP_new_from_ecparameters,
+EC_GROUP_new_from_ecpkparameters,
+EC_GROUP_free, EC_GROUP_clear_free, EC_GROUP_new_curve_GFp,
+EC_GROUP_new_curve_GF2m, EC_GROUP_new_by_curve_name, EC_GROUP_set_curve_GFp,
+EC_GROUP_get_curve_GFp, EC_GROUP_set_curve_GF2m, EC_GROUP_get_curve_GF2m,
+EC_get_builtin_curves - Functions for creating and destroying B<EC_GROUP>
+objects.
 
 =head1 SYNOPSIS
 
@@ -10,6 +16,8 @@ EC_GROUP_new, EC_GROUP_free, EC_GROUP_clear_free, EC_GROUP_new_curve_GFp, EC_GRO
  #include <openssl/bn.h>
 
  EC_GROUP *EC_GROUP_new(const EC_METHOD *meth);
+ EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params)
+ EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params)
  void EC_GROUP_free(EC_GROUP *group);
  void EC_GROUP_clear_free(EC_GROUP *group);
 
@@ -22,6 +30,9 @@ EC_GROUP_new, EC_GROUP_free, EC_GROUP_clear_free, EC_GROUP_new_curve_GFp, EC_GRO
  int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
  int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
 
+ ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group, ECPARAMETERS *params)
+ ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group, ECPKPARAMETERS *params)
+
  size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems);
 
 =head1 DESCRIPTION
@@ -43,6 +54,9 @@ use a trinomial or a pentanomial for this parameter.
 A new curve can be constructed by calling EC_GROUP_new, using the implementation provided by B<meth> (see
 L<EC_GFp_simple_method(3)>). It is then necessary to call either EC_GROUP_set_curve_GFp or
 EC_GROUP_set_curve_GF2m as appropriate to create a curve defined over Fp or over F2^m respectively.
+EC_GROUP_new_from_ecparameters() will create a group from the
+specified B<params> and
+EC_GROUP_new_from_ecpkparameters() will create a group from the specific PK B<params>.
 
 EC_GROUP_set_curve_GFp sets the curve parameters B<p>, B<a> and B<b> for a curve over Fp stored in B<group>.
 EC_group_get_curve_GFp obtains the previously set curve parameters.
index 0fb8ce9..ee54088 100644 (file)
@@ -115,19 +115,10 @@ typedef enum {
 } point_conversion_form_t;
 
 typedef struct ec_method_st EC_METHOD;
-
-typedef struct ec_group_st
-    /*-
-     EC_METHOD *meth;
-     -- field definition
-     -- curve coefficients
-     -- optional generator with associated information (order, cofactor)
-     -- optional extra data (precomputed table for fast computation of multiples of generator)
-     -- ASN1 stuff
-    */
-    EC_GROUP;
-
+typedef struct ec_group_st EC_GROUP;
 typedef struct ec_point_st EC_POINT;
+typedef struct ecpk_parameters_st ECPKPARAMETERS;
+typedef struct ec_parameters_st ECPARAMETERS;
 
 /********************************************************************/
 /*               EC_METHODs for curves over GF(p)                   */
@@ -410,6 +401,7 @@ EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a,
 EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a,
                                   const BIGNUM *b, BN_CTX *ctx);
 # endif
+
 /** Creates a EC_GROUP object with a curve specified by a NID
  *  \param  nid  NID of the OID of the curve name
  *  \return newly created EC_GROUP object with specified curve or NULL
@@ -417,6 +409,38 @@ EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a,
  */
 EC_GROUP *EC_GROUP_new_by_curve_name(int nid);
 
+/** Creates a new EC_GROUP object from an ECPARAMETERS object
+ *  \param  params  pointer to the ECPARAMETERS object
+ *  \return newly created EC_GROUP object with specified curve or NULL
+ *          if an error occurred
+ */
+EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params);
+
+/** Creates an ECPARAMETERS object for the the given EC_GROUP object.
+ *  \param  group   pointer to the EC_GROUP object
+ *  \param  params  pointer to an existing ECPARAMETERS object or NULL
+ *  \return pointer to the new ECPARAMETERS object or NULL
+ *          if an error occurred.
+ */
+ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group,
+                                        ECPARAMETERS *params);
+
+/** Creates a new EC_GROUP object from an ECPKPARAMETERS object
+ *  \param  params  pointer to an existing ECPKPARAMETERS object, or NULL
+ *  \return newly created EC_GROUP object with specified curve, or NULL
+ *          if an error occurred
+ */
+EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params);
+
+/** Creates an ECPKPARAMETERS object for the the given EC_GROUP object.
+ *  \param  group   pointer to the EC_GROUP object
+ *  \param  params  pointer to an existing ECPKPARAMETERS object or NULL
+ *  \return pointer to the new ECPKPARAMETERS object or NULL
+ *          if an error occurred.
+ */
+ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group,
+                                            ECPKPARAMETERS *params);
+
 /********************************************************************/
 /*               handling of internal curves                        */
 /********************************************************************/
@@ -740,6 +764,9 @@ int EC_GROUP_have_precompute_mult(const EC_GROUP *group);
 /*                       ASN1 stuff                                 */
 /********************************************************************/
 
+DECLARE_ASN1_ITEM(ECPKPARAMETERS)
+DECLARE_ASN1_ITEM(ECPARAMETERS)
+
 /*
  * EC_GROUP_get_basis_type() returns the NID of the basis type used to
  * represent the field elements
@@ -1489,12 +1516,16 @@ void ERR_load_EC_strings(void);
 # define EC_F_EC_GROUP_GET_CURVE_GF2M                     172
 # define EC_F_EC_GROUP_GET_CURVE_GFP                      130
 # define EC_F_EC_GROUP_GET_DEGREE                         173
+# define EC_F_EC_GROUP_GET_ECPARAMETERS                   261
+# define EC_F_EC_GROUP_GET_ECPKPARAMETERS                 262
 # define EC_F_EC_GROUP_GET_ORDER                          141
 # define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS              193
 # define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS                194
 # define EC_F_EC_GROUP_NEW                                108
 # define EC_F_EC_GROUP_NEW_BY_CURVE_NAME                  174
 # define EC_F_EC_GROUP_NEW_FROM_DATA                      175
+# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS              263
+# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS            264
 # define EC_F_EC_GROUP_PRECOMPUTE_MULT                    142
 # define EC_F_EC_GROUP_SET_CURVE_GF2M                     176
 # define EC_F_EC_GROUP_SET_CURVE_GFP                      109
index bd4518e..78c66df 100644 (file)
@@ -45,7 +45,7 @@ PKCS7_ISSUER_AND_SERIAL_it              43    1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION:V
 PKCS7_ISSUER_AND_SERIAL_it              43     1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
 EC_GROUP_method_of                      44     1_1_0   EXIST::FUNCTION:EC
 RSA_blinding_on                         45     1_1_0   EXIST::FUNCTION:RSA
-CRYPTO_set_dynlock_lock_callback        46     1_1_0   EXIST::FUNCTION:
+CRYPTO_set_dynlock_lock_callback        46     1_1_0   NOEXIST::FUNCTION:
 X509_get0_signature                     47     1_1_0   EXIST::FUNCTION:
 X509_REVOKED_get0_extensions            48     1_1_0   EXIST::FUNCTION:
 NETSCAPE_SPKI_verify                    49     1_1_0   EXIST::FUNCTION:
@@ -168,7 +168,7 @@ CT_POLICY_EVAL_CTX_free                 165 1_1_0   EXIST::FUNCTION:
 CMS_RecipientInfo_kari_get0_ctx         166    1_1_0   EXIST::FUNCTION:CMS
 PKCS7_set_attributes                    167    1_1_0   EXIST::FUNCTION:
 d2i_POLICYQUALINFO                      168    1_1_0   EXIST::FUNCTION:
-CRYPTO_add_lock                         169    1_1_0   EXIST::FUNCTION:
+CRYPTO_add_lock                         169    1_1_0   NOEXIST::FUNCTION:
 EVP_MD_type                             170    1_1_0   EXIST::FUNCTION:
 EVP_PKCS82PKEY                          171    1_1_0   EXIST::FUNCTION:
 BN_generate_prime_ex                    172    1_1_0   EXIST::FUNCTION:
@@ -391,7 +391,7 @@ X509_VERIFY_PARAM_get0_peername         382 1_1_0   EXIST::FUNCTION:
 ASN1_PCTX_get_oid_flags                 383    1_1_0   EXIST::FUNCTION:
 CONF_free                               384    1_1_0   EXIST::FUNCTION:
 DSO_get_filename                        385    1_1_0   EXIST::FUNCTION:
-CRYPTO_set_id_callback                  386    1_1_0   EXIST::FUNCTION:DEPRECATEDIN_1_0_0
+CRYPTO_set_id_callback                  386    1_1_0   NOEXIST::FUNCTION:
 i2d_ASN1_SEQUENCE_ANY                   387    1_1_0   EXIST::FUNCTION:
 OPENSSL_strlcpy                         388    1_1_0   EXIST::FUNCTION:
 BIO_get_port                            389    1_1_0   EXIST::FUNCTION:DEPRECATEDIN_1_1_0
@@ -456,7 +456,7 @@ X509_get_default_private_dir            447 1_1_0   EXIST::FUNCTION:
 X509_STORE_CTX_set0_dane                448    1_1_0   EXIST::FUNCTION:
 EVP_des_ecb                             449    1_1_0   EXIST::FUNCTION:DES
 OCSP_resp_get0                          450    1_1_0   EXIST::FUNCTION:
-CRYPTO_get_new_lockid                   451    1_1_0   EXIST::FUNCTION:
+CRYPTO_get_new_lockid                   451    1_1_0   NOEXIST::FUNCTION:
 RSA_X931_generate_key_ex                452    1_1_0   EXIST::FUNCTION:RSA
 X509_get_serialNumber                   453    1_1_0   EXIST::FUNCTION:
 BIO_sock_should_retry                   454    1_1_0   EXIST::FUNCTION:
@@ -477,7 +477,7 @@ DSO_set_filename                        468 1_1_0   EXIST::FUNCTION:
 DH_new                                  469    1_1_0   EXIST::FUNCTION:DH
 OCSP_RESPID_free                        470    1_1_0   EXIST::FUNCTION:
 PKCS5_pbe2_set                          471    1_1_0   EXIST::FUNCTION:
-CRYPTO_THREADID_get_callback            472    1_1_0   EXIST::FUNCTION:
+CRYPTO_THREADID_get_callback            472    1_1_0   NOEXIST::FUNCTION:
 SCT_set_signature_nid                   473    1_1_0   EXIST::FUNCTION:
 i2d_RSA_PUBKEY_fp                       474    1_1_0   EXIST::FUNCTION:RSA,STDIO
 PKCS12_BAGS_it                          475    1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
@@ -518,7 +518,7 @@ X509_TRUST_get_trust                    506 1_1_0   EXIST::FUNCTION:
 DES_string_to_key                       507    1_1_0   EXIST::FUNCTION:DES
 ERR_error_string                        508    1_1_0   EXIST::FUNCTION:
 BIO_new_connect                         509    1_1_0   EXIST::FUNCTION:
-CRYPTO_get_lock_name                    510    1_1_0   EXIST::FUNCTION:
+CRYPTO_get_lock_name                    510    1_1_0   NOEXIST::FUNCTION:
 DSA_new_method                          511    1_1_0   EXIST::FUNCTION:DSA
 OCSP_CERTID_new                         512    1_1_0   EXIST::FUNCTION:
 X509_CRL_get_signature_nid              513    1_1_0   EXIST::FUNCTION:
@@ -528,7 +528,7 @@ X509V3_add1_i2d                         516 1_1_0   EXIST::FUNCTION:
 TS_TST_INFO_set_serial                  517    1_1_0   EXIST::FUNCTION:
 OCSP_RESPBYTES_new                      518    1_1_0   EXIST::FUNCTION:
 OCSP_SINGLERESP_delete_ext              519    1_1_0   EXIST::FUNCTION:
-CRYPTO_get_dynlock_lock_callback        520    1_1_0   EXIST::FUNCTION:
+CRYPTO_get_dynlock_lock_callback        520    1_1_0   NOEXIST::FUNCTION:
 EVP_MD_CTX_test_flags                   521    1_1_0   EXIST::FUNCTION:
 v3_addr_validate_path                   522    1_1_0   EXIST::FUNCTION:RFC3779
 BIO_new_fp                              523    1_1_0   EXIST::FUNCTION:STDIO
@@ -587,7 +587,7 @@ d2i_X509                                574 1_1_0   EXIST::FUNCTION:
 a2i_ASN1_STRING                         575    1_1_0   EXIST::FUNCTION:
 EC_GROUP_get_mont_data                  576    1_1_0   EXIST::FUNCTION:EC
 CMAC_CTX_copy                           577    1_1_0   EXIST::FUNCTION:
-CRYPTO_set_add_lock_callback            578    1_1_0   EXIST::FUNCTION:
+CRYPTO_set_add_lock_callback            578    1_1_0   NOEXIST::FUNCTION:
 EVP_camellia_128_cfb128                 579    1_1_0   EXIST::FUNCTION:CAMELLIA
 DH_compute_key_padded                   580    1_1_0   EXIST::FUNCTION:DH
 ERR_load_CONF_strings                   581    1_1_0   EXIST::FUNCTION:
@@ -644,7 +644,7 @@ PKCS12_set_mac                          628 1_1_0   EXIST::FUNCTION:
 UI_get0_result_string                   629    1_1_0   EXIST::FUNCTION:
 TS_RESP_CTX_add_policy                  630    1_1_0   EXIST::FUNCTION:
 X509_REQ_dup                            631    1_1_0   EXIST::FUNCTION:
-CRYPTO_get_add_lock_callback            632    1_1_0   EXIST::FUNCTION:
+CRYPTO_get_add_lock_callback            632    1_1_0   NOEXIST::FUNCTION:
 d2i_DSA_PUBKEY_fp                       633    1_1_0   EXIST::FUNCTION:DSA,STDIO
 OCSP_REQ_CTX_nbio_d2i                   634    1_1_0   EXIST::FUNCTION:
 d2i_X509_REQ_fp                         635    1_1_0   EXIST::FUNCTION:STDIO
@@ -664,7 +664,7 @@ CRYPTO_ccm128_encrypt_ccm64             647 1_1_0   EXIST::FUNCTION:
 CRYPTO_secure_malloc_init               648    1_1_0   EXIST::FUNCTION:
 DSAparams_dup                           649    1_1_0   EXIST::FUNCTION:DSA
 PKCS8_PRIV_KEY_INFO_new                 650    1_1_0   EXIST::FUNCTION:
-CRYPTO_THREADID_hash                    651    1_1_0   EXIST::FUNCTION:
+CRYPTO_THREADID_hash                    651    1_1_0   NOEXIST::FUNCTION:
 TS_RESP_verify_token                    652    1_1_0   EXIST::FUNCTION:
 PEM_read_bio_CMS                        653    1_1_0   EXIST::FUNCTION:CMS
 PEM_get_EVP_CIPHER_INFO                 654    1_1_0   EXIST::FUNCTION:
@@ -729,7 +729,7 @@ i2s_ASN1_OCTET_STRING                   709 1_1_0   EXIST::FUNCTION:
 X509_add1_reject_object                 710    1_1_0   EXIST::FUNCTION:
 ERR_set_mark                            711    1_1_0   EXIST::FUNCTION:
 d2i_ASN1_VISIBLESTRING                  712    1_1_0   EXIST::FUNCTION:
-CRYPTO_set_dynlock_create_callback      713    1_1_0   EXIST::FUNCTION:
+CRYPTO_set_dynlock_create_callback      713    1_1_0   NOEXIST::FUNCTION:
 X509_NAME_ENTRY_dup                     714    1_1_0   EXIST::FUNCTION:
 X509_certificate_type                   715    1_1_0   EXIST::FUNCTION:
 PKCS7_add_signature                     716    1_1_0   EXIST::FUNCTION:
@@ -903,7 +903,7 @@ X509_REQ_INFO_free                      878 1_1_0   EXIST::FUNCTION:
 CMS_ReceiptRequest_create0              879    1_1_0   EXIST::FUNCTION:CMS
 EVP_MD_meth_set_cleanup                 880    1_1_0   EXIST::FUNCTION:
 EVP_aes_128_xts                         881    1_1_0   EXIST::FUNCTION:AES
-CRYPTO_set_dynlock_destroy_callback     882    1_1_0   EXIST::FUNCTION:
+CRYPTO_set_dynlock_destroy_callback     882    1_1_0   NOEXIST::FUNCTION:
 TS_RESP_verify_signature                883    1_1_0   EXIST::FUNCTION:
 ENGINE_set_pkey_meths                   884    1_1_0   EXIST::FUNCTION:ENGINE
 CMS_EncryptedData_decrypt               885    1_1_0   EXIST::FUNCTION:CMS
@@ -945,7 +945,7 @@ CT_POLICY_EVAL_CTX_get0_log_store       919 1_1_0   EXIST::FUNCTION:
 CONF_set_default_method                 920    1_1_0   EXIST::FUNCTION:
 ASN1_PCTX_get_nm_flags                  921    1_1_0   EXIST::FUNCTION:
 X509_add1_ext_i2d                       922    1_1_0   EXIST::FUNCTION:
-CRYPTO_THREADID_set_pointer             923    1_1_0   EXIST::FUNCTION:
+CRYPTO_THREADID_set_pointer             923    1_1_0   NOEXIST::FUNCTION:
 i2d_PKCS7_RECIP_INFO                    924    1_1_0   EXIST::FUNCTION:
 PKCS1_MGF1                              925    1_1_0   EXIST::FUNCTION:RSA
 BIO_vsnprintf                           926    1_1_0   EXIST::FUNCTION:
@@ -1003,7 +1003,7 @@ ENGINE_get_name                         973       1_1_0   EXIST::FUNCTION:ENGINE
 CRYPTO_THREAD_read_lock                 974    1_1_0   EXIST::FUNCTION:
 ASIdentifierChoice_free                 975    1_1_0   EXIST::FUNCTION:RFC3779
 BIO_dgram_sctp_msg_waiting              976    1_1_0   EXIST::FUNCTION:SCTP
-CRYPTO_get_dynlock_value                977    1_1_0   EXIST::FUNCTION:
+CRYPTO_get_dynlock_value                977    1_1_0   NOEXIST::FUNCTION:
 BN_is_bit_set                           978    1_1_0   EXIST::FUNCTION:
 AES_ofb128_encrypt                      979    1_1_0   EXIST::FUNCTION:AES
 X509_STORE_add_lookup                   980    1_1_0   EXIST::FUNCTION:
@@ -1644,7 +1644,7 @@ ASN1_TBOOLEAN_it                        1594      1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:
 RC2_set_key                             1595   1_1_0   EXIST::FUNCTION:RC2
 X509_REVOKED_get_ext_by_NID             1596   1_1_0   EXIST::FUNCTION:
 RSA_padding_add_none                    1597   1_1_0   EXIST::FUNCTION:RSA
-CRYPTO_THREADID_cmp                     1598   1_1_0   EXIST::FUNCTION:
+CRYPTO_THREADID_cmp                     1598   1_1_0   NOEXIST::FUNCTION:
 EVP_rc5_32_12_16_cbc                    1599   1_1_0   EXIST::FUNCTION:RC5
 PEM_dek_info                            1600   1_1_0   EXIST::FUNCTION:
 ASN1_SCTX_get_template                  1601   1_1_0   EXIST::FUNCTION:
@@ -1699,7 +1699,7 @@ BN_lshift1                              1648      1_1_0   EXIST::FUNCTION:
 i2d_EDIPARTYNAME                        1649   1_1_0   EXIST::FUNCTION:
 X509_policy_tree_get0_policies          1650   1_1_0   EXIST::FUNCTION:
 X509at_add1_attr                        1651   1_1_0   EXIST::FUNCTION:
-CRYPTO_num_locks                        1652   1_1_0   EXIST::FUNCTION:
+CRYPTO_num_locks                        1652   1_1_0   NOEXIST::FUNCTION:
 X509_get_ex_data                        1653   1_1_0   EXIST::FUNCTION:
 RSA_set_method                          1654   1_1_0   EXIST::FUNCTION:RSA
 X509_REVOKED_dup                        1655   1_1_0   EXIST::FUNCTION:
@@ -1713,7 +1713,7 @@ BIO_asn1_get_suffix                     1662      1_1_0   EXIST::FUNCTION:
 X509_VERIFY_PARAM_clear_flags           1663   1_1_0   EXIST::FUNCTION:
 X509_NAME_add_entry_by_txt              1664   1_1_0   EXIST::FUNCTION:
 DES_ede3_cfb_encrypt                    1665   1_1_0   EXIST::FUNCTION:DES
-CRYPTO_destroy_dynlockid                1666   1_1_0   EXIST::FUNCTION:
+CRYPTO_destroy_dynlockid                1666   1_1_0   NOEXIST::FUNCTION:
 i2d_CMS_bio_stream                      1667   1_1_0   EXIST::FUNCTION:CMS
 DES_quad_cksum                          1668   1_1_0   EXIST::FUNCTION:DES
 X509_ATTRIBUTE_create_by_NID            1669   1_1_0   EXIST::FUNCTION:
@@ -1825,7 +1825,7 @@ ASN1_OCTET_STRING_free                  1770      1_1_0   EXIST::FUNCTION:
 PKCS7_RECIP_INFO_free                   1771   1_1_0   EXIST::FUNCTION:
 ASN1_tag2bit                            1772   1_1_0   EXIST::FUNCTION:
 TS_REQ_add_ext                          1773   1_1_0   EXIST::FUNCTION:
-CRYPTO_get_new_dynlockid                1774   1_1_0   EXIST::FUNCTION:
+CRYPTO_get_new_dynlockid                1774   1_1_0   NOEXIST::FUNCTION:
 RAND_cleanup                            1775   1_1_0   EXIST::FUNCTION:
 X509_digest                             1776   1_1_0   EXIST::FUNCTION:
 CRYPTO_THREAD_cleanup_local             1777   1_1_0   EXIST::FUNCTION:
@@ -2404,7 +2404,7 @@ PEM_read_PKCS7                          2324      1_1_0   EXIST::FUNCTION:
 DH_get_2048_256                         2325   1_1_0   EXIST::FUNCTION:DH
 X509at_delete_attr                      2326   1_1_0   EXIST::FUNCTION:
 PEM_write_bio                           2327   1_1_0   EXIST::FUNCTION:
-CRYPTO_get_locking_callback             2328   1_1_0   EXIST::FUNCTION:
+CRYPTO_get_locking_callback             2328   1_1_0   NOEXIST::FUNCTION:
 CMS_signed_get_attr_by_OBJ              2329   1_1_0   EXIST::FUNCTION:CMS
 X509_REVOKED_add_ext                    2330   1_1_0   EXIST::FUNCTION:
 EVP_CipherUpdate                        2331   1_1_0   EXIST::FUNCTION:
@@ -2476,7 +2476,7 @@ TS_TST_INFO_set_time                    2394      1_1_0   EXIST::FUNCTION:
 OPENSSL_die                             2395   1_1_0   EXIST::FUNCTION:
 X509_LOOKUP_by_alias                    2396   1_1_0   EXIST::FUNCTION:
 EC_KEY_set_conv_form                    2397   1_1_0   EXIST::FUNCTION:EC
-CRYPTO_lock                             2398   1_1_0   EXIST::FUNCTION:
+CRYPTO_lock                             2398   1_1_0   NOEXIST::FUNCTION:
 X509_TRUST_get_count                    2399   1_1_0   EXIST::FUNCTION:
 IPAddressOrRange_free                   2400   1_1_0   EXIST::FUNCTION:RFC3779
 RSA_padding_add_PKCS1_OAEP              2401   1_1_0   EXIST::FUNCTION:RSA
@@ -2613,7 +2613,7 @@ get_rfc3526_prime_1536                  2526      1_1_0   EXIST::FUNCTION:
 DSA_sign                                2527   1_1_0   EXIST::FUNCTION:DSA
 RAND_egd                                2528   1_1_0   EXIST::FUNCTION:EGD
 ASN1_d2i_bio                            2529   1_1_0   EXIST::FUNCTION:
-CRYPTO_THREADID_current                 2530   1_1_0   EXIST::FUNCTION:
+CRYPTO_THREADID_current                 2530   1_1_0   NOEXIST::FUNCTION:
 X509_REQ_digest                         2531   1_1_0   EXIST::FUNCTION:
 X509_set_notAfter                       2532   1_1_0   EXIST::FUNCTION:
 EVP_CIPHER_type                         2533   1_1_0   EXIST::FUNCTION:
@@ -2755,7 +2755,7 @@ EVP_PKEY_assign                         2662      1_1_0   EXIST::FUNCTION:
 EVP_aes_128_ofb                         2663   1_1_0   EXIST::FUNCTION:AES
 CMS_data                                2664   1_1_0   EXIST::FUNCTION:CMS
 X509_load_cert_file                     2665   1_1_0   EXIST::FUNCTION:
-CRYPTO_THREADID_cpy                     2666   1_1_0   EXIST::FUNCTION:
+CRYPTO_THREADID_cpy                     2666   1_1_0   NOEXIST::FUNCTION:
 EC_GFp_nistp521_method                  2667   1_1_0   EXIST:!WIN32:FUNCTION:EC,EC_NISTP_64_GCC_128
 ECDSA_SIG_free                          2668   1_1_0   EXIST::FUNCTION:EC
 d2i_PKCS12_BAGS                         2669   1_1_0   EXIST::FUNCTION:
@@ -2926,7 +2926,7 @@ SCT_free                                2824      1_1_0   EXIST::FUNCTION:
 TS_TST_INFO_get_msg_imprint             2825   1_1_0   EXIST::FUNCTION:
 v3_addr_add_range                       2826   1_1_0   EXIST::FUNCTION:RFC3779
 PKCS12_get_friendlyname                 2827   1_1_0   EXIST::FUNCTION:
-CRYPTO_get_id_callback                  2828   1_1_0   EXIST::FUNCTION:DEPRECATEDIN_1_0_0
+CRYPTO_get_id_callback                  2828   1_1_0   NOEXIST::FUNCTION:
 X509_CRL_add_ext                        2829   1_1_0   EXIST::FUNCTION:
 X509_REQ_get_signature_nid              2830   1_1_0   EXIST::FUNCTION:
 TS_TST_INFO_get_ext                     2831   1_1_0   EXIST::FUNCTION:
@@ -3125,7 +3125,7 @@ BIO_dgram_non_fatal_error               3016      1_1_0   EXIST::FUNCTION:
 OCSP_request_is_signed                  3017   1_1_0   EXIST::FUNCTION:
 i2d_BASIC_CONSTRAINTS                   3018   1_1_0   EXIST::FUNCTION:
 EC_KEY_get_method                       3019   1_1_0   EXIST::FUNCTION:EC
-CRYPTO_get_dynlock_destroy_callback     3020   1_1_0   EXIST::FUNCTION:
+CRYPTO_get_dynlock_destroy_callback     3020   1_1_0   NOEXIST::FUNCTION:
 EC_POINT_bn2point                       3021   1_1_0   EXIST::FUNCTION:EC
 PBE2PARAM_it                            3022   1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 PBE2PARAM_it                            3022   1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
@@ -3286,7 +3286,7 @@ HMAC_Init                               3173      1_1_0   EXIST::FUNCTION:DEPRECATEDIN_
 EVP_MD_CTX_update_fn                    3174   1_1_0   EXIST::FUNCTION:
 EVP_aes_128_ecb                         3175   1_1_0   EXIST::FUNCTION:AES
 i2d_PKCS7_bio_stream                    3176   1_1_0   EXIST::FUNCTION:
-CRYPTO_get_dynlock_create_callback      3177   1_1_0   EXIST::FUNCTION:
+CRYPTO_get_dynlock_create_callback      3177   1_1_0   NOEXIST::FUNCTION:
 i2a_ACCESS_DESCRIPTION                  3178   1_1_0   EXIST::FUNCTION:
 EC_KEY_set_enc_flags                    3179   1_1_0   EXIST::FUNCTION:EC
 i2d_PUBKEY_fp                           3180   1_1_0   EXIST::FUNCTION:STDIO
@@ -3384,7 +3384,7 @@ PKCS7_set0_type_other                   3270      1_1_0   EXIST::FUNCTION:
 OCSP_REQUEST_new                        3271   1_1_0   EXIST::FUNCTION:
 BIO_lookup                              3272   1_1_0   EXIST::FUNCTION:
 EC_GROUP_get0_cofactor                  3273   1_1_0   EXIST::FUNCTION:EC
-CRYPTO_THREADID_set_numeric             3274   1_1_0   EXIST::FUNCTION:
+CRYPTO_THREADID_set_numeric             3274   1_1_0   NOEXIST::FUNCTION:
 SCT_print                               3275   1_1_0   EXIST::FUNCTION:
 X509_PUBKEY_set                         3276   1_1_0   EXIST::FUNCTION:
 POLICY_CONSTRAINTS_free                 3277   1_1_0   EXIST::FUNCTION:
@@ -3711,7 +3711,7 @@ X509_issuer_and_serial_cmp              3590      1_1_0   EXIST::FUNCTION:
 OCSP_response_create                    3591   1_1_0   EXIST::FUNCTION:
 SHA224                                  3592   1_1_0   EXIST::FUNCTION:
 MD2_options                             3593   1_1_0   EXIST::FUNCTION:MD2
-CRYPTO_set_locking_callback             3594   1_1_0   EXIST::FUNCTION:
+CRYPTO_set_locking_callback             3594   1_1_0   NOEXIST::FUNCTION:
 X509_REQ_it                             3595   1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 X509_REQ_it                             3595   1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
 RAND_bytes                              3596   1_1_0   EXIST::FUNCTION:
@@ -3745,7 +3745,7 @@ UI_method_get_closer                    3623      1_1_0   EXIST::FUNCTION:
 ENGINE_get_ex_data                      3624   1_1_0   EXIST::FUNCTION:ENGINE
 BN_print_fp                             3625   1_1_0   EXIST::FUNCTION:STDIO
 MD2_Update                              3626   1_1_0   EXIST::FUNCTION:MD2
-CRYPTO_THREADID_set_callback            3627   1_1_0   EXIST::FUNCTION:
+CRYPTO_THREADID_set_callback            3627   1_1_0   NOEXIST::FUNCTION:
 ENGINE_free                             3628   1_1_0   EXIST::FUNCTION:ENGINE
 d2i_X509_ATTRIBUTE                      3629   1_1_0   EXIST::FUNCTION:
 TS_RESP_free                            3630   1_1_0   EXIST::FUNCTION:
@@ -3891,7 +3891,7 @@ BIO_ADDRINFO_family                     3766      1_1_0   EXIST::FUNCTION:
 PEM_write_DHxparams                     3767   1_1_0   EXIST::FUNCTION:DH
 BN_mod_exp2_mont                        3768   1_1_0   EXIST::FUNCTION:
 ASN1_PRINTABLE_free                     3769   1_1_0   EXIST::FUNCTION:
-CRYPTO_thread_id                        3770   1_1_0   EXIST::FUNCTION:DEPRECATEDIN_1_0_0
+CRYPTO_thread_id                        3770   1_1_0   NOEXIST::FUNCTION:
 PKCS7_ATTR_SIGN_it                      3771   1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
 PKCS7_ATTR_SIGN_it                      3771   1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
 EVP_MD_CTX_copy                         3772   1_1_0   EXIST::FUNCTION:
@@ -4050,3 +4050,11 @@ BN_BLINDING_is_current_thread           3915     1_1_0   EXIST::FUNCTION:
 BN_BLINDING_set_current_thread          3916   1_1_0   EXIST::FUNCTION:
 BN_BLINDING_lock                        3917   1_1_0   EXIST::FUNCTION:
 BN_BLINDING_unlock                      3918   1_1_0   EXIST::FUNCTION:
+EC_GROUP_new_from_ecpkparameters        3919   1_1_0   EXIST::FUNCTION:EC
+EC_GROUP_get_ecpkparameters             3920   1_1_0   EXIST::FUNCTION:EC
+EC_GROUP_new_from_ecparameters          3921   1_1_0   EXIST::FUNCTION:EC
+ECPARAMETERS_it                         3922   1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:EC
+ECPARAMETERS_it                         3922   1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:EC
+ECPKPARAMETERS_it                       3923   1_1_0   EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:EC
+ECPKPARAMETERS_it                       3923   1_1_0   EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:EC
+EC_GROUP_get_ecparameters               3924   1_1_0   EXIST::FUNCTION:EC