Modified Sha3 used with JitterCacheRng.cs
using System; [Serializable] public class SHA3ModInt : HashAlgorithmEx { private readonly KeccakSpongeManaged _sponge; public SHA3ModInt(int size, int rounds = 24, ulong[] seed = null) { if (rounds > 24) throw new Exception($"Maximum rounds allowed is {24}"); var MaxBR = (64 >> 3) * 25; var sizeBytes = size >> 3; var rateBytes = MaxBR - (sizeBytes << 1); var MaxSize = ((MaxBR - 8) >> 1) << 3; if (rateBytes < 8) throw new Exception($"Maximum size allowed is {MaxSize} Bits with {64} bit Width specified. Specified Size is {size} Bits."); var outputLength = size >> 3; _sponge = new KeccakSpongeManaged(rateBytes, 200 - rateBytes, KeccakSpongeManaged.KeccakDelimiter, outputLength, seed); _sponge.Rounds = rounds; HashSizeValue = size; } public override void Initialize() { _sponge.Initialize(); } protected override void HashCore(byte[] array, int ibStart, int cbSize) { Initialize(); _sponge.Absorb(array, ibStart, cbSize); } protected override byte[] HashFinal() { return _sponge.Squeeze(); } }