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]);
 }
示例#3
0
        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)
                {
                }
            });
        }
示例#4
0
        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.");
        }
示例#7
0
        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.");
        }
示例#9
0
        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]));
        }
示例#10
0
        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);
        }
示例#11
0
        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);
        }