public TripleDESTransform(TripleDES algo, bool encryption, byte[] key, byte[] iv) : base(algo, encryption, iv)
        {
            byte[] key1 = new byte [8];
            byte[] key2 = new byte [8];
            byte[] key3 = new byte [8];
            DES    des  = DES.Create();

            Array.Copy(key, 0, key1, 0, 8);
            Array.Copy(key, 8, key2, 0, 8);
            if (key.Length == 16)
            {
                Array.Copy(key, 0, key3, 0, 8);
            }
            else
            {
                Array.Copy(key, 16, key3, 0, 8);
            }

            // note: some modes (like CFB) requires encryption when decrypting
            if ((encryption) || (algo.Mode == CipherMode.CFB))
            {
                E1 = new DESTransform(des, true, key1, iv);
                D2 = new DESTransform(des, false, key2, iv);
                E3 = new DESTransform(des, true, key3, iv);
            }
            else
            {
                D1 = new DESTransform(des, false, key3, iv);
                E2 = new DESTransform(des, true, key2, iv);
                D3 = new DESTransform(des, false, key1, iv);
            }
        }
        public TripleDESTransform(TripleDES algo, bool encryption, byte[] key, byte[] iv)
            : base(algo, encryption, iv)
        {
            byte[] key1 = new byte [8];
            byte[] key2 = new byte [8];
            byte[] key3 = new byte [8];
            DES des = DES.Create ();
            Array.Copy (key, 0, key1, 0, 8);
            Array.Copy (key, 8, key2, 0, 8);
            if (key.Length == 16)
                Array.Copy (key, 0, key3, 0, 8);
            else
                Array.Copy (key, 16, key3, 0, 8);

            // note: some modes (like CFB) requires encryption when decrypting
            if ((encryption) || (algo.Mode == CipherMode.CFB)) {
                E1 = new DESTransform (des, true, key1, iv);
                D2 = new DESTransform (des, false, key2, iv);
                E3 = new DESTransform (des, true, key3, iv);
            }
            else {
                D1 = new DESTransform (des, false, key3, iv);
                E2 = new DESTransform (des, true, key2, iv);
                D3 = new DESTransform (des, false, key1, iv);
            }
        }