@@ -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