private static void MD5Update(MD5Managed.MD5_CTX context, byte[] input, uint inputIndex, uint inputLen) { uint num = context.count[0] >> 3 & 63u; if ((context.count[0] += inputLen << 3) < inputLen << 3) { context.count[1] += 1u; } context.count[1] += inputLen >> 29; uint num2 = 64u - num; uint num3 = 0u; if (inputLen >= num2) { Buffer.BlockCopy(input, (int)inputIndex, context.buffer, (int)num, (int)num2); MD5Managed.MD5Transform(context.state, context.buffer, 0u); num3 = num2; while (num3 + 63u < inputLen) { MD5Managed.MD5Transform(context.state, input, num3); num3 += 64u; } num = 0u; } Buffer.BlockCopy(input, (int)(inputIndex + num3), context.buffer, (int)num, (int)(inputLen - num3)); }
private static void MD5Init(MD5Managed.MD5_CTX context) { context.count[0] = (context.count[1] = 0u); context.state[0] = 1732584193u; context.state[1] = 4023233417u; context.state[2] = 2562383102u; context.state[3] = 271733878u; }
private static void MD5Final(byte[] digest, MD5Managed.MD5_CTX context) { byte[] array = new byte[8]; MD5Managed.Encode(array, context.count, 8u); uint num = context.count[0] >> 3 & 63u; uint inputLen = (num < 56u) ? (56u - num) : (120u - num); MD5Managed.MD5Update(context, MD5Managed.PADDING, 0u, inputLen); MD5Managed.MD5Update(context, array, 0u, 8u); MD5Managed.Encode(digest, context.state, 16u); context.Clear(); }