DERInteger.java
上传用户:lior1029
上传日期:2013-05-07
资源大小:209k
文件大小:3k
源码类别:

CA认证

开发平台:

Java

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