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 V1EncryptionInfoEncryptedHeaderBlock(ICrypto headerCrypto) : this(new byte[0]) { HeaderCrypto = headerCrypto; PlaintextLength = 0; IV = new SymmetricIV(new byte[16]); }
public static void TestInvalidArguments(CryptoImplementation cryptoImplementation) { SetupAssembly.AssemblySetupCrypto(cryptoImplementation); SymmetricKey key = new SymmetricKey(128); SymmetricIV iv = new SymmetricIV(128); Assert.Throws <ArgumentNullException>(() => { if (new V1AesCrypto(new V1Aes128CryptoFactory(), null, SymmetricIV.Zero128) == null) { } }); Assert.Throws <ArgumentNullException>(() => { if (new V1AesCrypto(new V1Aes128CryptoFactory(), null, iv) == null) { } }); Assert.DoesNotThrow(() => { if (new V1AesCrypto(new V1Aes128CryptoFactory(), key, iv) == null) { } }); }
public static void TestMasterIVWithWrongKeyEncryptingCrypto() { TypeMap.Register.Singleton <IRandomGenerator>(() => new FakeRandomGenerator()); IDerivedKey keyEncryptingKey = new V2DerivedKey(new Passphrase("secret"), new Salt(256), 100, 256); V2KeyWrapHeaderBlock header = new V2KeyWrapHeaderBlock(new V2Aes256CryptoFactory(), keyEncryptingKey, 125); header.SetDerivedKey(new V2Aes256CryptoFactory(), new V2DerivedKey(new Passphrase("another secret"), 256)); SymmetricIV iv = header.MasterIV; Assert.That(iv, Is.Null); }
public static void TestInvalidArguments() { SymmetricIV iv = null; Assert.Throws <ArgumentNullException>(() => { iv = new SymmetricIV(null); }); // Use the instance to avoid FxCop errors. Object.Equals(iv, null); }
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 static void TestUnwrapMasterKeyAndIV256WithNonzeroRandomNumbers() { TypeMap.Register.Singleton <IRandomGenerator>(() => new FakeRandomGenerator()); IDerivedKey keyEncryptingKey = new V2DerivedKey(new Passphrase("secret"), new Salt(256), 100, 256); V2KeyWrapHeaderBlock header = new V2KeyWrapHeaderBlock(new V2Aes256CryptoFactory(), keyEncryptingKey, 125); SymmetricKey key = header.MasterKey; Assert.That(key.GetBytes(), Is.EquivalentTo(ByteSequence(key.GetBytes()[0], key.Size / 8))); SymmetricIV iv = header.MasterIV; Assert.That(iv.GetBytes(), Is.EquivalentTo(ByteSequence(iv.GetBytes()[0], iv.Length))); }
public static void TestMethods() { SymmetricIV zeroIV = SymmetricIV.Zero128; Assert.That(zeroIV.GetBytes(), Is.EquivalentTo(new byte[16]), "The IV 'zero' should consist of all zeros."); SymmetricIV iv = new SymmetricIV(new byte[16] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }); Assert.That(iv.GetBytes(), Is.EquivalentTo(new byte[16] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }), "An IV specified should consist of just those bytes."); iv = new SymmetricIV(128); Assert.That(iv.GetBytes(), Is.Not.EquivalentTo(new byte[16]), "A random iv will in practice never be all zeros."); }
public static void TestUnwrapMasterKeyAndIV256WithZeroRandomNumbers() { var mock = new Mock <IRandomGenerator>(); mock.Setup <byte[]>(x => x.Generate(It.IsAny <int>())).Returns <int>(v => new byte[v]); TypeMap.Register.Singleton <IRandomGenerator>(() => mock.Object); IDerivedKey keyEncryptingKey = new V2DerivedKey(new Passphrase("secret"), new Salt(256), 100, 256); V2KeyWrapHeaderBlock header = new V2KeyWrapHeaderBlock(new V2Aes256CryptoFactory(), keyEncryptingKey, 250); SymmetricKey key = header.MasterKey; Assert.That(key.GetBytes(), Is.EquivalentTo(new byte[32])); SymmetricIV iv = header.MasterIV; Assert.That(iv.GetBytes(), Is.EquivalentTo(new byte[16])); }
public static void TestConstructorWithBadArguments() { SymmetricKey nullKey = null; SymmetricKey testKey = new SymmetricKey(128); SymmetricIV testIV = new SymmetricIV(128); ICrypto crypto = null; Assert.Throws <ArgumentNullException>(() => crypto = new V2AesCrypto(nullKey, testIV, 0)); testKey = new SymmetricKey(64); Assert.Throws <ArgumentException>(() => crypto = new V2AesCrypto(testKey, testIV, 0)); testKey = new SymmetricKey(256); testIV = new SymmetricIV(64); Assert.Throws <ArgumentException>(() => crypto = new V2AesCrypto(testKey, testIV, 0)); testIV = new SymmetricIV(128); Assert.DoesNotThrow(() => crypto = new V2AesCrypto(testKey, testIV, 0)); Assert.That(crypto, Is.Not.Null); }
public V2AsymmetricKeyWrapHeaderBlock(UserPublicKey publicKey, SymmetricKey masterKey, SymmetricIV masterIV) : this(Resolve.RandomGenerator.Generate(DATABLOCK_LENGTH)) { if (publicKey == null) { throw new ArgumentNullException("publicKey"); } byte[] encrypted = publicKey.PublicKey.Transform(masterKey + masterIV); GetDataBlockBytesReference().SetFrom(encrypted); }