1*de0e0e4dSAntonio Huete Jimenez /* $OpenBSD: m_wp.c,v 1.10 2022/01/14 08:38:06 tb Exp $ */
2f5b1c8a1SJohn Marino
3f5b1c8a1SJohn Marino #include <stdio.h>
4f5b1c8a1SJohn Marino
5f5b1c8a1SJohn Marino #include <openssl/opensslconf.h>
6f5b1c8a1SJohn Marino
7f5b1c8a1SJohn Marino #ifndef OPENSSL_NO_WHIRLPOOL
8f5b1c8a1SJohn Marino
9f5b1c8a1SJohn Marino #include <openssl/evp.h>
10f5b1c8a1SJohn Marino #include <openssl/objects.h>
11f5b1c8a1SJohn Marino #include <openssl/x509.h>
12f5b1c8a1SJohn Marino #include <openssl/whrlpool.h>
13f5b1c8a1SJohn Marino
14*de0e0e4dSAntonio Huete Jimenez #include "evp_locl.h"
15*de0e0e4dSAntonio Huete Jimenez
16f5b1c8a1SJohn Marino static int
init(EVP_MD_CTX * ctx)17f5b1c8a1SJohn Marino init(EVP_MD_CTX *ctx)
18f5b1c8a1SJohn Marino {
19f5b1c8a1SJohn Marino return WHIRLPOOL_Init(ctx->md_data);
20f5b1c8a1SJohn Marino }
21f5b1c8a1SJohn Marino
22f5b1c8a1SJohn Marino static int
update(EVP_MD_CTX * ctx,const void * data,size_t count)23f5b1c8a1SJohn Marino update(EVP_MD_CTX *ctx, const void *data, size_t count)
24f5b1c8a1SJohn Marino {
25f5b1c8a1SJohn Marino return WHIRLPOOL_Update(ctx->md_data, data, count);
26f5b1c8a1SJohn Marino }
27f5b1c8a1SJohn Marino
28f5b1c8a1SJohn Marino static int
final(EVP_MD_CTX * ctx,unsigned char * md)29f5b1c8a1SJohn Marino final(EVP_MD_CTX *ctx, unsigned char *md)
30f5b1c8a1SJohn Marino {
31f5b1c8a1SJohn Marino return WHIRLPOOL_Final(md, ctx->md_data);
32f5b1c8a1SJohn Marino }
33f5b1c8a1SJohn Marino
34f5b1c8a1SJohn Marino static const EVP_MD whirlpool_md = {
35f5b1c8a1SJohn Marino .type = NID_whirlpool,
36f5b1c8a1SJohn Marino .pkey_type = 0,
37f5b1c8a1SJohn Marino .md_size = WHIRLPOOL_DIGEST_LENGTH,
38f5b1c8a1SJohn Marino .flags = 0,
39f5b1c8a1SJohn Marino .init = init,
40f5b1c8a1SJohn Marino .update = update,
41f5b1c8a1SJohn Marino .final = final,
42f5b1c8a1SJohn Marino .copy = NULL,
43f5b1c8a1SJohn Marino .cleanup = NULL,
44f5b1c8a1SJohn Marino .block_size = WHIRLPOOL_BBLOCK / 8,
45f5b1c8a1SJohn Marino .ctx_size = sizeof(EVP_MD *) + sizeof(WHIRLPOOL_CTX),
46f5b1c8a1SJohn Marino };
47f5b1c8a1SJohn Marino
48f5b1c8a1SJohn Marino const EVP_MD *
EVP_whirlpool(void)49f5b1c8a1SJohn Marino EVP_whirlpool(void)
50f5b1c8a1SJohn Marino {
51f5b1c8a1SJohn Marino return (&whirlpool_md);
52f5b1c8a1SJohn Marino }
53f5b1c8a1SJohn Marino #endif
54