@@ -262,12 +262,52 @@ def test_from_parameters_with_invalid_alg
262262 assert_equal e . message , '"ASR" is not a supported algorithm'
263263 end
264264
265- def test_ec_from_parameters_with_minimal_data
265+ def test_ec_from_parameters_pub_given_as_string
266266 source = OpenSSL ::PKey ::EC . generate ( "prime256v1" )
267+ new_key = OpenSSL ::PKey . from_parameters ( "EC" , { group : source . group . curve_name ,
268+ pub : source . public_key . to_bn . to_s ( 2 ) } )
269+ assert_instance_of OpenSSL ::PKey ::EC , new_key
270+ assert_equal source . group . curve_name , new_key . group . curve_name
271+ assert_equal source . public_key , new_key . public_key
272+ assert_equal nil , new_key . private_key
273+ end
267274
268- new_key = OpenSSL ::PKey . from_parameters ( "EC" , { group : source . group . curve_name } )
275+ def test_ec_from_parameters_priv_given_as_bn
276+ source = OpenSSL ::PKey ::EC . generate ( "prime256v1" )
277+ new_key = OpenSSL ::PKey . from_parameters ( "EC" , { group : source . group . curve_name ,
278+ priv : source . private_key . to_bn } )
269279 assert_instance_of OpenSSL ::PKey ::EC , new_key
270280 assert_equal source . group . curve_name , new_key . group . curve_name
281+ assert_equal source . private_key , new_key . private_key
282+ assert_equal nil , new_key . public_key
283+ end
284+
285+ def test_ec_from_parameters_priv_given_as_integer
286+ source = OpenSSL ::PKey ::EC . generate ( "prime256v1" )
287+ new_key = OpenSSL ::PKey . from_parameters ( "EC" , { group : source . group . curve_name ,
288+ priv : source . private_key . to_i } )
289+ assert_instance_of OpenSSL ::PKey ::EC , new_key
290+ assert_equal source . group . curve_name , new_key . group . curve_name
291+ assert_equal source . private_key , new_key . private_key
292+ assert_equal nil , new_key . public_key
293+ end
294+
295+ def test_ec_from_parameters_priv_and_pub_given_for_different_curves
296+ [ "prime256v1" , "secp256k1" , "secp384r1" , "secp521r1" ] . each do |curve |
297+ source = OpenSSL ::PKey ::EC . generate ( curve )
298+ new_key = OpenSSL ::PKey . from_parameters ( "EC" , { group : source . group . curve_name ,
299+ pub : source . public_key . to_bn . to_s ( 2 ) ,
300+ priv : source . private_key . to_i } )
301+ assert_instance_of OpenSSL ::PKey ::EC , new_key
302+ assert_equal source . group . curve_name , new_key . group . curve_name
303+ assert_equal source . private_key , new_key . private_key
304+ assert_equal source . public_key , new_key . public_key
305+ end
306+ end
307+
308+ def test_ec_from_parameters_pub_given_as_integer
309+ e = assert_raise ( TypeError ) { OpenSSL ::PKey . from_parameters ( "EC" , { group : "prime256v1" , pub : 12345 } ) }
310+ assert_equal "no implicit conversion of Integer into String" , e . message
271311 end
272312 else
273313 def test_from_parameter_raises_on_pre_3_openssl
0 commit comments