From 65b1d31df53fecefbf53dedd8fc4f9f64a62a92b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bodo=20M=C3=B6ller?= Date: Mon, 2 Sep 2002 07:08:33 +0000 Subject: [PATCH] change API for looking at the internal curve list Submitted by: Nils Larsch --- apps/ecparam.c | 31 +++++++++++++++++++++++-------- crypto/ec/ec.h | 16 ++++++++++------ crypto/ec/ec_curve.c | 25 +++++++++++++------------ util/libeay.num | 5 +++-- 4 files changed, 49 insertions(+), 28 deletions(-) diff --git a/apps/ecparam.c b/apps/ecparam.c index e0a56062d3..71ae9e7d9b 100644 --- a/apps/ecparam.c +++ b/apps/ecparam.c @@ -352,19 +352,33 @@ bad: if (list_curves) { - int counter=0; + EC_builtin_curve *curves = NULL; + size_t crv_len = 0; + size_t n = 0; + size_t len; - for (;;) + crv_len = EC_get_builtin_curves(NULL, 0); + + curves = OPENSSL_malloc(sizeof(EC_builtin_curve) * crv_len); + + if (curves == NULL) + goto end; + + if (!EC_get_builtin_curves(curves, crv_len)) + { + OPENSSL_free(curves); + goto end; + } + + + for (n = 0; n < crv_len; n++) { const char *comment; const char *sname; - int len, nid = ec_group_index2nid(counter++); - if (!nid) - break; - comment = EC_GROUP_get0_comment(nid); - sname = OBJ_nid2sn(nid); + comment = curves[n].comment; + sname = OBJ_nid2sn(curves[n].nid); if (comment == NULL) - comment = ""; + comment = "CURVE DESCRIPTION NOT AVAILABLE"; if (sname == NULL) sname = ""; @@ -375,6 +389,7 @@ bad: BIO_printf(out, "%s\n", comment); } + OPENSSL_free(curves); ret = 0; goto end; } diff --git a/crypto/ec/ec.h b/crypto/ec/ec.h index faca04aab9..094e05e168 100644 --- a/crypto/ec/ec.h +++ b/crypto/ec/ec.h @@ -184,12 +184,16 @@ EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM /* EC_GROUP_new_by_nid() creates a EC_GROUP structure specified by a NID */ EC_GROUP *EC_GROUP_new_by_nid(int nid); -/* EC_GROUP_get0_comment() returns a pointer to the 'comment' field of - * ec_curve_data_st structure */ -const char *EC_GROUP_get0_comment(int nid); -/* internal function : ec_group_index2nid() returns the NID of curve - * with the given index i from the internal curve list */ -int ec_group_index2nid(int i); +/* handling of internal curves */ +typedef struct { + int nid; + const char *comment; + } EC_builtin_curve; +/* EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number + * of all available curves or zero if a error occurred. + * In case r ist not zero nitems EC_builtin_curve structures + * are filled with the data of the first nitems internal groups */ +size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); /* EC_POINT functions */ diff --git a/crypto/ec/ec_curve.c b/crypto/ec/ec_curve.c index 93f775d556..090520372e 100644 --- a/crypto/ec/ec_curve.c +++ b/crypto/ec/ec_curve.c @@ -1207,19 +1207,20 @@ EC_GROUP *EC_GROUP_new_by_nid(int nid) return ret; } -const char *EC_GROUP_get0_comment(int nid) +size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems) { - size_t i; + size_t i, min; - for (i=0; icomment; - return NULL; - } + if (r == NULL || nitems == 0) + return curve_list_length; -int ec_group_index2nid(int i) - { - if (i >= curve_list_length || i < 0) - return 0; - return curve_list[i].nid; + min = nitems < curve_list_length ? nitems : curve_list_length; + + for (i = 0; i < min; i++) + { + r[i].nid = curve_list[i].nid; + r[i].comment = curve_list[i].data->comment; + } + + return curve_list_length; } diff --git a/util/libeay.num b/util/libeay.num index 7f86dbc01b..4b96ca8bf0 100755 --- a/util/libeay.num +++ b/util/libeay.num @@ -3003,9 +3003,10 @@ ENGINE_register_all_ECDH 3436 EXIST::FUNCTION: ECDH_DATA_new_method 3437 EXIST::FUNCTION:ECDH ENGINE_set_default_ECDH 3438 EXIST::FUNCTION: ENGINE_register_ECDH 3439 EXIST::FUNCTION: -EC_GROUP_get0_comment 3440 EXIST::FUNCTION:EC -ec_group_index2nid 3441 EXIST::FUNCTION:EC +EC_GROUP_get0_comment 3440 NOEXIST::FUNCTION: +ec_group_index2nid 3441 NOEXIST::FUNCTION: EC_GROUP_get_basis_type 3442 EXIST::FUNCTION:EC X509_REQ_print_ex 3443 EXIST::FUNCTION:BIO EC_GROUP_get_pentanomial_basis 3444 EXIST::FUNCTION:EC EC_GROUP_get_trinomial_basis 3445 EXIST::FUNCTION:EC +EC_get_builtin_curves 3446 EXIST::FUNCTION:EC -- GitLab