예제 #1
0
        private void SetContentKeyFromHeader(byte[] headerBytes)
        {
            var decryptedBytes = new byte[headerBytes.Length];

            using (MemoryStream inStream = new MemoryStream(headerBytes))
            {
                using (CryptoStream decryptStream = new CryptoStream(inStream, HeaderCryptoProvider.CreateDecryptor(), CryptoStreamMode.Read))
                {
                    if (decryptStream.Read(decryptedBytes, 0, decryptedBytes.Length) == decryptedBytes.Length)
                    {
                        var key = new byte[ContentCryptoProvder.Key.Length];

                        var iv = new byte[ContentCryptoProvder.IV.Length];

                        Array.ConstrainedCopy(decryptedBytes, GetKeyHeaderOffset(), key, 0, key.Length);

                        Array.ConstrainedCopy(decryptedBytes, GetIVHeaderOffset(), iv, 0, iv.Length);

                        ContentCryptoProvder.Key = key;

                        ContentCryptoProvder.IV = iv;
                    }
                }
            }
        }
예제 #2
0
        private byte[] GetEncryptedHeaderBytes()
        {
            var contentKeyBytes = GetClearHeader();

            var encryptedContentKeyBytes = new byte[PasswordKeyHash.Length + HeaderCryptoProvider.IV.Length + contentKeyBytes.Length];

            using (MemoryStream buffStream = new MemoryStream(encryptedContentKeyBytes))
            {
                //write the password hash to the buffer for password validation
                buffStream.Write(PasswordKeyHash, 0, PasswordKeyHash.Length);

                //write the header IV to the buffer for header decryption
                buffStream.Write(HeaderCryptoProvider.IV, 0, HeaderCryptoProvider.IV.Length);

                using (CryptoStream csEncrypt = new CryptoStream(buffStream, HeaderCryptoProvider.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    csEncrypt.Write(contentKeyBytes, 0, contentKeyBytes.Length);
                }
            }

            return(encryptedContentKeyBytes);
        }