Beispiel #1
0
void
RMD160Final(u_char digest[20], RMD160_CTX *ctx)
{
	int i;
	u_char size[8];
	u_int32_t padlen;

	PUT_64BIT_LE(size, ctx->count);

	/*
	 * pad to 64 byte blocks, at least one byte from PADDING plus 8 bytes
	 * for the size
	 */
	padlen = 64 - ((ctx->count/8) % 64);
	if (padlen < 1 + 8)
		padlen += 64;
	RMD160Update(ctx, PADDING, padlen - 8);		/* padlen - 8 <= 64 */
	RMD160Update(ctx, size, 8);

	if (digest != NULL)
		for (i = 0; i < 5; i++)
			PUT_32BIT_LE(digest + i*4, ctx->state[i]);

	memset(ctx, 0, sizeof (*ctx));
}
Beispiel #2
0
void
RMD160Final(u_int8_t digest[RMD160_DIGEST_LENGTH], RMD160_CTX *ctx)
{
	int i;

	RMD160Pad(ctx);
	for (i = 0; i < 5; i++)
		PUT_32BIT_LE(digest + i*4, ctx->state[i]);
	memset(ctx, 0, sizeof (*ctx));
}
Beispiel #3
0
void RMD160Final(RMD160CTX* context, uint8_t digest[RMD160_DIGEST_LENGTH])
{
    int i;
    RMD160Pad(context);
    for (i = 0; i < 5; i++)
    {
        PUT_32BIT_LE(digest + i * 4, context->state[i]);
    }

    zeroize(context, sizeof *context);
}
Beispiel #4
0
/*
 * Final wrapup--call MD5Pad, fill in digest and zero out ctx.
 */
void
MD5Final(unsigned char digest[MD5_DIGEST_LENGTH], MD5_CTX *ctx)
{
	int i;

	MD5Pad(ctx);
	if (digest != NULL) {
		for (i = 0; i < 4; i++)
			PUT_32BIT_LE(digest + i * 4, ctx->state[i]);
		memset(ctx, 0, sizeof(*ctx));
	}
}