xref: /dragonfly/crypto/libressl/crypto/evp/m_wp.c (revision 961e30ea7dc61d1112b778ea4981eac68129fb86)
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