@@ -31,11 +31,6 @@ def test_new_break
31
31
def test_generate
32
32
# DSA.generate used to call DSA_generate_parameters_ex(), which adjusts the
33
33
# 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
-
39
34
key2048 = OpenSSL ::PKey ::DSA . generate ( 2048 )
40
35
assert_equal 2048 , key2048 . p . num_bits
41
36
assert_equal 256 , key2048 . q . num_bits
@@ -47,28 +42,41 @@ def test_generate
47
42
end
48
43
end
49
44
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
+
50
56
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" )
52
60
data = "Sign me!"
53
61
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 )
56
64
end
57
65
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 )
60
68
61
69
signature0 = ( <<~'end;' ) . unpack1 ( "m" )
62
- MCwCFH5h40plgU5Fh0Z4wvEEpz0eE9SnAhRPbkRB8ggsN/vsSEYMXvJwjGg/
63
- 6g ==
70
+ MD4CHQC0zmRkVOAHJTm28fS5PVUv+4LtBeNaKqr/yfmVAh0AsTcLqofWHoW8X5oWu8AOvngOcFVZ
71
+ cLTvhY3XNw ==
64
72
end;
65
- assert_equal true , dsa512 . verify ( "SHA256" , signature0 , data )
73
+ assert_equal true , dsa . verify ( "SHA256" , signature0 , data )
66
74
signature1 = signature0 . succ
67
- assert_equal false , dsa512 . verify ( "SHA256" , signature1 , data )
75
+ assert_equal false , dsa . verify ( "SHA256" , signature1 , data )
68
76
end
69
77
70
78
def test_sign_verify_raw
71
- key = Fixtures . pkey ( "dsa512 " )
79
+ key = Fixtures . pkey ( "dsa2048 " )
72
80
data = 'Sign me!'
73
81
digest = OpenSSL ::Digest . digest ( 'SHA1' , data )
74
82
@@ -127,6 +135,8 @@ def test_DSAPrivateKey
127
135
end
128
136
129
137
def test_DSAPrivateKey_encrypted
138
+ omit_on_fips
139
+
130
140
# key = abcdef
131
141
dsa512 = Fixtures . pkey ( "dsa512" )
132
142
pem = <<~EOF
0 commit comments