From 60b350a3ef9620866a43358ecd1874c6fc482d9c Mon Sep 17 00:00:00 2001 From: Rich Salz Date: Wed, 9 Mar 2016 11:56:42 -0500 Subject: [PATCH] RT3676: Expose ECgroup i2d functions Reviewed-by: Dr. Stephen Henson --- crypto/ec/ec_asn1.c | 140 +++++++++++++++--------------------- crypto/ec/ec_err.c | 11 +-- doc/crypto/EC_GROUP_new.pod | 16 ++++- include/openssl/ec.h | 55 ++++++++++---- util/libcrypto.num | 66 +++++++++-------- 5 files changed, 161 insertions(+), 127 deletions(-) diff --git a/crypto/ec/ec_asn1.c b/crypto/ec/ec_asn1.c index b2ae8927a3..3b0ba2eaa3 100644 --- a/crypto/ec/ec_asn1.c +++ b/crypto/ec/ec_asn1.c @@ -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; diff --git a/crypto/ec/ec_err.c b/crypto/ec/ec_err.c index b1af918059..8e2a7fc1b0 100644 --- a/crypto/ec/ec_err.c +++ b/crypto/ec/ec_err.c @@ -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"}, diff --git a/doc/crypto/EC_GROUP_new.pod b/doc/crypto/EC_GROUP_new.pod index 70d9955cfc..bbd3dfb54a 100644 --- a/doc/crypto/EC_GROUP_new.pod +++ b/doc/crypto/EC_GROUP_new.pod @@ -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 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 +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 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 (see L). 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 and +EC_GROUP_new_from_ecpkparameters() will create a group from the specific PK B. EC_GROUP_set_curve_GFp sets the curve parameters B

, B and B for a curve over Fp stored in B. EC_group_get_curve_GFp obtains the previously set curve parameters. diff --git a/include/openssl/ec.h b/include/openssl/ec.h index 0fb8ce9865..ee54088e68 100644 --- a/include/openssl/ec.h +++ b/include/openssl/ec.h @@ -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 diff --git a/util/libcrypto.num b/util/libcrypto.num index bd4518ebdf..78c66df81b 100644 --- a/util/libcrypto.num +++ b/util/libcrypto.num @@ -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 -- 2.34.1