Skip to content

Commit 895ef23

Browse files
committed
Fix test_pkey_rsa.rb in FIPS.
* test_sign_verify I created the signature text (`signature_encoded.txt`), that is used as a text to create the `signature0` in the `test_sign_verify` by the following steps with the `openssl` CLI on FIPS module. ``` $ OPENSSL_DIR="${HOME}/.local/openssl-3.4.0-dev-fips-debug-3c6e114959" $ export OPENSSL_CONF="${OPENSSL_DIR}/ssl/openssl_fips.cnf" $ echo -n "Sign me!" > data.txt $ "${OPENSSL_DIR}/bin/openssl" dgst -sha256 -sign test/openssl/fixtures/pkey/rsa2048.pem data.txt > signature.txt $ cat signature.txt | base64 > signature_encoded.txt ```
1 parent 13b03ba commit 895ef23

File tree

2 files changed

+165
-94
lines changed

2 files changed

+165
-94
lines changed

Rakefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Rake::TestTask.new(:test_fips_internal) do |t|
3232
'test/openssl/test_pkey_dh.rb',
3333
'test/openssl/test_pkey_dsa.rb',
3434
'test/openssl/test_pkey_ec.rb',
35+
'test/openssl/test_pkey_rsa.rb',
3536
]
3637
t.warning = true
3738
end

test/openssl/test_pkey_rsa.rb

Lines changed: 164 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,20 @@ def test_no_private_exp
1414
end if !openssl?(3, 0, 0) # Impossible state in OpenSSL 3.0
1515

1616
def test_private
17+
# In FIPS, the `OpenSSL::PKey::RSA.new(2048, 65537)` with 2048 bits is at
18+
# least required. However, generating a 2048-bit RSA key takes
19+
# non-negligible amount of time. We want to avoid such slow tests as much
20+
# as possible.
21+
#
22+
# SP800 requires ossl_ifc_ffc_compute_security_bits that the return value
23+
# (strength in bits) is more than equal RSA_FIPS1864_MIN_KEYGEN_STRENGTH
24+
# (112) in FIPS.
25+
# https://github.com/openssl/openssl/blob/3c6e11495975a4eda4cc5886080afed6203711ac/crypto/rsa/rsa_sp800_56b_gen.c#L176-L182
26+
# The ossl_ifc_ffc_compute_security_bits returns 112 with the argument nbits
27+
# 2048.
28+
# https://github.com/openssl/openssl/blob/3c6e11495975a4eda4cc5886080afed6203711ac/crypto/rsa/rsa_lib.c#L334-L335
29+
omit_on_fips
30+
1731
# Generated by key size and public exponent
1832
key = OpenSSL::PKey::RSA.new(512, 3)
1933
assert(key.private?)
@@ -46,63 +60,76 @@ def test_private
4660
end
4761

4862
def test_new
49-
key = OpenSSL::PKey::RSA.new(512)
50-
assert_equal 512, key.n.num_bits
63+
key = OpenSSL::PKey::RSA.new(2048)
64+
assert_equal 2048, key.n.num_bits
5165
assert_equal 65537, key.e
5266
assert_not_nil key.d
5367

54-
# Specify public exponent
55-
key2 = OpenSSL::PKey::RSA.new(512, 3)
56-
assert_equal 512, key2.n.num_bits
57-
assert_equal 3, key2.e
68+
key2 = OpenSSL::PKey::RSA.new(2048, 65537)
69+
assert_equal 2048, key2.n.num_bits
70+
assert_equal 65537, key2.e
5871
assert_not_nil key2.d
5972
end
6073

74+
def test_new_exponent
75+
# At least 2024-bits RSA key are required in FIPS.
76+
omit_on_fips
77+
78+
# Specify public exponent
79+
key = OpenSSL::PKey::RSA.new(512, 3)
80+
assert_equal 512, key.n.num_bits
81+
assert_equal 3, key.e
82+
end
83+
6184
def test_s_generate
62-
key1 = OpenSSL::PKey::RSA.generate(512)
63-
assert_equal 512, key1.n.num_bits
85+
key1 = OpenSSL::PKey::RSA.generate(2048)
86+
assert_equal 2048, key1.n.num_bits
6487
assert_equal 65537, key1.e
6588

6689
# Specify public exponent
67-
key2 = OpenSSL::PKey::RSA.generate(512, 3)
68-
assert_equal 512, key2.n.num_bits
69-
assert_equal 3, key2.e
90+
key2 = OpenSSL::PKey::RSA.generate(2048, 65537)
91+
assert_equal 2048, key2.n.num_bits
92+
assert_equal 65537, key2.e
7093
assert_not_nil key2.d
7194
end
7295

7396
def test_new_break
74-
assert_nil(OpenSSL::PKey::RSA.new(1024) { break })
97+
assert_nil(OpenSSL::PKey::RSA.new(2048) { break })
7598
assert_raise(RuntimeError) do
76-
OpenSSL::PKey::RSA.new(1024) { raise }
99+
OpenSSL::PKey::RSA.new(2048) { raise }
77100
end
78101
end
79102

80103
def test_sign_verify
81-
rsa1024 = Fixtures.pkey("rsa1024")
104+
# Use 2024-bits RSA key, as OpenSSL 1.1.0 introduced that 512 or 1024-bits
105+
# RSA key is insecure.
106+
rsa = Fixtures.pkey("rsa2048")
82107
data = "Sign me!"
83-
signature = rsa1024.sign("SHA256", data)
84-
assert_equal true, rsa1024.verify("SHA256", signature, data)
108+
signature = rsa.sign("SHA256", data)
109+
assert_equal true, rsa.verify("SHA256", signature, data)
85110

86111
signature0 = (<<~'end;').unpack1("m")
87-
oLCgbprPvfhM4pjFQiDTFeWI9Sk+Og7Nh9TmIZ/xSxf2CGXQrptlwo7NQ28+
88-
WA6YQo8jPH4hSuyWIM4Gz4qRYiYRkl5TDMUYob94zm8Si1HxEiS9354tzvqS
89-
zS8MLW2BtNPuTubMxTItHGTnOzo9sUg0LAHVFt8kHG2NfKAw/gQ=
112+
ooy49i8aeFtkDYUU0RPDsEugGiNw4lZxpbQPnIwtdftEkka945IqKZ/MY3YSw7wKsvBZeaTy8GqL
113+
lSWLThsRFDV+UUS9zUBbQ9ygNIT8OjdV+tNL63ZpKGprczSnw4F05MQIpajNRud/8jiI9rf+Wysi
114+
WwXecjMl2FlXlLJHY4PFQZU5TiametB4VCQRMcjLo1uf26u/yRpiGaYyqn5vxs0SqNtUDM1UL6x4
115+
NHCAdqLjuFRQPjYp1vGLD3eSl4061pS8x1NVap3YGbYfGUyzZO4VfwFwf1jPdhp/OX/uZw4dGB2H
116+
gSK+q1JiDFwEE6yym5tdKovL1g1NhFYHF6gkZg==
90117
end;
91-
assert_equal true, rsa1024.verify("SHA256", signature0, data)
118+
assert_equal true, rsa.verify("SHA256", signature0, data)
92119
signature1 = signature0.succ
93-
assert_equal false, rsa1024.verify("SHA256", signature1, data)
120+
assert_equal false, rsa.verify("SHA256", signature1, data)
94121
end
95122

96123
def test_sign_verify_options
97-
key = Fixtures.pkey("rsa1024")
124+
key = Fixtures.pkey("rsa2048")
98125
data = "Sign me!"
99126
pssopts = {
100127
"rsa_padding_mode" => "pss",
101128
"rsa_pss_saltlen" => 20,
102129
"rsa_mgf1_md" => "SHA1"
103130
}
104131
sig_pss = key.sign("SHA256", data, pssopts)
105-
assert_equal 128, sig_pss.bytesize
132+
assert_equal 256, sig_pss.bytesize
106133
assert_equal true, key.verify("SHA256", sig_pss, data, pssopts)
107134
assert_equal true, key.verify_pss("SHA256", sig_pss, data,
108135
salt_length: 20, mgf1_hash: "SHA1")
@@ -175,12 +202,12 @@ def test_verify_empty_rsa
175202
end
176203

177204
def test_sign_verify_pss
178-
key = Fixtures.pkey("rsa1024")
205+
key = Fixtures.pkey("rsa2048")
179206
data = "Sign me!"
180207
invalid_data = "Sign me?"
181208

182209
signature = key.sign_pss("SHA256", data, salt_length: 20, mgf1_hash: "SHA1")
183-
assert_equal 128, signature.bytesize
210+
assert_equal 256, signature.bytesize
184211
assert_equal true,
185212
key.verify_pss("SHA256", signature, data, salt_length: 20, mgf1_hash: "SHA1")
186213
assert_equal true,
@@ -196,15 +223,23 @@ def test_sign_verify_pss
196223
assert_equal false,
197224
key.verify_pss("SHA256", signature, data, salt_length: 20, mgf1_hash: "SHA1")
198225

199-
signature = key.sign_pss("SHA256", data, salt_length: :max, mgf1_hash: "SHA1")
200-
assert_equal true,
201-
key.verify_pss("SHA256", signature, data, salt_length: 94, mgf1_hash: "SHA1")
202-
assert_equal true,
203-
key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA1")
204-
205-
assert_raise(OpenSSL::PKey::RSAError) {
206-
key.sign_pss("SHA256", data, salt_length: 95, mgf1_hash: "SHA1")
207-
}
226+
# The sign_pss with `salt_length: :max` raises the "invalid salt length"
227+
# error on the following part in FIPS. We need to skip the tests in FIPS.
228+
# https://github.com/openssl/openssl/blob/d550d2aae531c6fa2e10b1a30d2acdf373663889/providers/implementations/signature/rsa_sig.c#L580-L597
229+
unless OpenSSL.fips_mode
230+
signature = key.sign_pss("SHA256", data, salt_length: :max, mgf1_hash: "SHA1")
231+
# Should verify on the following salt_length (sLen).
232+
# sLen <= emLen (octat) - 2 - hLen (octet) = 2048 / 8 - 2 - 256 / 8 = 222
233+
# https://datatracker.ietf.org/doc/html/rfc8017#section-9.1.1
234+
assert_equal true,
235+
key.verify_pss("SHA256", signature, data, salt_length: 222, mgf1_hash: "SHA1")
236+
assert_equal true,
237+
key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA1")
238+
239+
assert_raise(OpenSSL::PKey::RSAError) {
240+
key.sign_pss("SHA256", data, salt_length: 223, mgf1_hash: "SHA1")
241+
}
242+
end
208243
end
209244

210245
def test_encrypt_decrypt
@@ -213,8 +248,12 @@ def test_encrypt_decrypt
213248

214249
# Defaults to PKCS #1 v1.5
215250
raw = "data"
216-
enc = rsapub.encrypt(raw)
217-
assert_equal raw, rsapriv.decrypt(enc)
251+
# RSA PKCS1 PADDING encrypt is not allowed in FIPS.
252+
# https://github.com/openssl/openssl/blob/d550d2aae531c6fa2e10b1a30d2acdf373663889/providers/implementations/asymciphers/rsa_enc.c#L161-L171
253+
unless OpenSSL.fips_mode
254+
enc = rsapub.encrypt(raw)
255+
assert_equal raw, rsapriv.decrypt(enc)
256+
end
218257

219258
# Invalid options
220259
assert_raise(OpenSSL::PKey::PKeyError) {
@@ -227,11 +266,13 @@ def test_encrypt_decrypt_legacy
227266
rsapub = OpenSSL::PKey.read(rsapriv.public_to_der)
228267

229268
# Defaults to PKCS #1 v1.5
230-
raw = "data"
231-
enc_legacy = rsapub.public_encrypt(raw)
232-
assert_equal raw, rsapriv.decrypt(enc_legacy)
233-
enc_new = rsapub.encrypt(raw)
234-
assert_equal raw, rsapriv.private_decrypt(enc_new)
269+
unless OpenSSL.fips_mode
270+
raw = "data"
271+
enc_legacy = rsapub.public_encrypt(raw)
272+
assert_equal raw, rsapriv.decrypt(enc_legacy)
273+
enc_new = rsapub.encrypt(raw)
274+
assert_equal raw, rsapriv.private_decrypt(enc_new)
275+
end
235276

236277
# OAEP with default parameters
237278
raw = "data"
@@ -292,53 +333,67 @@ def test_to_der
292333
end
293334

294335
def test_RSAPrivateKey
295-
rsa1024 = Fixtures.pkey("rsa1024")
336+
rsa = Fixtures.pkey("rsa2048")
296337
asn1 = OpenSSL::ASN1::Sequence([
297338
OpenSSL::ASN1::Integer(0),
298-
OpenSSL::ASN1::Integer(rsa1024.n),
299-
OpenSSL::ASN1::Integer(rsa1024.e),
300-
OpenSSL::ASN1::Integer(rsa1024.d),
301-
OpenSSL::ASN1::Integer(rsa1024.p),
302-
OpenSSL::ASN1::Integer(rsa1024.q),
303-
OpenSSL::ASN1::Integer(rsa1024.dmp1),
304-
OpenSSL::ASN1::Integer(rsa1024.dmq1),
305-
OpenSSL::ASN1::Integer(rsa1024.iqmp)
339+
OpenSSL::ASN1::Integer(rsa.n),
340+
OpenSSL::ASN1::Integer(rsa.e),
341+
OpenSSL::ASN1::Integer(rsa.d),
342+
OpenSSL::ASN1::Integer(rsa.p),
343+
OpenSSL::ASN1::Integer(rsa.q),
344+
OpenSSL::ASN1::Integer(rsa.dmp1),
345+
OpenSSL::ASN1::Integer(rsa.dmq1),
346+
OpenSSL::ASN1::Integer(rsa.iqmp)
306347
])
307348
key = OpenSSL::PKey::RSA.new(asn1.to_der)
308349
assert_predicate key, :private?
309-
assert_same_rsa rsa1024, key
350+
assert_same_rsa rsa, key
310351

311352
pem = <<~EOF
312353
-----BEGIN RSA PRIVATE KEY-----
313-
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
326379
-----END RSA PRIVATE KEY-----
327380
EOF
328381
key = OpenSSL::PKey::RSA.new(pem)
329-
assert_same_rsa rsa1024, key
382+
assert_same_rsa rsa, key
330383

331-
assert_equal asn1.to_der, rsa1024.to_der
332-
assert_equal pem, rsa1024.export
384+
assert_equal asn1.to_der, rsa.to_der
385+
assert_equal pem, rsa.export
333386

334387
# Unknown PEM prepended
335-
cert = issue_cert(OpenSSL::X509::Name.new([["CN", "nobody"]]), rsa1024, 1, [], nil, nil)
336-
str = cert.to_text + cert.to_pem + rsa1024.to_pem
388+
cert = issue_cert(OpenSSL::X509::Name.new([["CN", "nobody"]]), rsa, 1, [], nil, nil)
389+
str = cert.to_text + cert.to_pem + rsa.to_pem
337390
key = OpenSSL::PKey::RSA.new(str)
338-
assert_same_rsa rsa1024, key
391+
assert_same_rsa rsa, key
339392
end
340393

341394
def test_RSAPrivateKey_encrypted
395+
omit_on_fips
396+
342397
rsa1024 = Fixtures.pkey("rsa1024")
343398
# key = abcdef
344399
pem = <<~EOF
@@ -438,6 +493,8 @@ def test_PUBKEY
438493
end
439494

440495
def test_pem_passwd
496+
omit_on_fips
497+
441498
key = Fixtures.pkey("rsa1024")
442499
pem3c = key.to_pem("aes-128-cbc", "key")
443500
assert_match (/ENCRYPTED/), pem3c
@@ -484,41 +541,54 @@ def test_private_encoding
484541
end
485542

486543
def test_private_encoding_encrypted
487-
rsa1024 = Fixtures.pkey("rsa1024")
488-
encoded = rsa1024.private_to_der("aes-128-cbc", "abcdef")
544+
rsa = Fixtures.pkey("rsa2048")
545+
encoded = rsa.private_to_der("aes-128-cbc", "abcdef")
489546
asn1 = OpenSSL::ASN1.decode(encoded) # PKCS #8 EncryptedPrivateKeyInfo
490547
assert_kind_of OpenSSL::ASN1::Sequence, asn1
491548
assert_equal 2, asn1.value.size
492-
assert_not_equal rsa1024.private_to_der, encoded
493-
assert_same_rsa rsa1024, OpenSSL::PKey.read(encoded, "abcdef")
494-
assert_same_rsa rsa1024, OpenSSL::PKey.read(encoded) { "abcdef" }
549+
assert_not_equal rsa.private_to_der, encoded
550+
assert_same_rsa rsa, OpenSSL::PKey.read(encoded, "abcdef")
551+
assert_same_rsa rsa, OpenSSL::PKey.read(encoded) { "abcdef" }
495552
assert_raise(OpenSSL::PKey::PKeyError) { OpenSSL::PKey.read(encoded, "abcxyz") }
496553

497-
encoded = rsa1024.private_to_pem("aes-128-cbc", "abcdef")
554+
encoded = rsa.private_to_pem("aes-128-cbc", "abcdef")
498555
assert_match (/BEGIN ENCRYPTED PRIVATE KEY/), encoded.lines[0]
499-
assert_same_rsa rsa1024, OpenSSL::PKey.read(encoded, "abcdef")
556+
assert_same_rsa rsa, OpenSSL::PKey.read(encoded, "abcdef")
500557

501-
# certtool --load-privkey=test/fixtures/pkey/rsa1024.pem --to-p8 --password=abcdef
558+
# certtool --load-privkey=test/openssl/fixtures/pkey/rsa2048.pem --to-p8 --password=abcdef
502559
pem = <<~EOF
503560
-----BEGIN ENCRYPTED PRIVATE KEY-----
504-
MIICojAcBgoqhkiG9w0BDAEDMA4ECLqajUdSNfzwAgIEkQSCAoCDWhxr1HUrKLXA
505-
FsFGGQfPT0aKH4gZipaSXXQRl0KwifHwHoDtfo/mAkJVZMnUVOm1AQ4LTFS3EdTy
506-
JUwICGEQHb7QAiokIRoi0K2yHhOxVO8qgbnWuisWpiT6Ru1jCqTs/wcqlqF7z2jM
507-
oXDk/vuekKst1DDXDcHrzhDkwhCQWj6jt1r2Vwaryy0FyeqsWAgBDiK2LsnCgkGD
508-
21uhNZ/iWMG6tvY9hB8MDdiBJ41YdSG/AKLulAxQ1ibJz0Tasu66TmwFvWhBlME+
509-
QbqfgmkgWg5buu53SvDfCA47zXihclbtdfW+U3CJ9OJkx0535TVdZbuC1QgKXvG7
510-
4iKGFRMWYJqZvZM3GL4xbC75AxjXZsdCfV81VjZxjeU6ung/NRzCuCUcmBOQzo1D
511-
Vv6COwAa6ttQWM0Ti8oIQHdu5Qi+nuOEHDLxCxD962M37H99sEO5cESjmrGVxhEo
512-
373L4+11geGSCajdp0yiAGnXQfwaKta8cL693bRObN+b1Y+vqtDKH26N9a4R3qgg
513-
2XwgQ5GH5CODoXZpi0wxncXO+3YuuhGeArtzKSXLNxHzIMlY7wZX+0e9UU03zfV/
514-
aOe4/q5DpkNxgHePt0oEpamSKY5W3jzVi1dlFWsRjud1p/Grt2zjSWTYClBlJqG1
515-
A/3IeDZCu+acaePJjFyv5dFffIj2l4bAYB+LFrZlSu3F/EimO/dCDWJ9JGlMK0aF
516-
l9brh7786Mo+YfyklaqMMEHBbbR2Es7PR6Gt7lrcIXmzy9XSsxT6IiD1rG9KKR3i
517-
CQxTup6JAx9w1q+adL+Ypikoy3gGD/ccUY6TtPoCmkQwSCS+JqQnFlCiThDJbu+V
518-
eqqUNkZq
561+
MIIFOTBjBgkqhkiG9w0BBQ0wVjA1BgkqhkiG9w0BBQwwKAQSsTIsinrhNMr4owUz
562+
cwYGgB0lAgMJJ8ACARAwCgYIKoZIhvcNAgkwHQYJYIZIAWUDBAECBBDtDYqmQOLV
563+
Nh0T0DslWgovBIIE0ESbJey2Pjf9brTp9/41CPnI9Ev78CGSv8Ihyuynu6G7oj7N
564+
G7jUB1pVMQ7ivebF5DmM0qHAix6fDqJetB3WCnRQpMLyIdq5VrnKwFNhwGYduWA5
565+
IyaAc4DHj02e6YLyBTIKpu79OSFxLrnLCRaTbvZIUQaGhyd6pB7iAhqz5YBC0rpa
566+
iMK5TRlNGPYG9n2eGFOhvUsbJ4T8VDzjpVWw0VNRaukXtg4xiR6o1f0qSXqAb5d9
567+
REq5DfaQfoOKTV9j7KJHDRrBQG81vkU4K+xILrCBfbcYb82aCoinwSep9LC30HaH
568+
LZ0hYQOuD/k/UbgjToS2wyMnkz75MN5ZNhDMZl/mACQdsMMtIxG37Mpo1Ca33uZi
569+
71TCOEKIblZS11L1YhIni9Af8pOuHJBWwezP2zN2nPwV6OhgL7Jlax7ICQOPC6L/
570+
yRGgC5eT4lDDAuTy0IdUhr0r5XrFzZR0/5Vgsq9cGfk9QkXOoETRhQVkEfUDdCs6
571+
6CK+SwUR9qh5824ShODFG0SQpsqBPIVtkGrypBSUJtICmGMOAsclB7RDN7/opJwp
572+
qv/iRJ5dhWrhRgQ/DfYifvO5On7RgC2hm48gF3Pt6XCA857ryyYxLYeMY42tAUqp
573+
Hmc9HL7bMYF/jl3cJ32+gLvI3PBVvrvyeAhRo6z7MFVe9I04OywV6BHUx1Us6ybF
574+
qkYnSpcJZdu7HyvzXm7XWLFmt7K5BlAgnFsa/8+cI1BGPgQRc1j0SWepXsSwFZX6
575+
JkNQ0dewq4uRJXbGyQgfh5I5ETpqDhSt2JfBwAoze6cx3DPC711PUamxyWMiejs+
576+
mYdia4p62NxaUvyXWmCGIEOzajRwywEhf9OLAmfqTN41TIrEL4BUxqtzDyw8Nl8T
577+
KB7nJEC366jFASfumNQkXXyH5yBIF+XwwSKUOObRZVn2rUzFToo51hHu9efxHoXa
578+
jZlpfglWijkmOuwoIGlGHOq8gUn76oq9WbV+YO+fWm/mf4S3ECzmYzxb6a1uCTy/
579+
Itkm2qOe3yTM1t+oCqZ0/MeTZ84ALQaWv5reQfjronPZ1jeNtxrYz28tJ4KwBn0U
580+
bJReXbOLsHAymipncxlmaevbx4GPTduu/lbpxefoN95w+SpEdyTmVWrfaCTgAbad
581+
EzcRl60my3xOMQ7CaUbRgGiwohqHDvuXzeqoZ96u6CwfAoEfy4jETmKLRH6uTtj7
582+
4jdTyoqyizjpvaM8LPspBS+oqFwLxBjpseQuScrZO1BjPxrImLy2/VRqwJ+CF4FB
583+
iijEgDgDc1EMIGe5YmOAV+i22n9RqX+2IvkYp7CWXrB9/lmirLFukd7hT8DLPUGq
584+
AvSZwTPbDPoZKG3DAebC3DbiC7A3x0KZp24doNRLamZ/MyKHo2Rzl0UhkzDU0ly2
585+
eAnyNYsOAQck+C6L+ieD95Gksm9YJWurwttm5JragbIJwMCrsBQd4bXDkKdRhxS2
586+
JpS0dT/aoDmgTzoG07x4cZk0rjBkfX1ta0j0b1lz7/PZXl9AbRvFdq5sJpmv4Ryz
587+
S+OERqo4IEfJJq2WJ92WR+HLGV3Gvsdb7znZTEF1tp4pWOLAt83Pry282UJxO7Pe
588+
ySf/868TEmXams06GYvH+7cMiIT2m9Dc+EFgNaPmm0uMmJ+ZjqHKSOLzrL7C
519589
-----END ENCRYPTED PRIVATE KEY-----
520590
EOF
521-
assert_same_rsa rsa1024, OpenSSL::PKey.read(pem, "abcdef")
591+
assert_same_rsa rsa, OpenSSL::PKey.read(pem, "abcdef")
522592
end
523593

524594
def test_dup

0 commit comments

Comments
 (0)