@@ -169,4 +169,80 @@ def test_to_text
169169 rsa = Fixtures . pkey ( "rsa1024" )
170170 assert_include rsa . to_text , "publicExponent"
171171 end
172+
173+ if openssl? ( 3 , 0 , 0 )
174+ def test_from_parameters_with_n_e_and_d_given_as_integers
175+ new_key = OpenSSL ::PKey . from_parameters ( "RSA" , n : 3161751493 ,
176+ e : 65537 ,
177+ d : 2064855961 )
178+
179+ assert_instance_of OpenSSL ::PKey ::RSA , new_key
180+ assert_equal true , new_key . private?
181+ assert_equal OpenSSL ::BN . new ( 3161751493 ) , new_key . n
182+ assert_equal OpenSSL ::BN . new ( 65537 ) , new_key . e
183+ assert_equal OpenSSL ::BN . new ( 2064855961 ) , new_key . d
184+ end
185+
186+
187+ def test_from_parameters_with_n_e_and_d_given
188+ new_key = OpenSSL ::PKey . from_parameters ( "RSA" , "n" => OpenSSL ::BN . new ( 3161751493 ) ,
189+ "e" => OpenSSL ::BN . new ( 65537 ) ,
190+ "d" => OpenSSL ::BN . new ( 2064855961 ) )
191+
192+ assert_instance_of OpenSSL ::PKey ::RSA , new_key
193+ assert_equal true , new_key . private?
194+ assert_equal OpenSSL ::BN . new ( 3161751493 ) , new_key . n
195+ assert_equal OpenSSL ::BN . new ( 65537 ) , new_key . e
196+ assert_equal OpenSSL ::BN . new ( 2064855961 ) , new_key . d
197+ end
198+
199+ def test_from_parameters_with_n_and_e_given
200+ new_key = OpenSSL ::PKey . from_parameters ( "RSA" , n : OpenSSL ::BN . new ( 3161751493 ) ,
201+ e : OpenSSL ::BN . new ( 65537 ) )
202+
203+ assert_instance_of OpenSSL ::PKey ::RSA , new_key
204+ assert_equal false , new_key . private?
205+ assert_equal OpenSSL ::BN . new ( 3161751493 ) , new_key . n
206+ assert_equal OpenSSL ::BN . new ( 65537 ) , new_key . e
207+ assert_equal nil , new_key . d
208+ end
209+
210+ def test_from_parameters_with_openssl_internal_names
211+ source = OpenSSL ::PKey ::RSA . generate ( 2048 )
212+ new_key = OpenSSL ::PKey . from_parameters ( "RSA" , n : source . n ,
213+ e : source . e ,
214+ d : source . d ,
215+ "rsa-factor1" => source . p ,
216+ "rsa-factor2" => source . q ,
217+ "rsa-exponent1" => source . dmp1 ,
218+ "rsa-exponent2" => source . dmq1 ,
219+ "rsa-coefficient1" => source . iqmp
220+ )
221+
222+ assert_equal source . n , new_key . n
223+ assert_equal source . e , new_key . e
224+ assert_equal source . d , new_key . d
225+ assert_equal source . p , new_key . p
226+ assert_equal source . q , new_key . q
227+ assert_equal source . dmp1 , new_key . dmp1
228+ assert_equal source . dmq1 , new_key . dmq1
229+ assert_equal source . iqmp , new_key . iqmp
230+
231+ assert_equal source . to_pem , new_key . to_pem
232+ end
233+
234+ def test_from_parameters_with_invalid_alg
235+ e = assert_raise ( OpenSSL ::PKey ::PKeyError ) {
236+ OpenSSL ::PKey . from_parameters ( "ASR" , { } )
237+ }
238+ assert_equal e . message , "EVP_PKEY_fromdata"
239+ end
240+ else
241+ def test_from_parameter_raises_on_pre_3_openssl
242+ e = assert_raise ( OpenSSL ::PKey ::PKeyError ) {
243+ OpenSSL ::PKey . from_parameters ( "ASR" , { } )
244+ }
245+ assert_equal e . message , "Only supported with OpenSSL 3.0"
246+ end
247+ end
172248end
0 commit comments