@@ -14,6 +14,20 @@ def test_no_private_exp
1414 end if !openssl? ( 3 , 0 , 0 ) # Impossible state in OpenSSL 3.0
1515
1616 def test_private
17+ # In FIPS, the `OpenSSL::PKey::RSA.new(2048, 65537)` with 2048 bits is at
18+ # least required. However, generating a 2048-bit RSA key takes
19+ # non-negligible amount of time. We want to avoid such slow tests as much
20+ # as possible.
21+ #
22+ # SP800 requires ossl_ifc_ffc_compute_security_bits that the return value
23+ # (strength in bits) is more than equal RSA_FIPS1864_MIN_KEYGEN_STRENGTH
24+ # (112) in FIPS.
25+ # https://github.com/openssl/openssl/blob/3c6e11495975a4eda4cc5886080afed6203711ac/crypto/rsa/rsa_sp800_56b_gen.c#L176-L182
26+ # The ossl_ifc_ffc_compute_security_bits returns 112 with the argument nbits
27+ # 2048.
28+ # https://github.com/openssl/openssl/blob/3c6e11495975a4eda4cc5886080afed6203711ac/crypto/rsa/rsa_lib.c#L334-L335
29+ omit_on_fips
30+
1731 # Generated by key size and public exponent
1832 key = OpenSSL ::PKey ::RSA . new ( 512 , 3 )
1933 assert ( key . private? )
@@ -46,63 +60,76 @@ def test_private
4660 end
4761
4862 def test_new
49- key = OpenSSL ::PKey ::RSA . new ( 512 )
50- assert_equal 512 , key . n . num_bits
63+ key = OpenSSL ::PKey ::RSA . new ( 2048 )
64+ assert_equal 2048 , key . n . num_bits
5165 assert_equal 65537 , key . e
5266 assert_not_nil key . d
5367
54- # Specify public exponent
55- key2 = OpenSSL ::PKey ::RSA . new ( 512 , 3 )
56- assert_equal 512 , key2 . n . num_bits
57- assert_equal 3 , key2 . e
68+ key2 = OpenSSL ::PKey ::RSA . new ( 2048 , 65537 )
69+ assert_equal 2048 , key2 . n . num_bits
70+ assert_equal 65537 , key2 . e
5871 assert_not_nil key2 . d
5972 end
6073
74+ def test_new_exponent
75+ # At least 2024-bits RSA key are required in FIPS.
76+ omit_on_fips
77+
78+ # Specify public exponent
79+ key = OpenSSL ::PKey ::RSA . new ( 512 , 3 )
80+ assert_equal 512 , key . n . num_bits
81+ assert_equal 3 , key . e
82+ end
83+
6184 def test_s_generate
62- key1 = OpenSSL ::PKey ::RSA . generate ( 512 )
63- assert_equal 512 , key1 . n . num_bits
85+ key1 = OpenSSL ::PKey ::RSA . generate ( 2048 )
86+ assert_equal 2048 , key1 . n . num_bits
6487 assert_equal 65537 , key1 . e
6588
6689 # Specify public exponent
67- key2 = OpenSSL ::PKey ::RSA . generate ( 512 , 3 )
68- assert_equal 512 , key2 . n . num_bits
69- assert_equal 3 , key2 . e
90+ key2 = OpenSSL ::PKey ::RSA . generate ( 2048 , 65537 )
91+ assert_equal 2048 , key2 . n . num_bits
92+ assert_equal 65537 , key2 . e
7093 assert_not_nil key2 . d
7194 end
7295
7396 def test_new_break
74- assert_nil ( OpenSSL ::PKey ::RSA . new ( 1024 ) { break } )
97+ assert_nil ( OpenSSL ::PKey ::RSA . new ( 2048 ) { break } )
7598 assert_raise ( RuntimeError ) do
76- OpenSSL ::PKey ::RSA . new ( 1024 ) { raise }
99+ OpenSSL ::PKey ::RSA . new ( 2048 ) { raise }
77100 end
78101 end
79102
80103 def test_sign_verify
81- rsa1024 = Fixtures . pkey ( "rsa1024" )
104+ # Use 2024-bits RSA key, as OpenSSL 1.1.0 introduced that 512 or 1024-bits
105+ # RSA key is insecure.
106+ rsa = Fixtures . pkey ( "rsa2048" )
82107 data = "Sign me!"
83- signature = rsa1024 . sign ( "SHA256" , data )
84- assert_equal true , rsa1024 . verify ( "SHA256" , signature , data )
108+ signature = rsa . sign ( "SHA256" , data )
109+ assert_equal true , rsa . verify ( "SHA256" , signature , data )
85110
86111 signature0 = ( <<~'end;' ) . unpack1 ( "m" )
87- oLCgbprPvfhM4pjFQiDTFeWI9Sk+Og7Nh9TmIZ/xSxf2CGXQrptlwo7NQ28+
88- WA6YQo8jPH4hSuyWIM4Gz4qRYiYRkl5TDMUYob94zm8Si1HxEiS9354tzvqS
89- zS8MLW2BtNPuTubMxTItHGTnOzo9sUg0LAHVFt8kHG2NfKAw/gQ=
112+ ooy49i8aeFtkDYUU0RPDsEugGiNw4lZxpbQPnIwtdftEkka945IqKZ/MY3YSw7wKsvBZeaTy8GqL
113+ lSWLThsRFDV+UUS9zUBbQ9ygNIT8OjdV+tNL63ZpKGprczSnw4F05MQIpajNRud/8jiI9rf+Wysi
114+ WwXecjMl2FlXlLJHY4PFQZU5TiametB4VCQRMcjLo1uf26u/yRpiGaYyqn5vxs0SqNtUDM1UL6x4
115+ NHCAdqLjuFRQPjYp1vGLD3eSl4061pS8x1NVap3YGbYfGUyzZO4VfwFwf1jPdhp/OX/uZw4dGB2H
116+ gSK+q1JiDFwEE6yym5tdKovL1g1NhFYHF6gkZg==
90117 end;
91- assert_equal true , rsa1024 . verify ( "SHA256" , signature0 , data )
118+ assert_equal true , rsa . verify ( "SHA256" , signature0 , data )
92119 signature1 = signature0 . succ
93- assert_equal false , rsa1024 . verify ( "SHA256" , signature1 , data )
120+ assert_equal false , rsa . verify ( "SHA256" , signature1 , data )
94121 end
95122
96123 def test_sign_verify_options
97- key = Fixtures . pkey ( "rsa1024 " )
124+ key = Fixtures . pkey ( "rsa2048 " )
98125 data = "Sign me!"
99126 pssopts = {
100127 "rsa_padding_mode" => "pss" ,
101128 "rsa_pss_saltlen" => 20 ,
102129 "rsa_mgf1_md" => "SHA1"
103130 }
104131 sig_pss = key . sign ( "SHA256" , data , pssopts )
105- assert_equal 128 , sig_pss . bytesize
132+ assert_equal 256 , sig_pss . bytesize
106133 assert_equal true , key . verify ( "SHA256" , sig_pss , data , pssopts )
107134 assert_equal true , key . verify_pss ( "SHA256" , sig_pss , data ,
108135 salt_length : 20 , mgf1_hash : "SHA1" )
@@ -175,12 +202,12 @@ def test_verify_empty_rsa
175202 end
176203
177204 def test_sign_verify_pss
178- key = Fixtures . pkey ( "rsa1024 " )
205+ key = Fixtures . pkey ( "rsa2048 " )
179206 data = "Sign me!"
180207 invalid_data = "Sign me?"
181208
182209 signature = key . sign_pss ( "SHA256" , data , salt_length : 20 , mgf1_hash : "SHA1" )
183- assert_equal 128 , signature . bytesize
210+ assert_equal 256 , signature . bytesize
184211 assert_equal true ,
185212 key . verify_pss ( "SHA256" , signature , data , salt_length : 20 , mgf1_hash : "SHA1" )
186213 assert_equal true ,
@@ -196,15 +223,23 @@ def test_sign_verify_pss
196223 assert_equal false ,
197224 key . verify_pss ( "SHA256" , signature , data , salt_length : 20 , mgf1_hash : "SHA1" )
198225
199- signature = key . sign_pss ( "SHA256" , data , salt_length : :max , mgf1_hash : "SHA1" )
200- assert_equal true ,
201- key . verify_pss ( "SHA256" , signature , data , salt_length : 94 , mgf1_hash : "SHA1" )
202- assert_equal true ,
203- key . verify_pss ( "SHA256" , signature , data , salt_length : :auto , mgf1_hash : "SHA1" )
204-
205- assert_raise ( OpenSSL ::PKey ::RSAError ) {
206- key . sign_pss ( "SHA256" , data , salt_length : 95 , mgf1_hash : "SHA1" )
207- }
226+ # The sign_pss with `salt_length: :max` raises the "invalid salt length"
227+ # error on the following part in FIPS. We need to skip the tests in FIPS.
228+ # https://github.com/openssl/openssl/blob/d550d2aae531c6fa2e10b1a30d2acdf373663889/providers/implementations/signature/rsa_sig.c#L580-L597
229+ unless OpenSSL . fips_mode
230+ signature = key . sign_pss ( "SHA256" , data , salt_length : :max , mgf1_hash : "SHA1" )
231+ # Should verify on the following salt_length (sLen).
232+ # sLen <= emLen (octat) - 2 - hLen (octet) = 2048 / 8 - 2 - 256 / 8 = 222
233+ # https://datatracker.ietf.org/doc/html/rfc8017#section-9.1.1
234+ assert_equal true ,
235+ key . verify_pss ( "SHA256" , signature , data , salt_length : 222 , mgf1_hash : "SHA1" )
236+ assert_equal true ,
237+ key . verify_pss ( "SHA256" , signature , data , salt_length : :auto , mgf1_hash : "SHA1" )
238+
239+ assert_raise ( OpenSSL ::PKey ::RSAError ) {
240+ key . sign_pss ( "SHA256" , data , salt_length : 223 , mgf1_hash : "SHA1" )
241+ }
242+ end
208243 end
209244
210245 def test_encrypt_decrypt
@@ -213,8 +248,12 @@ def test_encrypt_decrypt
213248
214249 # Defaults to PKCS #1 v1.5
215250 raw = "data"
216- enc = rsapub . encrypt ( raw )
217- assert_equal raw , rsapriv . decrypt ( enc )
251+ # RSA PKCS1 PADDING encrypt is not allowed in FIPS.
252+ # https://github.com/openssl/openssl/blob/d550d2aae531c6fa2e10b1a30d2acdf373663889/providers/implementations/asymciphers/rsa_enc.c#L161-L171
253+ unless OpenSSL . fips_mode
254+ enc = rsapub . encrypt ( raw )
255+ assert_equal raw , rsapriv . decrypt ( enc )
256+ end
218257
219258 # Invalid options
220259 assert_raise ( OpenSSL ::PKey ::PKeyError ) {
@@ -227,11 +266,13 @@ def test_encrypt_decrypt_legacy
227266 rsapub = OpenSSL ::PKey . read ( rsapriv . public_to_der )
228267
229268 # Defaults to PKCS #1 v1.5
230- raw = "data"
231- enc_legacy = rsapub . public_encrypt ( raw )
232- assert_equal raw , rsapriv . decrypt ( enc_legacy )
233- enc_new = rsapub . encrypt ( raw )
234- assert_equal raw , rsapriv . private_decrypt ( enc_new )
269+ unless OpenSSL . fips_mode
270+ raw = "data"
271+ enc_legacy = rsapub . public_encrypt ( raw )
272+ assert_equal raw , rsapriv . decrypt ( enc_legacy )
273+ enc_new = rsapub . encrypt ( raw )
274+ assert_equal raw , rsapriv . private_decrypt ( enc_new )
275+ end
235276
236277 # OAEP with default parameters
237278 raw = "data"
@@ -292,53 +333,67 @@ def test_to_der
292333 end
293334
294335 def test_RSAPrivateKey
295- rsa1024 = Fixtures . pkey ( "rsa1024 " )
336+ rsa = Fixtures . pkey ( "rsa2048 " )
296337 asn1 = OpenSSL ::ASN1 ::Sequence ( [
297338 OpenSSL ::ASN1 ::Integer ( 0 ) ,
298- OpenSSL ::ASN1 ::Integer ( rsa1024 . n ) ,
299- OpenSSL ::ASN1 ::Integer ( rsa1024 . e ) ,
300- OpenSSL ::ASN1 ::Integer ( rsa1024 . d ) ,
301- OpenSSL ::ASN1 ::Integer ( rsa1024 . p ) ,
302- OpenSSL ::ASN1 ::Integer ( rsa1024 . q ) ,
303- OpenSSL ::ASN1 ::Integer ( rsa1024 . dmp1 ) ,
304- OpenSSL ::ASN1 ::Integer ( rsa1024 . dmq1 ) ,
305- OpenSSL ::ASN1 ::Integer ( rsa1024 . iqmp )
339+ OpenSSL ::ASN1 ::Integer ( rsa . n ) ,
340+ OpenSSL ::ASN1 ::Integer ( rsa . e ) ,
341+ OpenSSL ::ASN1 ::Integer ( rsa . d ) ,
342+ OpenSSL ::ASN1 ::Integer ( rsa . p ) ,
343+ OpenSSL ::ASN1 ::Integer ( rsa . q ) ,
344+ OpenSSL ::ASN1 ::Integer ( rsa . dmp1 ) ,
345+ OpenSSL ::ASN1 ::Integer ( rsa . dmq1 ) ,
346+ OpenSSL ::ASN1 ::Integer ( rsa . iqmp )
306347 ] )
307348 key = OpenSSL ::PKey ::RSA . new ( asn1 . to_der )
308349 assert_predicate key , :private?
309- assert_same_rsa rsa1024 , key
350+ assert_same_rsa rsa , key
310351
311352 pem = <<~EOF
312353 -----BEGIN RSA PRIVATE KEY-----
313- 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
326379 -----END RSA PRIVATE KEY-----
327380 EOF
328381 key = OpenSSL ::PKey ::RSA . new ( pem )
329- assert_same_rsa rsa1024 , key
382+ assert_same_rsa rsa , key
330383
331- assert_equal asn1 . to_der , rsa1024 . to_der
332- assert_equal pem , rsa1024 . export
384+ assert_equal asn1 . to_der , rsa . to_der
385+ assert_equal pem , rsa . export
333386
334387 # Unknown PEM prepended
335- cert = issue_cert ( OpenSSL ::X509 ::Name . new ( [ [ "CN" , "nobody" ] ] ) , rsa1024 , 1 , [ ] , nil , nil )
336- str = cert . to_text + cert . to_pem + rsa1024 . to_pem
388+ cert = issue_cert ( OpenSSL ::X509 ::Name . new ( [ [ "CN" , "nobody" ] ] ) , rsa , 1 , [ ] , nil , nil )
389+ str = cert . to_text + cert . to_pem + rsa . to_pem
337390 key = OpenSSL ::PKey ::RSA . new ( str )
338- assert_same_rsa rsa1024 , key
391+ assert_same_rsa rsa , key
339392 end
340393
341394 def test_RSAPrivateKey_encrypted
395+ omit_on_fips
396+
342397 rsa1024 = Fixtures . pkey ( "rsa1024" )
343398 # key = abcdef
344399 pem = <<~EOF
@@ -438,6 +493,8 @@ def test_PUBKEY
438493 end
439494
440495 def test_pem_passwd
496+ omit_on_fips
497+
441498 key = Fixtures . pkey ( "rsa1024" )
442499 pem3c = key . to_pem ( "aes-128-cbc" , "key" )
443500 assert_match ( /ENCRYPTED/ ) , pem3c
@@ -484,41 +541,54 @@ def test_private_encoding
484541 end
485542
486543 def test_private_encoding_encrypted
487- rsa1024 = Fixtures . pkey ( "rsa1024 " )
488- encoded = rsa1024 . private_to_der ( "aes-128-cbc" , "abcdef" )
544+ rsa = Fixtures . pkey ( "rsa2048 " )
545+ encoded = rsa . private_to_der ( "aes-128-cbc" , "abcdef" )
489546 asn1 = OpenSSL ::ASN1 . decode ( encoded ) # PKCS #8 EncryptedPrivateKeyInfo
490547 assert_kind_of OpenSSL ::ASN1 ::Sequence , asn1
491548 assert_equal 2 , asn1 . value . size
492- assert_not_equal rsa1024 . private_to_der , encoded
493- assert_same_rsa rsa1024 , OpenSSL ::PKey . read ( encoded , "abcdef" )
494- assert_same_rsa rsa1024 , OpenSSL ::PKey . read ( encoded ) { "abcdef" }
549+ assert_not_equal rsa . private_to_der , encoded
550+ assert_same_rsa rsa , OpenSSL ::PKey . read ( encoded , "abcdef" )
551+ assert_same_rsa rsa , OpenSSL ::PKey . read ( encoded ) { "abcdef" }
495552 assert_raise ( OpenSSL ::PKey ::PKeyError ) { OpenSSL ::PKey . read ( encoded , "abcxyz" ) }
496553
497- encoded = rsa1024 . private_to_pem ( "aes-128-cbc" , "abcdef" )
554+ encoded = rsa . private_to_pem ( "aes-128-cbc" , "abcdef" )
498555 assert_match ( /BEGIN ENCRYPTED PRIVATE KEY/ ) , encoded . lines [ 0 ]
499- assert_same_rsa rsa1024 , OpenSSL ::PKey . read ( encoded , "abcdef" )
556+ assert_same_rsa rsa , OpenSSL ::PKey . read ( encoded , "abcdef" )
500557
501- # certtool --load-privkey=test/fixtures/pkey/rsa1024 .pem --to-p8 --password=abcdef
558+ # certtool --load-privkey=test/openssl/ fixtures/pkey/rsa2048 .pem --to-p8 --password=abcdef
502559 pem = <<~EOF
503560 -----BEGIN ENCRYPTED PRIVATE KEY-----
504- MIICojAcBgoqhkiG9w0BDAEDMA4ECLqajUdSNfzwAgIEkQSCAoCDWhxr1HUrKLXA
505- FsFGGQfPT0aKH4gZipaSXXQRl0KwifHwHoDtfo/mAkJVZMnUVOm1AQ4LTFS3EdTy
506- JUwICGEQHb7QAiokIRoi0K2yHhOxVO8qgbnWuisWpiT6Ru1jCqTs/wcqlqF7z2jM
507- oXDk/vuekKst1DDXDcHrzhDkwhCQWj6jt1r2Vwaryy0FyeqsWAgBDiK2LsnCgkGD
508- 21uhNZ/iWMG6tvY9hB8MDdiBJ41YdSG/AKLulAxQ1ibJz0Tasu66TmwFvWhBlME+
509- QbqfgmkgWg5buu53SvDfCA47zXihclbtdfW+U3CJ9OJkx0535TVdZbuC1QgKXvG7
510- 4iKGFRMWYJqZvZM3GL4xbC75AxjXZsdCfV81VjZxjeU6ung/NRzCuCUcmBOQzo1D
511- Vv6COwAa6ttQWM0Ti8oIQHdu5Qi+nuOEHDLxCxD962M37H99sEO5cESjmrGVxhEo
512- 373L4+11geGSCajdp0yiAGnXQfwaKta8cL693bRObN+b1Y+vqtDKH26N9a4R3qgg
513- 2XwgQ5GH5CODoXZpi0wxncXO+3YuuhGeArtzKSXLNxHzIMlY7wZX+0e9UU03zfV/
514- aOe4/q5DpkNxgHePt0oEpamSKY5W3jzVi1dlFWsRjud1p/Grt2zjSWTYClBlJqG1
515- A/3IeDZCu+acaePJjFyv5dFffIj2l4bAYB+LFrZlSu3F/EimO/dCDWJ9JGlMK0aF
516- l9brh7786Mo+YfyklaqMMEHBbbR2Es7PR6Gt7lrcIXmzy9XSsxT6IiD1rG9KKR3i
517- CQxTup6JAx9w1q+adL+Ypikoy3gGD/ccUY6TtPoCmkQwSCS+JqQnFlCiThDJbu+V
518- eqqUNkZq
561+ MIIFOTBjBgkqhkiG9w0BBQ0wVjA1BgkqhkiG9w0BBQwwKAQSsTIsinrhNMr4owUz
562+ cwYGgB0lAgMJJ8ACARAwCgYIKoZIhvcNAgkwHQYJYIZIAWUDBAECBBDtDYqmQOLV
563+ Nh0T0DslWgovBIIE0ESbJey2Pjf9brTp9/41CPnI9Ev78CGSv8Ihyuynu6G7oj7N
564+ G7jUB1pVMQ7ivebF5DmM0qHAix6fDqJetB3WCnRQpMLyIdq5VrnKwFNhwGYduWA5
565+ IyaAc4DHj02e6YLyBTIKpu79OSFxLrnLCRaTbvZIUQaGhyd6pB7iAhqz5YBC0rpa
566+ iMK5TRlNGPYG9n2eGFOhvUsbJ4T8VDzjpVWw0VNRaukXtg4xiR6o1f0qSXqAb5d9
567+ REq5DfaQfoOKTV9j7KJHDRrBQG81vkU4K+xILrCBfbcYb82aCoinwSep9LC30HaH
568+ LZ0hYQOuD/k/UbgjToS2wyMnkz75MN5ZNhDMZl/mACQdsMMtIxG37Mpo1Ca33uZi
569+ 71TCOEKIblZS11L1YhIni9Af8pOuHJBWwezP2zN2nPwV6OhgL7Jlax7ICQOPC6L/
570+ yRGgC5eT4lDDAuTy0IdUhr0r5XrFzZR0/5Vgsq9cGfk9QkXOoETRhQVkEfUDdCs6
571+ 6CK+SwUR9qh5824ShODFG0SQpsqBPIVtkGrypBSUJtICmGMOAsclB7RDN7/opJwp
572+ qv/iRJ5dhWrhRgQ/DfYifvO5On7RgC2hm48gF3Pt6XCA857ryyYxLYeMY42tAUqp
573+ Hmc9HL7bMYF/jl3cJ32+gLvI3PBVvrvyeAhRo6z7MFVe9I04OywV6BHUx1Us6ybF
574+ qkYnSpcJZdu7HyvzXm7XWLFmt7K5BlAgnFsa/8+cI1BGPgQRc1j0SWepXsSwFZX6
575+ JkNQ0dewq4uRJXbGyQgfh5I5ETpqDhSt2JfBwAoze6cx3DPC711PUamxyWMiejs+
576+ mYdia4p62NxaUvyXWmCGIEOzajRwywEhf9OLAmfqTN41TIrEL4BUxqtzDyw8Nl8T
577+ KB7nJEC366jFASfumNQkXXyH5yBIF+XwwSKUOObRZVn2rUzFToo51hHu9efxHoXa
578+ jZlpfglWijkmOuwoIGlGHOq8gUn76oq9WbV+YO+fWm/mf4S3ECzmYzxb6a1uCTy/
579+ Itkm2qOe3yTM1t+oCqZ0/MeTZ84ALQaWv5reQfjronPZ1jeNtxrYz28tJ4KwBn0U
580+ bJReXbOLsHAymipncxlmaevbx4GPTduu/lbpxefoN95w+SpEdyTmVWrfaCTgAbad
581+ EzcRl60my3xOMQ7CaUbRgGiwohqHDvuXzeqoZ96u6CwfAoEfy4jETmKLRH6uTtj7
582+ 4jdTyoqyizjpvaM8LPspBS+oqFwLxBjpseQuScrZO1BjPxrImLy2/VRqwJ+CF4FB
583+ iijEgDgDc1EMIGe5YmOAV+i22n9RqX+2IvkYp7CWXrB9/lmirLFukd7hT8DLPUGq
584+ AvSZwTPbDPoZKG3DAebC3DbiC7A3x0KZp24doNRLamZ/MyKHo2Rzl0UhkzDU0ly2
585+ eAnyNYsOAQck+C6L+ieD95Gksm9YJWurwttm5JragbIJwMCrsBQd4bXDkKdRhxS2
586+ JpS0dT/aoDmgTzoG07x4cZk0rjBkfX1ta0j0b1lz7/PZXl9AbRvFdq5sJpmv4Ryz
587+ S+OERqo4IEfJJq2WJ92WR+HLGV3Gvsdb7znZTEF1tp4pWOLAt83Pry282UJxO7Pe
588+ ySf/868TEmXams06GYvH+7cMiIT2m9Dc+EFgNaPmm0uMmJ+ZjqHKSOLzrL7C
519589 -----END ENCRYPTED PRIVATE KEY-----
520590 EOF
521- assert_same_rsa rsa1024 , OpenSSL ::PKey . read ( pem , "abcdef" )
591+ assert_same_rsa rsa , OpenSSL ::PKey . read ( pem , "abcdef" )
522592 end
523593
524594 def test_dup
0 commit comments