/// <summary> /// Первоначальная установка состояния шифра. /// </summary> /// <param name="iv">Синхропосылка.</param> /// <param name="subKeys">Подключи.</param> public void SetIV(byte[] iv, List <uint> subKeys) { byte[] encodedIV = substitution.EncodeProcess(iv, subKeys); n3 = BitConverter.ToUInt32(encodedIV, 0); n4 = BitConverter.ToUInt32(encodedIV, 4); }
/// <summary> /// CFB encode. /// </summary> /// <param name="data">Opened message.</param> /// <param name="subKeys">Subkeys.</param> /// <returns>Encoded message.</returns> public byte[] EncodeProcess(byte[] data, List <uint> subKeys) { byte[] gamma = new byte[8]; Array.Copy(BitConverter.GetBytes(n1), 0, gamma, 0, 4); Array.Copy(BitConverter.GetBytes(n2), 0, gamma, 4, 4); gamma = substitution.EncodeProcess(gamma, subKeys); byte[] res = XOR(gamma, data); if (res.Length == 8) { n1 = BitConverter.ToUInt32(res, 0); n2 = BitConverter.ToUInt32(res, 4); } return(res); }