diff options
author | Kenny Root <kroot@google.com> | 2014-07-28 12:51:54 -0700 |
---|---|---|
committer | Kenny Root <kroot@google.com> | 2014-08-06 14:58:37 -0700 |
commit | d001700a15b8bd733ae344c1fc315b97c43c6590 (patch) | |
tree | 6c876ccbb5560aa6f9b7d42eeae00495568e5bc4 /bcprov/src/main/java/org/bouncycastle/asn1/ASN1Boolean.java | |
parent | 234720ebe66540a53cff98b2448dddbc884bd09f (diff) | |
download | android_external_bouncycastle-d001700a15b8bd733ae344c1fc315b97c43c6590.tar.gz android_external_bouncycastle-d001700a15b8bd733ae344c1fc315b97c43c6590.tar.bz2 android_external_bouncycastle-d001700a15b8bd733ae344c1fc315b97c43c6590.zip |
Upgrade to 1.51
f98b02ab394044a3c237d2c7a2ee5ef65793e8e9 bcpkix-jdk15on-151.tar.gz
95e59ad2492598d729cfc559b480c3f172de5dc3 bcprov-jdk15on-151.tar.gz
Bug: 16578237
Change-Id: Ie4a3cd01b52b504a1098b00b413f1418273a6ef2
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/asn1/ASN1Boolean.java')
-rw-r--r-- | bcprov/src/main/java/org/bouncycastle/asn1/ASN1Boolean.java | 216 |
1 files changed, 211 insertions, 5 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Boolean.java b/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Boolean.java index 1360e8b..30d7d45 100644 --- a/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Boolean.java +++ b/bcprov/src/main/java/org/bouncycastle/asn1/ASN1Boolean.java @@ -1,15 +1,221 @@ package org.bouncycastle.asn1; +import java.io.IOException; + +import org.bouncycastle.util.Arrays; + +/** + * Public facade of ASN.1 Boolean data. + * <p> + * Use following to place a new instance of ASN.1 Boolean in your dataset: + * </p> + * <ul> + * <li> ASN1Boolean.TRUE literal</li> + * <li> ASN1Boolean.FALSE literal</li> + * <li> {@link ASN1Boolean#getInstance(boolean) ASN1Boolean.getInstance(boolean)}</li> + * <li> {@link ASN1Boolean#getInstance(int) ASN1Boolean.getInstance(int)}</li> + * </ul> + * </p> + */ public class ASN1Boolean - extends DERBoolean + extends ASN1Primitive { - public ASN1Boolean(boolean value) + private static final byte[] TRUE_VALUE = new byte[] { (byte)0xff }; + private static final byte[] FALSE_VALUE = new byte[] { 0 }; + + // BEGIN android-changed + final private byte[] value; + // END android-changed + + public static final ASN1Boolean FALSE = new ASN1Boolean(false); + public static final ASN1Boolean TRUE = new ASN1Boolean(true); + + /** + * return a boolean from the passed in object. + * + * @param obj an ASN1Boolean or an object that can be converted into one. + * @exception IllegalArgumentException if the object cannot be converted. + * @return an ASN1Boolean instance. + */ + public static ASN1Boolean getInstance( + Object obj) + { + if (obj == null || obj instanceof ASN1Boolean) + { + return (ASN1Boolean)obj; + } + + if (obj instanceof byte[]) + { + byte[] enc = (byte[])obj; + try + { + return (ASN1Boolean)fromByteArray(enc); + } + catch (IOException e) + { + throw new IllegalArgumentException("failed to construct boolean from byte[]: " + e.getMessage()); + } + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return an ASN1Boolean from the passed in boolean. + * @return an ASN1Boolean instance. + */ + public static ASN1Boolean getInstance( + boolean value) + { + return (value ? TRUE : FALSE); + } + + /** + * return an ASN1Boolean from the passed in value. + * @return an ASN1Boolean instance. + */ + public static ASN1Boolean getInstance( + int value) { - super(value); + return (value != 0 ? TRUE : FALSE); } - ASN1Boolean(byte[] value) + // BEGIN android-added + /** + * return a ASN1Boolean from the passed in array. + */ + public static ASN1Boolean getInstance( + byte[] octets) { - super(value); + return (octets[0] != 0) ? TRUE : FALSE; + } + + // END android-added + /** + * return a Boolean from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + * @return an ASN1Boolean instance. + */ + public static ASN1Boolean getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof ASN1Boolean) + { + return getInstance(o); + } + else + { + return ASN1Boolean.fromOctetString(((ASN1OctetString)o).getOctets()); + } + } + + // BEGIN android-changed + protected ASN1Boolean( + // END android-changed + byte[] value) + { + if (value.length != 1) + { + throw new IllegalArgumentException("byte value should have 1 byte in it"); + } + + if (value[0] == 0) + { + this.value = FALSE_VALUE; + } + else if ((value[0] & 0xff) == 0xff) + { + this.value = TRUE_VALUE; + } + else + { + this.value = Arrays.clone(value); + } + } + + /** + * @deprecated use getInstance(boolean) method. + * @param value true or false. + */ + // BEGIN android-changed + protected ASN1Boolean( + boolean value) + // END android-changed + { + this.value = (value) ? TRUE_VALUE : FALSE_VALUE; + } + + public boolean isTrue() + { + return (value[0] != 0); + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 3; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.BOOLEAN, value); + } + + protected boolean asn1Equals( + ASN1Primitive o) + { + if (o instanceof ASN1Boolean) + { + return (value[0] == ((ASN1Boolean)o).value[0]); + } + + return false; + } + + public int hashCode() + { + return value[0]; + } + + + public String toString() + { + return (value[0] != 0) ? "TRUE" : "FALSE"; + } + + static ASN1Boolean fromOctetString(byte[] value) + { + if (value.length != 1) + { + throw new IllegalArgumentException("BOOLEAN value should have 1 byte in it"); + } + + if (value[0] == 0) + { + return FALSE; + } + else if ((value[0] & 0xff) == 0xff) + { + return TRUE; + } + else + { + return new ASN1Boolean(value); + } } } |