public byte[] Compute(byte[] message)
{
var ctx = new Context();
foreach (var msgByte in message)
{
ctx.MessageBlock[ctx.MessageBlockIndex++] = (byte)(msgByte & 0xFF);
ctx.LengthLow += 8;
if (ctx.LengthLow == 0)
ctx.LengthHigh++;
if (ctx.MessageBlockIndex == 64)
ProcessMessageBlock(ctx);
}
PadMessage(ctx);
var msgDigest = new byte[HashSize];
for (int i = 0; i < HashSize; i++)
msgDigest[i] = (byte)(ctx.IntermediateHash[i >> 2] >> 8 * (3 - (i & 0x03)));
return msgDigest;
}