@@ -15,7 +15,15 @@ def test_no_private_exp
1515
1616 def test_private
1717 # Generated by key size and public exponent
18- key = OpenSSL ::PKey ::RSA . new ( 512 , 3 )
18+ #
19+ # SP800 requires ossl_ifc_ffc_compute_security_bits that the return value
20+ # (strength in bits) is more than equal RSA_FIPS1864_MIN_KEYGEN_STRENGTH
21+ # (112) in FIPS.
22+ # https://github.com/openssl/openssl/blob/3c6e11495975a4eda4cc5886080afed6203711ac/crypto/rsa/rsa_sp800_56b_gen.c#L176-L182
23+ # The ossl_ifc_ffc_compute_security_bits returns 112 with the argument nbits
24+ # 2048.
25+ # https://github.com/openssl/openssl/blob/3c6e11495975a4eda4cc5886080afed6203711ac/crypto/rsa/rsa_lib.c#L334-L335
26+ key = OpenSSL ::PKey ::RSA . new ( 2048 , 65537 )
1927 assert ( key . private? )
2028
2129 # Generated by DER
@@ -46,63 +54,68 @@ def test_private
4654 end
4755
4856 def test_new
49- key = OpenSSL ::PKey ::RSA . new ( 512 )
50- assert_equal 512 , key . n . num_bits
57+ key = OpenSSL ::PKey ::RSA . new ( 2048 )
58+ assert_equal 2048 , key . n . num_bits
5159 assert_equal 65537 , key . e
5260 assert_not_nil key . d
5361
5462 # 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
63+ key2 = OpenSSL ::PKey ::RSA . new ( 2048 , 65537 )
64+ assert_equal 2048 , key2 . n . num_bits
65+ assert_equal 65537 , key2 . e
5866 assert_not_nil key2 . d
5967 end
6068
6169 def test_s_generate
62- key1 = OpenSSL ::PKey ::RSA . generate ( 512 )
63- assert_equal 512 , key1 . n . num_bits
70+ key1 = OpenSSL ::PKey ::RSA . generate ( 2048 )
71+ assert_equal 2048 , key1 . n . num_bits
6472 assert_equal 65537 , key1 . e
6573
6674 # 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
75+ key2 = OpenSSL ::PKey ::RSA . generate ( 2048 , 65537 )
76+ assert_equal 2048 , key2 . n . num_bits
77+ assert_equal 65537 , key2 . e
7078 assert_not_nil key2 . d
7179 end
7280
7381 def test_new_break
74- assert_nil ( OpenSSL ::PKey ::RSA . new ( 1024 ) { break } )
82+ assert_nil ( OpenSSL ::PKey ::RSA . new ( 2048 ) { break } )
7583 assert_raise ( RuntimeError ) do
76- OpenSSL ::PKey ::RSA . new ( 1024 ) { raise }
84+ OpenSSL ::PKey ::RSA . new ( 2048 ) { raise }
7785 end
7886 end
7987
8088 def test_sign_verify
81- rsa1024 = Fixtures . pkey ( "rsa1024" )
89+ # The ossl_rsa_check_key_size called in ossl_pkey_sign requires more than
90+ # equal 2048 bits on the argument protect = 1 in FIPS.
91+ # https://github.com/openssl/openssl/blob/3c6e11495975a4eda4cc5886080afed6203711ac/providers/common/securitycheck.c#L68-L69
92+ rsa = Fixtures . pkey ( "rsa2048" )
8293 data = "Sign me!"
83- signature = rsa1024 . sign ( "SHA256" , data )
84- assert_equal true , rsa1024 . verify ( "SHA256" , signature , data )
94+ signature = rsa . sign ( "SHA256" , data )
95+ assert_equal true , rsa . verify ( "SHA256" , signature , data )
8596
8697 signature0 = ( <<~'end;' ) . unpack1 ( "m" )
87- oLCgbprPvfhM4pjFQiDTFeWI9Sk+Og7Nh9TmIZ/xSxf2CGXQrptlwo7NQ28+
88- WA6YQo8jPH4hSuyWIM4Gz4qRYiYRkl5TDMUYob94zm8Si1HxEiS9354tzvqS
89- zS8MLW2BtNPuTubMxTItHGTnOzo9sUg0LAHVFt8kHG2NfKAw/gQ=
98+ ooy49i8aeFtkDYUU0RPDsEugGiNw4lZxpbQPnIwtdftEkka945IqKZ/MY3YSw7wKsvBZeaTy8GqL
99+ lSWLThsRFDV+UUS9zUBbQ9ygNIT8OjdV+tNL63ZpKGprczSnw4F05MQIpajNRud/8jiI9rf+Wysi
100+ WwXecjMl2FlXlLJHY4PFQZU5TiametB4VCQRMcjLo1uf26u/yRpiGaYyqn5vxs0SqNtUDM1UL6x4
101+ NHCAdqLjuFRQPjYp1vGLD3eSl4061pS8x1NVap3YGbYfGUyzZO4VfwFwf1jPdhp/OX/uZw4dGB2H
102+ gSK+q1JiDFwEE6yym5tdKovL1g1NhFYHF6gkZg==
90103 end;
91- assert_equal true , rsa1024 . verify ( "SHA256" , signature0 , data )
104+ assert_equal true , rsa . verify ( "SHA256" , signature0 , data )
92105 signature1 = signature0 . succ
93- assert_equal false , rsa1024 . verify ( "SHA256" , signature1 , data )
106+ assert_equal false , rsa . verify ( "SHA256" , signature1 , data )
94107 end
95108
96109 def test_sign_verify_options
97- key = Fixtures . pkey ( "rsa1024 " )
110+ key = Fixtures . pkey ( "rsa2048 " )
98111 data = "Sign me!"
99112 pssopts = {
100113 "rsa_padding_mode" => "pss" ,
101114 "rsa_pss_saltlen" => 20 ,
102115 "rsa_mgf1_md" => "SHA1"
103116 }
104117 sig_pss = key . sign ( "SHA256" , data , pssopts )
105- assert_equal 128 , sig_pss . bytesize
118+ assert_equal 256 , sig_pss . bytesize
106119 assert_equal true , key . verify ( "SHA256" , sig_pss , data , pssopts )
107120 assert_equal true , key . verify_pss ( "SHA256" , sig_pss , data ,
108121 salt_length : 20 , mgf1_hash : "SHA1" )
@@ -175,12 +188,12 @@ def test_verify_empty_rsa
175188 end
176189
177190 def test_sign_verify_pss
178- key = Fixtures . pkey ( "rsa1024 " )
191+ key = Fixtures . pkey ( "rsa2048 " )
179192 data = "Sign me!"
180193 invalid_data = "Sign me?"
181194
182195 signature = key . sign_pss ( "SHA256" , data , salt_length : 20 , mgf1_hash : "SHA1" )
183- assert_equal 128 , signature . bytesize
196+ assert_equal 256 , signature . bytesize
184197 assert_equal true ,
185198 key . verify_pss ( "SHA256" , signature , data , salt_length : 20 , mgf1_hash : "SHA1" )
186199 assert_equal true ,
0 commit comments