Class DerValue


  • public class DerValue
    extends java.lang.Object
    Represents a single DER-encoded value. DER encoding rules are a subset of the "Basic" Encoding Rules (BER), but they only support a single way ("Definite" encoding) to encode any given value.

    All DER-encoded data are triples {type, length, data}. This class represents such tagged values as they have been read (or constructed), and provides structured access to the encoded data.

    At this time, this class supports only a subset of the types of DER data encodings which are defined. That subset is sufficient for parsing most X.509 certificates, and working with selected additional formats (such as PKCS #10 certificate requests, and some kinds of PKCS #7 data).

    Version:
    1.43
    Author:
    David Brownell, Amit Kapoor, Hemma Prafullchandra
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected netscape.security.util.DerInputBuffer buffer  
      DerInputStream data
      The DER-encoded data of the value.
      byte tag
      The DER tag of the value; one of the tag_ constants.
      static byte TAG_APPLICATION  
      static byte tag_BitString
      Tag value indicating an ASN.1 "BIT STRING" value.
      static byte tag_BMPString
      Tag value indicating an ASN.1 "BMPString" value.
      static byte tag_Boolean
      Tag value indicating an ASN.1 "BOOLEAN" value.
      static byte TAG_CONTEXT  
      static byte tag_Enumerated
      Tag value including an ASN.1 "ENUMERATED" value
      static byte tag_GeneralizedTime
      Tag value indicating an ASN.1 "GeneralizedTime" value.
      static byte tag_GeneralString
      Tag value indicating an ASN.1 "GeneralString" value.
      static byte tag_IA5String
      Tag value including an ASCII string
      static byte tag_Integer
      Tag value indicating an ASN.1 "INTEGER" value.
      static byte tag_Null
      Tag value indicating an ASN.1 "NULL" value.
      static byte tag_ObjectId
      Tag value indicating an ASN.1 "OBJECT IDENTIFIER" value.
      static byte tag_OctetString
      Tag value indicating an ASN.1 "OCTET STRING" value.
      static byte tag_PrintableString
      Tag value including a "printable" string
      static byte TAG_PRIVATE  
      static byte tag_Sequence
      Tag value indicating an ASN.1 "SEQUENCE" (zero to N elements, order is significant).
      static byte tag_SequenceOf
      Tag value indicating an ASN.1 "SEQUENCE OF" (one to N elements, order is significant).
      static byte tag_Set
      Tag value indicating an ASN.1 "SET" (zero to N members, order does not matter).
      static byte tag_SetOf
      Tag value indicating an ASN.1 "SET OF" (one to N members, order does not matter).
      static byte tag_T61String
      Tag value including a "teletype" string
      static byte TAG_UNIVERSAL
      The tag class types
      static byte tag_UniversalString
      Tag value indicating an ASN.1 "UniversalString" value.
      static byte tag_UtcTime
      Tag value indicating an ASN.1 "UTCTime" value.
      static byte tag_UTF8String
      Tag value indicating an ASN.1 "UTF8String" value.
      static byte tag_VisibleString  
      static byte[] tags_DirectoryString  
    • Constructor Summary

      Constructors 
      Constructor Description
      DerValue​(byte[] buf)
      Get an ASN.1/DER encoded datum from a buffer.
      DerValue​(byte[] buf, int offset, int len)
      Get an ASN.1/DER encoded datum from part of a buffer.
      DerValue​(byte tag, byte[] data)
      Creates a DerValue from a tag and some DER-encoded data.
      DerValue​(byte tag, byte[] data, int offset, int length)
      Creates a DerValue from a tag and some DER-encoded data.
      DerValue​(java.io.InputStream in)
      Get an ASN1/DER encoded datum from an input stream.
      DerValue​(java.lang.String value)
      Creates a DER value from a string using a generic way of determining the proper tag for the string.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      static byte createTag​(byte tagClass, boolean form, byte val)
      Create the tag of the attribute.
      void encode​(DerOutputStream out)
      Encode an ASN1/DER encoded datum onto a DER output stream.
      boolean equals​(java.lang.Object other)
      Returns true iff the other object is a DER value which is bitwise equal to this one.
      boolean equals​(DerValue other)
      Bitwise equality comparison.
      java.lang.String getASN1CharString()  
      java.lang.String getAsString()
      Returns the name component as a Java string, regardless of its encoding restrictions (ASCII, T61, Printable, etc).
      byte[] getBitString()
      Returns an ASN.1 BIT STRING value.
      byte[] getBitString​(boolean tagImplicit)
      Returns an ASN.1 BIT STRING value, with the tag assumed implicit based on the parameter.
      java.lang.String getBMPString()  
      boolean getBoolean()
      Returns an ASN.1 BOOLEAN
      java.lang.String getDirectoryString()  
      int getEnumerated()
      Returns an ASN.1 unsigned integer value of enumerated value.
      java.lang.String getIA5String()
      Returns an ASN.1 IA5 (ASCII) STRING value
      BigInt getInteger()
      Returns an ASN.1 unsigned INTEGER value.
      BigInt getInteger​(boolean tagImplicit)
      Returns an ASN.1 unsigned INTEGER value, the parameter determining if the tag is implicit.
      byte[] getOctetString()
      Returns an ASN.1 OCTET STRING
      ObjectIdentifier getOID()
      Returns an ASN.1 OBJECT IDENTIFIER.
      java.lang.String getPrintableString()
      Returns an ASN.1 STRING value
      java.lang.String getT61String()
      Returns an ASN.1 T61 (Teletype) STRING value
      BitArray getUnalignedBitString()
      Returns an ASN.1 BIT STRING value that need not be byte-aligned.
      BitArray getUnalignedBitString​(boolean tagImplicit)
      Returns an ASN.1 BIT STRING value, with the tag assumed implicit based on the parameter.
      java.lang.String getUniversalString()  
      java.lang.String getUTF8String()  
      int hashCode()  
      boolean isConstructed()
      Returns true iff the CONSTRUCTED bit is set in the type tag.
      boolean isContextSpecific()
      Returns true iff the CONTEXT SPECIFIC bit is set in the type tag.
      boolean isContextSpecific​(byte cntxtTag)
      Returns true iff the CONTEXT SPECIFIC TAG matches the passed tag.
      int length()
      Get the length of the encoded value.
      void resetTag​(byte tag)
      Set the tag of the attribute.
      byte[] toByteArray()
      Returns a DER-encoded value, such that if it's passed to the DerValue constructor, a value equivalent to "this" is returned.
      DerInputStream toDerInputStream()
      For "set" and "sequence" types, this function may be used to return a DER stream of the members of the set or sequence.
      java.lang.String toString()
      Returns a printable representation of the value.
      • Methods inherited from class java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    • Field Detail

      • TAG_UNIVERSAL

        public static final byte TAG_UNIVERSAL
        The tag class types
        See Also:
        Constant Field Values
      • tag

        public byte tag
        The DER tag of the value; one of the tag_ constants.
      • buffer

        protected netscape.security.util.DerInputBuffer buffer
      • tag_Boolean

        public static final byte tag_Boolean
        Tag value indicating an ASN.1 "BOOLEAN" value.
        See Also:
        Constant Field Values
      • tag_Integer

        public static final byte tag_Integer
        Tag value indicating an ASN.1 "INTEGER" value.
        See Also:
        Constant Field Values
      • tag_BitString

        public static final byte tag_BitString
        Tag value indicating an ASN.1 "BIT STRING" value.
        See Also:
        Constant Field Values
      • tag_OctetString

        public static final byte tag_OctetString
        Tag value indicating an ASN.1 "OCTET STRING" value.
        See Also:
        Constant Field Values
      • tag_Null

        public static final byte tag_Null
        Tag value indicating an ASN.1 "NULL" value.
        See Also:
        Constant Field Values
      • tag_ObjectId

        public static final byte tag_ObjectId
        Tag value indicating an ASN.1 "OBJECT IDENTIFIER" value.
        See Also:
        Constant Field Values
      • tag_Enumerated

        public static final byte tag_Enumerated
        Tag value including an ASN.1 "ENUMERATED" value
        See Also:
        Constant Field Values
      • tag_PrintableString

        public static final byte tag_PrintableString
        Tag value including a "printable" string
        See Also:
        Constant Field Values
      • tag_T61String

        public static final byte tag_T61String
        Tag value including a "teletype" string
        See Also:
        Constant Field Values
      • tag_IA5String

        public static final byte tag_IA5String
        Tag value including an ASCII string
        See Also:
        Constant Field Values
      • tag_UtcTime

        public static final byte tag_UtcTime
        Tag value indicating an ASN.1 "UTCTime" value.
        See Also:
        Constant Field Values
      • tag_GeneralizedTime

        public static final byte tag_GeneralizedTime
        Tag value indicating an ASN.1 "GeneralizedTime" value.
        See Also:
        Constant Field Values
      • tag_GeneralString

        public static final byte tag_GeneralString
        Tag value indicating an ASN.1 "GeneralString" value.
        See Also:
        Constant Field Values
      • tag_BMPString

        public static final byte tag_BMPString
        Tag value indicating an ASN.1 "BMPString" value.
        See Also:
        Constant Field Values
      • tag_UniversalString

        public static final byte tag_UniversalString
        Tag value indicating an ASN.1 "UniversalString" value.
        See Also:
        Constant Field Values
      • tag_UTF8String

        public static final byte tag_UTF8String
        Tag value indicating an ASN.1 "UTF8String" value. (since 1998)
        See Also:
        Constant Field Values
      • tags_DirectoryString

        public static final byte[] tags_DirectoryString
      • tag_Sequence

        public static final byte tag_Sequence
        Tag value indicating an ASN.1 "SEQUENCE" (zero to N elements, order is significant).
        See Also:
        Constant Field Values
      • tag_SequenceOf

        public static final byte tag_SequenceOf
        Tag value indicating an ASN.1 "SEQUENCE OF" (one to N elements, order is significant).
        See Also:
        Constant Field Values
      • tag_Set

        public static final byte tag_Set
        Tag value indicating an ASN.1 "SET" (zero to N members, order does not matter).
        See Also:
        Constant Field Values
      • tag_SetOf

        public static final byte tag_SetOf
        Tag value indicating an ASN.1 "SET OF" (one to N members, order does not matter).
        See Also:
        Constant Field Values
    • Constructor Detail

      • DerValue

        public DerValue​(java.lang.String value)
                 throws java.io.IOException
        Creates a DER value from a string using a generic way of determining the proper tag for the string. Assumes the string is a Generic attribute value and uses the converter for generic string values to convert to the Der Value.
        Throws:
        java.io.IOException
      • DerValue

        public DerValue​(byte tag,
                        byte[] data)
        Creates a DerValue from a tag and some DER-encoded data.
        Parameters:
        tag - the DER type tag
        data - the DER-encoded data
      • DerValue

        public DerValue​(byte tag,
                        byte[] data,
                        int offset,
                        int length)
        Creates a DerValue from a tag and some DER-encoded data.
        Parameters:
        tag - the DER type tag
        data - the DER-encoded data
        offset - offset of the data
        length - length of the data
      • DerValue

        public DerValue​(byte[] buf)
                 throws java.io.IOException
        Get an ASN.1/DER encoded datum from a buffer. The entire buffer must hold exactly one datum, including its tag and length.
        Parameters:
        buf - buffer holding a single DER-encoded datum.
        Throws:
        java.io.IOException
      • DerValue

        public DerValue​(byte[] buf,
                        int offset,
                        int len)
                 throws java.io.IOException
        Get an ASN.1/DER encoded datum from part of a buffer. That part of the buffer must hold exactly one datum, including its tag and length.
        Parameters:
        buf - the buffer
        offset - start point of the single DER-encoded dataum
        length - how many bytes are in the encoded datum
        Throws:
        java.io.IOException
      • DerValue

        public DerValue​(java.io.InputStream in)
                 throws java.io.IOException
        Get an ASN1/DER encoded datum from an input stream. The stream may have additional data following the encoded datum.
        Parameters:
        in - the input stream holding a single DER datum, which may be followed by additional data
        Throws:
        java.io.IOException
    • Method Detail

      • isContextSpecific

        public boolean isContextSpecific()
        Returns true iff the CONTEXT SPECIFIC bit is set in the type tag. This is associated with the ASN.1 "DEFINED BY" syntax.
      • isContextSpecific

        public boolean isContextSpecific​(byte cntxtTag)
        Returns true iff the CONTEXT SPECIFIC TAG matches the passed tag.
      • isConstructed

        public boolean isConstructed()
        Returns true iff the CONSTRUCTED bit is set in the type tag.
      • encode

        public void encode​(DerOutputStream out)
                    throws java.io.IOException
        Encode an ASN1/DER encoded datum onto a DER output stream.
        Throws:
        java.io.IOException
      • getBoolean

        public boolean getBoolean()
                           throws java.io.IOException
        Returns an ASN.1 BOOLEAN
        Returns:
        the boolean held in this DER value
        Throws:
        java.io.IOException
      • getOID

        public ObjectIdentifier getOID()
                                throws java.io.IOException
        Returns an ASN.1 OBJECT IDENTIFIER.
        Returns:
        the OID held in this DER value
        Throws:
        java.io.IOException
      • getOctetString

        public byte[] getOctetString()
                              throws java.io.IOException
        Returns an ASN.1 OCTET STRING
        Returns:
        the octet string held in this DER value
        Throws:
        java.io.IOException
      • getEnumerated

        public int getEnumerated()
                          throws java.io.IOException
        Returns an ASN.1 unsigned integer value of enumerated value.
        Returns:
        the (unsigned) integer held in this DER value
        Throws:
        java.io.IOException
      • getInteger

        public BigInt getInteger()
                          throws java.io.IOException
        Returns an ASN.1 unsigned INTEGER value.
        Returns:
        the (unsigned) integer held in this DER value
        Throws:
        java.io.IOException
      • getInteger

        public BigInt getInteger​(boolean tagImplicit)
                          throws java.io.IOException
        Returns an ASN.1 unsigned INTEGER value, the parameter determining if the tag is implicit.
        Parameters:
        tagImplicit - if true, ignores the tag value as it is assumed implicit.
        Returns:
        the (unsigned) integer held in this DER value
        Throws:
        java.io.IOException
      • getBitString

        public byte[] getBitString()
                            throws java.io.IOException
        Returns an ASN.1 BIT STRING value. The bit string must be byte-aligned.
        Returns:
        the bit string held in this value
        Throws:
        java.io.IOException
      • getUnalignedBitString

        public BitArray getUnalignedBitString()
                                       throws java.io.IOException
        Returns an ASN.1 BIT STRING value that need not be byte-aligned.
        Returns:
        a BitArray representing the bit string held in this value
        Throws:
        java.io.IOException
      • getAsString

        public java.lang.String getAsString()
                                     throws java.io.IOException
        Returns the name component as a Java string, regardless of its encoding restrictions (ASCII, T61, Printable, etc).
        Throws:
        java.io.IOException
      • getBitString

        public byte[] getBitString​(boolean tagImplicit)
                            throws java.io.IOException
        Returns an ASN.1 BIT STRING value, with the tag assumed implicit based on the parameter. The bit string must be byte-aligned.
        Parameters:
        tagImplicit - if true, the tag is assumed implicit.
        Returns:
        the bit string held in this value
        Throws:
        java.io.IOException
      • getUnalignedBitString

        public BitArray getUnalignedBitString​(boolean tagImplicit)
                                       throws java.io.IOException
        Returns an ASN.1 BIT STRING value, with the tag assumed implicit based on the parameter. The bit string need not be byte-aligned.
        Parameters:
        tagImplicit - if true, the tag is assumed implicit.
        Returns:
        the bit string held in this value
        Throws:
        java.io.IOException
      • getPrintableString

        public java.lang.String getPrintableString()
                                            throws java.io.IOException
        Returns an ASN.1 STRING value
        Returns:
        the printable string held in this value
        Throws:
        java.io.IOException
      • getDirectoryString

        public java.lang.String getDirectoryString()
                                            throws java.io.IOException
        Throws:
        java.io.IOException
      • getASN1CharString

        public java.lang.String getASN1CharString()
                                           throws java.io.IOException
        Throws:
        java.io.IOException
      • getT61String

        public java.lang.String getT61String()
                                      throws java.io.IOException
        Returns an ASN.1 T61 (Teletype) STRING value
        Returns:
        the teletype string held in this value
        Throws:
        java.io.IOException
      • getIA5String

        public java.lang.String getIA5String()
                                      throws java.io.IOException
        Returns an ASN.1 IA5 (ASCII) STRING value
        Returns:
        the ASCII string held in this value
        Throws:
        java.io.IOException
      • getBMPString

        public java.lang.String getBMPString()
                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • getUniversalString

        public java.lang.String getUniversalString()
                                            throws java.io.IOException
        Throws:
        java.io.IOException
      • getUTF8String

        public java.lang.String getUTF8String()
                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • equals

        public boolean equals​(java.lang.Object other)
        Returns true iff the other object is a DER value which is bitwise equal to this one.
        Overrides:
        equals in class java.lang.Object
        Parameters:
        other - the object being compared with this one
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • equals

        public boolean equals​(DerValue other)
        Bitwise equality comparison. DER encoded values have a single encoding, so that bitwise equality of the encoded values is an efficient way to establish equivalence of the unencoded values.
        Parameters:
        other - the object being compared with this one
      • toString

        public java.lang.String toString()
        Returns a printable representation of the value.
        Overrides:
        toString in class java.lang.Object
        Returns:
        printable representation of the value
      • toByteArray

        public byte[] toByteArray()
                           throws java.io.IOException
        Returns a DER-encoded value, such that if it's passed to the DerValue constructor, a value equivalent to "this" is returned.
        Returns:
        DER-encoded value, including tag and length.
        Throws:
        java.io.IOException
      • toDerInputStream

        public DerInputStream toDerInputStream()
                                        throws java.io.IOException
        For "set" and "sequence" types, this function may be used to return a DER stream of the members of the set or sequence. This operation is not supported for primitive types such as integers or bit strings.
        Throws:
        java.io.IOException
      • length

        public int length()
        Get the length of the encoded value.
      • createTag

        public static byte createTag​(byte tagClass,
                                     boolean form,
                                     byte val)
        Create the tag of the attribute.
        Parameters:
        class - the tag class type, one of UNIVERSAL, CONTEXT, APPLICATION or PRIVATE
        form - if true, the value is constructed, otherwise it is primitive.
        val - the tag value
      • resetTag

        public void resetTag​(byte tag)
        Set the tag of the attribute. Commonly used to reset the tag value used for IMPLICIT encodings.
        Parameters:
        tag - the tag value