Module org.snmp4j

Class BER


  • public class BER
    extends java.lang.Object
    The BER class provides utility methods for the BER encoding and decoding.
    Version:
    2.5.8
    Author:
    Frank Fock, Jochen Katz
    • Constructor Detail

      • BER

        public BER()
    • Method Detail

      • encodeHeader

        public static void encodeHeader​(java.io.OutputStream os,
                                        int type,
                                        int length)
                                 throws java.io.IOException
        Encodes an ASN.1 header for an object with the ID and length specified.
        Parameters:
        os - an OutputStream to which the header is encoded.
        type - the type of the ASN.1 object. Must be < 30, i.e. no extension octets.
        length - the length of the object. The maximum length is 0xFFFFFFFF;
        Throws:
        java.io.IOException - if the output stream fails to store the encoded header.
      • encodeHeader

        public static void encodeHeader​(java.io.OutputStream os,
                                        int type,
                                        int length,
                                        int numBytesLength)
                                 throws java.io.IOException
        Encodes an ASN.1 header for an object with the ID and length specified with a fixed length of the encoded length as supplied.
        Parameters:
        os - an OutputStream to which the header is encoded.
        type - the type of the ASN.1 object. Must be < 30, i.e. no extension octets.
        length - the length of the object. The maximum length is 0xFFFFFFFF;
        numBytesLength - the number of bytes used to encode the length of the length.
        Throws:
        java.io.IOException - if the output stream fails to store the encoded header.
      • getBERLengthOfLength

        public static int getBERLengthOfLength​(int length)
        Compute the space needed to encode the length.
        Parameters:
        length - Length to encode
        Returns:
        the count of bytes needed to encode the value length
      • encodeLength

        public static void encodeLength​(java.io.OutputStream os,
                                        int length)
                                 throws java.io.IOException
        Encodes the length of an ASN.1 object.
        Parameters:
        os - an OutputStream to which the length is encoded.
        length - the length of the object. The maximum length is 0xFFFFFFFF;
        Throws:
        java.io.IOException - if the output stream fails to store the encoded length.
      • encodeLength

        public static void encodeLength​(java.io.OutputStream os,
                                        int length,
                                        int numLengthBytes)
                                 throws java.io.IOException
        Encodes the length of an ASN.1 object.
        Parameters:
        os - an OutputStream to which the length is encoded.
        length - the length of the object. The maximum length is 0xFFFFFFFF;
        numLengthBytes - the number of bytes to be used to encode the length using the long form.
        Throws:
        java.io.IOException - if the output stream fails to store the encoded length.
      • encodeInteger

        public static void encodeInteger​(java.io.OutputStream os,
                                         byte type,
                                         int value)
                                  throws java.io.IOException
        Encode a signed integer.
        Parameters:
        os - an OutputStream to which the length is encoded.
        type - the tag type for the integer (typically 0x02)
        value - the integer value to encode.
        Throws:
        java.io.IOException - if the output stream fails to store the encoded integer.
      • encodeBigInteger

        public static void encodeBigInteger​(java.io.OutputStream os,
                                            byte type,
                                            java.math.BigInteger value)
                                     throws java.io.IOException
        Encode a signed integer.
        Parameters:
        os - an OutputStream to which the length is encoded.
        type - the tag type for the integer (typically 0x02)
        value - the integer value to encode.
        Throws:
        java.io.IOException - if the output stream fails to store the encoded integer.
      • getBigIntegerBERLength

        public static int getBigIntegerBERLength​(java.math.BigInteger value)
        Get the BER encoded length of a BigInteger value.
        Parameters:
        value - a BigInteger value with a length that is less 2^31.
        Returns:
        the length of the BER encoding of the supplied BigInteger as INTEGER value.
      • encodeUnsignedInteger

        public static void encodeUnsignedInteger​(java.io.OutputStream os,
                                                 byte type,
                                                 long value)
                                          throws java.io.IOException
        Encode an unsigned integer. ASN.1 integer ::= 0x02 asnlength byte {byte}*
        Parameters:
        os - an OutputStream to which the length is encoded.
        type - the tag type for the integer (typically 0x02)
        value - the integer value to encode.
        Throws:
        java.io.IOException - if the output stream fails to store the encoded value.
      • encodeString

        public static void encodeString​(java.io.OutputStream os,
                                        byte type,
                                        byte[] string)
                                 throws java.io.IOException
        Encode an ASN.1 octet string filled with the supplied input string.
        Parameters:
        os - an OutputStream to which the length is encoded.
        type - the tag type for the integer (typically 0x02)
        string - the byte array containing the octet string value.
        Throws:
        java.io.IOException - if the output stream fails to store the encoded value.
      • encodeSequence

        public static void encodeSequence​(java.io.OutputStream os,
                                          byte type,
                                          int length)
                                   throws java.io.IOException
        Encode an ASN.1 header for a sequence with the ID and length specified. This only works on data types < 30, i.e. no extension octets. The maximum length is 0xFFFF;
        Parameters:
        os - an OutputStream to which the length is encoded.
        type - the tag type for the integer (typically 0x02)
        length - the length of the sequence to encode.
        Throws:
        java.io.IOException - if the output stream fails to store the encoded value.
      • getOIDLength

        public static int getOIDLength​(int[] value)
        Gets the payload length in bytes of the BER encoded OID value.
        Parameters:
        value - an array of unsigned integer values representing an object identifier.
        Returns:
        the BER encoded length of the OID without header and length.
      • getSubIDLength

        public static int getSubIDLength​(int subID)
      • encodeOID

        public static void encodeOID​(java.io.OutputStream os,
                                     byte type,
                                     int[] oid)
                              throws java.io.IOException
        Encode an ASN.1 oid filled with the supplied oid value.
        Parameters:
        os - an OutputStream to which the length is encoded.
        type - the tag type for the integer (typically 0x06)
        oid - the int array containing the OID value.
        Throws:
        java.io.IOException - if the output stream fails to store the encoded value.
      • encodeSubID

        public static void encodeSubID​(java.io.OutputStream os,
                                       int subID)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • encodeUnsignedInt64

        public static void encodeUnsignedInt64​(java.io.OutputStream os,
                                               byte type,
                                               long value)
                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • decodeLength

        public static int decodeLength​(BERInputStream is)
                                throws java.io.IOException
        Decodes a ASN.1 length.
        Parameters:
        is - an InputStream
        Returns:
        the decoded length.
        Throws:
        java.io.IOException - if the input stream contains an invalid BER encoding or an IO exception occurred while reading from the stream.
      • decodeLength

        public static int decodeLength​(BERInputStream is,
                                       boolean checkLength)
                                throws java.io.IOException
        Decodes a ASN.1 length.
        Parameters:
        is - an InputStream
        checkLength - if false length check is always suppressed.
        Returns:
        the decoded length.
        Throws:
        java.io.IOException - if the input stream contains an invalid BER encoding or an IO exception occurred while reading from the stream.
      • decodeHeader

        public static int decodeHeader​(BERInputStream is,
                                       BER.MutableByte type,
                                       boolean checkLength)
                                throws java.io.IOException
        Decodes an ASN.1 header for an object with the ID and length specified. On entry, datalength is input as the number of valid bytes following "data". On exit, it is returned as the number of valid bytes in this object following the id and length. This only works on data types < 30, i.e. no extension octets. The maximum length is 0xFFFF;
        Parameters:
        is - the BERInputStream to decode.
        type - returns the type of the object at the current position in the input stream.
        checkLength - if false length check is always suppressed.
        Returns:
        the decoded length of the object.
        Throws:
        java.io.IOException - if the input stream contains an invalid BER encoding or an IO exception occurred while reading from the stream.
      • decodeHeader

        public static int decodeHeader​(BERInputStream is,
                                       BER.MutableByte type)
                                throws java.io.IOException
        Decodes an ASN.1 header for an object with the ID and length specified. On entry, datalength is input as the number of valid bytes following "data". On exit, it is returned as the number of valid bytes in this object following the id and length. This only works on data types < 30, i.e. no extension octets. The maximum length is 0xFFFF;
        Parameters:
        is - the BERInputStream to decode.
        type - returns the type of the object at the current position in the input stream.
        Returns:
        the decoded length of the object.
        Throws:
        java.io.IOException - if the input stream contains an invalid BER encoding or an IO exception occurred while reading from the stream.
      • decodeInteger

        public static int decodeInteger​(BERInputStream is,
                                        BER.MutableByte type)
                                 throws java.io.IOException
        Throws:
        java.io.IOException
      • decodeBigInteger

        public static java.math.BigInteger decodeBigInteger​(BERInputStream is,
                                                            BER.MutableByte type)
                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • getPositionMessage

        public static java.lang.String getPositionMessage​(BERInputStream is)
      • decodeUnsignedInteger

        public static long decodeUnsignedInteger​(BERInputStream is,
                                                 BER.MutableByte type)
                                          throws java.io.IOException
        Throws:
        java.io.IOException
      • decodeString

        public static byte[] decodeString​(BERInputStream is,
                                          BER.MutableByte type)
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • decodeNull

        public static void decodeNull​(BERInputStream is,
                                      BER.MutableByte type)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • decodeUnsignedInt64

        public static long decodeUnsignedInt64​(BERInputStream is,
                                               BER.MutableByte type)
                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • isCheckSequenceLength

        public static boolean isCheckSequenceLength()
        Gets the SEQUENCE length checking mode.
        Returns:
        true if the length of a parsed SEQUENCE should be checked against the real length of the objects parsed.
      • setCheckSequenceLength

        public static void setCheckSequenceLength​(boolean checkSequenceLen)
        Sets the application wide SEQUENCE length checking mode.
        Parameters:
        checkSequenceLen - specifies whether he length of a parsed SEQUENCE should be checked against the real length of the objects parsed.
      • checkSequenceLength

        public static void checkSequenceLength​(int expectedLength,
                                               BERSerializable sequence)
                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • checkSequenceLength

        public static void checkSequenceLength​(int expectedLength,
                                               int actualLength,
                                               BERSerializable sequence)
                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • isCheckValueLength

        public boolean isCheckValueLength()
      • setCheckValueLength

        public void setCheckValueLength​(boolean checkValueLength)
      • isCheckFirstSubID012

        public static boolean isCheckFirstSubID012()
      • setCheckFirstSubID012

        public static void setCheckFirstSubID012​(boolean checkFirstSubID012)