001package org.apache.commons.ssl.org.bouncycastle.asn1.eac;
002
003import java.math.BigInteger;
004
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1OctetString;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject;
009import org.apache.commons.ssl.org.bouncycastle.asn1.DEROctetString;
010import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject;
011
012public class UnsignedInteger
013    extends ASN1Object
014{
015    private int tagNo;
016    private BigInteger value;
017
018    public UnsignedInteger(int tagNo, BigInteger value)
019    {
020        this.tagNo = tagNo;
021        this.value = value;
022    }
023
024    private UnsignedInteger(ASN1TaggedObject obj)
025    {
026        this.tagNo = obj.getTagNo();
027        this.value = new BigInteger(1, ASN1OctetString.getInstance(obj, false).getOctets());
028    }
029
030    public static UnsignedInteger getInstance(Object obj)
031    {
032        if (obj instanceof  UnsignedInteger)
033        {
034            return (UnsignedInteger)obj;
035        }
036        if (obj != null)
037        {
038            return new UnsignedInteger(ASN1TaggedObject.getInstance(obj));
039        }
040
041        return null;
042    }
043
044    private byte[] convertValue()
045    {
046        byte[] v = value.toByteArray();
047
048        if (v[0] == 0)
049        {
050            byte[] tmp = new byte[v.length - 1];
051
052            System.arraycopy(v, 1, tmp, 0, tmp.length);
053
054            return tmp;
055        }
056
057        return v;
058    }
059
060    public int getTagNo()
061    {
062        return tagNo;
063    }
064
065    public BigInteger getValue()
066    {
067        return value;
068    }
069
070    public ASN1Primitive toASN1Primitive()
071    {
072        return new DERTaggedObject(false, tagNo, new DEROctetString(convertValue()));
073    }
074}