1 files changed, 70 insertions, 0 deletions
diff --git a/crypto/src/crmf/PkiArchiveControl.cs b/crypto/src/crmf/PkiArchiveControl.cs
new file mode 100644
index 000000000..ec8fb7671
--- /dev/null
+++ b/crypto/src/crmf/PkiArchiveControl.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+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;
+
+ public PkiArchiveControl(PkiArchiveOptions pkiArchiveOptions)
+ {
+ this.pkiArchiveOptions = pkiArchiveOptions;
+ }
+
+ public DerObjectIdentifier Type
+ {
+ get { return type; }
+ }
+
+ public Asn1Encodable Value
+ {
+ get { return pkiArchiveOptions; }
+ }
+
+ public int ArchiveType
+ {
+ get { return pkiArchiveOptions.Type; }
+ }
+
+ public bool EnvelopedData
+ {
+ get
+ {
+ EncryptedKey encKey = EncryptedKey.GetInstance(pkiArchiveOptions.Value);
+ return !encKey.IsEncryptedValue;
+ }
+ }
+
+ 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);
+ }
+ }
+
+ }
+}
|