1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.asn1; 2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.io.IOException; 4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class DERBoolean 6c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom extends ASN1Object 7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{ 8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam // BEGIN android-changed 9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam private final byte value; 10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam // END android-changed 11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static final DERBoolean FALSE = new DERBoolean(false); 13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static final DERBoolean TRUE = new DERBoolean(true); 14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * return a boolean from the passed in object. 17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * 18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @exception IllegalArgumentException if the object cannot be converted. 19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static DERBoolean getInstance( 21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Object obj) 22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (obj == null || obj instanceof DERBoolean) 24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return (DERBoolean)obj; 26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); 29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * return a DERBoolean from the passed in boolean. 33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static DERBoolean getInstance( 35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean value) 36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return (value ? TRUE : FALSE); 38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam // BEGIN android-added 41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * return a DERBoolean from the passed in array. 43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static DERBoolean getInstance( 45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam byte[] octets) 46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return (octets[0] != 0) ? TRUE : FALSE; 48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 49b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam // END android-added 50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 51b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * return a Boolean from a tagged object. 53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * 54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @param obj the tagged object holding the object we want 55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @param explicit true if the object is meant to be explicitly 56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * tagged false otherwise. 57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @exception IllegalArgumentException if the tagged object cannot 58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * be converted. 59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static DERBoolean getInstance( 61b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1TaggedObject obj, 62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean explicit) 63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 646e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom DERObject o = obj.getObject(); 65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (explicit || o instanceof DERBoolean) 676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 686e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return getInstance(o); 696e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 706e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom else 716e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 726e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // BEGIN android-changed 736e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return getInstance(((ASN1OctetString)o).getOctets()); 746e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // END android-changed 756e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 766e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 776e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam // BEGIN android-removed 796e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // public DERBoolean( 806e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // byte[] value) 816e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // { 826e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // if (value.length != 1) 836e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // { 846e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // throw new IllegalArgumentException("byte value should have 1 byte in it"); 856e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // } 866e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // 876e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // this.value = value[0]; 886e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // } 89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam // END android-removed 90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam // BEGIN android-changed 926e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom protected DERBoolean( 93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean value) 946e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // END android-changed 95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.value = (value) ? (byte)0xff : (byte)0; 97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public boolean isTrue() 100b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 101b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return (value != 0); 102b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 103b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 104b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam void encode( 105b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam DEROutputStream out) 106b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throws IOException 107b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 108b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam byte[] bytes = new byte[1]; 109b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 110b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam bytes[0] = value; 111b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 112b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam out.writeEncoded(BOOLEAN, bytes); 113b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 114b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 115c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom protected boolean asn1Equals( 116c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom DERObject o) 117b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 118b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if ((o == null) || !(o instanceof DERBoolean)) 119b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 120b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return false; 121b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 122b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 123b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return (value == ((DERBoolean)o).value); 124b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 125b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 126b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public int hashCode() 127b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 128b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return value; 129b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 130b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 131b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 132b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public String toString() 133b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 134b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return (value != 0) ? "TRUE" : "FALSE"; 135b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 136b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 137