change API for looking at the internal curve list
[openssl.git] / crypto / ec / ec.h
index 4eb4ad678c1f07b52079e9e7d5e29a0bd04ffa84..094e05e1685f34c3decd3a717f52cfc535e640c0 100644 (file)
@@ -184,14 +184,20 @@ 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 */
+
 EC_POINT *EC_POINT_new(const EC_GROUP *);
 void EC_POINT_free(EC_POINT *);
 void EC_POINT_clear_free(EC_POINT *);
@@ -253,6 +259,14 @@ int EC_GROUP_precompute_mult(EC_GROUP *, BN_CTX *);
 
 
 /* ASN1 stuff */
+
+/* EC_GROUP_get_basis_type() returns the NID of the basis type
+ * used to represent the field elements */
+int EC_GROUP_get_basis_type(const EC_GROUP *);
+int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k);
+int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, 
+       unsigned int *k2, unsigned int *k3);
+
 #define OPENSSL_EC_NAMED_CURVE 0x001
 
 typedef struct ecpk_parameters_st ECPKPARAMETERS;
@@ -363,6 +377,7 @@ void ERR_load_EC_strings(void);
 #define EC_F_EC_ASN1_PARAMETERS2GROUP                   157
 #define EC_F_EC_ASN1_PKPARAMETERS2GROUP                         158
 #define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT    159
+#define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE             195
 #define EC_F_EC_GF2M_SIMPLE_OCT2POINT                   160
 #define EC_F_EC_GF2M_SIMPLE_POINT2OCT                   161
 #define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162
@@ -396,6 +411,8 @@ void ERR_load_EC_strings(void);
 #define EC_F_EC_GROUP_GET_DEGREE                        173
 #define EC_F_EC_GROUP_GET_EXTRA_DATA                    107
 #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_GROUP2NID                                 147
 #define EC_F_EC_GROUP_NEW                               108
 #define EC_F_EC_GROUP_NEW_BY_NID                        174
@@ -472,6 +489,7 @@ void ERR_load_EC_strings(void);
 #define EC_R_UNDEFINED_ORDER                            128
 #define EC_R_UNKNOWN_GROUP                              129
 #define EC_R_UNKNOWN_ORDER                              114
+#define EC_R_UNSUPPORTED_FIELD                          131
 #define EC_R_WRONG_ORDER                                130
 
 #ifdef  __cplusplus