DeltaCertificateDescriptor
using System;
namespace Org.BouncyCastle.Asn1.X509
{
public class DeltaCertificateDescriptor : Asn1Encodable
{
private readonly DerInteger m_serialNumber;
private readonly AlgorithmIdentifier m_signature;
private readonly X509Name m_issuer;
private readonly Validity m_validity;
private readonly X509Name m_subject;
private readonly SubjectPublicKeyInfo m_subjectPublicKeyInfo;
private readonly X509Extensions m_extensions;
private readonly DerBitString m_signatureValue;
public X509Extensions Extensions => m_extensions;
public X509Name Issuer => m_issuer;
public DerInteger SerialNumber => m_serialNumber;
public AlgorithmIdentifier Signature => m_signature;
public DerBitString SignatureValue => m_signatureValue;
public X509Name Subject => m_subject;
public SubjectPublicKeyInfo SubjectPublicKeyInfo => m_subjectPublicKeyInfo;
public Validity Validity => m_validity;
public static DeltaCertificateDescriptor GetInstance(object obj)
{
if (obj == null)
return null;
DeltaCertificateDescriptor deltaCertificateDescriptor = obj as DeltaCertificateDescriptor;
if (deltaCertificateDescriptor != null)
return deltaCertificateDescriptor;
return new DeltaCertificateDescriptor(Asn1Sequence.GetInstance(obj));
}
public static DeltaCertificateDescriptor GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new DeltaCertificateDescriptor(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
}
public static DeltaCertificateDescriptor GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new DeltaCertificateDescriptor(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
public static DeltaCertificateDescriptor FromExtensions(X509Extensions extensions)
{
return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.DRAFT_DeltaCertificateDescriptor));
}
private DeltaCertificateDescriptor(Asn1Sequence seq)
{
int count = seq.Count;
int sequencePosition = 0;
if (count < 3 || count > 8)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
m_serialNumber = DerInteger.GetInstance(seq[sequencePosition++]);
m_signature = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, AlgorithmIdentifier.GetTagged);
m_issuer = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, true, X509Name.GetTagged);
m_validity = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 2, true, Validity.GetTagged);
m_subject = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 3, true, X509Name.GetTagged);
m_subjectPublicKeyInfo = SubjectPublicKeyInfo.GetInstance(seq[sequencePosition++]);
m_extensions = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 4, true, X509Extensions.GetTagged);
m_signatureValue = DerBitString.GetInstance(seq[sequencePosition++]);
if (sequencePosition != count)
throw new ArgumentException("Unexpected elements in sequence", "seq");
}
public DeltaCertificateDescriptor(DerInteger serialNumber, AlgorithmIdentifier signature, X509Name issuer, Validity validity, X509Name subject, SubjectPublicKeyInfo subjectPublicKeyInfo, X509Extensions extensions, DerBitString signatureValue)
{
if (serialNumber == null)
throw new ArgumentNullException("serialNumber");
m_serialNumber = serialNumber;
m_signature = signature;
m_issuer = issuer;
m_validity = validity;
m_subject = subject;
if (subjectPublicKeyInfo == null)
throw new ArgumentNullException("subjectPublicKeyInfo");
m_subjectPublicKeyInfo = subjectPublicKeyInfo;
m_extensions = extensions;
if (signatureValue == null)
throw new ArgumentNullException("signatureValue");
m_signatureValue = signatureValue;
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(8);
asn1EncodableVector.Add(m_serialNumber);
asn1EncodableVector.AddOptionalTagged(true, 0, m_signature);
asn1EncodableVector.AddOptionalTagged(true, 1, m_issuer);
asn1EncodableVector.AddOptionalTagged(true, 2, m_validity);
asn1EncodableVector.AddOptionalTagged(true, 3, m_subject);
asn1EncodableVector.Add(m_subjectPublicKeyInfo);
asn1EncodableVector.AddOptionalTagged(true, 4, m_extensions);
asn1EncodableVector.Add(m_signatureValue);
return new DerSequence(asn1EncodableVector);
}
}
}