public void TestFailedVerification() { SymmetricKey key = new SymmetricKey(Resolve.RandomGenerator.Generate(32)); SymmetricIV iv = new SymmetricIV(Resolve.RandomGenerator.Generate(16)); V2AlgorithmVerifierEncryptedHeaderBlock headerBlock = new V2AlgorithmVerifierEncryptedHeaderBlock(new V2AesCrypto(key, iv, 0)); Assert.That(headerBlock.IsVerified, Is.True, "A properly instantiated header should always have IsVerified as true"); byte[] dataBlock = headerBlock.GetDataBlockBytes(); V2AlgorithmVerifierEncryptedHeaderBlock newBlock = new V2AlgorithmVerifierEncryptedHeaderBlock(dataBlock); SymmetricKey key128 = new SymmetricKey(Resolve.RandomGenerator.Generate(16)); newBlock.HeaderCrypto = new V2AesCrypto(key128, iv, 0); Assert.That(newBlock.IsVerified, Is.False, "Wrong algorithm, should not verify."); SymmetricKey wrongKey256 = new SymmetricKey(Resolve.RandomGenerator.Generate(32)); newBlock.HeaderCrypto = new V2AesCrypto(wrongKey256, iv, 0); Assert.That(newBlock.IsVerified, Is.False, "Wrong key, should not verify."); SymmetricIV wrongIv = new SymmetricIV(Resolve.RandomGenerator.Generate(16)); newBlock.HeaderCrypto = new V2AesCrypto(key, wrongIv, 0); Assert.That(newBlock.IsVerified, Is.False, "Wrong IV, should not verify."); newBlock.HeaderCrypto = new V2AesCrypto(key, iv, 256); Assert.That(newBlock.IsVerified, Is.False, "Wrong key stream index, should not verify."); newBlock.HeaderCrypto = new V2AesCrypto(key, iv, 0); Assert.That(newBlock.IsVerified, Is.True, "Everything is as it should, so it should verify."); }
public void TestClone() { V2AlgorithmVerifierEncryptedHeaderBlock headerBlock = new V2AlgorithmVerifierEncryptedHeaderBlock(new V2AesCrypto(SymmetricKey.Zero256, SymmetricIV.Zero128, 0)); Assert.That(headerBlock.IsVerified, Is.True, "A properly instantiated header should always have IsVerified as true"); V2AlgorithmVerifierEncryptedHeaderBlock clone = (V2AlgorithmVerifierEncryptedHeaderBlock)headerBlock.Clone(); Assert.That(clone.IsVerified, Is.True, "The clone should also be properly verified."); }
public void TestOkVerification() { SymmetricKey key = new SymmetricKey(Resolve.RandomGenerator.Generate(32)); SymmetricIV iv = new SymmetricIV(Resolve.RandomGenerator.Generate(16)); V2AlgorithmVerifierEncryptedHeaderBlock headerBlock = new V2AlgorithmVerifierEncryptedHeaderBlock(new V2AesCrypto(key, iv, 0)); Assert.That(headerBlock.IsVerified, Is.True, "A properly instantiated header should always have IsVerified as true"); byte[] dataBlock = headerBlock.GetDataBlockBytes(); V2AlgorithmVerifierEncryptedHeaderBlock newBlock = new V2AlgorithmVerifierEncryptedHeaderBlock(dataBlock); newBlock.HeaderCrypto = new V2AesCrypto(key, iv, 0); Assert.That(newBlock.IsVerified, Is.True, "It's a new block with the same key, should be ok."); }
public bool Load(IAsymmetricPrivateKey privateKey, Guid cryptoId, Headers headers) { if (headers == null) { throw new ArgumentNullException("headers"); } ResetState(); CryptoFactory = Resolve.CryptoFactory.Create(cryptoId); IEnumerable <V2AsymmetricKeyWrapHeaderBlock> keyWraps = headers.HeaderBlocks.OfType <V2AsymmetricKeyWrapHeaderBlock>(); foreach (V2AsymmetricKeyWrapHeaderBlock keyWrap in keyWraps) { keyWrap.SetPrivateKey(CryptoFactory, privateKey); if (keyWrap.Crypto(0) == null) { continue; } DocumentHeaders = new V2DocumentHeaders(keyWrap); if (!DocumentHeaders.Load(headers)) { throw new InvalidOperationException("If the master key was decrypted with the private key, the load should not be able to fail."); } V2AlgorithmVerifierEncryptedHeaderBlock algorithmVerifier = DocumentHeaders.Headers.FindHeaderBlock <V2AlgorithmVerifierEncryptedHeaderBlock>(); PassphraseIsValid = algorithmVerifier != null && algorithmVerifier.IsVerified; if (PassphraseIsValid) { Properties = EncryptedProperties.Create(this); return(true); } } return(false); }