// 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); }
public void TestCombine32BitHalfs() { const UInt32 leftHalf = 0b11010101111111110110101000001000; const UInt32 rightHalf = 0b00010000010101101111111110101011; const UInt64 expectedResult = 0b1101010111111111011010100000100000010000010101101111111110101011; Feal4Helper.Combine32BitHalfs(leftHalf, rightHalf).Should().Be(expectedResult); }
// 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); }