@@ -169,4 +169,80 @@ def test_to_text
169
169
rsa = Fixtures . pkey ( "rsa1024" )
170
170
assert_include rsa . to_text , "publicExponent"
171
171
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
172
248
end
0 commit comments