Monday, December 21, 2020

OSS ASN.1/Java BERTool TLV Utility

 There has always been a need to present ASN.1 BER/CER/DER (Basic, Canonical, and Distinguished Encoding Rules) binary messages in human readable format to more easily examine their correctness and pinpoint the location of errors in problematic messages without requiring access to their schemas.


To satisfy this need, earlier versions of the OSS ASN.1/Java Tools included a native osstlv utility.  While the utility is quite useful, there are limitations resulting from it being written in C. The utility can not be invoked programmatically from a Java application. Also, as a native utility, it was not always possible to use it on the same machine/platform where the problematic BER messages were detected. These limitations failed to meet the basic requirement of platform-independent Java applications: the ability  to run on any platform. 


Beginning with release 8.3 of the ASN.1/Java Tools, a new platform-independent osstlv utility is included in the Tools. It is written in Java and is available as a self-contained executable jar that can be run as a standalone application. The utility can also be invoked programmatically using the API (BERTool.dumpTLV()). This new utility supports a new ExtendedDump format, as well as the hexadecimal, decomposed, and syntax TLV formats already supported in the old native osstlv utility. The new API enables you to develop custom formats to suit your needs.


The new Extended Dump TLV format is similar to the hexadecimal memory dump. It includes three fields separated by colons: file offset, encoding in hexadecimal, and encoding in ASCII. The Tag-Length and Contents parts are printed on separate lines. The ASCII representation for the Tag-Length part contains the character 'C' for constructed encodings and 'P' for primitive, as well as formatted tag and length.


Examples:

Definite length encoding:

0000 : 30 2A                               : C [UNIVERSAL 16] 42

0002 : 30 06                               : C [UNIVERSAL 16] 6

0004 : 02 01                               : P [UNIVERSAL 2] 1

0006 : 0A                                  : .

0007 : 01 01                               : P [UNIVERSAL 1] 1

0009 : FF                                  : .

0010 : 30 00                               : C [UNIVERSAL 16] 0

0012 : 30 1E                               : C [UNIVERSAL 16] 30

0014 : 09 09                               : P [UNIVERSAL 9] 9

0016 : 80 35 09 54 0A 2B E5 20 DF          : .5.T.+. .

0025 : 17 11                               : P [UNIVERSAL 23] 17

0027 : 39 32 30 34 32 33 31 37 34 33 33 34 : 920423174334

0039 : 2D 30 37 30 30                      : -0700

 



Indefinite length encoding:

0000 : 30 80                               : C [UNIVERSAL 16] indef

0002 : 30 80                               : C [UNIVERSAL 16] indef

0004 : 02 01                               : P [UNIVERSAL 2] 1

0006 : 0A                                  : .

0007 : 01 01                               : P [UNIVERSAL 1] 1

0009 : FF                                  : .

0010 : 00 00                               : END-OF-CONTENTS

0012 : 30 80                               : C [UNIVERSAL 16] indef

0014 : 00 00                               : END-OF-CONTENTS

0016 : 30 80                               : C [UNIVERSAL 16] indef

0018 : 09 09                               : P [UNIVERSAL 9] 9

0020 : 80 35 09 54 0A 2B E5 20 DF          : .5.T.+. .

0029 : 17 11                               : P [UNIVERSAL 23] 17

0031 : 39 32 30 34 32 33 31 37 34 33 33 34 : 920423174334

0043 : 2D 30 37 30 30                      : -0700

0048 : 00 00                               : END-OF-CONTENTS

0050 : 00 00                               : END-OF-CONTENTS

 

Detailed information about the new ossltv utility class can be found in the ASN.1/Java Tools online documentation. Download a trial of the Tools and evaluate for yourself the usefulness of this utility.


No comments:

Post a Comment