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