using System; using System.Collections.Generic; using Org.BouncyCastle.Asn1; using Org.BouncyCastle.Asn1.X509; 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) return null; var set = new HashSet(); foreach (DerObjectIdentifier oid in extensions.ExtensionOids) { X509Extension ext = extensions.GetExtension(oid); if (ext.IsCritical == critical) { set.Add(oid.Id); } } return set; } /// /// 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); } public virtual X509Extension GetExtension(DerObjectIdentifier oid) => GetX509Extensions()?.GetExtension(oid); public virtual Asn1Object GetExtensionParsedValue(DerObjectIdentifier oid) => GetX509Extensions()?.GetExtensionParsedValue(oid); public virtual Asn1OctetString GetExtensionValue(DerObjectIdentifier oid) => GetX509Extensions()?.GetExtensionValue(oid); } }