Beispiel #1
0
        public static Stream Decrypt(Stream source,
                                     Headers headers, byte[] masterKey)
        {
            byte[] easKey;
            using (var buffer = new MemoryStream())
            {
                var masterSeed = headers.MasterSeed;
                buffer.Write(masterSeed, 0, masterSeed.Length);
                buffer.Write(masterKey, 0, masterKey.Length);

                easKey = BufferEx.GetHash(buffer.ToArray());
            }

            var eas = new AesManaged
            {
                KeySize = 256,
                Key     = BufferEx.Clone(easKey),
                IV      = BufferEx.Clone(headers.EncryptionIV)
            };

            Stream stream = new CryptoStream(source,
                                             eas.CreateDecryptor(),
                                             CryptoStreamMode.Read);

            if (!VerifyStartBytes(headers, stream))
            {
                return(null);
            }

            stream = new HashedBlockStream(stream, true);
            return(headers.Compression == Compressions.GZip
                ? new GZipInputStream(stream) : stream);
        }
Beispiel #2
0
        public byte[] TransformKey(byte[] transformSeed, int rounds)
        {
            var block = BufferEx.Clone(_hash);

            var cipher = new AesEngine();

            cipher.Init(true, new KeyParameter(transformSeed));

            var aesEcb = SymmetricKeyAlgorithmProvider
                         .OpenAlgorithm(SymmetricAlgorithmNames.AesEcb);
            var key = aesEcb.CreateSymmetricKey(
                CryptographicBuffer.CreateFromByteArray(transformSeed));

            for (int i = 0; i < rounds; i++)
            {
                cipher.ProcessBlock(block, 0, block, 0);
                cipher.ProcessBlock(block, 16, block, 16);
            }

            return(BufferEx.GetHash(block));
        }
Beispiel #3
0
        public byte[] TransformKey(byte[] transformSeed, int rounds)
        {
            var block = BufferEx.Clone(_hash);

            var aes = new AesManaged
            {
                KeySize = 256,
                IV      = new byte[16],
                Key     = transformSeed,
            };

            for (var i = 1; i <= rounds; i++)
            {
                // ECB mode is not available in Silverlight
                // Always use a new encrytor to emulate ECB mode.

                aes.CreateEncryptor().TransformBlock(
                    block, 0, 16, block, 0);
                aes.CreateEncryptor().TransformBlock(
                    block, 16, 16, block, 16);
            }

            return(BufferEx.GetHash(block));
        }