RFR: 8252523: Add ASN1 Formatter to work with HexPrinter
Roger Riggs
rriggs at openjdk.java.net
Sun Sep 20 14:01:41 UTC 2020
# JDK-8252523: Add ASN.1 Formatter to work with test utility HexPrinter
Debugging functions that utilize ASN.1, DER, and BER encoded streams is
difficult without test utilities to show the contents.
The ASN.1 formatter reads a stream and produces annotated output of the
tags, values, and structures.
When used with the test library jdk.test.lib.hexdump.HexPrinter the annotations are synchronized
with the hex formatted output.
Small changes to HexPrinter are included to improve the output readability.
Example decoding of a .pem certificate:
SEQUENCE [910]
SEQUENCE [630]
CONTEXT cons 0 [3]
BYTE 2,
BYTE 3,
SEQUENCE [13]
OBJECT ID [9] 1.2.840.113549.1.1.11 (SHA256withRSA)
NULL
SEQUENCE [76]
SET [11]
SEQUENCE [9]
OBJECT ID [3] 2.5.4.6 (CountryName)
'IN'
...
SET [16]
SEQUENCE [14]
OBJECT ID [3] 2.5.4.3 (CommonName)
Client1
SEQUENCE [30]
UTCTIME [13] '150526221718Z'
UTCTIME [13] '250523221718Z'
...
SEQUENCE [290]
SEQUENCE [13]
OBJECT ID [9] 1.2.840.113549.1.1.1 (RSA)
NULL
BIT STRING [271]
CONTEXT cons 3 [123]
SEQUENCE [121]
SEQUENCE [9]
OBJECT ID [3] 2.5.29.19 (BasicConstraints)
OCTET STRING [2] <Unprintable>
SEQUENCE [44]
OBJECT ID [9] 2.16.840.1.113730.1.13
OCTET STRING [31] '..OpenSSL Generated Certificate'
SEQUENCE [29]
OBJECT ID [3] 2.5.29.14 (SubjectKeyID)
OCTET STRING [22] <Unprintable>
SEQUENCE [31]
OBJECT ID [3] 2.5.29.35 (AuthorityKeyID)
OCTET STRING [24] <Unprintable>
SEQUENCE [13]
OBJECT ID [9] 1.2.840.113549.1.1.11 (SHA256withRSA)
NULL
BIT STRING [257]
When used with the HexPrinter test utility, the formatting of the
hexadecimal values is selected with the parameters to HexPrinter.
0000: 30 82 03 8e ; SEQUENCE [910]
0004: 30 82 02 76 ; SEQUENCE [630]
0008: a0 03 ; CONTEXT cons 0 [3]
000a: 02 01 02 ; BYTE 2,
000d: 02 01 03 ; BYTE 3,
0010: 30 0d ; SEQUENCE [13]
0012: 06 09 2a 86 48 86 f7 0d 01 01 0b ; OBJECT ID [9] 1.2.840.113549.1.1.11 (SHA256withRSA)
001d: 05 00 ; NULL
001f: 30 ; SEQUENCE [76]
0020: 4c ;
0021: 31 0b ; SET [11]
0023: 30 09 ; SEQUENCE [9]
0025: 06 03 55 04 06 ; OBJECT ID [3] 2.5.4.6 (CountryName)
002a: 13 02 49 4e ; 'IN'
... ...
005b: 31 10 ; SET [16]
005d: 30 0e ; SEQUENCE [14]
005f: 06 ; OBJECT ID [3] 2.5.4.3 (CommonName)
0060: 03 55 04 03 ;
0064: 0c 07 43 6c 69 65 6e 74 31 ; Client1
006d: 30 1e ; SEQUENCE [30]
006f: 17 ; UTCTIME [13] '150526221718Z'
0070: 0d 31 35 30 35 32 36 32 32 31 37 31 38 5a ;
007e: 17 0d ; UTCTIME [13] '250523221718Z'
0080: 32 35 30 35 32 33 32 32 31 37 31 38 5a ;
... ...
00db: 30 82 01 22 ; SEQUENCE [290]
00df: 30 ; SEQUENCE [13]
00e0: 0d ;
00e1: 06 09 2a 86 48 86 f7 0d 01 01 01 ; OBJECT ID [9] 1.2.840.113549.1.1.1 (RSA)
00ec: 05 00 ; NULL
00ee: 03 82 ; BIT STRING [271]
00f0: 01 0f 00 30 82 01 0a 02 82 01 01 00 d8 70 03 54 ;
...
01f0: 0a 2d f5 de 59 3e d9 5e 74 93 d2 45 02 03 01 00 ;
0200: 01 ;
0201: a3 7b ; CONTEXT cons 3 [123]
0203: 30 79 ; SEQUENCE [121]
0205: 30 09 ; SEQUENCE [9]
0207: 06 03 55 1d 13 ; OBJECT ID [3] 2.5.29.19 (BasicConstraints)
020c: 04 02 30 00 ; OCTET STRING [2] <Unprintable>
0210: 30 2c ; SEQUENCE [44]
0212: 06 09 60 86 48 01 86 f8 42 01 0d ; OBJECT ID [9] 2.16.840.1.113730.1.13
021d: 04 1f 16 ; OCTET STRING [31] '..OpenSSL Generated
Certificate' 0220: 1d 4f 70 65 6e 53 53 4c 20 47 65 6e 65 72 61 74 ;
0230: 65 64 20 43 65 72 74 69 66 69 63 61 74 65 ;
023e: 30 1d ; SEQUENCE [29]
0240: 06 03 55 1d 0e ; OBJECT ID [3] 2.5.29.14 (SubjectKeyID)
0245: 04 16 04 14 87 13 66 bc 7a 4d 8e ; OCTET STRING [22] <Unprintable>
0250: 98 e7 97 fb cc 56 41 27 c8 5e 4c b2 4d ;
025d: 30 1f ; SEQUENCE [31]
025f: 06 ; OBJECT ID [3] 2.5.29.35 (AuthorityKeyID)
0260: 03 55 1d 23 ;
0264: 04 18 30 16 80 14 1f 21 4f db 10 31 ; OCTET STRING [24] <Unprintable>
0270: d0 67 83 09 03 d3 cd fc 46 ec cf 1d 8b b4 ;
027e: 30 0d ; SEQUENCE [13]
0280: 06 09 2a 86 48 86 f7 0d 01 01 0b ; OBJECT ID [9] 1.2.840.113549.1.1.11 (SHA256withRSA)
028b: 05 00 ; NULL
028d: 03 82 01 ; BIT STRING [257]
0290: 01 00 3e 2b 5f 32 aa f0 f7 52 2b ba f3 bb 07 ee ;
...
0390: 6d 94 ;
-------------
Commit messages:
- Add ASN1 Formatter to work with HexPrinter
Changes: https://git.openjdk.java.net/jdk/pull/268/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=268&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8252523
Stats: 737 lines in 5 files changed: 727 ins; 1 del; 9 mod
Patch: https://git.openjdk.java.net/jdk/pull/268.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/268/head:pull/268
PR: https://git.openjdk.java.net/jdk/pull/268
More information about the core-libs-dev
mailing list