Пример #1
0
        public void TestBasicMessageWithArchiveControl()
        {
            var rsaKeyPairGenerator = new RsaKeyPairGenerator();

            rsaKeyPairGenerator.Init(new RsaKeyGenerationParameters(BigInteger.ValueOf(65537), new SecureRandom(), 2048, 100));
            var rsaKeyPair = rsaKeyPairGenerator.GenerateKeyPair();

            var tcb = new TestCertBuilder()
            {
                PublicKey          = rsaKeyPair.Public,
                Subject            = new X509Name("CN=Test"),
                Issuer             = new X509Name("CN=Test"),
                NotBefore          = DateTime.UtcNow.AddDays(-1),
                NotAfter           = DateTime.UtcNow.AddDays(1),
                SignatureAlgorithm = "Sha1WithRSAEncryption"
            };

            var cert = tcb.Build(rsaKeyPair.Private);

            var publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(rsaKeyPair.Public);
            var privateInfo   = PrivateKeyInfoFactory.CreatePrivateKeyInfo(rsaKeyPair.Private);


            var certificateRequestMessageBuilder = new CertificateRequestMessageBuilder(BigInteger.One);

            certificateRequestMessageBuilder.SetSubject(new X509Name("CN=Test"));
            certificateRequestMessageBuilder.SetPublicKey(publicKeyInfo);

            certificateRequestMessageBuilder.AddControl(
                new PkiArchiveControlBuilder(privateInfo, new GeneralName(new X509Name("CN=Test")))
                .AddRecipientGenerator(new CmsKeyTransRecipientInfoGenerator(cert, new Asn1KeyWrapper("RSA/None/OAEPwithSHA256andMGF1Padding", cert)))
                .Build(new CmsContentEncryptorBuilder(NistObjectIdentifiers.IdAes128Cbc).Build())
                );

            var msg = certificateRequestMessageBuilder.Build();

            IsTrue(Arrays.AreEqual(msg.GetCertTemplate().Subject.GetEncoded(), new X509Name("CN=Test").GetEncoded()));
            IsTrue(Arrays.AreEqual(msg.GetCertTemplate().PublicKey.GetEncoded(), publicKeyInfo.GetEncoded()));

            checkCertReqMsgWithArchiveControl(rsaKeyPair, msg);
            checkCertReqMsgWithArchiveControl(rsaKeyPair, new CertificateRequestMessage(msg.GetEncoded()));
        }