private void checkCertReqMsgWithArchiveControl(AsymmetricCipherKeyPair kp, CertificateRequestMessage certReqMessage) { var archiveControl = (PkiArchiveControl)certReqMessage.GetControl(CrmfObjectIdentifiers.id_regCtrl_pkiArchiveOptions); IsEquals("Archive type", PkiArchiveControl.encryptedPrivKey, archiveControl.ArchiveType); IsTrue(archiveControl.EnvelopedData); RecipientInformationStore recips = archiveControl.GetEnvelopedData().GetRecipientInfos(); ArrayList collection = (ArrayList)recips.GetRecipients(); IsTrue(collection.Count == 1); KeyTransRecipientInformation info = (KeyTransRecipientInformation)collection[0]; EncKeyWithID encKeyWithId = EncKeyWithID.GetInstance(info.GetContent(kp.Private)); IsTrue(encKeyWithId.HasIdentifier); IsTrue(!encKeyWithId.IsIdentifierUtf8String); // GeneralName at this point. IsTrue("Name", X509Name.GetInstance(GeneralName.GetInstance(encKeyWithId.Identifier).Name).Equivalent(new X509Name("CN=Test"))); PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(kp.Private); IsTrue("Private Key", Arrays.AreEqual(privateKeyInfo.GetEncoded(), encKeyWithId.PrivateKey.GetEncoded())); }
/// <summary> ///Basic constructor - specify the contents of the PKIArchiveControl structure. /// </summary> /// <param name="privateKeyInfo">the private key to be archived.</param> /// <param name="generalName">the general name to be associated with the private key.</param> /// public PkiArchiveControlBuilder(PrivateKeyInfo privateKeyInfo, GeneralName generalName) { EncKeyWithID encKeyWithID = new EncKeyWithID(privateKeyInfo, generalName); try { this.keyContent = new CmsProcessableByteArray(CrmfObjectIdentifiers.id_ct_encKeyWithID, encKeyWithID.GetEncoded()); } catch (IOException e) { throw new InvalidOperationException("unable to encode key and general name info", e); } this.envGen = new CmsEnvelopedDataGenerator(); }