/// <inheritdoc /> public void Mask(int[] payload, AbstractCurl curl) { var keyChunk = curl.Rate(Constants.TritHashLength); var round = 0; foreach (var chunk in payload.GetChunks(Constants.TritHashLength)) { curl.Absorb(chunk); var curlState = curl.Rate(Constants.TritHashLength); var length = chunk.Length; for (var i = 0; i < length; i++) { payload[round * Constants.TritHashLength + i] = Converter.Sum(chunk[i], keyChunk[i]); keyChunk[i] = curlState[i]; } round++; } }
/// <inheritdoc /> public int[] Unmask(int[] payload, AbstractCurl curl) { var unmasked = new List <int>(); foreach (var chunk in payload.GetChunks(Constants.TritHashLength)) { for (var i = 0; i < chunk.Length; i++) { chunk[i] = Converter.Sum(chunk[i], -curl.Rate(Constants.TritHashLength)[i]); } unmasked.AddRange(chunk); curl.Absorb(chunk); } return(unmasked.ToArray()); }