using System; namespace Org.BouncyCastle.Asn1.X509 { /** * an object for the elements in the X.509 V3 extension block. */ public class X509Extension { internal bool critical; internal Asn1OctetString value; public X509Extension( DerBoolean critical, Asn1OctetString value) { if (critical == null) { throw new ArgumentNullException("critical"); } this.critical = critical.IsTrue; this.value = value; } public X509Extension( bool critical, Asn1OctetString value) { this.critical = critical; this.value = value; } public bool IsCritical { get { return critical; } } public Asn1OctetString Value { get { return value; } } public Asn1Object GetParsedValue() { return ConvertValueToObject(this); } public override int GetHashCode() { int vh = this.Value.GetHashCode(); return IsCritical ? vh : ~vh; } public override bool Equals( object obj) { X509Extension other = obj as X509Extension; if (other == null) { return false; } return Value.Equals(other.Value) && IsCritical == other.IsCritical; } /// Convert the value of the passed in extension to an object. /// The extension to parse. /// The object the value string contains. /// If conversion is not possible. public static Asn1Object ConvertValueToObject( X509Extension ext) { try { return Asn1Object.FromByteArray(ext.Value.GetOctets()); } catch (Exception e) { throw new ArgumentException("can't convert extension", e); } } } }