PolicyMappings
using System;
using System.Collections.Generic;
namespace Org.BouncyCastle.Asn1.X509
{
public class PolicyMappings : Asn1Encodable
{
public class Element : Asn1Encodable
{
private readonly DerObjectIdentifier m_issuerDomainPolicy;
private readonly DerObjectIdentifier m_subjectDomainPolicy;
public DerObjectIdentifier IssuerDomainPolicy => m_issuerDomainPolicy;
public DerObjectIdentifier SubjectDomainPolicy => m_subjectDomainPolicy;
public static Element GetInstance(object obj)
{
if (obj == null)
return null;
Element element = obj as Element;
if (element != null)
return element;
return new Element(Asn1Sequence.GetInstance(obj));
}
public static Element GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new Element(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
private Element(Asn1Sequence seq)
{
int count = seq.Count;
if (count != 2)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
m_issuerDomainPolicy = DerObjectIdentifier.GetInstance(seq[0]);
m_subjectDomainPolicy = DerObjectIdentifier.GetInstance(seq[1]);
}
public Element(DerObjectIdentifier issuerDomainPolicy, DerObjectIdentifier subjectDomainPolicy)
{
if (issuerDomainPolicy == null)
throw new ArgumentNullException("issuerDomainPolicy");
m_issuerDomainPolicy = issuerDomainPolicy;
if (subjectDomainPolicy == null)
throw new ArgumentNullException("subjectDomainPolicy");
m_subjectDomainPolicy = subjectDomainPolicy;
}
public override Asn1Object ToAsn1Object()
{
return new DLSequence(m_issuerDomainPolicy, m_subjectDomainPolicy);
}
}
private readonly Asn1Sequence m_elements;
public Asn1Sequence Elements => m_elements;
public static PolicyMappings GetInstance(object obj)
{
if (obj == null)
return null;
PolicyMappings policyMappings = obj as PolicyMappings;
if (policyMappings != null)
return policyMappings;
return new PolicyMappings(Asn1Sequence.GetInstance(obj));
}
public static PolicyMappings GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new PolicyMappings(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
[Obsolete("Use 'GetInstance' instead")]
public PolicyMappings(Asn1Sequence seq)
{
m_elements = DLSequence.Map(seq, Element.GetInstance);
}
public PolicyMappings(IDictionary<string, string> mappings)
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(mappings.Count);
foreach (KeyValuePair<string, string> mapping in mappings) {
DerObjectIdentifier issuerDomainPolicy = new DerObjectIdentifier(mapping.Key);
DerObjectIdentifier subjectDomainPolicy = new DerObjectIdentifier(mapping.Value);
asn1EncodableVector.Add(new Element(issuerDomainPolicy, subjectDomainPolicy));
}
m_elements = DLSequence.FromVector(asn1EncodableVector);
}
public PolicyMappings(IDictionary<DerObjectIdentifier, DerObjectIdentifier> mappings)
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(mappings.Count);
foreach (KeyValuePair<DerObjectIdentifier, DerObjectIdentifier> mapping in mappings) {
asn1EncodableVector.Add(new Element(mapping.Key, mapping.Value));
}
m_elements = DLSequence.FromVector(asn1EncodableVector);
}
public Element[] GetElements()
{
return m_elements.MapElements(Element.GetInstance);
}
public override Asn1Object ToAsn1Object()
{
return m_elements;
}
}
}