1*4724848cSchristos /*
2*4724848cSchristos * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved.
3*4724848cSchristos *
4*4724848cSchristos * Licensed under the Apache License 2.0 (the "License"). You may not use
5*4724848cSchristos * this file except in compliance with the License. You can obtain a copy
6*4724848cSchristos * in the file LICENSE in the source distribution or at
7*4724848cSchristos * https://www.openssl.org/source/license.html
8*4724848cSchristos */
9*4724848cSchristos
10*4724848cSchristos #include "internal/nelem.h"
11*4724848cSchristos #include "testutil.h"
12*4724848cSchristos #include <openssl/ec.h>
13*4724848cSchristos #include "ec_local.h"
14*4724848cSchristos #include <openssl/objects.h>
15*4724848cSchristos
16*4724848cSchristos static size_t crv_len = 0;
17*4724848cSchristos static EC_builtin_curve *curves = NULL;
18*4724848cSchristos
19*4724848cSchristos /* sanity checks field_inv function pointer in EC_METHOD */
group_field_tests(const EC_GROUP * group,BN_CTX * ctx)20*4724848cSchristos static int group_field_tests(const EC_GROUP *group, BN_CTX *ctx)
21*4724848cSchristos {
22*4724848cSchristos BIGNUM *a = NULL, *b = NULL, *c = NULL;
23*4724848cSchristos int ret = 0;
24*4724848cSchristos
25*4724848cSchristos if (group->meth->field_inv == NULL || group->meth->field_mul == NULL)
26*4724848cSchristos return 1;
27*4724848cSchristos
28*4724848cSchristos BN_CTX_start(ctx);
29*4724848cSchristos a = BN_CTX_get(ctx);
30*4724848cSchristos b = BN_CTX_get(ctx);
31*4724848cSchristos if (!TEST_ptr(c = BN_CTX_get(ctx))
32*4724848cSchristos /* 1/1 = 1 */
33*4724848cSchristos || !TEST_true(group->meth->field_inv(group, b, BN_value_one(), ctx))
34*4724848cSchristos || !TEST_true(BN_is_one(b))
35*4724848cSchristos /* (1/a)*a = 1 */
36*4724848cSchristos || !TEST_true(BN_pseudo_rand(a, BN_num_bits(group->field) - 1,
37*4724848cSchristos BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY))
38*4724848cSchristos || !TEST_true(group->meth->field_inv(group, b, a, ctx))
39*4724848cSchristos || (group->meth->field_encode &&
40*4724848cSchristos !TEST_true(group->meth->field_encode(group, a, a, ctx)))
41*4724848cSchristos || (group->meth->field_encode &&
42*4724848cSchristos !TEST_true(group->meth->field_encode(group, b, b, ctx)))
43*4724848cSchristos || !TEST_true(group->meth->field_mul(group, c, a, b, ctx))
44*4724848cSchristos || (group->meth->field_decode &&
45*4724848cSchristos !TEST_true(group->meth->field_decode(group, c, c, ctx)))
46*4724848cSchristos || !TEST_true(BN_is_one(c)))
47*4724848cSchristos goto err;
48*4724848cSchristos
49*4724848cSchristos /* 1/0 = error */
50*4724848cSchristos BN_zero(a);
51*4724848cSchristos if (!TEST_false(group->meth->field_inv(group, b, a, ctx))
52*4724848cSchristos || !TEST_true(ERR_GET_LIB(ERR_peek_last_error()) == ERR_LIB_EC)
53*4724848cSchristos || !TEST_true(ERR_GET_REASON(ERR_peek_last_error()) ==
54*4724848cSchristos EC_R_CANNOT_INVERT)
55*4724848cSchristos /* 1/p = error */
56*4724848cSchristos || !TEST_false(group->meth->field_inv(group, b, group->field, ctx))
57*4724848cSchristos || !TEST_true(ERR_GET_LIB(ERR_peek_last_error()) == ERR_LIB_EC)
58*4724848cSchristos || !TEST_true(ERR_GET_REASON(ERR_peek_last_error()) ==
59*4724848cSchristos EC_R_CANNOT_INVERT))
60*4724848cSchristos goto err;
61*4724848cSchristos
62*4724848cSchristos ERR_clear_error();
63*4724848cSchristos ret = 1;
64*4724848cSchristos err:
65*4724848cSchristos BN_CTX_end(ctx);
66*4724848cSchristos return ret;
67*4724848cSchristos }
68*4724848cSchristos
69*4724848cSchristos /* wrapper for group_field_tests for explicit curve params and EC_METHOD */
field_tests(const EC_METHOD * meth,const unsigned char * params,int len)70*4724848cSchristos static int field_tests(const EC_METHOD *meth, const unsigned char *params,
71*4724848cSchristos int len)
72*4724848cSchristos {
73*4724848cSchristos BN_CTX *ctx = NULL;
74*4724848cSchristos BIGNUM *p = NULL, *a = NULL, *b = NULL;
75*4724848cSchristos EC_GROUP *group = NULL;
76*4724848cSchristos int ret = 0;
77*4724848cSchristos
78*4724848cSchristos if (!TEST_ptr(ctx = BN_CTX_new()))
79*4724848cSchristos return 0;
80*4724848cSchristos
81*4724848cSchristos BN_CTX_start(ctx);
82*4724848cSchristos p = BN_CTX_get(ctx);
83*4724848cSchristos a = BN_CTX_get(ctx);
84*4724848cSchristos if (!TEST_ptr(b = BN_CTX_get(ctx))
85*4724848cSchristos || !TEST_ptr(group = EC_GROUP_new(meth))
86*4724848cSchristos || !TEST_true(BN_bin2bn(params, len, p))
87*4724848cSchristos || !TEST_true(BN_bin2bn(params + len, len, a))
88*4724848cSchristos || !TEST_true(BN_bin2bn(params + 2 * len, len, b))
89*4724848cSchristos || !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
90*4724848cSchristos || !group_field_tests(group, ctx))
91*4724848cSchristos goto err;
92*4724848cSchristos ret = 1;
93*4724848cSchristos
94*4724848cSchristos err:
95*4724848cSchristos BN_CTX_end(ctx);
96*4724848cSchristos BN_CTX_free(ctx);
97*4724848cSchristos if (group != NULL)
98*4724848cSchristos EC_GROUP_free(group);
99*4724848cSchristos return ret;
100*4724848cSchristos }
101*4724848cSchristos
102*4724848cSchristos /* NIST prime curve P-256 */
103*4724848cSchristos static const unsigned char params_p256[] = {
104*4724848cSchristos /* p */
105*4724848cSchristos 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
106*4724848cSchristos 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
107*4724848cSchristos 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
108*4724848cSchristos /* a */
109*4724848cSchristos 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
110*4724848cSchristos 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
111*4724848cSchristos 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
112*4724848cSchristos /* b */
113*4724848cSchristos 0x5A, 0xC6, 0x35, 0xD8, 0xAA, 0x3A, 0x93, 0xE7, 0xB3, 0xEB, 0xBD, 0x55,
114*4724848cSchristos 0x76, 0x98, 0x86, 0xBC, 0x65, 0x1D, 0x06, 0xB0, 0xCC, 0x53, 0xB0, 0xF6,
115*4724848cSchristos 0x3B, 0xCE, 0x3C, 0x3E, 0x27, 0xD2, 0x60, 0x4B
116*4724848cSchristos };
117*4724848cSchristos
118*4724848cSchristos #ifndef OPENSSL_NO_EC2M
119*4724848cSchristos /* NIST binary curve B-283 */
120*4724848cSchristos static const unsigned char params_b283[] = {
121*4724848cSchristos /* p */
122*4724848cSchristos 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123*4724848cSchristos 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124*4724848cSchristos 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xA1,
125*4724848cSchristos /* a */
126*4724848cSchristos 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127*4724848cSchristos 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128*4724848cSchristos 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
129*4724848cSchristos /* b */
130*4724848cSchristos 0x02, 0x7B, 0x68, 0x0A, 0xC8, 0xB8, 0x59, 0x6D, 0xA5, 0xA4, 0xAF, 0x8A,
131*4724848cSchristos 0x19, 0xA0, 0x30, 0x3F, 0xCA, 0x97, 0xFD, 0x76, 0x45, 0x30, 0x9F, 0xA2,
132*4724848cSchristos 0xA5, 0x81, 0x48, 0x5A, 0xF6, 0x26, 0x3E, 0x31, 0x3B, 0x79, 0xA2, 0xF5
133*4724848cSchristos };
134*4724848cSchristos #endif
135*4724848cSchristos
136*4724848cSchristos /* test EC_GFp_simple_method directly */
field_tests_ecp_simple(void)137*4724848cSchristos static int field_tests_ecp_simple(void)
138*4724848cSchristos {
139*4724848cSchristos TEST_info("Testing EC_GFp_simple_method()\n");
140*4724848cSchristos return field_tests(EC_GFp_simple_method(), params_p256,
141*4724848cSchristos sizeof(params_p256) / 3);
142*4724848cSchristos }
143*4724848cSchristos
144*4724848cSchristos /* test EC_GFp_mont_method directly */
field_tests_ecp_mont(void)145*4724848cSchristos static int field_tests_ecp_mont(void)
146*4724848cSchristos {
147*4724848cSchristos TEST_info("Testing EC_GFp_mont_method()\n");
148*4724848cSchristos return field_tests(EC_GFp_mont_method(), params_p256,
149*4724848cSchristos sizeof(params_p256) / 3);
150*4724848cSchristos }
151*4724848cSchristos
152*4724848cSchristos #ifndef OPENSSL_NO_EC2M
153*4724848cSchristos /* test EC_GF2m_simple_method directly */
field_tests_ec2_simple(void)154*4724848cSchristos static int field_tests_ec2_simple(void)
155*4724848cSchristos {
156*4724848cSchristos TEST_info("Testing EC_GF2m_simple_method()\n");
157*4724848cSchristos return field_tests(EC_GF2m_simple_method(), params_b283,
158*4724848cSchristos sizeof(params_b283) / 3);
159*4724848cSchristos }
160*4724848cSchristos #endif
161*4724848cSchristos
162*4724848cSchristos /* test default method for a named curve */
field_tests_default(int n)163*4724848cSchristos static int field_tests_default(int n)
164*4724848cSchristos {
165*4724848cSchristos BN_CTX *ctx = NULL;
166*4724848cSchristos EC_GROUP *group = NULL;
167*4724848cSchristos int nid = curves[n].nid;
168*4724848cSchristos int ret = 0;
169*4724848cSchristos
170*4724848cSchristos TEST_info("Testing curve %s\n", OBJ_nid2sn(nid));
171*4724848cSchristos
172*4724848cSchristos if (!TEST_ptr(group = EC_GROUP_new_by_curve_name(nid))
173*4724848cSchristos || !TEST_ptr(ctx = BN_CTX_new())
174*4724848cSchristos || !group_field_tests(group, ctx))
175*4724848cSchristos goto err;
176*4724848cSchristos
177*4724848cSchristos ret = 1;
178*4724848cSchristos err:
179*4724848cSchristos if (group != NULL)
180*4724848cSchristos EC_GROUP_free(group);
181*4724848cSchristos if (ctx != NULL)
182*4724848cSchristos BN_CTX_free(ctx);
183*4724848cSchristos return ret;
184*4724848cSchristos }
185*4724848cSchristos
186*4724848cSchristos /*
187*4724848cSchristos * Tests behavior of the EC_KEY_set_private_key
188*4724848cSchristos */
set_private_key(void)189*4724848cSchristos static int set_private_key(void)
190*4724848cSchristos {
191*4724848cSchristos EC_KEY *key = NULL, *aux_key = NULL;
192*4724848cSchristos int testresult = 0;
193*4724848cSchristos
194*4724848cSchristos key = EC_KEY_new_by_curve_name(NID_secp224r1);
195*4724848cSchristos aux_key = EC_KEY_new_by_curve_name(NID_secp224r1);
196*4724848cSchristos if (!TEST_ptr(key)
197*4724848cSchristos || !TEST_ptr(aux_key)
198*4724848cSchristos || !TEST_int_eq(EC_KEY_generate_key(key), 1)
199*4724848cSchristos || !TEST_int_eq(EC_KEY_generate_key(aux_key), 1))
200*4724848cSchristos goto err;
201*4724848cSchristos
202*4724848cSchristos /* Test setting a valid private key */
203*4724848cSchristos if (!TEST_int_eq(EC_KEY_set_private_key(key, aux_key->priv_key), 1))
204*4724848cSchristos goto err;
205*4724848cSchristos
206*4724848cSchristos /* Test compliance with legacy behavior for NULL private keys */
207*4724848cSchristos if (!TEST_int_eq(EC_KEY_set_private_key(key, NULL), 0)
208*4724848cSchristos || !TEST_ptr_null(key->priv_key))
209*4724848cSchristos goto err;
210*4724848cSchristos
211*4724848cSchristos testresult = 1;
212*4724848cSchristos
213*4724848cSchristos err:
214*4724848cSchristos EC_KEY_free(key);
215*4724848cSchristos EC_KEY_free(aux_key);
216*4724848cSchristos return testresult;
217*4724848cSchristos }
218*4724848cSchristos
219*4724848cSchristos /*
220*4724848cSchristos * Tests behavior of the decoded_from_explicit_params flag and API
221*4724848cSchristos */
decoded_flag_test(void)222*4724848cSchristos static int decoded_flag_test(void)
223*4724848cSchristos {
224*4724848cSchristos EC_GROUP *grp;
225*4724848cSchristos EC_GROUP *grp_copy = NULL;
226*4724848cSchristos ECPARAMETERS *ecparams = NULL;
227*4724848cSchristos ECPKPARAMETERS *ecpkparams = NULL;
228*4724848cSchristos EC_KEY *key = NULL;
229*4724848cSchristos unsigned char *encodedparams = NULL;
230*4724848cSchristos const unsigned char *encp;
231*4724848cSchristos int encodedlen;
232*4724848cSchristos int testresult = 0;
233*4724848cSchristos
234*4724848cSchristos /* Test EC_GROUP_new not setting the flag */
235*4724848cSchristos grp = EC_GROUP_new(EC_GFp_simple_method());
236*4724848cSchristos if (!TEST_ptr(grp)
237*4724848cSchristos || !TEST_int_eq(grp->decoded_from_explicit_params, 0))
238*4724848cSchristos goto err;
239*4724848cSchristos EC_GROUP_free(grp);
240*4724848cSchristos
241*4724848cSchristos /* Test EC_GROUP_new_by_curve_name not setting the flag */
242*4724848cSchristos grp = EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1);
243*4724848cSchristos if (!TEST_ptr(grp)
244*4724848cSchristos || !TEST_int_eq(grp->decoded_from_explicit_params, 0))
245*4724848cSchristos goto err;
246*4724848cSchristos
247*4724848cSchristos /* Test EC_GROUP_new_from_ecparameters not setting the flag */
248*4724848cSchristos if (!TEST_ptr(ecparams = EC_GROUP_get_ecparameters(grp, NULL))
249*4724848cSchristos || !TEST_ptr(grp_copy = EC_GROUP_new_from_ecparameters(ecparams))
250*4724848cSchristos || !TEST_int_eq(grp_copy->decoded_from_explicit_params, 0))
251*4724848cSchristos goto err;
252*4724848cSchristos EC_GROUP_free(grp_copy);
253*4724848cSchristos grp_copy = NULL;
254*4724848cSchristos ECPARAMETERS_free(ecparams);
255*4724848cSchristos ecparams = NULL;
256*4724848cSchristos
257*4724848cSchristos /* Test EC_GROUP_new_from_ecpkparameters not setting the flag */
258*4724848cSchristos if (!TEST_int_eq(EC_GROUP_get_asn1_flag(grp), OPENSSL_EC_NAMED_CURVE)
259*4724848cSchristos || !TEST_ptr(ecpkparams = EC_GROUP_get_ecpkparameters(grp, NULL))
260*4724848cSchristos || !TEST_ptr(grp_copy = EC_GROUP_new_from_ecpkparameters(ecpkparams))
261*4724848cSchristos || !TEST_int_eq(grp_copy->decoded_from_explicit_params, 0)
262*4724848cSchristos || !TEST_ptr(key = EC_KEY_new())
263*4724848cSchristos /* Test EC_KEY_decoded_from_explicit_params on key without a group */
264*4724848cSchristos || !TEST_int_eq(EC_KEY_decoded_from_explicit_params(key), -1)
265*4724848cSchristos || !TEST_int_eq(EC_KEY_set_group(key, grp_copy), 1)
266*4724848cSchristos /* Test EC_KEY_decoded_from_explicit_params negative case */
267*4724848cSchristos || !TEST_int_eq(EC_KEY_decoded_from_explicit_params(key), 0))
268*4724848cSchristos goto err;
269*4724848cSchristos EC_GROUP_free(grp_copy);
270*4724848cSchristos grp_copy = NULL;
271*4724848cSchristos ECPKPARAMETERS_free(ecpkparams);
272*4724848cSchristos ecpkparams = NULL;
273*4724848cSchristos
274*4724848cSchristos /* Test d2i_ECPKParameters with named params not setting the flag */
275*4724848cSchristos if (!TEST_int_gt(encodedlen = i2d_ECPKParameters(grp, &encodedparams), 0)
276*4724848cSchristos || !TEST_ptr(encp = encodedparams)
277*4724848cSchristos || !TEST_ptr(grp_copy = d2i_ECPKParameters(NULL, &encp, encodedlen))
278*4724848cSchristos || !TEST_int_eq(grp_copy->decoded_from_explicit_params, 0))
279*4724848cSchristos goto err;
280*4724848cSchristos EC_GROUP_free(grp_copy);
281*4724848cSchristos grp_copy = NULL;
282*4724848cSchristos OPENSSL_free(encodedparams);
283*4724848cSchristos encodedparams = NULL;
284*4724848cSchristos
285*4724848cSchristos /* Asn1 flag stays set to explicit with EC_GROUP_new_from_ecpkparameters */
286*4724848cSchristos EC_GROUP_set_asn1_flag(grp, OPENSSL_EC_EXPLICIT_CURVE);
287*4724848cSchristos if (!TEST_ptr(ecpkparams = EC_GROUP_get_ecpkparameters(grp, NULL))
288*4724848cSchristos || !TEST_ptr(grp_copy = EC_GROUP_new_from_ecpkparameters(ecpkparams))
289*4724848cSchristos || !TEST_int_eq(EC_GROUP_get_asn1_flag(grp_copy), OPENSSL_EC_EXPLICIT_CURVE)
290*4724848cSchristos || !TEST_int_eq(grp_copy->decoded_from_explicit_params, 0))
291*4724848cSchristos goto err;
292*4724848cSchristos EC_GROUP_free(grp_copy);
293*4724848cSchristos grp_copy = NULL;
294*4724848cSchristos
295*4724848cSchristos /* Test d2i_ECPKParameters with explicit params setting the flag */
296*4724848cSchristos if (!TEST_int_gt(encodedlen = i2d_ECPKParameters(grp, &encodedparams), 0)
297*4724848cSchristos || !TEST_ptr(encp = encodedparams)
298*4724848cSchristos || !TEST_ptr(grp_copy = d2i_ECPKParameters(NULL, &encp, encodedlen))
299*4724848cSchristos || !TEST_int_eq(EC_GROUP_get_asn1_flag(grp_copy), OPENSSL_EC_EXPLICIT_CURVE)
300*4724848cSchristos || !TEST_int_eq(grp_copy->decoded_from_explicit_params, 1)
301*4724848cSchristos || !TEST_int_eq(EC_KEY_set_group(key, grp_copy), 1)
302*4724848cSchristos /* Test EC_KEY_decoded_from_explicit_params positive case */
303*4724848cSchristos || !TEST_int_eq(EC_KEY_decoded_from_explicit_params(key), 1))
304*4724848cSchristos goto err;
305*4724848cSchristos
306*4724848cSchristos testresult = 1;
307*4724848cSchristos
308*4724848cSchristos err:
309*4724848cSchristos EC_KEY_free(key);
310*4724848cSchristos EC_GROUP_free(grp);
311*4724848cSchristos EC_GROUP_free(grp_copy);
312*4724848cSchristos ECPARAMETERS_free(ecparams);
313*4724848cSchristos ECPKPARAMETERS_free(ecpkparams);
314*4724848cSchristos OPENSSL_free(encodedparams);
315*4724848cSchristos
316*4724848cSchristos return testresult;
317*4724848cSchristos }
318*4724848cSchristos
319*4724848cSchristos static
ecpkparams_i2d2i_test(int n)320*4724848cSchristos int ecpkparams_i2d2i_test(int n)
321*4724848cSchristos {
322*4724848cSchristos EC_GROUP *g1 = NULL, *g2 = NULL;
323*4724848cSchristos FILE *fp = NULL;
324*4724848cSchristos int nid = curves[n].nid;
325*4724848cSchristos int testresult = 0;
326*4724848cSchristos
327*4724848cSchristos /* create group */
328*4724848cSchristos if (!TEST_ptr(g1 = EC_GROUP_new_by_curve_name(nid)))
329*4724848cSchristos goto end;
330*4724848cSchristos
331*4724848cSchristos /* encode params to file */
332*4724848cSchristos if (!TEST_ptr(fp = fopen("params.der", "wb"))
333*4724848cSchristos || !TEST_true(i2d_ECPKParameters_fp(fp, g1)))
334*4724848cSchristos goto end;
335*4724848cSchristos
336*4724848cSchristos /* flush and close file */
337*4724848cSchristos if (!TEST_int_eq(fclose(fp), 0)) {
338*4724848cSchristos fp = NULL;
339*4724848cSchristos goto end;
340*4724848cSchristos }
341*4724848cSchristos fp = NULL;
342*4724848cSchristos
343*4724848cSchristos /* decode params from file */
344*4724848cSchristos if (!TEST_ptr(fp = fopen("params.der", "rb"))
345*4724848cSchristos || !TEST_ptr(g2 = d2i_ECPKParameters_fp(fp, NULL)))
346*4724848cSchristos goto end;
347*4724848cSchristos
348*4724848cSchristos testresult = 1; /* PASS */
349*4724848cSchristos
350*4724848cSchristos end:
351*4724848cSchristos if (fp != NULL)
352*4724848cSchristos fclose(fp);
353*4724848cSchristos
354*4724848cSchristos EC_GROUP_free(g1);
355*4724848cSchristos EC_GROUP_free(g2);
356*4724848cSchristos
357*4724848cSchristos return testresult;
358*4724848cSchristos }
359*4724848cSchristos
setup_tests(void)360*4724848cSchristos int setup_tests(void)
361*4724848cSchristos {
362*4724848cSchristos crv_len = EC_get_builtin_curves(NULL, 0);
363*4724848cSchristos if (!TEST_ptr(curves = OPENSSL_malloc(sizeof(*curves) * crv_len))
364*4724848cSchristos || !TEST_true(EC_get_builtin_curves(curves, crv_len)))
365*4724848cSchristos return 0;
366*4724848cSchristos
367*4724848cSchristos ADD_TEST(field_tests_ecp_simple);
368*4724848cSchristos ADD_TEST(field_tests_ecp_mont);
369*4724848cSchristos #ifndef OPENSSL_NO_EC2M
370*4724848cSchristos ADD_TEST(field_tests_ec2_simple);
371*4724848cSchristos #endif
372*4724848cSchristos ADD_ALL_TESTS(field_tests_default, crv_len);
373*4724848cSchristos ADD_TEST(set_private_key);
374*4724848cSchristos ADD_TEST(decoded_flag_test);
375*4724848cSchristos ADD_ALL_TESTS(ecpkparams_i2d2i_test, crv_len);
376*4724848cSchristos
377*4724848cSchristos return 1;
378*4724848cSchristos }
379*4724848cSchristos
cleanup_tests(void)380*4724848cSchristos void cleanup_tests(void)
381*4724848cSchristos {
382*4724848cSchristos OPENSSL_free(curves);
383*4724848cSchristos }
384