@@ -268,6 +268,115 @@ static const unsigned char ecc_derived_521[] = {
268268
269269#ifdef WP_HAVE_ECKEYGEN
270270
271+ static int test_eckeygen_name_ex (const char * name , int setEncoding , int expectFail ) {
272+ int err ;
273+ EVP_PKEY_CTX * ctx = NULL ;
274+ EVP_PKEY * key = NULL ;
275+ (void )expectFail ;
276+
277+ PRINT_MSG ("Create public key context" );
278+ err = (ctx = EVP_PKEY_CTX_new_from_name (wpLibCtx , "EC" , NULL )) == NULL ;
279+ if (err == 0 ) {
280+ PRINT_MSG ("Initialize key generation" );
281+ err = EVP_PKEY_keygen_init (ctx ) != 1 ;
282+ }
283+ if (err == 0 ) {
284+ PRINT_MSG ("Set named curve" );
285+ err = EVP_PKEY_CTX_ctrl_str (ctx , "ec_paramgen_curve" , name ) != 1 ;
286+ }
287+ if (err == 0 && setEncoding ) {
288+ /* For now only testing explictly setting named curve encoding */
289+ err = EVP_PKEY_CTX_ctrl_str (ctx , "ec_param_enc" ,
290+ OSSL_PKEY_EC_ENCODING_GROUP ) != 1 ;
291+ }
292+ if (err == 0 ) {
293+ PRINT_MSG ("Generate key" );
294+ err = EVP_PKEY_keygen (ctx , & key ) != 1 ;
295+ #if defined(HAVE_FIPS ) || defined(HAVE_FIPS_VERSION )
296+ if (expectFail ) {
297+ err = err != 1 ;
298+ if (err == 0 ) {
299+ PRINT_MSG ("Key gen failed, expected"
300+ "(P-192 not allowed w/ FIPS)" );
301+ }
302+ else {
303+ PRINT_MSG ("Key gen succeeded, unexpected"
304+ "(P-192 not allowed w/FIPS)" );
305+ }
306+ }
307+ #endif /* HAVE_FIPS || HAVE_FIPS_VERSION */
308+ }
309+
310+ EVP_PKEY_free (key );
311+ EVP_PKEY_CTX_free (ctx );
312+
313+ return err ;
314+ }
315+
316+ int test_eckeygen_name (void * data ) {
317+ int err = 0 ;
318+ (void )data ;
319+ #ifdef WP_HAVE_EC_P192
320+ #if defined(HAVE_FIPS ) || defined(HAVE_FIPS_VERSION )
321+ err = test_eckeygen_name_ex ("P-192" , 0 , 1 );
322+ #else
323+ err = test_eckeygen_name_ex ("P-192" , 0 , 0 );
324+ if (err == 0 ) {
325+ err = test_eckeygen_name_ex ("P-192" , 1 , 0 );
326+ }
327+ if (err == 0 ) {
328+ err = test_eckeygen_name_ex (SN_X9_62_prime192v1 , 1 , 0 );
329+ }
330+ #endif
331+ #endif
332+ #ifdef WP_HAVE_EC_P224
333+ if (err == 0 ) {
334+ err = test_eckeygen_name_ex ("P-192" , 0 , 0 );
335+ }
336+ if (err == 0 ) {
337+ err = test_eckeygen_name_ex ("P-192" , 1 , 0 );
338+ }
339+ if (err == 0 ) {
340+ err = test_eckeygen_name_ex (SN_secp224r1 , 1 , 0 );
341+ }
342+ #endif
343+ #ifdef WP_HAVE_EC_P256
344+ if (err == 0 ) {
345+ err = test_eckeygen_name_ex ("P-256" , 0 , 0 );
346+ }
347+ if (err == 0 ) {
348+ err = test_eckeygen_name_ex ("P-256" , 1 , 0 );
349+ }
350+ if (err == 0 ) {
351+ err = test_eckeygen_name_ex (SN_X9_62_prime256v1 , 1 , 0 );
352+ }
353+ #endif
354+ #ifdef WP_HAVE_EC_P384
355+ if (err == 0 ) {
356+ err = test_eckeygen_name_ex ("P-384" , 0 , 0 );
357+ }
358+ if (err == 0 ) {
359+ err = test_eckeygen_name_ex ("P-384" , 1 , 0 );
360+ }
361+ if (err == 0 ) {
362+ err = test_eckeygen_name_ex (SN_secp384r1 , 1 , 0 );
363+ }
364+ #endif
365+ #ifdef WP_HAVE_EC_P521
366+ if (err == 0 ) {
367+ err = test_eckeygen_name_ex ("P-521" , 0 , 0 );
368+ }
369+ if (err == 0 ) {
370+ err = test_eckeygen_name_ex ("P-521" , 1 , 0 );
371+ }
372+ if (err == 0 ) {
373+ err = test_eckeygen_name_ex (SN_secp521r1 , 1 , 0 );
374+ }
375+ #endif
376+
377+ return err ;
378+ }
379+
271380#ifdef WP_HAVE_EC_P192
272381int test_eckeygen_p192 (void * data )
273382{
0 commit comments