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)); }
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)); }
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); }
/* * 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)); } }