ExtendedKeyUsage
using System.Collections.Generic;
namespace Org.BouncyCastle.Asn1.X509
{
public class ExtendedKeyUsage : Asn1Encodable
{
private readonly HashSet<DerObjectIdentifier> m_usageTable = new HashSet<DerObjectIdentifier>();
private readonly Asn1Sequence m_seq;
public int Count => m_usageTable.Count;
public static ExtendedKeyUsage GetInstance(object obj)
{
if (obj == null)
return null;
ExtendedKeyUsage extendedKeyUsage = obj as ExtendedKeyUsage;
if (extendedKeyUsage != null)
return extendedKeyUsage;
X509Extension x509Extension = obj as X509Extension;
if (x509Extension != null)
return GetInstance(X509Extension.ConvertValueToObject(x509Extension));
return new ExtendedKeyUsage(Asn1Sequence.GetInstance(obj));
}
public static ExtendedKeyUsage GetInstance(Asn1TaggedObject obj, bool explicitly)
{
return new ExtendedKeyUsage(Asn1Sequence.GetInstance(obj, explicitly));
}
public static ExtendedKeyUsage GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new ExtendedKeyUsage(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
public static ExtendedKeyUsage FromExtensions(X509Extensions extensions)
{
return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.ExtendedKeyUsage));
}
private ExtendedKeyUsage(Asn1Sequence seq)
{
m_seq = seq;
foreach (Asn1Encodable item in seq) {
DerObjectIdentifier instance = DerObjectIdentifier.GetInstance(item);
m_usageTable.Add(instance);
}
}
public ExtendedKeyUsage(params KeyPurposeID[] usages)
{
m_seq = new DerSequence(usages);
foreach (KeyPurposeID item in usages) {
m_usageTable.Add(item);
}
}
public ExtendedKeyUsage(IEnumerable<DerObjectIdentifier> usages)
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector();
foreach (DerObjectIdentifier usage in usages) {
asn1EncodableVector.Add(usage);
m_usageTable.Add(usage);
}
m_seq = new DerSequence(asn1EncodableVector);
}
public bool HasKeyPurposeId(KeyPurposeID keyPurposeId)
{
return m_usageTable.Contains(keyPurposeId);
}
public IList<DerObjectIdentifier> GetAllUsages()
{
return new List<DerObjectIdentifier>(m_usageTable);
}
public DerObjectIdentifier[] GetAllUsagesArray()
{
return m_seq.MapElements(DerObjectIdentifier.GetInstance);
}
public override Asn1Object ToAsn1Object()
{
return m_seq;
}
}
}