public ulong[] Encrypt(ulong[] plainText, ulong[] chipherKey) { int round = 0; ulong[] state = new ulong[Nb]; ulong[][] roundKeys = KalynaTransformation.KeyExpansion(chipherKey, ref state, Nb, Nk, Nr); Array.Copy(plainText, state, Nb); KalynaTransformation.AddRoundKey(roundKeys[round], state); for (round = 1; round < Nr; ++round) { KalynaTransformation.EncipherRound(ref state); KalynaTransformation.XorRoundKey(roundKeys[round], state); } KalynaTransformation.EncipherRound(ref state); KalynaTransformation.AddRoundKey(roundKeys[Nr], state); return(state); }
public ulong[] Decrypt(ulong[] chipherText, ulong[] chipherKey) { uint round = Nr; ulong[] state = new ulong[Nb]; ulong[][] roundKeys = KalynaTransformation.KeyExpansion(chipherKey, ref state, Nb, Nk, Nr); Array.Copy(chipherText, state, Nb); KalynaTransformation.SubRoundKey(roundKeys[round], state); for (round = Nr - 1; round > 0; --round) { KalynaTransformation.DecipherRound(ref state); KalynaTransformation.XorRoundKey(roundKeys[round], state); } KalynaTransformation.DecipherRound(ref state); KalynaTransformation.SubRoundKey(roundKeys[0], state); return(state); }