using System; using Org.BouncyCastle.Asn1; using Org.BouncyCastle.Asn1.Cms; using Org.BouncyCastle.Asn1.Crmf; using Org.BouncyCastle.Cms; namespace Org.BouncyCastle.Crmf { public class PkiArchiveControl : IControl { public static readonly int encryptedPrivKey = PkiArchiveOptions.encryptedPrivKey; public static readonly int keyGenParameters = PkiArchiveOptions.keyGenParameters; public static readonly int archiveRemGenPrivKey = PkiArchiveOptions.archiveRemGenPrivKey; private static readonly DerObjectIdentifier type = CrmfObjectIdentifiers.id_regCtrl_pkiArchiveOptions; private readonly PkiArchiveOptions pkiArchiveOptions; /// /// Basic constructor - build from an PKIArchiveOptions structure. /// /// the ASN.1 structure that will underlie this control. public PkiArchiveControl(PkiArchiveOptions pkiArchiveOptions) { this.pkiArchiveOptions = pkiArchiveOptions; } /// /// Return the type of this control. /// /// CRMFObjectIdentifiers.id_regCtrl_pkiArchiveOptions public DerObjectIdentifier Type { get { return type; } } /// /// Return the underlying ASN.1 object. /// /// a PKIArchiveOptions structure. public Asn1Encodable Value { get { return pkiArchiveOptions; } } /// /// Return the archive control type, one of: encryptedPrivKey,keyGenParameters,or archiveRemGenPrivKey. /// /// the archive control type. public int ArchiveType { get { return pkiArchiveOptions.Type; } } /// /// Return whether this control contains enveloped data. /// /// true if the control contains enveloped data, false otherwise. public bool EnvelopedData { get { EncryptedKey encKey = EncryptedKey.GetInstance(pkiArchiveOptions.Value); return !encKey.IsEncryptedValue; } } /// /// Return the enveloped data structure contained in this control. /// /// a CMSEnvelopedData object. public CmsEnvelopedData GetEnvelopedData() { try { EncryptedKey encKey = EncryptedKey.GetInstance(pkiArchiveOptions.Value); EnvelopedData data = Org.BouncyCastle.Asn1.Cms.EnvelopedData.GetInstance(encKey.Value); return new CmsEnvelopedData(new ContentInfo(CmsObjectIdentifiers.EnvelopedData, data)); } catch (CmsException e) { throw new CrmfException("CMS parsing error: " + e.Message, e); } catch (Exception e) { throw new CrmfException("CRMF parsing error: " + e.Message, e); } } } }