DerBoolean
using Org.BouncyCastle.Utilities;
using System;
using System.IO;
namespace Org.BouncyCastle.Asn1
{
public class DerBoolean : Asn1Object
{
internal class Meta : Asn1UniversalType
{
internal static readonly Asn1UniversalType Instance = new Meta();
private Meta()
: base(typeof(DerBoolean), 1)
{
}
internal override Asn1Object FromImplicitPrimitive(DerOctetString octetString)
{
return CreatePrimitive(octetString.GetOctets());
}
}
public static readonly DerBoolean False = new DerBoolean(false);
public static readonly DerBoolean True = new DerBoolean(true);
private readonly byte value;
public bool IsTrue => value != 0;
public static DerBoolean GetInstance(object obj)
{
if (obj == null)
return null;
DerBoolean derBoolean = obj as DerBoolean;
if (derBoolean != null)
return derBoolean;
IAsn1Convertible asn1Convertible = obj as IAsn1Convertible;
if (asn1Convertible != null) {
DerBoolean derBoolean2 = asn1Convertible.ToAsn1Object() as DerBoolean;
if (derBoolean2 != null)
return derBoolean2;
} else {
byte[] array = obj as byte[];
if (array != null)
try {
return (DerBoolean)Meta.Instance.FromByteArray(array);
} catch (IOException ex) {
throw new ArgumentException("failed to construct boolean from byte[]: " + ex.Message);
}
}
throw new ArgumentException("illegal object in GetInstance: " + Platform.GetTypeName(obj));
}
public static DerBoolean GetInstance(bool value)
{
if (!value)
return False;
return True;
}
public static DerBoolean GetInstance(int value)
{
if (value == 0)
return False;
return True;
}
public static DerBoolean GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return (DerBoolean)Meta.Instance.GetContextInstance(taggedObject, declaredExplicit);
}
public DerBoolean(byte[] val)
{
if (val.Length != 1)
throw new ArgumentException("byte value should have 1 byte in it", "val");
value = val[0];
}
private DerBoolean(bool value)
{
this.value = (byte)(value ? 255 : 0);
}
internal override IAsn1Encoding GetEncoding(int encoding)
{
return new PrimitiveEncoding(0, 1, GetContents(encoding));
}
internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo)
{
return new PrimitiveEncoding(tagClass, tagNo, GetContents(encoding));
}
internal sealed override DerEncoding GetEncodingDer()
{
return new PrimitiveDerEncoding(0, 1, GetContents(3));
}
internal sealed override DerEncoding GetEncodingDerImplicit(int tagClass, int tagNo)
{
return new PrimitiveDerEncoding(tagClass, tagNo, GetContents(3));
}
protected override bool Asn1Equals(Asn1Object asn1Object)
{
DerBoolean derBoolean = asn1Object as DerBoolean;
if (derBoolean == null)
return false;
return IsTrue == derBoolean.IsTrue;
}
protected override int Asn1GetHashCode()
{
return IsTrue.GetHashCode();
}
public override string ToString()
{
if (!IsTrue)
return "FALSE";
return "TRUE";
}
internal static DerBoolean CreatePrimitive(byte[] contents)
{
if (contents.Length == 1) {
switch (contents[0]) {
default:
return new DerBoolean(contents);
case byte.MaxValue:
return True;
case 0:
return False;
}
}
throw new ArgumentException("BOOLEAN value should have 1 byte in it", "contents");
}
private byte[] GetContents(int encoding)
{
byte b = value;
if (3 == encoding && IsTrue)
b = byte.MaxValue;
return new byte[1] {
b
};
}
}
}