CertifiedKeyPair
using Org.BouncyCastle.Asn1.Crmf;
using System;
namespace Org.BouncyCastle.Asn1.Cmp
{
public class CertifiedKeyPair : Asn1Encodable
{
private readonly CertOrEncCert m_certOrEncCert;
private readonly EncryptedKey m_privateKey;
private readonly PkiPublicationInfo m_publicationInfo;
public virtual CertOrEncCert CertOrEncCert => m_certOrEncCert;
public virtual EncryptedKey PrivateKey => m_privateKey;
public virtual PkiPublicationInfo PublicationInfo => m_publicationInfo;
public static CertifiedKeyPair GetInstance(object obj)
{
if (obj == null)
return null;
CertifiedKeyPair certifiedKeyPair = obj as CertifiedKeyPair;
if (certifiedKeyPair != null)
return certifiedKeyPair;
return new CertifiedKeyPair(Asn1Sequence.GetInstance(obj));
}
public static CertifiedKeyPair GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new CertifiedKeyPair(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
}
public static CertifiedKeyPair GetOptional(Asn1Encodable element)
{
if (element == null)
throw new ArgumentNullException("element");
CertifiedKeyPair certifiedKeyPair = element as CertifiedKeyPair;
if (certifiedKeyPair != null)
return certifiedKeyPair;
Asn1Sequence optional = Asn1Sequence.GetOptional(element);
if (optional != null)
return new CertifiedKeyPair(optional);
return null;
}
public static CertifiedKeyPair GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new CertifiedKeyPair(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
private CertifiedKeyPair(Asn1Sequence seq)
{
int count = seq.Count;
int sequencePosition = 0;
if (count < 1 || count > 3)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
m_certOrEncCert = CertOrEncCert.GetInstance(seq[sequencePosition++]);
m_privateKey = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, EncryptedKey.GetTagged);
m_publicationInfo = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, true, PkiPublicationInfo.GetTagged);
if (sequencePosition != count)
throw new ArgumentException("Unexpected elements in sequence", "seq");
}
public CertifiedKeyPair(CertOrEncCert certOrEncCert)
: this(certOrEncCert, (EncryptedKey)null, (PkiPublicationInfo)null)
{
}
[Obsolete("Use constructor with EncryptedKey instead")]
public CertifiedKeyPair(CertOrEncCert certOrEncCert, EncryptedValue privateKey, PkiPublicationInfo publicationInfo)
: this(certOrEncCert, (privateKey == null) ? null : new EncryptedKey(privateKey), publicationInfo)
{
}
public CertifiedKeyPair(CertOrEncCert certOrEncCert, EncryptedKey privateKey, PkiPublicationInfo publicationInfo)
{
if (certOrEncCert == null)
throw new ArgumentNullException("certOrEncCert");
m_certOrEncCert = certOrEncCert;
m_privateKey = privateKey;
m_publicationInfo = publicationInfo;
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(3);
asn1EncodableVector.Add(m_certOrEncCert);
asn1EncodableVector.AddOptionalTagged(true, 0, m_privateKey);
asn1EncodableVector.AddOptionalTagged(true, 1, m_publicationInfo);
return new DerSequence(asn1EncodableVector);
}
}
}