コード例 #1
0
        public void TestKeyTransAes128Buffered()
        {
            byte[] data = new byte[2000];
            for (int i = 0; i != 2000; i++)
            {
                data[i] = (byte)(i & 0xff);
            }

            //
            // unbuffered
            //
            CmsEnvelopedDataStreamGenerator edGen = new CmsEnvelopedDataStreamGenerator();

            edGen.AddKeyTransRecipient(ReciCert);

            MemoryStream bOut = new MemoryStream();

            Stream outStream = edGen.Open(
                bOut, CmsEnvelopedDataGenerator.Aes128Cbc);

            for (int i = 0; i != 2000; i++)
            {
                outStream.WriteByte(data[i]);
            }

            outStream.Close();

            VerifyData(bOut.ToArray(), CmsEnvelopedDataGenerator.Aes128Cbc, data);

            int unbufferedLength = bOut.ToArray().Length;

            //
            // buffered - less than default of 1000
            //
            edGen = new CmsEnvelopedDataStreamGenerator();

            edGen.SetBufferSize(300);

            edGen.AddKeyTransRecipient(ReciCert);

            bOut.SetLength(0);

            outStream = edGen.Open(bOut, CmsEnvelopedDataGenerator.Aes128Cbc);

            for (int i = 0; i != 2000; i++)
            {
                outStream.WriteByte(data[i]);
            }

            outStream.Close();

            VerifyData(bOut.ToArray(), CmsEnvelopedDataGenerator.Aes128Cbc, data);

            Assert.IsTrue(unbufferedLength < bOut.ToArray().Length);
        }
コード例 #2
0
        public void TestKeyTransAes128Throughput()
        {
            byte[] data = new byte[40001];
            for (int i = 0; i != data.Length; i++)
            {
                data[i] = (byte)(i & 0xff);
            }

            //
            // buffered
            //
            CmsEnvelopedDataStreamGenerator edGen = new CmsEnvelopedDataStreamGenerator();

            edGen.SetBufferSize(BufferSize);

            edGen.AddKeyTransRecipient(ReciCert);

            MemoryStream bOut = new MemoryStream();

            Stream outStream = edGen.Open(bOut, CmsEnvelopedDataGenerator.Aes128Cbc);

            for (int i = 0; i != data.Length; i++)
            {
                outStream.WriteByte(data[i]);
            }

            outStream.Close();

            CmsEnvelopedDataParser    ep         = new CmsEnvelopedDataParser(bOut.ToArray());
            RecipientInformationStore recipients = ep.GetRecipientInfos();
            ICollection c = recipients.GetRecipients();

            IEnumerator e = c.GetEnumerator();

            if (e.MoveNext())
            {
                RecipientInformation recipient = (RecipientInformation)e.Current;

                Assert.AreEqual(recipient.KeyEncryptionAlgOid, PkcsObjectIdentifiers.RsaEncryption.Id);

                CmsTypedStream recData = recipient.GetContentStream(ReciKP.Private);

                Stream       dataStream = recData.ContentStream;
                MemoryStream dataOut    = new MemoryStream();
                int          len;
                byte[]       buf   = new byte[BufferSize];
                int          count = 0;

                while (count != 10 && (len = dataStream.Read(buf, 0, buf.Length)) > 0)
                {
                    Assert.AreEqual(buf.Length, len);

                    dataOut.Write(buf, 0, buf.Length);
                    count++;
                }

                len = dataStream.Read(buf, 0, buf.Length);
                dataOut.Write(buf, 0, len);

                Assert.IsTrue(Arrays.AreEqual(data, dataOut.ToArray()));
            }
            else
            {
                Assert.Fail("recipient not found.");
            }
        }