public static byte[] RadioGatun32(byte[] bytes) { if (!RadioGatun32Hashers.TryPop(out var hasher)) { hasher = new RadioGatun32Digest(); } try { var result = new byte[hasher.GetDigestSize()]; hasher.BlockUpdate(bytes, 0, bytes.Length); hasher.DoFinal(result, 0); hasher.Reset(); return(result); } finally { RadioGatun32Hashers.Push(hasher); } }
public void Reset(IMemoable other) { RadioGatun32Digest originalDigest = (RadioGatun32Digest)other; Array.Copy(originalDigest._mMill, 0, _mMill, 0, _mMill.Length); Array.Copy(originalDigest._buffer, 0, _buffer, 0, _buffer.Length); int outerSourceArrayLength = originalDigest._mBelt.Length; _mBelt = new uint[outerSourceArrayLength][]; for (var idx = 0; idx < outerSourceArrayLength; idx++) { uint[] innerSourceArray = originalDigest._mBelt[idx]; int innerSourceArrayLength = innerSourceArray.Length; _mBelt[idx] = new uint[innerSourceArrayLength]; Array.Copy(innerSourceArray, _mBelt[idx], innerSourceArrayLength); } _bufferPos = originalDigest._bufferPos; _processedBytes = originalDigest._processedBytes; }
/** * Copy constructor. This will copy the state of the provided * message digest. */ public RadioGatun32Digest(RadioGatun32Digest t) { Reset(t); }