@@ -31,11 +31,6 @@ def test_new_break
3131 def test_generate
3232 # DSA.generate used to call DSA_generate_parameters_ex(), which adjusts the
3333 # size of q according to the size of p
34- key1024 = OpenSSL ::PKey ::DSA . generate ( 1024 )
35- assert_predicate key1024 , :private?
36- assert_equal 1024 , key1024 . p . num_bits
37- assert_equal 160 , key1024 . q . num_bits
38-
3934 key2048 = OpenSSL ::PKey ::DSA . generate ( 2048 )
4035 assert_equal 2048 , key2048 . p . num_bits
4136 assert_equal 256 , key2048 . q . num_bits
@@ -47,28 +42,41 @@ def test_generate
4742 end
4843 end
4944
45+ def test_generate_on_non_fips
46+ # DSA with 1024 bits is invalid on FIPS 186-4.
47+ # https://github.com/openssl/openssl/commit/49ed5ba8f62875074f04417189147fd3dda072ab
48+ omit_on_fips
49+
50+ key1024 = OpenSSL ::PKey ::DSA . generate ( 1024 )
51+ assert_predicate key1024 , :private?
52+ assert_equal 1024 , key1024 . p . num_bits
53+ assert_equal 160 , key1024 . q . num_bits
54+ end
55+
5056 def test_sign_verify
51- dsa512 = Fixtures . pkey ( "dsa512" )
57+ # The DSA valid size is 2048 or 3072 on FIPS.
58+ # https://github.com/openssl/openssl/blob/7649b5548e5c0352b91d9d3ed695e42a2ac1e99c/providers/common/securitycheck.c#L185-L188
59+ dsa = Fixtures . pkey ( "dsa2048" )
5260 data = "Sign me!"
5361 if defined? ( OpenSSL ::Digest ::DSS1 )
54- signature = dsa512 . sign ( OpenSSL ::Digest . new ( 'DSS1' ) , data )
55- assert_equal true , dsa512 . verify ( OpenSSL ::Digest . new ( 'DSS1' ) , signature , data )
62+ signature = dsa . sign ( OpenSSL ::Digest . new ( 'DSS1' ) , data )
63+ assert_equal true , dsa . verify ( OpenSSL ::Digest . new ( 'DSS1' ) , signature , data )
5664 end
5765
58- signature = dsa512 . sign ( "SHA256" , data )
59- assert_equal true , dsa512 . verify ( "SHA256" , signature , data )
66+ signature = dsa . sign ( "SHA256" , data )
67+ assert_equal true , dsa . verify ( "SHA256" , signature , data )
6068
6169 signature0 = ( <<~'end;' ) . unpack1 ( "m" )
62- MCwCFH5h40plgU5Fh0Z4wvEEpz0eE9SnAhRPbkRB8ggsN/vsSEYMXvJwjGg/
63- 6g ==
70+ MD4CHQC0zmRkVOAHJTm28fS5PVUv+4LtBeNaKqr/yfmVAh0AsTcLqofWHoW8X5oWu8AOvngOcFVZ
71+ cLTvhY3XNw ==
6472 end;
65- assert_equal true , dsa512 . verify ( "SHA256" , signature0 , data )
73+ assert_equal true , dsa . verify ( "SHA256" , signature0 , data )
6674 signature1 = signature0 . succ
67- assert_equal false , dsa512 . verify ( "SHA256" , signature1 , data )
75+ assert_equal false , dsa . verify ( "SHA256" , signature1 , data )
6876 end
6977
7078 def test_sign_verify_raw
71- key = Fixtures . pkey ( "dsa512 " )
79+ key = Fixtures . pkey ( "dsa2048 " )
7280 data = 'Sign me!'
7381 digest = OpenSSL ::Digest . digest ( 'SHA1' , data )
7482
@@ -127,6 +135,8 @@ def test_DSAPrivateKey
127135 end
128136
129137 def test_DSAPrivateKey_encrypted
138+ omit_on_fips
139+
130140 # key = abcdef
131141 dsa512 = Fixtures . pkey ( "dsa512" )
132142 pem = <<~EOF
0 commit comments