Skip to content

Commit a8caa63

Browse files
authored
Merge pull request #729 from junaruga/wip/fips-test-pkey-dsa
Fix test_pkey_dsa.rb in FIPS.
2 parents 45c731c + 4bdcb41 commit a8caa63

File tree

3 files changed

+41
-15
lines changed

3 files changed

+41
-15
lines changed

Rakefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ Rake::TestTask.new(:test_fips_internal) do |t|
3030
'test/openssl/test_fips.rb',
3131
'test/openssl/test_pkey.rb',
3232
'test/openssl/test_pkey_dh.rb',
33+
'test/openssl/test_pkey_dsa.rb',
3334
'test/openssl/test_pkey_ec.rb',
3435
]
3536
t.warning = true
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIICXgIBADCCAjYGByqGSM44BAEwggIpAoIBAQDXZhJ/dQoWkQELzjzlx8FtIp96
3+
voCYe5NY0H8j0jz7GyHpXt41+MteqkZK3/Ah+cNR9uG8iEYArAZ71LcWotfee2Gz
4+
xdxozr9bRt0POYhO2YIsfMpBrEskPsDH2g/2nFV8l4OJgxU2qZUrF4PN5ha+Mu6u
5+
sVtN8hjvAvnbf4Pxn0b8NN9f4PJncroUa8acv5WsV85E1RW7NYCefggU4LytYIHg
6+
euRF9eY9gVCX5MkUgW2xODHIYJhwk/+5lJxG7qUsSahD/nPHO/yoWgdVHq2DkdTq
7+
KYXkAxx2PJcTBOHTglhE6mgCbEKp8vcfElnBWyCT6QykclZiPXXD2JV829J/Ah0A
8+
vYa+/G/gUZiomyejVje6UsGoCc+vInxmovOL8QKCAQEAhnKEigYPw6u8JY7v5iGo
9+
Ylz8qiMFYmaJCwevf3KCjWeEXuNO4OrKdfzkQl1tPuGLioYFfP1A2yGosjdUdLEB
10+
0JqnzlKxUp+G6RfBj+WYzbgc5hr7t0M+reAJh09/hDzqfxjcgiHstq7mpRXBP8Y7
11+
iu27s7TRYJNSAYRvWcXNSBEUym3mHBBbZn7VszYooSrn60/iZ8I+VY1UF/fgqhbj
12+
JfaaZNQCDO9K3Vb3rsXoYd8+bOZIen9uHB+pNjMqhpl4waysqrlpGFeeqdxivH6S
13+
vkrHLs6/eWVMnS08RdcryoCrI3Bm8mMBKQglDwKLnWLfzG565qEhslzyCd/l9k9a
14+
cwQfAh0Ao8/g72fSFmo04FizM7DZJSIPqDLjfZu9hLvUFA==
15+
-----END PRIVATE KEY-----

test/openssl/test_pkey_dsa.rb

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)