Class DERDecoder

java.lang.Object
org.wildfly.security.asn1.DERDecoder
All Implemented Interfaces:
ASN1Decoder

public class DERDecoder extends Object implements ASN1Decoder
A class used to decode ASN.1 values that have been encoded using the Distinguished Encoding Rules (DER).
Author:
Farah Juma
  • Constructor Details

    • DERDecoder

      public DERDecoder(byte[] buf)
      Create a DER decoder that will decode values from the given byte array.
      Parameters:
      buf - the byte array to decode
    • DERDecoder

      public DERDecoder(byte[] buf, int offset, int length)
      Create a DER decoder that will decode values from the given byte array.
      Parameters:
      buf - the byte array to decode
      offset - the offset in the byte array of the first byte to read
      length - the maximum number of bytes to read from the byte array
  • Method Details

    • startSequence

      public void startSequence() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Start decoding an ASN.1 sequence. All subsequent decode operations will decode elements from this sequence until ASN1Decoder.endSequence() is called.
      Specified by:
      startSequence in interface ASN1Decoder
      Throws:
      ASN1Exception - if the next element is not a sequence
    • endSequence

      public void endSequence() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Advance to the end of a sequence. If there are any elements in the sequence that have not yet been decoded, they will be discarded.
      Specified by:
      endSequence in interface ASN1Decoder
      Throws:
      ASN1Exception - if an error occurs while advancing to the end of the sequence
    • startSet

      public void startSet() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Start decoding an ASN.1 set. All subsequent decode operations will decode elements from this set until ASN1Decoder.endSet() is called.
      Specified by:
      startSet in interface ASN1Decoder
      Throws:
      ASN1Exception - if the next element is not a set
    • endSet

      public void endSet() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Advance to the end of a set. If there are any elements in the set that have not yet been decoded, they will be discarded.
      Specified by:
      endSet in interface ASN1Decoder
      Throws:
      ASN1Exception - if an error occurs while advancing to the end of the set
    • startSetOf

      public void startSetOf() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Start decoding an ASN.1 "set of" element. All subsequent decode operations will decode elements from this set until ASN1Decoder.endSetOf() is called.
      Specified by:
      startSetOf in interface ASN1Decoder
      Throws:
      ASN1Exception - if the next element is not a set
    • endSetOf

      public void endSetOf() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Advance to the end of a "set of" element. If there are any elements in the set that have not yet been decoded, they will be discarded.
      Specified by:
      endSetOf in interface ASN1Decoder
      Throws:
      ASN1Exception - if an error occurs while advancing to the end of the set
    • startExplicit

      public void startExplicit(int number) throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Start decoding an ASN.1 explicitly tagged element. All subsequent decode operations will decode elements from this explicitly tagged element until ASN1Decoder.endExplicit() is called.
      Specified by:
      startExplicit in interface ASN1Decoder
      Parameters:
      number - the tag number for the explicit, context-specific tag
      Throws:
      ASN1Exception - if the next element's type does not match the given type
    • startExplicit

      public void startExplicit(int clazz, int number) throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Start decoding an ASN.1 explicitly tagged element. All subsequent decode operations will decode elements from this explicitly tagged element until ASN1Decoder.endExplicit() is called.
      Specified by:
      startExplicit in interface ASN1Decoder
      Parameters:
      clazz - the class for the explicit tag
      number - the tag number for the explicit tag
      Throws:
      ASN1Exception - if the next element's type does not match the given type
    • endExplicit

      public void endExplicit() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Advance to the end of an explicitly tagged element. If there are any elements within the explicitly tagged element that have not yet been decoded, they will be discarded.
      Specified by:
      endExplicit in interface ASN1Decoder
      Throws:
      ASN1Exception - if an error occurs while advancing to the end of the explicitly tagged element
    • decodeOctetString

      public byte[] decodeOctetString() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as an octet string.
      Specified by:
      decodeOctetString in interface ASN1Decoder
      Returns:
      the decoded octet string, as a byte array
      Throws:
      ASN1Exception - if the next element is not an octet string
    • decodeOctetStringAsString

      public String decodeOctetStringAsString() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as an octet string.
      Specified by:
      decodeOctetStringAsString in interface ASN1Decoder
      Returns:
      the decoded octet string, as a UTF-8 string
      Throws:
      ASN1Exception - if the next element is not an octet string
    • decodeOctetStringAsString

      public String decodeOctetStringAsString(String charSet) throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as an octet string.
      Specified by:
      decodeOctetStringAsString in interface ASN1Decoder
      Parameters:
      charSet - the character set to use when decoding
      Returns:
      the decoded octet string
      Throws:
      ASN1Exception - if the next element is not an octet string
    • decodeIA5String

      public String decodeIA5String() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as an IA5 string.
      Specified by:
      decodeIA5String in interface ASN1Decoder
      Returns:
      the decoded IA5 string
      Throws:
      ASN1Exception - if the next element is not an IA5 string
    • decodeIA5StringAsBytes

      public byte[] decodeIA5StringAsBytes() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as an IA5 string.
      Specified by:
      decodeIA5StringAsBytes in interface ASN1Decoder
      Returns:
      the decoded IA5 string, as a byte array
      Throws:
      ASN1Exception - if the next element is not an IA5 string
    • decodeBitString

      public byte[] decodeBitString() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as a bit string.
      Specified by:
      decodeBitString in interface ASN1Decoder
      Returns:
      the decoded bit string as a byte array, with any unused bits removed
      Throws:
      ASN1Exception - if the next element is not a bit string
    • decodeBitStringAsInteger

      public BigInteger decodeBitStringAsInteger()
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as a bit string where the value is a ASN.1 INTEGER.
      Specified by:
      decodeBitStringAsInteger in interface ASN1Decoder
      Returns:
      a BigInteger decoded from the bit string
    • decodeBitStringAsString

      public String decodeBitStringAsString() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as a bit string.
      Specified by:
      decodeBitStringAsString in interface ASN1Decoder
      Returns:
      the decoded bit string as a binary string, with any unused bits removed
      Throws:
      ASN1Exception - if the next element is not a bit string
    • decodePrintableString

      public String decodePrintableString() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as a PrintableString.
      Specified by:
      decodePrintableString in interface ASN1Decoder
      Returns:
      the decoded PrintableString as a string
      Throws:
      ASN1Exception - if the next element is not a PrintableString
    • decodePrintableStringAsBytes

      public byte[] decodePrintableStringAsBytes() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as a PrintableString.
      Specified by:
      decodePrintableStringAsBytes in interface ASN1Decoder
      Returns:
      the decoded PrintableString as a byte array
      Throws:
      ASN1Exception - if the next element is not a PrintableString
    • decodeUniversalString

      public String decodeUniversalString() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as an UniversalString.
      Specified by:
      decodeUniversalString in interface ASN1Decoder
      Returns:
      the decoded UniversalString as a string
      Throws:
      ASN1Exception - if the next element is not a UniversalString
    • decodeUniversalStringAsBytes

      public byte[] decodeUniversalStringAsBytes() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as an UniversalString.
      Specified by:
      decodeUniversalStringAsBytes in interface ASN1Decoder
      Returns:
      the decoded UniversalString as a byte array
      Throws:
      ASN1Exception - if the next element is not a UniversalString
    • decodeUtf8String

      public String decodeUtf8String() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as an UTF8String.
      Specified by:
      decodeUtf8String in interface ASN1Decoder
      Returns:
      the decoded UTF8String as a string
      Throws:
      ASN1Exception - if the next element is not a UTF8String
    • decodeUtf8StringAsBytes

      public byte[] decodeUtf8StringAsBytes() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as an UTF8String.
      Specified by:
      decodeUtf8StringAsBytes in interface ASN1Decoder
      Returns:
      the decoded UTF8String as a byte array
      Throws:
      ASN1Exception - if the next element is not a UTF8String
    • decodeBMPString

      public String decodeBMPString() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as an BMPString.
      Specified by:
      decodeBMPString in interface ASN1Decoder
      Returns:
      the decoded BMPString as a string
      Throws:
      ASN1Exception - if the next element is not a BMPString
    • decodeBMPStringAsBytes

      public byte[] decodeBMPStringAsBytes() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as an BMPString.
      Specified by:
      decodeBMPStringAsBytes in interface ASN1Decoder
      Returns:
      the decoded BMPString as a byte array
      Throws:
      ASN1Exception - if the next element is not a BMPString
    • decodeObjectIdentifier

      public String decodeObjectIdentifier() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as an object identifier.
      Specified by:
      decodeObjectIdentifier in interface ASN1Decoder
      Returns:
      the object identifier as a string
      Throws:
      ASN1Exception - if the next element is not a bit string
    • decodeInteger

      public BigInteger decodeInteger() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as an integer.
      Specified by:
      decodeInteger in interface ASN1Decoder
      Returns:
      an integer decoded from the next element
      Throws:
      ASN1Exception - if the next element is not an integer
    • decodeNull

      public void decodeNull() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as a null element.
      Specified by:
      decodeNull in interface ASN1Decoder
      Throws:
      ASN1Exception - if the next element is not null
    • decodeImplicit

      public void decodeImplicit(int number)
      Description copied from interface: ASN1Decoder
      Indicate that the next ASN.1 element has the given implicit, context-specific tag.
      Specified by:
      decodeImplicit in interface ASN1Decoder
      Parameters:
      number - the tag number for the implicit tag
    • decodeImplicit

      public void decodeImplicit(int clazz, int number)
      Description copied from interface: ASN1Decoder
      Indicate that the next ASN.1 element has the given implicit tag.
      Specified by:
      decodeImplicit in interface ASN1Decoder
      Parameters:
      clazz - the class for the implicit tag
      number - the tag number for the implicit tag
    • decodeBoolean

      public boolean decodeBoolean() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Decode the next ASN.1 element as a boolean value.
      Specified by:
      decodeBoolean in interface ASN1Decoder
      Returns:
      the decoded boolean value
      Throws:
      ASN1Exception - if the next element is not a boolean value
    • isNextType

      public boolean isNextType(int clazz, int number, boolean isConstructed)
      Description copied from interface: ASN1Decoder
      Determine if the type of the next ASN.1 element matches the given type without actually decoding the next element. This method can be used to determine if an optional ASN.1 value has been included in the encoding or not.
      Specified by:
      isNextType in interface ASN1Decoder
      Parameters:
      clazz - the tag class to match against
      number - the tag number to match against
      isConstructed - whether or not the next element should be constructed
      Returns:
      true if the type of the next ASN.1 element matches the given type and false otherwise
    • peekType

      public int peekType() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Retrieve the type of the next ASN.1 element without actually decoding the next element.
      Specified by:
      peekType in interface ASN1Decoder
      Returns:
      the type of the next ASN.1 element
      Throws:
      ASN1Exception - if an error occurs while determining the type of the next element
    • skipElement

      public void skipElement() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Skip over the next ASN.1 element.
      Specified by:
      skipElement in interface ASN1Decoder
      Throws:
      ASN1Exception - if the next element cannot be skipped
    • hasNextElement

      public boolean hasNextElement()
      Description copied from interface: ASN1Decoder
      Determine if there is at least one more ASN.1 element that can be read. If called while decoding a constructed element (i.e., while decoding a sequence, set, or explicitly tagged element), this method will return whether the constructed element has at least one more ASN.1 element that can be read. Otherwise, this method will return whether at least one more ASN.1 element can be read from the input stream.
      Specified by:
      hasNextElement in interface ASN1Decoder
      Returns:
      true if there is at least one more ASN.1 element that can be read and false otherwise
    • drainElementValue

      public byte[] drainElementValue() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Drain the value bytes from the next ASN.1 element.
      Specified by:
      drainElementValue in interface ASN1Decoder
      Returns:
      the value bytes from the next ASN.1 element, as a byte array
      Throws:
      ASN1Exception - if the value bytes from the next ASN.1 element cannot be obtained
    • drainElement

      public byte[] drainElement() throws ASN1Exception
      Description copied from interface: ASN1Decoder
      Drain all of the bytes from the next ASN.1 element.
      Specified by:
      drainElement in interface ASN1Decoder
      Returns:
      all of the bytes from the next ASN.1 element
      Throws:
      ASN1Exception - if the bytes from the next ASN.1 element cannot be obtained
    • drain

      public byte[] drain()
      Description copied from interface: ASN1Decoder
      Drain all of the remaining bytes from the input stream.
      Specified by:
      drain in interface ASN1Decoder
      Returns:
      all of the remaining bytes from the input stream
    • decodeObjectIdentifierAsKeyAlgorithm

      public String decodeObjectIdentifierAsKeyAlgorithm()
      Decodes an OID and resolve its corresponding key algorithm.
      Returns:
      the key algorithm associated with the OID or null if no algorithm could be resolved