1 package com.android.hotspot2.asn1; 2 3 import java.math.BigInteger; 4 import java.nio.ByteBuffer; 5 import java.util.Collection; 6 7 public class Asn1Integer extends Asn1Object { 8 private static final int SignBit = 0x80; 9 10 private final long mValue; 11 private final BigInteger mBigValue; 12 Asn1Integer(int tag, Asn1Class asn1Class, int length, ByteBuffer data)13 public Asn1Integer(int tag, Asn1Class asn1Class, int length, ByteBuffer data) { 14 super(tag, asn1Class, false, length); 15 16 if (length <= 8) { 17 long value = (data.get(data.position()) & SignBit) != 0 ? -1 : 0; 18 for (int n = 0; n < length; n++) { 19 value = (value << Byte.SIZE) | data.get(); 20 } 21 mValue = value; 22 mBigValue = null; 23 } else { 24 byte[] payload = new byte[length]; 25 data.get(payload); 26 mValue = 0; 27 mBigValue = new BigInteger(payload); 28 } 29 } 30 isBigValue()31 public boolean isBigValue() { 32 return mBigValue != null; 33 } 34 getValue()35 public long getValue() { 36 return mValue; 37 } 38 getBigValue()39 public BigInteger getBigValue() { 40 return mBigValue; 41 } 42 43 @Override getChildren()44 public Collection<Asn1Object> getChildren() { 45 throw new UnsupportedOperationException(); 46 } 47 48 @Override toString()49 public String toString() { 50 if (isBigValue()) { 51 return super.toString() + '=' + mBigValue.toString(16); 52 } else { 53 return super.toString() + '=' + mValue; 54 } 55 } 56 } 57