public void TestGenerateKey32()
        {
            var originalKey = new byte[32];
            var expectedKey = new byte[]
            {
                0xF0, 0xED, 0x57, 0xD5, 0xF0, 0xDA, 0xF3, 0x47,
                0x90, 0xD0, 0xDB, 0x43, 0x25, 0xC6, 0x81, 0x2C,
                0x81, 0x6A, 0x0D, 0x94, 0x96, 0xA9, 0x03, 0xE1,
                0x20, 0xD4, 0x3A, 0x3E, 0x45, 0xAD, 0x02, 0x65
            };
            const ulong rounds = 1;

            var           composite = new CompositeKey();
            AesKdf        kdf       = new AesKdf();
            KdfParameters p         = kdf.GetDefaultParameters();

            p.SetUInt64(AesKdf.ParamRounds, rounds);
            p.SetByteArray(AesKdf.ParamSeed, originalKey);
            var key = composite.GenerateKey32(p);

            Assert.NotNull(key);
            var keyData = key.ReadData();

            Assert.True(MemUtil.ArraysEqual(keyData, expectedKey));
        }
        public void TestGenerateKey32()
        {
            var originalKey = new byte[32];
            var expectedKey = new byte[32] {
                0xF0, 0xED, 0x57, 0xD5, 0xF0, 0xDA, 0xF3, 0x47,
                0x90, 0xD0, 0xDB, 0x43, 0x25, 0xC6, 0x81, 0x2C,
                0x81, 0x6A, 0x0D, 0x94, 0x96, 0xA9, 0x03, 0xE1,
                0x20, 0xD4, 0x3A, 0x3E, 0x45, 0xAD, 0x02, 0x65
            };
            const ulong rounds = 1;

            var composite = new CompositeKey();
            var key       = composite.GenerateKey32(originalKey, rounds);

            Assert.That(key, Is.Not.Null);
            var keyData = key.ReadData();

            Assert.That(keyData, Is.EqualTo(expectedKey));
        }
        private byte[] GetKey()
        {
            byte[]       ThreeDESKey = new byte[24];
            MemoryStream ms          = new MemoryStream();

            ms.Write(m_MasterSeed, 0, 32);

            KdfParameters kdf = new AesKdf().GetDefaultParameters();

            kdf.SetUInt64(AesKdf.ParamRounds, m_NumRounds);
            kdf.SetByteArray(AesKdf.ParamSeed, m_TransformSeed);

            ProtectedBinary pbinKey = m_2Key.GenerateKey32(kdf);

            if (pbinKey == null)
            {
                throw new SecurityException("Invalid Key");
            }

            byte[] pKey32 = pbinKey.ReadData();
            if ((pKey32 == null) || (pKey32.Length != 32))
            {
                throw new SecurityException("Invalid Key Data");
            }

            ms.Write(pKey32, 0, 32);

            byte[] sRandom = m_hash.Hash;
            ms.Write(sRandom, 0, sRandom.Length);

            SHA256Managed sha = new SHA256Managed();

            byte[] Key256 = sha.ComputeHash(ms.ToArray());

            Array.Copy(Key256, ThreeDESKey, ThreeDESKey.Length);

            ms.Close();

            Array.Clear(pKey32, 0, 32);
            Array.Clear(Key256, 0, 32);

            return(ThreeDESKey);
        }