package com.android.hotspot2.asn1; import java.math.BigInteger; import java.nio.ByteBuffer; import java.util.Collection; public class Asn1Integer extends Asn1Object { private static final int SignBit = 0x80; private final long mValue; private final BigInteger mBigValue; public Asn1Integer(int tag, Asn1Class asn1Class, int length, ByteBuffer data) { super(tag, asn1Class, false, length); if (length <= 8) { long value = (data.get(data.position()) & SignBit) != 0 ? -1 : 0; for (int n = 0; n < length; n++) { value = (value << Byte.SIZE) | data.get(); } mValue = value; mBigValue = null; } else { byte[] payload = new byte[length]; data.get(payload); mValue = 0; mBigValue = new BigInteger(payload); } } public boolean isBigValue() { return mBigValue != null; } public long getValue() { return mValue; } public BigInteger getBigValue() { return mBigValue; } @Override public Collection<Asn1Object> getChildren() { throw new UnsupportedOperationException(); } @Override public String toString() { if (isBigValue()) { return super.toString() + '=' + mBigValue.toString(16); } else { return super.toString() + '=' + mValue; } } }