@@ -267,12 +267,52 @@ def test_from_parameters_with_invalid_alg
267267 assert_equal e . message , '"ASR" is not a supported algorithm'
268268 end
269269
270- def test_ec_from_parameters_with_minimal_data
270+ def test_ec_from_parameters_pub_given_as_string
271271 source = OpenSSL ::PKey ::EC . generate ( "prime256v1" )
272+ new_key = OpenSSL ::PKey . from_parameters ( "EC" , { group : source . group . curve_name ,
273+ pub : source . public_key . to_bn . to_s ( 2 ) } )
274+ assert_instance_of OpenSSL ::PKey ::EC , new_key
275+ assert_equal source . group . curve_name , new_key . group . curve_name
276+ assert_equal source . public_key , new_key . public_key
277+ assert_equal nil , new_key . private_key
278+ end
272279
273- new_key = OpenSSL ::PKey . from_parameters ( "EC" , { group : source . group . curve_name } )
280+ def test_ec_from_parameters_priv_given_as_bn
281+ source = OpenSSL ::PKey ::EC . generate ( "prime256v1" )
282+ new_key = OpenSSL ::PKey . from_parameters ( "EC" , { group : source . group . curve_name ,
283+ priv : source . private_key . to_bn } )
274284 assert_instance_of OpenSSL ::PKey ::EC , new_key
275285 assert_equal source . group . curve_name , new_key . group . curve_name
286+ assert_equal source . private_key , new_key . private_key
287+ assert_equal nil , new_key . public_key
288+ end
289+
290+ def test_ec_from_parameters_priv_given_as_integer
291+ source = OpenSSL ::PKey ::EC . generate ( "prime256v1" )
292+ new_key = OpenSSL ::PKey . from_parameters ( "EC" , { group : source . group . curve_name ,
293+ priv : source . private_key . to_i } )
294+ assert_instance_of OpenSSL ::PKey ::EC , new_key
295+ assert_equal source . group . curve_name , new_key . group . curve_name
296+ assert_equal source . private_key , new_key . private_key
297+ assert_equal nil , new_key . public_key
298+ end
299+
300+ def test_ec_from_parameters_priv_and_pub_given_for_different_curves
301+ [ "prime256v1" , "secp256k1" , "secp384r1" , "secp521r1" ] . each do |curve |
302+ source = OpenSSL ::PKey ::EC . generate ( curve )
303+ new_key = OpenSSL ::PKey . from_parameters ( "EC" , { group : source . group . curve_name ,
304+ pub : source . public_key . to_bn . to_s ( 2 ) ,
305+ priv : source . private_key . to_i } )
306+ assert_instance_of OpenSSL ::PKey ::EC , new_key
307+ assert_equal source . group . curve_name , new_key . group . curve_name
308+ assert_equal source . private_key , new_key . private_key
309+ assert_equal source . public_key , new_key . public_key
310+ end
311+ end
312+
313+ def test_ec_from_parameters_pub_given_as_integer
314+ e = assert_raise ( TypeError ) { OpenSSL ::PKey . from_parameters ( "EC" , { group : "prime256v1" , pub : 12345 } ) }
315+ assert_equal "no implicit conversion of Integer into String" , e . message
276316 end
277317 else
278318 def test_from_parameter_raises_on_pre_3_openssl
0 commit comments