Skip to content

Commit f45cb0e

Browse files
aardvark179eregon
authored andcommitted
Update the MRI openssl tests to match the extension.
1 parent a1275db commit f45cb0e

26 files changed

+1529
-963
lines changed
Binary file not shown.

test/mri/tests/openssl/fixtures/pkey/empty.der

Whitespace-only changes.

test/mri/tests/openssl/fixtures/pkey/empty.pem

Whitespace-only changes.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFKTCCBBGgAwIBAgISBFspP+tJfRaC6xprreB4Rp9KMA0GCSqGSIb3DQEBCwUA
3+
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
4+
EwJSMzAeFw0yMTA0MTcwMjQzMTlaFw0yMTA3MTYwMjQzMTlaMBwxGjAYBgNVBAMT
5+
EXd3dy5jb2Rlb3Rha3UuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
6+
AQEAx6h5vNPfkkrtYWxn1PWDDLRAwrGmZbkYPttjHBRSwTcd7rsIX4PcSzw9fWxm
7+
K4vIkAYoKAElIvsSE3xRUjyzMrACfdhK5J8rG25fq94iVyoYaNBQV0WMJkO6X47s
8+
hGeIKkK91ohR5b2tMw3/z9zELP0TVo2TPG7rYsBZm34myldqDA8yVEBEOa+Qdpda
9+
9xewPhkkdpAU55qgWTrD21m7vGq9WpsBz4wNKnwVsaugtkRH82VPIfaL4ZI9kox6
10+
QoPWe/tHUBdlDkuT7ud77eLAWnC/5Clg28/9GU/Z8Nj8SrrKuXL6WUXmxxaAhWUR
11+
Qx4VblZeuIpwd0nHyP0hz4CWKQIDAQABo4ICTTCCAkkwDgYDVR0PAQH/BAQDAgWg
12+
MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0G
13+
A1UdDgQWBBTKiSGZuLFSIG2JPbFSZa9TxMu5WTAfBgNVHSMEGDAWgBQULrMXt1hW
14+
y65QCUDmH6+dixTCxjBVBggrBgEFBQcBAQRJMEcwIQYIKwYBBQUHMAGGFWh0dHA6
15+
Ly9yMy5vLmxlbmNyLm9yZzAiBggrBgEFBQcwAoYWaHR0cDovL3IzLmkubGVuY3Iu
16+
b3JnLzAcBgNVHREEFTATghF3d3cuY29kZW90YWt1LmNvbTBMBgNVHSAERTBDMAgG
17+
BmeBDAECATA3BgsrBgEEAYLfEwEBATAoMCYGCCsGAQUFBwIBFhpodHRwOi8vY3Bz
18+
LmxldHNlbmNyeXB0Lm9yZzCCAQUGCisGAQQB1nkCBAIEgfYEgfMA8QB3AJQgvB6O
19+
1Y1siHMfgosiLA3R2k1ebE+UPWHbTi9YTaLCAAABeN3s/lgAAAQDAEgwRgIhAKFY
20+
Q+vBe3zyeBazxp8kVN7oLvcQ6Y9PPz199tVhYnEbAiEAhU/xdbQaY/6b93h+7NTF
21+
sPG7X4lq/3UoNgoXcAVGZgoAdgD2XJQv0XcwIhRUGAgwlFaO400TGTO/3wwvIAvM
22+
TvFk4wAAAXjd7P5OAAAEAwBHMEUCIQDWd79+jWaGuf3acm5/yV95jL2KvzeGFfdU
23+
HZlKIeWFmAIgDSZ6ug7AyhYNKjzFV4ZSICln+L4yI92EpOa+8gDG6/0wDQYJKoZI
24+
hvcNAQELBQADggEBAHIhMYm06lLFmJL+cfIg5fFEmFNdHmmZn88Hypv4/MtmqTKv
25+
5asF/z3TvhW4hX2+TY+NdcqGT7cZFo/ZF/tS6oBXPgmBYM1dEfp2FAdnGNOySC5Y
26+
7RC4Uk9TUpP2g101YBmj6dQKQluAwIQk+gO4MSlHE0J0U/lMpjvrLWcuHbV4/xWJ
27+
IdM+iPq8GeYt5epYmNc7XeRIgv7V3RxDQdBv2OVM5mtPVerdiO0ISrdbe5mvz2+Z
28+
rhSg+EJNHlmMwcq5HqtMwS8M8Ax+vLmWCOkPWXhyV8wQaQcFjZJfpIGUvCnMTqsh
29+
kSIYXq2CbSDUUFRFssNN6EdVms0KnmW3BUu0xAk=
30+
-----END CERTIFICATE-----
31+
-----BEGIN CERTIFICATE-----
32+
MIIEZTCCA02gAwIBAgIQQAF1BIMUpMghjISpDBbN3zANBgkqhkiG9w0BAQsFADA/
33+
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
34+
DkRTVCBSb290IENBIFgzMB4XDTIwMTAwNzE5MjE0MFoXDTIxMDkyOTE5MjE0MFow
35+
MjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxCzAJBgNVBAMT
36+
AlIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuwIVKMz2oJTTDxLs
37+
jVWSw/iC8ZmmekKIp10mqrUrucVMsa+Oa/l1yKPXD0eUFFU1V4yeqKI5GfWCPEKp
38+
Tm71O8Mu243AsFzzWTjn7c9p8FoLG77AlCQlh/o3cbMT5xys4Zvv2+Q7RVJFlqnB
39+
U840yFLuta7tj95gcOKlVKu2bQ6XpUA0ayvTvGbrZjR8+muLj1cpmfgwF126cm/7
40+
gcWt0oZYPRfH5wm78Sv3htzB2nFd1EbjzK0lwYi8YGd1ZrPxGPeiXOZT/zqItkel
41+
/xMY6pgJdz+dU/nPAeX1pnAXFK9jpP+Zs5Od3FOnBv5IhR2haa4ldbsTzFID9e1R
42+
oYvbFQIDAQABo4IBaDCCAWQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8E
43+
BAMCAYYwSwYIKwYBBQUHAQEEPzA9MDsGCCsGAQUFBzAChi9odHRwOi8vYXBwcy5p
44+
ZGVudHJ1c3QuY29tL3Jvb3RzL2RzdHJvb3RjYXgzLnA3YzAfBgNVHSMEGDAWgBTE
45+
p7Gkeyxx+tvhS5B1/8QVYIWJEDBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEE
46+
AYLfEwEBATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2Vu
47+
Y3J5cHQub3JnMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuaWRlbnRydXN0
48+
LmNvbS9EU1RST09UQ0FYM0NSTC5jcmwwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYf
49+
r52LFMLGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0B
50+
AQsFAAOCAQEA2UzgyfWEiDcx27sT4rP8i2tiEmxYt0l+PAK3qB8oYevO4C5z70kH
51+
ejWEHx2taPDY/laBL21/WKZuNTYQHHPD5b1tXgHXbnL7KqC401dk5VvCadTQsvd8
52+
S8MXjohyc9z9/G2948kLjmE6Flh9dDYrVYA9x2O+hEPGOaEOa1eePynBgPayvUfL
53+
qjBstzLhWVQLGAkXXmNs+5ZnPBxzDJOLxhF2JIbeQAcH5H0tZrUlo5ZYyOqA7s9p
54+
O5b85o3AM/OJ+CktFBQtfvBhcJVd9wvlwPsk+uyOy2HI7mNxKKgsBTt375teA2Tw
55+
UdHkhVNcsAKX1H7GNNLOEADksd86wuoXvg==
56+
-----END CERTIFICATE-----
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Hello World

test/mri/tests/openssl/test_asn1.rb

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ def test_decode_x509_certificate
170170
str = +"\000"; str[0] = 0b00000110.chr
171171
assert_equal(str, extv.value)
172172

173-
ext = extensions.value[0].value[2] # subjetKeyIdentifier
173+
ext = extensions.value[0].value[2] # subjectKeyIdentifier
174174
assert_equal(OpenSSL::ASN1::Sequence, ext.class)
175175
assert_equal(2, ext.value.size)
176176
assert_equal(OpenSSL::ASN1::ObjectId, ext.value[0].class)
@@ -265,10 +265,9 @@ def test_bitstring
265265
assert_raise(OpenSSL::ASN1::ASN1Error) {
266266
OpenSSL::ASN1.decode(B(%w{ 03 00 }))
267267
}
268-
# OpenSSL < OpenSSL_1_0_1k and LibreSSL ignore the error
269-
# assert_raise(OpenSSL::ASN1::ASN1Error) {
270-
# OpenSSL::ASN1.decode(B(%w{ 03 03 08 FF 00 }))
271-
# }
268+
assert_raise(OpenSSL::ASN1::ASN1Error) {
269+
OpenSSL::ASN1.decode(B(%w{ 03 03 08 FF 00 }))
270+
}
272271
# OpenSSL does not seem to prohibit this, though X.690 8.6.2.3 (15/08) does
273272
# assert_raise(OpenSSL::ASN1::ASN1Error) {
274273
# OpenSSL::ASN1.decode(B(%w{ 03 01 04 }))

test/mri/tests/openssl/test_bn.rb

Lines changed: 96 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# coding: us-ascii
22
# frozen_string_literal: true
33
require_relative 'utils'
4-
require "prime"
54

65
if defined?(OpenSSL)
76

@@ -131,6 +130,27 @@ def test_unary_plus_minus
131130
assert_equal(-999, +@e2)
132131
assert_equal(-999, -@e1)
133132
assert_equal(+999, -@e2)
133+
134+
# These methods create new BN instances due to BN mutability
135+
# Ensure that the instance isn't the same
136+
e1_plus = +@e1
137+
e1_minus = -@e1
138+
assert_equal(false, @e1.equal?(e1_plus))
139+
assert_equal(true, @e1 == e1_plus)
140+
assert_equal(false, @e1.equal?(e1_minus))
141+
end
142+
143+
def test_abs
144+
assert_equal(@e1, @e2.abs)
145+
assert_equal(@e3, @e4.abs)
146+
assert_not_equal(@e2, @e2.abs)
147+
assert_not_equal(@e4, @e4.abs)
148+
assert_equal(false, @e2.abs.negative?)
149+
assert_equal(false, @e4.abs.negative?)
150+
assert_equal(true, (-@e1.abs).negative?)
151+
assert_equal(true, (-@e2.abs).negative?)
152+
assert_equal(true, (-@e3.abs).negative?)
153+
assert_equal(true, (-@e4.abs).negative?)
134154
end
135155

136156
def test_mod
@@ -228,25 +248,35 @@ def test_random
228248
r5 = OpenSSL::BN.rand_range(256)
229249
assert_include(0..255, r5)
230250
}
251+
252+
# Aliases
253+
assert_include(128..255, OpenSSL::BN.pseudo_rand(8))
254+
assert_include(0..255, OpenSSL::BN.pseudo_rand_range(256))
231255
end
232256

233-
def test_prime
234-
p1 = OpenSSL::BN.generate_prime(32)
235-
assert_include(0...2**32, p1)
236-
assert_equal(true, Prime.prime?(p1.to_i))
237-
p2 = OpenSSL::BN.generate_prime(32, true)
238-
assert_equal(true, Prime.prime?((p2.to_i - 1) / 2))
239-
p3 = OpenSSL::BN.generate_prime(32, false, 4)
240-
assert_equal(1, p3 % 4)
241-
p4 = OpenSSL::BN.generate_prime(32, false, 4, 3)
242-
assert_equal(3, p4 % 4)
243-
244-
assert_equal(true, p1.prime?)
245-
assert_equal(true, p2.prime?)
246-
assert_equal(true, p3.prime?)
247-
assert_equal(true, p4.prime?)
248-
assert_equal(true, @e3.prime?)
249-
assert_equal(true, @e3.prime_fasttest?)
257+
begin
258+
require "prime"
259+
260+
def test_prime
261+
p1 = OpenSSL::BN.generate_prime(32)
262+
assert_include(0...2**32, p1)
263+
assert_equal(true, Prime.prime?(p1.to_i))
264+
p2 = OpenSSL::BN.generate_prime(32, true)
265+
assert_equal(true, Prime.prime?((p2.to_i - 1) / 2))
266+
p3 = OpenSSL::BN.generate_prime(32, false, 4)
267+
assert_equal(1, p3 % 4)
268+
p4 = OpenSSL::BN.generate_prime(32, false, 4, 3)
269+
assert_equal(3, p4 % 4)
270+
271+
assert_equal(true, p1.prime?)
272+
assert_equal(true, p2.prime?)
273+
assert_equal(true, p3.prime?)
274+
assert_equal(true, p4.prime?)
275+
assert_equal(true, @e3.prime?)
276+
assert_equal(true, @e3.prime_fasttest?)
277+
end
278+
rescue LoadError
279+
# prime is the bundled gems at Ruby 3.1
250280
end
251281

252282
def test_num_bits_bytes
@@ -281,6 +311,54 @@ def test_argument_error
281311
bug15760 = '[ruby-core:92231] [Bug #15760]'
282312
assert_raise(ArgumentError, bug15760) { OpenSSL::BN.new(nil, 2) }
283313
end
314+
315+
def test_get_flags_and_set_flags
316+
e = OpenSSL::BN.new(999)
317+
318+
assert_equal(0, e.get_flags(OpenSSL::BN::CONSTTIME))
319+
320+
e.set_flags(OpenSSL::BN::CONSTTIME)
321+
assert_equal(OpenSSL::BN::CONSTTIME, e.get_flags(OpenSSL::BN::CONSTTIME))
322+
323+
b = OpenSSL::BN.new(2)
324+
m = OpenSSL::BN.new(99)
325+
assert_equal("17", b.mod_exp(e, m).to_s)
326+
327+
# mod_exp fails when m is even and any argument has CONSTTIME flag
328+
m = OpenSSL::BN.new(98)
329+
assert_raise(OpenSSL::BNError) do
330+
b.mod_exp(e, m)
331+
end
332+
333+
# It looks like flags cannot be removed once enabled
334+
e.set_flags(0)
335+
assert_equal(4, e.get_flags(OpenSSL::BN::CONSTTIME))
336+
end
337+
338+
if respond_to?(:ractor)
339+
ractor
340+
def test_ractor
341+
assert_equal(@e1, Ractor.new { OpenSSL::BN.new("999") }.take)
342+
assert_equal(@e3, Ractor.new { OpenSSL::BN.new("\a\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", 2) }.take)
343+
assert_equal("999", Ractor.new(@e1) { |e1| e1.to_s }.take)
344+
assert_equal("07FFFFFFFFFFFFFFFFFFFFFFFFFF", Ractor.new(@e3) { |e3| e3.to_s(16) }.take)
345+
assert_equal(2**107-1, Ractor.new(@e3) { _1.to_i }.take)
346+
assert_equal([1000, -999], Ractor.new(@e2) { _1.coerce(1000) }.take)
347+
assert_equal(false, Ractor.new { 1.to_bn.zero? }.take)
348+
assert_equal(true, Ractor.new { 1.to_bn.one? }.take)
349+
assert_equal(true, Ractor.new(@e2) { _1.negative? }.take)
350+
assert_equal("-03E7", Ractor.new(@e2) { _1.to_s(16) }.take)
351+
assert_equal(2**107-1, Ractor.new(@e3) { _1.to_i }.take)
352+
assert_equal([1000, -999], Ractor.new(@e2) { _1.coerce(1000) }.take)
353+
assert_equal(true, Ractor.new { 0.to_bn.zero? }.take)
354+
assert_equal(true, Ractor.new { 1.to_bn.one? }.take )
355+
assert_equal(false,Ractor.new { 2.to_bn.odd? }.take)
356+
assert_equal(true, Ractor.new(@e2) { _1.negative? }.take)
357+
assert_include(128..255, Ractor.new { OpenSSL::BN.rand(8)}.take)
358+
assert_include(0...2**32, Ractor.new { OpenSSL::BN.generate_prime(32) }.take)
359+
assert_equal(0, Ractor.new { OpenSSL::BN.new(999).get_flags(OpenSSL::BN::CONSTTIME) }.take)
360+
end
361+
end
284362
end
285363

286364
end

test/mri/tests/openssl/test_cipher.rb

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -135,25 +135,22 @@ def test_ctr_if_exists
135135
end
136136

137137
def test_ciphers
138-
OpenSSL::Cipher.ciphers.each{|name|
139-
next if /netbsd/ =~ RUBY_PLATFORM && /idea|rc5/i =~ name
140-
begin
141-
assert_kind_of(OpenSSL::Cipher, OpenSSL::Cipher.new(name))
142-
rescue OpenSSL::Cipher::CipherError => e
143-
raise unless /wrap/ =~ name and /wrap mode not allowed/ =~ e.message
144-
end
145-
}
138+
ciphers = OpenSSL::Cipher.ciphers
139+
assert_kind_of Array, ciphers
140+
assert_include ciphers, "aes-128-cbc"
141+
assert_include ciphers, "aes128" # alias of aes-128-cbc
142+
assert_include ciphers, "aes-128-gcm"
146143
end
147144

148145
def test_AES
149146
pt = File.read(__FILE__)
150-
%w(ECB CBC CFB OFB).each{|mode|
151-
c1 = OpenSSL::Cipher.new("AES-256-#{mode}")
147+
%w(ecb cbc cfb ofb).each{|mode|
148+
c1 = OpenSSL::Cipher.new("aes-256-#{mode}")
152149
c1.encrypt
153150
c1.pkcs5_keyivgen("passwd")
154151
ct = c1.update(pt) + c1.final
155152

156-
c2 = OpenSSL::Cipher.new("AES-256-#{mode}")
153+
c2 = OpenSSL::Cipher.new("aes-256-#{mode}")
157154
c2.decrypt
158155
c2.pkcs5_keyivgen("passwd")
159156
assert_equal(pt, c2.update(ct) + c2.final)
@@ -163,7 +160,7 @@ def test_AES
163160
def test_update_raise_if_key_not_set
164161
assert_raise(OpenSSL::Cipher::CipherError) do
165162
# it caused OpenSSL SEGV by uninitialized key [Bug #2768]
166-
OpenSSL::Cipher.new("AES-128-ECB").update "." * 17
163+
OpenSSL::Cipher.new("aes-128-ecb").update "." * 17
167164
end
168165
end
169166

@@ -214,7 +211,7 @@ def test_aes_ccm
214211
assert_raise(OpenSSL::Cipher::CipherError) { cipher.update(ct2) }
215212
end if has_cipher?("aes-128-ccm") &&
216213
OpenSSL::Cipher.new("aes-128-ccm").authenticated? &&
217-
OpenSSL::OPENSSL_VERSION_NUMBER >= 0x10101000 # version >= v1.1.1
214+
OpenSSL::OPENSSL_VERSION_NUMBER >= 0x1010103f # version >= 1.1.1c
218215

219216
def test_aes_gcm
220217
# GCM spec Appendix B Test Case 4

0 commit comments

Comments
 (0)