Home | History | Annotate | Download | only in asn1
      1 package org.bouncycastle.asn1;
      2 
      3 import java.io.IOException;
      4 import java.math.BigInteger;
      5 
      6 import org.bouncycastle.util.Arrays;
      7 
      8 public class DEREnumerated
      9     extends ASN1Object
     10 {
     11     byte[]      bytes;
     12 
     13     /**
     14      * return an integer from the passed in object
     15      *
     16      * @exception IllegalArgumentException if the object cannot be converted.
     17      */
     18     public static DEREnumerated getInstance(
     19         Object  obj)
     20     {
     21         if (obj == null || obj instanceof DEREnumerated)
     22         {
     23             return (DEREnumerated)obj;
     24         }
     25 
     26         throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
     27     }
     28 
     29     /**
     30      * return an Enumerated from a tagged object.
     31      *
     32      * @param obj the tagged object holding the object we want
     33      * @param explicit true if the object is meant to be explicitly
     34      *              tagged false otherwise.
     35      * @exception IllegalArgumentException if the tagged object cannot
     36      *               be converted.
     37      */
     38     public static DEREnumerated getInstance(
     39         ASN1TaggedObject obj,
     40         boolean          explicit)
     41     {
     42         DERObject o = obj.getObject();
     43 
     44         if (explicit || o instanceof DEREnumerated)
     45         {
     46             return getInstance(o);
     47         }
     48         else
     49         {
     50             return new DEREnumerated(((ASN1OctetString)o).getOctets());
     51         }
     52     }
     53 
     54     public DEREnumerated(
     55         int         value)
     56     {
     57         bytes = BigInteger.valueOf(value).toByteArray();
     58     }
     59 
     60     public DEREnumerated(
     61         BigInteger   value)
     62     {
     63         bytes = value.toByteArray();
     64     }
     65 
     66     public DEREnumerated(
     67         byte[]   bytes)
     68     {
     69         this.bytes = bytes;
     70     }
     71 
     72     public BigInteger getValue()
     73     {
     74         return new BigInteger(bytes);
     75     }
     76 
     77     void encode(
     78         DEROutputStream out)
     79         throws IOException
     80     {
     81         out.writeEncoded(ENUMERATED, bytes);
     82     }
     83 
     84     boolean asn1Equals(
     85         DERObject  o)
     86     {
     87         if (!(o instanceof DEREnumerated))
     88         {
     89             return false;
     90         }
     91 
     92         DEREnumerated other = (DEREnumerated)o;
     93 
     94         return Arrays.areEqual(this.bytes, other.bytes);
     95     }
     96 
     97     public int hashCode()
     98     {
     99         return Arrays.hashCode(bytes);
    100     }
    101 }
    102