Package org.bouncycastle.asn1

## Class ASN1Integer

- java.lang.Object
- - org.bouncycastle.asn1.ASN1Object
  - - org.bouncycastle.asn1.ASN1Primitive
    - - org.bouncycastle.asn1.ASN1Integer

- All Implemented Interfaces:
    `ASN1Encodable`, `Encodable`
  Direct Known Subclasses:
    `DERInteger`, `SubsequentMessage`

      public class ASN1Integer
      extends ASN1Primitive

  Class representing the ASN.1 INTEGER type.

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ASN1Integer​(byte[] bytes)` | Construct an INTEGER from the passed in byte array.
    `ASN1Integer​(long value)` | Construct an INTEGER from the passed in long value.
    `ASN1Integer​(java.math.BigInteger value)` | Construct an INTEGER from the passed in BigInteger value.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `static ASN1Integer` | `getInstance​(java.lang.Object obj)` | Return an integer from the passed in object.
    `static ASN1Integer` | `getInstance​(ASN1TaggedObject obj, boolean explicit)` | Return an Integer from a tagged object.
    `java.math.BigInteger` | `getPositiveValue()` | in some cases positive values get crammed into a space, that's not quite big enough...
    `java.math.BigInteger` | `getValue()` |
    `int` | `hashCode()` |
    `boolean` | `hasValue​(java.math.BigInteger x)` |
    `int` | `intPositiveValueExact()` |
    `int` | `intValueExact()` |
    `long` | `longValueExact()` |
    `java.lang.String` | `toString()` |

    - ### Methods inherited from class org.bouncycastle.asn1.ASN1Primitive

      `encodeTo, encodeTo, equals, equals, equals, fromByteArray, toASN1Primitive`

    - ### Methods inherited from class org.bouncycastle.asn1.ASN1Object

      `getEncoded, getEncoded, hasEncodedTagValue`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### ASN1Integer

          public ASN1Integer​(long value)

      Construct an INTEGER from the passed in long value.
      Parameters:
        `value` - the long representing the value desired.

    - #### ASN1Integer

          public ASN1Integer​(java.math.BigInteger value)

      Construct an INTEGER from the passed in BigInteger value.
      Parameters:
        `value` - the BigInteger representing the value desired.

    - #### ASN1Integer

          public ASN1Integer​(byte[] bytes)

      Construct an INTEGER from the passed in byte array.

      NB: Strict Validation applied by default.

      It has turned out that there are still a few applications that struggle with the ASN.1 BER encoding rules for an INTEGER as described in: https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf Section 8.3.2.

      Users can set the 'org.bouncycastle.asn1.allow_unsafe_integer' to 'true' and a looser validation will be applied. Users must recognise that this is not ideal and may pave the way for an exploit based around a faulty encoding in the future.

      Parameters:
        `bytes` - the byte array representing a 2's complement encoding of a BigInteger.

  - ### Method Detail

    - #### getInstance

          public static ASN1Integer getInstance​(java.lang.Object obj)

      Return an integer from the passed in object.
      Parameters:
        `obj` - an ASN1Integer or an object that can be converted into one.
      Returns:
        an ASN1Integer instance.
      Throws:
        `java.lang.IllegalArgumentException` - if the object cannot be converted.

    - #### getInstance

          public static ASN1Integer getInstance​(ASN1TaggedObject obj,
                                                boolean explicit)

      Return an Integer from a tagged object.
      Parameters:
        `obj` - the tagged object holding the object we want
        `explicit` - true if the object is meant to be explicitly tagged false otherwise.
      Returns:
        an ASN1Integer instance.
      Throws:
        `java.lang.IllegalArgumentException` - if the tagged object cannot be converted.

    - #### getPositiveValue

          public java.math.BigInteger getPositiveValue()

      in some cases positive values get crammed into a space, that's not quite big enough...
      Returns:
        the BigInteger that results from treating this ASN.1 INTEGER as unsigned.

    - #### getValue

          public java.math.BigInteger getValue()

    - #### hasValue

          public boolean hasValue​(java.math.BigInteger x)

    - #### intPositiveValueExact

          public int intPositiveValueExact()

    - #### intValueExact

          public int intValueExact()

    - #### longValueExact

          public long longValueExact()

    - #### hashCode

          public int hashCode()

      Specified by:
        `hashCode` in class `ASN1Primitive`

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.Object`