change API for looking at the internal curve list
authorBodo Möller <bodo@openssl.org>
Mon, 2 Sep 2002 07:08:33 +0000 (07:08 +0000)
committerBodo Möller <bodo@openssl.org>
Mon, 2 Sep 2002 07:08:33 +0000 (07:08 +0000)
Submitted by: Nils Larsch

apps/ecparam.c
crypto/ec/ec.h
crypto/ec/ec_curve.c
util/libeay.num

index e0a56062d340dc7c756e06c243eb9d41e052ec2c..71ae9e7d9b37d599404e8f18aeae073bc34a84d7 100644 (file)
@@ -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;
                }
index faca04aab91c367ae56278443875316246187bec..094e05e1685f34c3decd3a717f52cfc535e640c0 100644 (file)
@@ -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 */
index 93f775d5567566e1553e7d2c8e8002bb13bd1254..090520372e2aa2a07045c79dbc5405b837b5c1cd 100644 (file)
@@ -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; i<curve_list_length; i++)
-               if (curve_list[i].nid == nid)
-                       return curve_list[i].data->comment;
-       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;
        }
index 7f86dbc01b02e90b6f4afd5515973b5fdfd8aeca..4b96ca8bf0c4e9f311b1809b9ed60183290f54ac 100755 (executable)
@@ -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