CertOrEncCert
using Org.BouncyCastle.Asn1.Crmf;
using System;
namespace Org.BouncyCastle.Asn1.Cmp
{
public class CertOrEncCert : Asn1Encodable, IAsn1Choice
{
private readonly CmpCertificate m_certificate;
private readonly EncryptedKey m_encryptedCert;
public virtual CmpCertificate Certificate => m_certificate;
public virtual EncryptedKey EncryptedCert => m_encryptedCert;
public virtual bool HasEncryptedCertificate => m_encryptedCert != null;
public static CertOrEncCert GetInstance(object obj)
{
if (obj == null)
return null;
CertOrEncCert certOrEncCert = obj as CertOrEncCert;
if (certOrEncCert != null)
return certOrEncCert;
return new CertOrEncCert(Asn1TaggedObject.GetInstance(obj, 128));
}
public static CertOrEncCert GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return Asn1Utilities.GetInstanceFromChoice(taggedObject, declaredExplicit, GetInstance);
}
private CertOrEncCert(Asn1TaggedObject taggedObject)
{
if (taggedObject.HasContextTag(0))
m_certificate = CmpCertificate.GetInstance(taggedObject.GetExplicitBaseObject());
else {
if (!taggedObject.HasContextTag(1))
throw new ArgumentException("unknown tag: " + Asn1Utilities.GetTagText(taggedObject), "taggedObject");
m_encryptedCert = EncryptedKey.GetInstance(taggedObject.GetExplicitBaseObject());
}
}
public CertOrEncCert(CmpCertificate certificate)
{
if (certificate == null)
throw new ArgumentNullException("certificate");
m_certificate = certificate;
}
public CertOrEncCert(EncryptedValue encryptedValue)
{
if (encryptedValue == null)
throw new ArgumentNullException("encryptedValue");
m_encryptedCert = new EncryptedKey(encryptedValue);
}
public CertOrEncCert(EncryptedKey encryptedKey)
{
if (encryptedKey == null)
throw new ArgumentNullException("encryptedKey");
m_encryptedCert = encryptedKey;
}
public override Asn1Object ToAsn1Object()
{
if (m_certificate != null)
return new DerTaggedObject(true, 0, m_certificate);
if (m_encryptedCert != null)
return new DerTaggedObject(true, 1, m_encryptedCert);
throw new InvalidOperationException();
}
}
}