Skip to content

Commit 2ea071d

Browse files
committed
add test-case from #78 and adjust to_text Serial Number: ... formatting to match MRI
1 parent 29ae9bc commit 2ea071d

2 files changed

Lines changed: 45 additions & 2 deletions

File tree

src/main/java/org/jruby/ext/openssl/X509Cert.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -313,8 +313,20 @@ public IRubyObject to_text(final ThreadContext context) {
313313
final int version = this.version == null ? 0 : RubyNumeric.fix2int(this.version);
314314
text.append(S20,0,8).append("Version: ").append( version + 1 ).
315315
append(" (0x").append( Integer.toString( version, 16 ) ).append(")\n");
316-
text.append(S20,0,8).append("Serial Number:\n");
317-
text.append(S20,0,12).append( lowerHexBytes(serial.toByteArray(), 1) ).append('\n');
316+
// <= 0x1122334455667788 printed on same line as :
317+
// Serial Number: 1234605616436508552 (0x1122334455667788)
318+
// but 0x112233445566778899 ends up :
319+
// Serial Number:
320+
// 11:22:33:44:55:66:77:88:99
321+
text.append(S20,0,8).append("Serial Number:");
322+
if ( serial.compareTo( new BigInteger("FFFFFFFFFFFFFFFF", 16) ) > 0 ) {
323+
text.append('\n');
324+
text.append(S20,0,12).append( lowerHexBytes(serial.toByteArray(), 1) ).append('\n');
325+
}
326+
else {
327+
text.append(' ').append(serial.toString(10)).append(' ');
328+
text.append('(').append("0x").append(serial.toString(16)).append(')').append('\n');
329+
}
318330

319331
text.append(S20,0,4).append("Signature Algorithm: ").append( signature_algorithm() ).append('\n');
320332
//final RubyString issuer = issuer().asString(); ByteList bytes = issuer.getByteList();

src/test/ruby/x509/test_x509cert.rb

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,37 @@ def test_to_text_regression
275275
assert cert.to_text.index('Signature Algorithm: sha256WithRSAEncryption')
276276
end
277277

278+
def test_to_text_npe_regression
279+
# https://github.com/jruby/jruby-openssl/issues/78
280+
key = OpenSSL::PKey::RSA.generate(2048)
281+
282+
issuer = subject = OpenSSL::X509::Name.new
283+
subject.add_entry('C', 'JP')
284+
subject.add_entry('ST', 'Tokyo')
285+
subject.add_entry('L', 'Chiyoda')
286+
subject.add_entry('CN', 'demo.example.com')
287+
288+
digest = OpenSSL::Digest::SHA1.new
289+
290+
cert = OpenSSL::X509::Certificate.new
291+
cert.not_before = Time.at(0)
292+
cert.not_after = Time.now + 5 * 365 * 86400 # 5 years after
293+
cert.public_key = key
294+
cert.serial = 1
295+
cert.issuer = issuer
296+
cert.subject = subject
297+
cert.add_extension OpenSSL::X509::Extension.new('basicConstraints', OpenSSL::ASN1.Sequence([OpenSSL::ASN1::Boolean(true)]))
298+
cert.sign(key, digest)
299+
300+
assert cert.to_text.index('Version: 1 (0x0)')
301+
assert cert.to_text.index('Serial Number: 1 (0x1)')
302+
# TODO
303+
#assert cert.to_text.index('Issuer: C=JP, ST=Tokyo, L=Chiyoda, CN=demo.example.com')
304+
305+
assert_equal 0, cert.version
306+
assert_equal OpenSSL::BN.new(1), cert.serial
307+
end
308+
278309
def test_cert_loading_regression
279310
cert_text = "0\x82\x01\xAD0\x82\x01\xA1\xA0\x03\x02\x01\x02\x02\x01\x010\x03\x06\x01\x000g1\v0\t\x06\x03U\x04\x06\x13\x02US1\x130\x11\x06\x03U\x04\b\f\nCalifornia1\x150\x13\x06\x03U\x04\a\f\fSanta Monica1\x110\x0F\x06\x03U\x04\n\f\bOneLogin1\x190\x17\x06\x03U\x04\x03\f\x10app.onelogin.com0\x1E\x17\r100309095845Z\x17\r150309095845Z0g1\v0\t\x06\x03U\x04\x06\x13\x02US1\x130\x11\x06\x03U\x04\b\f\nCalifornia1\x150\x13\x06\x03U\x04\a\f\fSanta Monica1\x110\x0F\x06\x03U\x04\n\f\bOneLogin1\x190\x17\x06\x03U\x04\x03\f\x10app.onelogin.com0\x81\x9F0\r\x06\t*\x86H\x86\xF7\r\x01\x01\x01\x05\x00\x03\x81\x8D\x000\x81\x89\x02\x81\x81\x00\xE8\xD2\xBBW\xE3?/\x1D\xE7\x0E\x10\xC8\xBD~\xCD\xDE!#\rL\x92G\xDF\xE1f?L\xB1\xBC9\x99\x14\xE5\x84\xD2Zi\x87<>d\xBD\x81\xF9\xBA\x85\xD2\xFF\xAA\x90\xF3Z\x97\xA5\x1D\xB0W\xC0\x93\xA3\x06IP\xB84\xF5\xD7Qu\x19\xFCB\xCA\xA3\xD4\\\x8E\v\x9B%\x13|\xB6m\x9D\xA8\x16\xE6\xBB\xDA\x87\xFF\xE3\xD7\xE9\xBA9\xC5O\xA2\xA7C\xADB\x04\xCA\xA5\x0E\x84\xD0\xA8\xE4\xFA\xDA\xF1\x89\xF2s\xFA1\x95\xAF\x03\xAB1\xAA\xE7y\x02\x03\x01\x00\x010\x03\x06\x01\x00\x03\x01\x00"
280311
assert cert = OpenSSL::X509::Certificate.new(cert_text)

0 commit comments

Comments
 (0)