Class BerTlvUtil


  • public class BerTlvUtil
    extends java.lang.Object
    Helper class to decode BER-TLV encoded data.

    This class offers a tradeoff between complexity and efficiency adapted to the TLV structures encountered in smart card data, it has the following limitations:

    • The tag ID fields must not exceed 3 bytes.
    • The length fields must not exceed 3 bytes.
    • Tags present several times in the same TLV structure require special attention (see parseSimple(byte[], boolean)).
    Since:
    2.0.0
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static boolean isConstructed​(int tagId)
      Indicates if the provided tag ID corresponds to a constructed tag.
      static java.util.Map<java.lang.Integer,​java.util.List<byte[]>> parse​(byte[] tlvStructure, boolean primitiveOnly)
      Parse the provided TLV structure and place all or only primitive tags found in a map.
      static java.util.Map<java.lang.Integer,​byte[]> parseSimple​(byte[] tlvStructure, boolean primitiveOnly)
      Parse the provided TLV structure and place all or only primitive tags found in a map.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • parseSimple

        public static java.util.Map<java.lang.Integer,​byte[]> parseSimple​(byte[] tlvStructure,
                                                                                boolean primitiveOnly)
        Parse the provided TLV structure and place all or only primitive tags found in a map. The key is an integer representing the tag ID (e.g. 0x84 for the DF name tag), the value is the tag value as an array of bytes.

        Note:This method of extracting tags is deliberately simplified.
        If the provided TLV structure contains several identical tags then only one will be reported in the returned map.
        To overcome this limitation it is recommended to re-parse the constructed tags known to contain other tags.

        Parameters:
        tlvStructure - The input TLV structure.
        primitiveOnly - True if only primitives tags are to be placed in the map.
        Returns:
        A not null map.
        Throws:
        java.lang.IllegalArgumentException - If the parsing of the provided structure failed.
        Since:
        2.0.0
      • parse

        public static java.util.Map<java.lang.Integer,​java.util.List<byte[]>> parse​(byte[] tlvStructure,
                                                                                          boolean primitiveOnly)
        Parse the provided TLV structure and place all or only primitive tags found in a map. The key is an integer representing the tag ID (e.g. 0x84 for the DF name tag), the value is the list of tag values as a list of arrays of bytes.
        Parameters:
        tlvStructure - The input TLV structure.
        primitiveOnly - True if only primitives tags are to be placed in the map.
        Returns:
        A not null map.
        Throws:
        java.lang.IllegalArgumentException - If the parsing of the provided structure failed.
        Since:
        2.1.0
      • isConstructed

        public static boolean isConstructed​(int tagId)
        Indicates if the provided tag ID corresponds to a constructed tag.
        Parameters:
        tagId - A positive int less than FFFFFFh.
        Returns:
        True if the tag is constructed.
        Throws:
        java.lang.IllegalArgumentException - If the tag ID is out of range.
        Since:
        2.0.0