diff options
Diffstat (limited to 'crypto/src/asn1/DerBoolean.cs')
-rw-r--r-- | crypto/src/asn1/DerBoolean.cs | 86 |
1 files changed, 49 insertions, 37 deletions
diff --git a/crypto/src/asn1/DerBoolean.cs b/crypto/src/asn1/DerBoolean.cs index 41ccae8a1..66791d16c 100644 --- a/crypto/src/asn1/DerBoolean.cs +++ b/crypto/src/asn1/DerBoolean.cs @@ -7,10 +7,10 @@ namespace Org.BouncyCastle.Asn1 { private readonly byte value; - public static readonly DerBoolean False = new DerBoolean(false); + public static readonly DerBoolean False = new DerBoolean(false); public static readonly DerBoolean True = new DerBoolean(true); - /** + /** * return a bool from the passed in object. * * @exception ArgumentException if the object cannot be converted. @@ -23,10 +23,10 @@ namespace Org.BouncyCastle.Asn1 return (DerBoolean) obj; } - throw new ArgumentException("illegal object in GetInstance: " + obj.GetType().Name); + throw new ArgumentException("illegal object in GetInstance: " + obj.GetType().Name); } - /** + /** * return a DerBoolean from the passed in bool. */ public static DerBoolean GetInstance( @@ -35,7 +35,7 @@ namespace Org.BouncyCastle.Asn1 return value ? True : False; } - /** + /** * return a Boolean from a tagged object. * * @param obj the tagged object holding the object we want @@ -48,63 +48,75 @@ namespace Org.BouncyCastle.Asn1 Asn1TaggedObject obj, bool isExplicit) { - Asn1Object o = obj.GetObject(); + Asn1Object o = obj.GetObject(); - if (isExplicit || o is DerBoolean) - { - return GetInstance(o); - } + if (isExplicit || o is DerBoolean) + { + return GetInstance(o); + } - return new DerBoolean(((Asn1OctetString)o).GetOctets()); + return FromOctetString(((Asn1OctetString)o).GetOctets()); } - public DerBoolean( + public DerBoolean( byte[] val) { - if (val.Length != 1) - throw new ArgumentException("byte value should have 1 byte in it", "val"); + if (val.Length != 1) + throw new ArgumentException("byte value should have 1 byte in it", "val"); - // TODO Are there any constraints on the possible byte values? + // TODO Are there any constraints on the possible byte values? this.value = val[0]; } - private DerBoolean( + private DerBoolean( bool value) { this.value = value ? (byte)0xff : (byte)0; } - public bool IsTrue - { - get { return value != 0; } - } + public bool IsTrue + { + get { return value != 0; } + } - internal override void Encode( + internal override void Encode( DerOutputStream derOut) { - // TODO Should we make sure the byte value is one of '0' or '0xff' here? - derOut.WriteEncoded(Asn1Tags.Boolean, new byte[]{ value }); + // TODO Should we make sure the byte value is one of '0' or '0xff' here? + derOut.WriteEncoded(Asn1Tags.Boolean, new byte[]{ value }); } - protected override bool Asn1Equals( - Asn1Object asn1Object) + protected override bool Asn1Equals( + Asn1Object asn1Object) { - DerBoolean other = asn1Object as DerBoolean; + DerBoolean other = asn1Object as DerBoolean; - if (other == null) - return false; + if (other == null) + return false; - return IsTrue == other.IsTrue; + return IsTrue == other.IsTrue; + } + + protected override int Asn1GetHashCode() + { + return IsTrue.GetHashCode(); } - protected override int Asn1GetHashCode() - { - return IsTrue.GetHashCode(); + public override string ToString() + { + return IsTrue ? "TRUE" : "FALSE"; } - public override string ToString() - { - return IsTrue ? "TRUE" : "FALSE"; - } - } + internal static DerBoolean FromOctetString(byte[] value) + { + if (value.Length != 1) + { + throw new ArgumentException("BOOLEAN value should have 1 byte in it", "value"); + } + + byte b = value[0]; + + return b == 0 ? False : b == 0xFF ? True : new DerBoolean(value); + } + } } |