Exemplo n.º 1
0
        public async Task TestDecrypt()
        {
            var header = new MS2SizeHeader((uint)this.EncryptedBytes.Length, 21u, 13u);
            {
                byte[] bytes = await CryptoHelper.DecryptDataToDataAsync(MS2CryptoMode.MS2F, header, true, this.EncryptedBytes).ConfigureAwait(false);

                CollectionAssert.AreEqual(this.DecryptedBytes, bytes);
            }

            {
                byte[] bytes = await CryptoHelper.DecryptStreamToDataAsync(MS2CryptoMode.MS2F, header, true, new MemoryStream(this.EncryptedBytes)).ConfigureAwait(false);

                CollectionAssert.AreEqual(this.DecryptedBytes, bytes);
            }

            {
                Stream stream = await CryptoHelper.DecryptStreamToStreamAsync(MS2CryptoMode.MS2F, header, true, new MemoryStream(this.EncryptedBytes)).ConfigureAwait(false);

                byte[] bytes     = new byte[header.Size];
                uint   bytesRead = (uint)await stream.ReadAsync(bytes, 0, (int)header.Size).ConfigureAwait(false);

                Assert.AreEqual(bytesRead, header.Size);
                CollectionAssert.AreEqual(this.DecryptedBytes, bytes);
            }
        }
Exemplo n.º 2
0
        public async Task Write_Data_EqualsTrue()
        {
            MS2SizeHeader expectedHeader    = new MS2SizeHeader(1, 2, 3);
            MS2SizeHeader expectedData      = new MS2SizeHeader(4, 5, 6);
            long          expectedFileCount = 7;

            var obj = new MS2ArchiveHeaderNS2F();

            using var ms = new MemoryStream();
            await obj.WriteAsync(ms, expectedHeader, expectedData, expectedFileCount);

            ms.Position = 0;

            using var br = new BinaryReader(ms);
            long fileCount          = br.ReadUInt32();
            long dataCompressedSize = br.ReadInt64();
            long dataEncodedSize    = br.ReadInt64();
            long size           = br.ReadInt64();
            long compressedSize = br.ReadInt64();
            long encodedSize    = br.ReadInt64();
            long dataSize       = br.ReadInt64();

            var actualFileInfoSize = new MS2SizeHeader(encodedSize, compressedSize, size);
            var actualFileDataSize = new MS2SizeHeader(dataEncodedSize, dataCompressedSize, dataSize);
            var actualFileCount    = fileCount;

            Assert.AreEqual(expectedHeader, actualFileInfoSize);
            Assert.AreEqual(expectedData, actualFileDataSize);
            Assert.AreEqual(expectedFileCount, actualFileCount);
        }
Exemplo n.º 3
0
        public async Task Read_Stream_EqualsTrue()
        {
            MS2SizeHeader expectedHeader    = new MS2SizeHeader(1, 2, 3);
            MS2SizeHeader expectedData      = new MS2SizeHeader(4, 5, 6);
            long          expectedFileCount = 7;

            using var ms = new MemoryStream();
            using var bw = new BinaryWriter(ms);
            bw.Write((uint)expectedFileCount);
            bw.Write(expectedData.CompressedSize);
            bw.Write(expectedData.EncodedSize);
            bw.Write(expectedHeader.Size);
            bw.Write(expectedHeader.CompressedSize);
            bw.Write(expectedHeader.EncodedSize);
            bw.Write(expectedData.Size);
            ms.Position = 0;

            var obj = new MS2ArchiveHeaderNS2F();

            var(actualFileInfoSize, actualFileDataSize, actualFileCount) = await obj.ReadAsync(ms);

            Assert.AreEqual(expectedHeader, actualFileInfoSize);
            Assert.AreEqual(expectedData, actualFileDataSize);
            Assert.AreEqual(expectedFileCount, actualFileCount);
        }
Exemplo n.º 4
0
        public void Equals_SameReference_True()
        {
            var expected = new MS2SizeHeader(1, 2, 3);

            var actual = expected;

            Assert.AreEqual(expected, actual);
        }
Exemplo n.º 5
0
        public void GetHashCode_DifferentValues_False()
        {
            var notExpected = new MS2SizeHeader(1, 2, 3);

            var actual = new MS2SizeHeader(1, 2, 4);

            Assert.AreNotEqual(notExpected.GetHashCode(), actual.GetHashCode());
        }
Exemplo n.º 6
0
        public void GetHashCode_SameValues_True()
        {
            var expected = new MS2SizeHeader(1, 2, 3);

            var actual = new MS2SizeHeader(1, 2, 3);

            Assert.AreEqual(expected.GetHashCode(), actual.GetHashCode());
        }
Exemplo n.º 7
0
        public void Equals_SameValuesDifferentSize_False()
        {
            var notExpected = new MS2SizeHeader(1, 2, 3);

            var actual = new MS2SizeHeader(1, 2, 4);

            Assert.AreNotEqual(notExpected, actual);
        }
Exemplo n.º 8
0
        public void Equals_SameValues_True()
        {
            var expected = new MS2SizeHeader(1, 2, 3);

            var actual = new MS2SizeHeader(1, 2, 3);

            Assert.AreEqual(expected, actual);
        }
Exemplo n.º 9
0
        public async Task GetDecryptionStreamAsync_CompressedSizeDifferentThanDecodedSize_ThrowsArgumentException()
        {
            var    bundle = GetRandomCryptoDataNS2FCompressed();
            string input  = bundle.EncryptedData;

            byte[] inputBytes = Encoding.GetBytes(input);
            using MemoryStream inputStream = new MemoryStream(inputBytes);
            MS2SizeHeader size = new MS2SizeHeader(84, 61, 54);

            await Assert.ThrowsExceptionAsync <ArgumentException>(() => CryptoHelper.GetDecryptionStreamAsync(inputStream, size, Cryptography.NS2F.Key, Cryptography.NS2F.IV, true));
        }
Exemplo n.º 10
0
        public async Task GetDecryptionStreamAsync_UndecodableData_ThrowsIOExceptionWithBase64Text()
        {
            string input = "notbase64decodable";

            byte[] inputBytes = Encoding.GetBytes(input);
            using MemoryStream inputStream = new MemoryStream(inputBytes);
            MS2SizeHeader size = new MS2SizeHeader(84, 61, 54);

            var ex = await Assert.ThrowsExceptionAsync <IOException>(() => CryptoHelper.GetDecryptionStreamAsync(inputStream, size, Cryptography.NS2F.Key, Cryptography.NS2F.IV, true));

            Assert.IsTrue(ex.Message.Contains("base64"));
        }
Exemplo n.º 11
0
        public Task <(IMS2SizeHeader fileInfoSize, IMS2SizeHeader fileDataSize, long fileCount)> ReadAsync(Stream stream)
        {
            using var br = new BinaryReader(stream, Encoding.ASCII, true);

            long fileCount          = br.ReadUInt32();
            long dataCompressedSize = br.ReadInt64();
            long dataEncodedSize    = br.ReadInt64();
            long size           = br.ReadInt64();
            long compressedSize = br.ReadInt64();
            long encodedSize    = br.ReadInt64();
            long dataSize       = br.ReadInt64();

            IMS2SizeHeader fileInfoSize = new MS2SizeHeader(encodedSize, compressedSize, size);
            IMS2SizeHeader fileDataSize = new MS2SizeHeader(dataEncodedSize, dataCompressedSize, dataSize);

            return(Task.FromResult((fileInfoSize, fileDataSize, fileCount)));
        }
Exemplo n.º 12
0
        public async Task GetDecryptionStreamAsync_NS2FWithCompress_EqualsExpected()
        {
            var    bundle   = GetRandomCryptoDataNS2FCompressed();
            string input    = bundle.EncryptedData;
            string expected = bundle.Data;

            byte[] inputBytes = Encoding.GetBytes(input);
            using MemoryStream inputStream = new MemoryStream(inputBytes);
            MS2SizeHeader size = new MS2SizeHeader(84, 62, 54);

            var actualStream = await CryptoHelper.GetDecryptionStreamAsync(inputStream, size, Cryptography.NS2F.Key, Cryptography.NS2F.IV, true);

            byte[] actualBytes = actualStream.ToArray();
            string actual      = Encoding.GetString(actualBytes);

            Assert.AreEqual(expected, actual);
        }
Exemplo n.º 13
0
        public async Task Read_FromWrite_EqualsTrue()
        {
            MS2SizeHeader expectedHeader    = new MS2SizeHeader(1, 2, 3);
            MS2SizeHeader expectedData      = new MS2SizeHeader(4, 5, 6);
            long          expectedFileCount = 7;
            var           obj = new MS2ArchiveHeaderNS2F();

            using var ms = new MemoryStream();
            await obj.WriteAsync(ms, expectedHeader, expectedData, expectedFileCount);

            ms.Position = 0;

            var(actualFileInfoSize, actualFileDataSize, actualFileCount) = await obj.ReadAsync(ms);

            Assert.AreEqual(expectedHeader, actualFileInfoSize);
            Assert.AreEqual(expectedData, actualFileDataSize);
            Assert.AreEqual(expectedFileCount, actualFileCount);
        }
Exemplo n.º 14
0
        public Task <(IMS2SizeHeader fileInfoSize, IMS2SizeHeader fileDataSize, long fileCount)> ReadAsync(Stream stream)
        {
            using var br = new BinaryReader(stream, Encoding.ASCII, true);

            uint unk = br.ReadUInt32(); // TODO: unknown/unused?
            long dataCompressedSize = br.ReadInt64();
            long dataEncodedSize    = br.ReadInt64();
            long size           = br.ReadInt64();
            long compressedSize = br.ReadInt64();
            long encodedSize    = br.ReadInt64();
            long fileCount      = br.ReadInt64();
            long dataSize       = br.ReadInt64();

            Debug.Assert(unk == 0, "unk is not 0. unk=" + unk);

            IMS2SizeHeader fileInfoSize = new MS2SizeHeader(encodedSize, compressedSize, size);
            IMS2SizeHeader fileDataSize = new MS2SizeHeader(dataEncodedSize, dataCompressedSize, dataSize);

            return(Task.FromResult((fileInfoSize, fileDataSize, fileCount)));
        }