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