Class BERTag

  • Direct Known Subclasses:
    ConstructedBERTag, PrimitiveBERTag

    public abstract class BERTag
    extends Object
    The abstract BERTag class encapsulates a BER TLV tag. The rules on the allowed encoding of the Tag field are based on the ASN.1 BER encoding rules of ISO/IEC 8825-1:2002.

    The BERTag class and the subclasses ConstructedBERTag and PrimitiveBERTag, also provide static methods to parse or edit a BER Tag structure representation in a byte array.

    Since:
    2.2.2
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected BERTag()
      Constructor creates an empty BERTLV Tag object capable of encapsulating a BER TLV Tag.
    • Method Summary

      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      boolean equals​(Object otherTag)
      Compares two Objects for equality.
      boolean equals​(BERTag otherTag)
      Compares this BER Tag with another.
      static BERTag getInstance​(byte[] bArray, short bOff)
      Create a BERTLV Tag object from the binary representation in the byte array.
      abstract void init​(byte[] bArray, short bOff)
      Abstract init method.
      boolean isConstructed()
      Used to query if this BER tag structure is constructed
      static boolean isConstructed​(byte[] berTagArray, short bOff)
      Returns the constructed flag part of the BER Tag from its representation in the specified byte array
      byte size()
      Returns the byte size required to represent this tag structure
      static byte size​(byte[] berTagArray, short bOff)
      Returns the byte size required to represent the BER Tag from its representation in the specified byte array
      byte tagClass()
      Returns the tag class part of this BER Tag structure
      static byte tagClass​(byte[] berTagArray, short bOff)
      Returns the tag class part of the BER Tag from its representation in the specified byte array
      short tagNumber()
      Returns the tag number part of this BER Tag structure
      static short tagNumber​(byte[] berTagArray, short bOff)
      Returns the tag number part of the BER Tag from its representation in the specified byte array
      short toBytes​(byte[] outBuf, short bOffset)
      Writes the representation of this BER tag structure to the byte array
      static short toBytes​(short tagClass, boolean isConstructed, short tagNumber, byte[] outArray, short bOff)
      Writes the BER Tag bytes representing the specified tag class, constructed flag and the tag number as a BER Tag representation in the specified byte array
      static boolean verifyFormat​(byte[] berTagArray, short bOff)
      Checks if the input data is a well-formed BER Tag representation
    • Field Detail

      • BER_TAG_CLASS_MASK_UNIVERSAL

        public static final byte BER_TAG_CLASS_MASK_UNIVERSAL
        Constant for BER Tag Class Universal
        See Also:
        Constant Field Values
      • BER_TAG_CLASS_MASK_APPLICATION

        public static final byte BER_TAG_CLASS_MASK_APPLICATION
        Constant for BER Tag Class Application
        See Also:
        Constant Field Values
      • BER_TAG_CLASS_MASK_CONTEXT_SPECIFIC

        public static final byte BER_TAG_CLASS_MASK_CONTEXT_SPECIFIC
        Constant for BER Tag Class Context-Specific
        See Also:
        Constant Field Values
      • BER_TAG_CLASS_MASK_PRIVATE

        public static final byte BER_TAG_CLASS_MASK_PRIVATE
        Constant for BER Tag Class Private
        See Also:
        Constant Field Values
      • BER_TAG_TYPE_CONSTRUCTED

        public static final boolean BER_TAG_TYPE_CONSTRUCTED
        Constant for constructed BER Tag type
        See Also:
        Constant Field Values
      • BER_TAG_TYPE_PRIMITIVE

        public static final boolean BER_TAG_TYPE_PRIMITIVE
        Constant for primitive BER Tag type
        See Also:
        Constant Field Values
    • Constructor Detail

      • BERTag

        protected BERTag()
        Constructor creates an empty BERTLV Tag object capable of encapsulating a BER TLV Tag. All implementations must support at least 3 byte Tags which can encode tag numbers up to 0x3FFF.
    • Method Detail

      • init

        public abstract void init​(byte[] bArray,
                                  short bOff)
                           throws TLVException
        Abstract init method. (Re-)Initialize this BERTag object from the binary representation in the byte array. All implementations must support tag numbers up to 0x3FFF.
        Parameters:
        bArray - the byte array containing the binary representation
        bOff - the offset within bArray where the tag binary begins
        Throws:
        ArrayIndexOutOfBoundsException - if accessing the input array would cause access of data outside array bounds, or if the array offset parameter is negative
        NullPointerException - if bArray is null
        TLVException - with the following reason codes:
        • TLVException.ILLEGAL_SIZE if the tag number requested is larger than the supported maximum size
        • TLVException.MALFORMED_TAG if tag representation in the byte array is malformed
      • getInstance

        public static BERTag getInstance​(byte[] bArray,
                                         short bOff)
                                  throws TLVException
        Create a BERTLV Tag object from the binary representation in the byte array. All implementations must support tag numbers up to 0x3FFF. Note that the returned BERTag must be cast to the correct subclass: PrimitiveBERTag or ConstructedBERTag to access their specialized API.
        Parameters:
        bArray - the byte array containing the binary representation
        bOff - the offset within bArray where the tag binary begins
        Returns:
        the BERTag object instance
        Throws:
        ArrayIndexOutOfBoundsException - if accessing the input array would cause access of data outside array bounds, or if the array offset parameter is negative
        NullPointerException - if bArray is null
        TLVException - with the following reason codes:
        • TLVException.ILLEGAL_SIZE if the tag number requested is larger than the supported maximum size
        • TLVException.MALFORMED_TAG if tag representation in the byte array is malformed.
      • size

        public byte size()
                  throws TLVException
        Returns the byte size required to represent this tag structure
        Returns:
        size of BER Tag in bytes
        Throws:
        TLVException - with the following reason codes:
        • TLVException.TAG_SIZE_GREATER_THAN_127 if the size of the BER Tag is > 127.
        • TLVException.EMPTY_TAG if the BER Tag is empty.
      • toBytes

        public short toBytes​(byte[] outBuf,
                             short bOffset)
                      throws TLVException
        Writes the representation of this BER tag structure to the byte array
        Parameters:
        outBuf - the byteArray where the BER tag is written
        bOffset - offset within outBuf where BER tag value starts
        Returns:
        size of BER Tag in bytes
        Throws:
        ArrayIndexOutOfBoundsException - if accessing the output array would cause access of data outside array bounds, or if the array offset parameter is negative
        NullPointerException - if outBuf is null
        TLVException - with the following reason codes:
        • TLVException.EMPTY_TAG if the BER Tag is empty.
      • tagNumber

        public short tagNumber()
                        throws TLVException
        Returns the tag number part of this BER Tag structure
        Returns:
        the BER Tag tag number
        Throws:
        TLVException - with the following reason codes:
        • TLVException.TAG_NUMBER_GREATER_THAN_32767 if the tag number is > 32767.
        • TLVException.EMPTY_TAG if the BER Tag is empty.
      • isConstructed

        public boolean isConstructed()
        Used to query if this BER tag structure is constructed
        Returns:
        true if constructed, false if primitive
        Throws:
        TLVException - with the following reason codes:
        • TLVException.EMPTY_TAG if the BER Tag is empty.
      • tagClass

        public byte tagClass()
        Returns the tag class part of this BER Tag structure
        Returns:
        the BER Tag class. One of the BER_TAG_CLASS_MASK_*.. constants defined above, for example BER_TAG_CLASS_MASK_APPLICATION.
        Throws:
        TLVException - with the following reason codes:
        • TLVException.EMPTY_TAG if the BER Tag is empty.
      • equals

        public boolean equals​(BERTag otherTag)
        Compares this BER Tag with another. Note that this method does not throw exceptions. If the parameter otherTag is null, the method returns false
        Parameters:
        otherTag - the reference BERTag with which to compare.
        Returns:
        true if the tag data encapsulated are equal, false otherwise
      • equals

        public boolean equals​(Object otherTag)
        Description copied from class: Object
        Compares two Objects for equality.

        The equals method implements an equivalence relation:

        • It is reflexive: for any reference value x, x.equals(x) should return true.
        • It is symmetric: for any reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
        • It is transitive: for any reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
        • It is consistent: for any reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false.
        • For any reference value x, x.equals(null) should return false.

        The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true).

        Overrides:
        equals in class Object
        Parameters:
        otherTag - the reference object with which to compare.
        Returns:
        true if this object is the same as the obj argument; false otherwise.
      • toBytes

        public static short toBytes​(short tagClass,
                                    boolean isConstructed,
                                    short tagNumber,
                                    byte[] outArray,
                                    short bOff)
        Writes the BER Tag bytes representing the specified tag class, constructed flag and the tag number as a BER Tag representation in the specified byte array
        Parameters:
        tagClass - encodes the tag class. Valid codes are the BER_TAG_CLASS_MASK_* constants defined above, for example BER_TAG_CLASS_MASK_APPLICATION.
        isConstructed - true if the tag is constructed, false if primitive
        tagNumber - is the tag number.
        outArray - output byte array
        bOff - offset within byte array containing first byte
        Returns:
        size of BER Tag output bytes
        Throws:
        ArrayIndexOutOfBoundsException - if accessing the output array would cause access of data outside array bounds, or if the array offset parameter is negative
        NullPointerException - if outArray is null
        TLVException - with the following reason codes:
        • TLVException.ILLEGAL_SIZE if the tag size is larger than the supported maximum size or 32767
        • TLVException.INVALID_PARAM if tagClass parameter is invalid or if the tagNumber parameter is negative
      • size

        public static byte size​(byte[] berTagArray,
                                short bOff)
                         throws TLVException
        Returns the byte size required to represent the BER Tag from its representation in the specified byte array
        Parameters:
        berTagArray - input byte array containing the BER Tag representation
        bOff - offset within byte array containing first byte
        Returns:
        size of BER Tag in bytes
        Throws:
        ArrayIndexOutOfBoundsException - if accessing the input array would cause access of data outside array bounds, or if the array offset parameter is negative
        NullPointerException - if berTagArray is null
        TLVException - with the following reason codes:
        • TLVException.ILLEGAL_SIZE if the size of the BER Tag is greater than the maximum Tag size supported
        • TLVException.TAG_SIZE_GREATER_THAN_127 if the size of the BER Tag is > 127.
        • TLVException.MALFORMED_TAG if tag representation in the byte array is malformed
      • tagNumber

        public static short tagNumber​(byte[] berTagArray,
                                      short bOff)
                               throws TLVException
        Returns the tag number part of the BER Tag from its representation in the specified byte array
        Parameters:
        berTagArray - input byte array
        bOff - offset within byte array containing first byte
        Returns:
        the BER Tag tag number
        Throws:
        ArrayIndexOutOfBoundsException - if accessing the input array would cause access of data outside array bounds, or if the array offset parameter is negative
        NullPointerException - if berTagArray is null
        TLVException - with the following reason codes:
        • TLVException.ILLEGAL_SIZE if the size of the BER Tag is greater than the maximum Tag size supported
        • TLVException.TAG_NUMBER_GREATER_THAN_32767 if the tag number is > 32767.
        • TLVException.MALFORMED_TAG if tag representation in the byte array is malformed.
      • isConstructed

        public static boolean isConstructed​(byte[] berTagArray,
                                            short bOff)
        Returns the constructed flag part of the BER Tag from its representation in the specified byte array
        Parameters:
        berTagArray - input byte array
        bOff - offset within byte array containing first byte
        Returns:
        true if constructed, false if primitive
        Throws:
        ArrayIndexOutOfBoundsException - if accessing the input array would cause access of data outside array bounds, or if the array offset parameter is negative
        NullPointerException - if berTagArray is null
        TLVException - with the following reason codes:
        • TLVException.MALFORMED_TAG if tag representation in the byte array is malformed.
      • tagClass

        public static byte tagClass​(byte[] berTagArray,
                                    short bOff)
        Returns the tag class part of the BER Tag from its representation in the specified byte array
        Parameters:
        berTagArray - input byte array
        bOff - offset within byte array containing first byte
        Returns:
        the BER Tag class. One of the BER_TAG_CLASS_MASK_*.. constants defined above, for example BER_TAG_CLASS_MASK_APPLICATION.
        Throws:
        ArrayIndexOutOfBoundsException - if accessing the input array would cause access of data outside array bounds, or if the array offset parameter is negative
        NullPointerException - if berTagArray is null
        TLVException - with the following reason codes:
        • TLVException.MALFORMED_TAG if tag representation in the byte array is malformed.
      • verifyFormat

        public static boolean verifyFormat​(byte[] berTagArray,
                                           short bOff)
        Checks if the input data is a well-formed BER Tag representation
        Parameters:
        berTagArray - input byte array
        bOff - offset within byte array containing first byte
        Returns:
        true if input data is a well formed BER Tag structure of tag size equal to or less than the supported maximum size, false otherwise
        Throws:
        ArrayIndexOutOfBoundsException - if accessing the input array would cause access of data outside array bounds, or if the array offset parameter is negative
        NullPointerException - if berTagArray is null