Esempio n. 1
0
        public void ReadTest1()
        {
            var key      = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            var ctr      = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            var content  = new byte[] { 0x66, 0xe9, 0x4b, 0xd4, 0xef, 0x8a, 0x2c, 0x3b, 0x88, 0x4c, 0xfa, 0x59, 0xca, 0x34, 0x2b, 0x3f };
            var ms       = new MemoryStream(content);
            var ctrS     = new CtrStream(ms, key, ctr, false);
            var result   = new byte[16];
            var expected = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x11 };

            ctrS.Read(result, 0, 16);

            Assert.IsTrue(result.SequenceEqual(expected));
            Assert.AreEqual(16, ctrS.Position);
            Assert.AreEqual(0, ms.Position);
        }
Esempio n. 2
0
        public void ReadTest3()
        {
            var key     = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            var ctr     = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            var content = new byte[] { 0x66, 0xe9, 0x4b, 0xd4, 0xef, 0x8a, 0x2c, 0x3b, 0x88, 0x4c, 0xfa, 0x59, 0xca, 0x34, 0x2b, 0x2e,
                                       0x47, 0x71, 0x18, 0x16, 0xe9, 0x1d, 0x6f, 0xf0, 0x59, 0xbb, 0xbf, 0x2b, 0xf5, 0x8e, 0x0f, 0xc2 };
            var ms       = new MemoryStream(content);
            var ctrS     = new CtrStream(ms, key, ctr, true);
            var result   = new byte[16];
            var expected = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x11 };

            ctrS.Position = 16;
            ctrS.Read(result, 0, 16);

            Assert.IsTrue(result.SequenceEqual(expected));
            Assert.AreEqual(32, ctrS.Position);
            Assert.AreEqual(0, ms.Position);
        }
Esempio n. 3
0
        private Task <bool> DoCipher(Stream input, Stream output, IProgress <ProgressReport> progress, bool decrypt)
        {
            var key = OnRequestKey("AES128 Ctr Key", 32, out var error);

            if (key == null)
            {
                return(Task.Factory.StartNew(() =>
                {
                    progress.Report(new ProgressReport {
                        Percentage = 0, Message = error
                    });
                    return false;
                }));
            }

            var ctr = OnRequestKey("AES128 Ctr IV", 32, out error);

            if (ctr == null)
            {
                return(Task.Factory.StartNew(() =>
                {
                    progress.Report(new ProgressReport {
                        Percentage = 0, Message = error
                    });
                    return false;
                }));
            }

            return(Task.Factory.StartNew(() =>
            {
                progress.Report(new ProgressReport {
                    Percentage = 0, Message = decrypt ? "Decryption..." : "Encryption..."
                });

                using (var cs = new CtrStream(decrypt ? input : output, key, ctr, true))
                {
                    var buffer = new byte[0x10000];
                    var totalLength = decrypt ? cs.Length : input.Length;
                    while (cs.Position < totalLength)
                    {
                        var length = (int)Math.Min(0x10000, totalLength - cs.Position);

                        if (decrypt)
                        {
                            cs.Read(buffer, 0, length);
                            output.Write(buffer, 0, length);
                        }
                        else
                        {
                            input.Read(buffer, 0, length);
                            cs.Write(buffer, 0, length);
                        }

                        progress.Report(new ProgressReport {
                            Percentage = (double)cs.Position / totalLength * 100, Message = decrypt ? "Decryption..." : "Encryption...",
                        });
                    }
                }

                progress.Report(new ProgressReport {
                    Percentage = 100, Message = decrypt ? "Decryption finished." : "Encryption finished."
                });

                return true;
            }));
        }