Пример #1
0
        // verified
        private static ListOfDiffPairs UndoLastRound(ListOfDiffPairs diffPairs, UInt32 subKey)
        {
            var result = new ListOfDiffPairs();

            for (var i = 0; i < numberOfPlain; ++i)
            {
                UInt32 firstCipherLeft  = Feal4Helper.GetLeftHalf(diffPairs[i].Item1.Cipher);
                UInt32 firstCipherRight = Feal4Helper.GetRightHalf(diffPairs[i].Item1.Cipher);

                UInt32 secondCipherLeft  = Feal4Helper.GetLeftHalf(diffPairs[i].Item2.Cipher);
                UInt32 secondCipherRight = Feal4Helper.GetRightHalf(diffPairs[i].Item2.Cipher);

                firstCipherLeft  = firstCipherRight;
                secondCipherLeft = secondCipherRight;

                firstCipherRight  = Feal4Helper.Fbox(firstCipherLeft ^ subKey) ^ (Feal4Helper.GetLeftHalf(diffPairs[i].Item1.Cipher));
                secondCipherRight = Feal4Helper.Fbox(secondCipherLeft ^ subKey) ^ (Feal4Helper.GetLeftHalf(diffPairs[i].Item2.Cipher));

                var firstObj = new PlainCipherPair <UInt64>(diffPairs[i].Item1.Plain,
                                                            Feal4Helper.Combine32BitHalfs(firstCipherLeft, firstCipherRight));
                var secondObj = new PlainCipherPair <UInt64>(diffPairs[i].Item2.Plain,
                                                             Feal4Helper.Combine32BitHalfs(secondCipherLeft, secondCipherRight));

                result.Add(Tuple.Create(firstObj, secondObj));
            }
            return(result);
        }
Пример #2
0
        public void TestCombine32BitHalfs()
        {
            const UInt32 leftHalf       = 0b11010101111111110110101000001000;
            const UInt32 rightHalf      = 0b00010000010101101111111110101011;
            const UInt64 expectedResult = 0b1101010111111111011010100000100000010000010101101111111110101011;

            Feal4Helper.Combine32BitHalfs(leftHalf, rightHalf).Should().Be(expectedResult);
        }
Пример #3
0
        // verified
        private ListOfDiffPairs UndoFinalOperation(ListOfDiffPairs data)
        {
            var result = new ListOfDiffPairs();

            foreach (var item in data)
            {
                var firstLeftCipher  = Feal4Helper.GetLeftHalf(item.Item1.Cipher);
                var firstRightCipher = Feal4Helper.GetRightHalf(item.Item1.Cipher) ^ firstLeftCipher;

                var secondLeftCipher  = Feal4Helper.GetLeftHalf(item.Item2.Cipher);
                var secondRightCipher = Feal4Helper.GetRightHalf(item.Item2.Cipher) ^ secondLeftCipher;

                var firstRecombined  = Feal4Helper.Combine32BitHalfs(firstLeftCipher, firstRightCipher);
                var secondRecombined = Feal4Helper.Combine32BitHalfs(secondLeftCipher, secondRightCipher);

                var firstObj  = new PlainCipherPair64(item.Item1.Plain, firstRecombined);
                var secondObj = new PlainCipherPair64(item.Item2.Plain, secondRecombined);
                result.Add(Tuple.Create(firstObj, secondObj));
            }
            return(result);
        }