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 17 init(EVP_MD_CTX *ctx) 18 { 19 return WHIRLPOOL_Init(ctx->md_data); 20 } 21 22 static int 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 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 * 49 EVP_whirlpool(void) 50 { 51 return (&whirlpool_md); 52 } 53 #endif 54