public void TestLoadWithInvalidPassphrase() { Headers headers = new Headers(); V2Aes256CryptoFactory cryptoFactory = new V2Aes256CryptoFactory(); headers.HeaderBlocks.Add(new PreambleHeaderBlock()); headers.HeaderBlocks.Add(new VersionHeaderBlock(new byte[] { 4, 0, 2, 0, 0 })); V2KeyWrapHeaderBlock originalKeyWrapBlock = new V2KeyWrapHeaderBlock(cryptoFactory, new V2DerivedKey(new Passphrase("RealKey"), 256), 10); V2KeyWrapHeaderBlock headerKeyWrapBlock = new V2KeyWrapHeaderBlock(originalKeyWrapBlock.GetDataBlockBytes()); headers.HeaderBlocks.Add(headerKeyWrapBlock); headers.HeaderBlocks.Add(new FileInfoEncryptedHeaderBlock(new byte[0])); headers.HeaderBlocks.Add(new V2CompressionEncryptedHeaderBlock(new byte[1])); headers.HeaderBlocks.Add(new V2UnicodeFileNameInfoEncryptedHeaderBlock(new byte[0])); headers.HeaderBlocks.Add(new DataHeaderBlock()); IDerivedKey key; key = cryptoFactory.RestoreDerivedKey(new Passphrase("WrongKey"), headerKeyWrapBlock.DerivationSalt, headerKeyWrapBlock.DerivationIterations); headerKeyWrapBlock.SetDerivedKey(cryptoFactory, key); V2DocumentHeaders documentHeaders = new V2DocumentHeaders(headerKeyWrapBlock); Assert.That(documentHeaders.Load(headers), Is.False); key = cryptoFactory.RestoreDerivedKey(new Passphrase("AnotherWrongKey"), headerKeyWrapBlock.DerivationSalt, headerKeyWrapBlock.DerivationIterations); headerKeyWrapBlock.SetDerivedKey(cryptoFactory, key); documentHeaders = new V2DocumentHeaders(headerKeyWrapBlock); Assert.That(documentHeaders.Load(headers), Is.False); key = cryptoFactory.RestoreDerivedKey(new Passphrase("RealKey"), headerKeyWrapBlock.DerivationSalt, headerKeyWrapBlock.DerivationIterations); headerKeyWrapBlock.SetDerivedKey(cryptoFactory, key); documentHeaders = new V2DocumentHeaders(headerKeyWrapBlock); Assert.That(documentHeaders.Load(headers), Is.True); }
public static void TestGetCryptoFromHeaders(CryptoImplementation cryptoImplementation) { SetupAssembly.AssemblySetupCrypto(cryptoImplementation); Headers headers = new Headers(); V2DocumentHeaders documentHeaders = new V2DocumentHeaders(new EncryptionParameters(new V2Aes256CryptoFactory().CryptoId, new Passphrase("passphrase")), 10); using (V2HmacStream <MemoryStream> stream = V2HmacStream.Create <MemoryStream>(new V2HmacCalculator(new SymmetricKey(new byte[0])), new MemoryStream())) { documentHeaders.WriteStartWithHmac(stream); stream.Flush(); stream.Chained.Position = 0; using (V2AxCryptReader reader = new V2AxCryptReader(new LookAheadStream(stream.Chained))) { while (reader.Read()) { if (reader.CurrentItemType == AxCryptItemType.HeaderBlock) { headers.HeaderBlocks.Add(reader.CurrentHeaderBlock); } } SymmetricKey dataEncryptingKey = documentHeaders.Headers.FindHeaderBlock <V2KeyWrapHeaderBlock>().MasterKey; V2KeyWrapHeaderBlock keyWrap = headers.FindHeaderBlock <V2KeyWrapHeaderBlock>(); IDerivedKey key = new V2Aes256CryptoFactory().RestoreDerivedKey(new Passphrase("passphrase"), keyWrap.DerivationSalt, keyWrap.DerivationIterations); keyWrap.SetDerivedKey(new V2Aes256CryptoFactory(), key); Assert.That(dataEncryptingKey, Is.EqualTo(keyWrap.MasterKey)); key = new V2Aes256CryptoFactory().RestoreDerivedKey(new Passphrase("wrong"), keyWrap.DerivationSalt, keyWrap.DerivationIterations); keyWrap.SetDerivedKey(new V2Aes256CryptoFactory(), key); Assert.That(dataEncryptingKey, Is.Not.EqualTo(keyWrap.MasterKey)); } } }