using System; using Org.BouncyCastle.Asn1; using Org.BouncyCastle.Asn1.X509; using Org.BouncyCastle.Utilities.Collections; namespace Org.BouncyCastle.X509 { public abstract class X509ExtensionBase : IX509Extension { protected abstract X509Extensions GetX509Extensions(); protected virtual ISet GetExtensionOids( bool critical) { X509Extensions extensions = GetX509Extensions(); if (extensions != null) { HashSet set = new HashSet(); foreach (DerObjectIdentifier oid in extensions.ExtensionOids) { X509Extension ext = extensions.GetExtension(oid); if (ext.IsCritical == critical) { set.Add(oid.Id); } } return set; } return null; } /// /// Get non critical extensions. /// /// A set of non critical extension oids. public virtual ISet GetNonCriticalExtensionOids() { return GetExtensionOids(false); } /// /// Get any critical extensions. /// /// A sorted list of critical entension. public virtual ISet GetCriticalExtensionOids() { return GetExtensionOids(true); } /// /// Get the value of a given extension. /// /// The object ID of the extension. /// An Asn1OctetString object if that extension is found or null if not. [Obsolete("Use version taking a DerObjectIdentifier instead")] public Asn1OctetString GetExtensionValue( string oid) { return GetExtensionValue(new DerObjectIdentifier(oid)); } public virtual Asn1OctetString GetExtensionValue( DerObjectIdentifier oid) { X509Extensions exts = GetX509Extensions(); if (exts != null) { X509Extension ext = exts.GetExtension(oid); if (ext != null) { return ext.Value; } } return null; } } }