From 93e5d0e71fb8933f875cee0579c55866040e98a0 Mon Sep 17 00:00:00 2001 From: tb <> Date: Wed, 30 Oct 2024 17:53:28 +0000 Subject: Add ec_point_from_asn1_octet_string() This is inverse to ec_point_to_asn1_octet_string() but again a lot simpler. Simplify ec_asn1_set_group_parameters() by using it. ok jsing --- src/lib/libcrypto/ec/ec_asn1.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) (limited to 'src/lib') diff --git a/src/lib/libcrypto/ec/ec_asn1.c b/src/lib/libcrypto/ec/ec_asn1.c index 0a488cac66..ec322a8559 100644 --- a/src/lib/libcrypto/ec/ec_asn1.c +++ b/src/lib/libcrypto/ec/ec_asn1.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ec_asn1.c,v 1.99 2024/10/30 06:44:34 tb Exp $ */ +/* $OpenBSD: ec_asn1.c,v 1.100 2024/10/30 17:53:28 tb Exp $ */ /* * Written by Nils Larsch for the OpenSSL project. */ @@ -560,6 +560,21 @@ EC_PRIVATEKEY_free(EC_PRIVATEKEY *a) ASN1_item_free((ASN1_VALUE *)a, &EC_PRIVATEKEY_it); } +static int +ec_point_from_asn1_string(const EC_GROUP *group, const ASN1_STRING *astr, + EC_POINT **out_point, uint8_t *out_form) +{ + return ec_point_from_octets(group, astr->data, astr->length, + out_point, out_form, NULL); +} + +static int +ec_point_from_asn1_octet_string(const EC_GROUP *group, const ASN1_OCTET_STRING *aos, + EC_POINT **out_point, uint8_t *out_form) +{ + return ec_point_from_asn1_string(group, aos, out_point, out_form); +} + static int ec_point_to_asn1_string_type(const EC_GROUP *group, const EC_POINT *point, int form, int type, ASN1_STRING **out_astr) @@ -958,19 +973,16 @@ ec_asn1_parameters_curve2group(const X9_62_CURVE *curve, static int ec_asn1_set_group_parameters(const ECPARAMETERS *params, EC_GROUP *group) { - EC_POINT *generator; + EC_POINT *generator = NULL; BIGNUM *order = NULL, *cofactor = NULL; const ASN1_BIT_STRING *seed; - point_conversion_form_t form; + uint8_t form; int ret = 0; - if ((generator = EC_POINT_new(group)) == NULL) + if (!ec_point_from_asn1_octet_string(group, params->base, &generator, &form)) goto err; - if (!EC_POINT_oct2point(group, generator, - params->base->data, params->base->length, NULL)) { - ECerror(ERR_R_EC_LIB); - goto err; - } + EC_GROUP_set_point_conversion_form(group, form); + if ((order = ASN1_INTEGER_to_BN(params->order, NULL)) == NULL) { ECerror(ERR_R_ASN1_LIB); goto err; @@ -996,10 +1008,6 @@ ec_asn1_set_group_parameters(const ECPARAMETERS *params, EC_GROUP *group) } } - /* oct2point has ensured that to be compressed, uncompressed, or hybrid. */ - form = params->base->data[0] & ~1U; - EC_GROUP_set_point_conversion_form(group, form); - ret = 1; err: -- cgit v1.2.3-55-g6feb