NoticeReference
using Org.BouncyCastle.Math;
using System;
using System.Collections.Generic;
namespace Org.BouncyCastle.Asn1.X509
{
public class NoticeReference : Asn1Encodable
{
private readonly DisplayText m_organization;
private readonly Asn1Sequence m_noticeNumbers;
public virtual DisplayText Organization => m_organization;
public static NoticeReference GetInstance(object obj)
{
if (obj == null)
return null;
NoticeReference noticeReference = obj as NoticeReference;
if (noticeReference != null)
return noticeReference;
return new NoticeReference(Asn1Sequence.GetInstance(obj));
}
public static NoticeReference GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new NoticeReference(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
}
public static NoticeReference GetOptional(Asn1Encodable element)
{
if (element == null)
throw new ArgumentNullException("element");
NoticeReference noticeReference = element as NoticeReference;
if (noticeReference != null)
return noticeReference;
Asn1Sequence optional = Asn1Sequence.GetOptional(element);
if (optional != null)
return new NoticeReference(optional);
return null;
}
public static NoticeReference GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new NoticeReference(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
private NoticeReference(Asn1Sequence seq)
{
int count = seq.Count;
if (count != 2)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
m_organization = DisplayText.GetInstance(seq[0]);
m_noticeNumbers = Asn1Sequence.GetInstance(seq[1]);
}
public NoticeReference(string organization, IList<object> numbers)
: this(organization, ConvertVector(numbers))
{
}
public NoticeReference(string organization, Asn1EncodableVector noticeNumbers)
: this(new DisplayText(organization), noticeNumbers)
{
}
public NoticeReference(DisplayText organization, Asn1EncodableVector noticeNumbers)
{
if (organization == null)
throw new ArgumentNullException("organization");
m_organization = organization;
m_noticeNumbers = new DerSequence(noticeNumbers);
}
public virtual DerInteger[] GetNoticeNumbers()
{
return m_noticeNumbers.MapElements(DerInteger.GetInstance);
}
public override Asn1Object ToAsn1Object()
{
return new DerSequence(m_organization, m_noticeNumbers);
}
private static Asn1EncodableVector ConvertVector(IList<object> numbers)
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(numbers.Count);
foreach (object number in numbers) {
BigInteger bigInteger = number as BigInteger;
DerInteger element;
if (bigInteger != null)
element = new DerInteger(bigInteger);
else {
if (!(number is int))
throw new ArgumentException();
int value = (int)number;
element = new DerInteger(value);
}
asn1EncodableVector.Add(element);
}
return asn1EncodableVector;
}
}
}