1 /* $OpenBSD: whrlpool.h,v 1.4 2014/06/12 15:49:31 deraadt Exp $ */
2 
3 #include <stddef.h>
4 
5 #ifndef HEADER_WHRLPOOL_H
6 #define HEADER_WHRLPOOL_H
7 
8 #include <openssl/opensslconf.h>
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 #define WHIRLPOOL_DIGEST_LENGTH	(512/8)
15 #define WHIRLPOOL_BBLOCK	512
16 #define WHIRLPOOL_COUNTER	(256/8)
17 
18 typedef struct	{
19 	union	{
20 		unsigned char	c[WHIRLPOOL_DIGEST_LENGTH];
21 		/* double q is here to ensure 64-bit alignment */
22 		double		q[WHIRLPOOL_DIGEST_LENGTH/sizeof(double)];
23 		}	H;
24 	unsigned char	data[WHIRLPOOL_BBLOCK/8];
25 	unsigned int	bitoff;
26 	size_t		bitlen[WHIRLPOOL_COUNTER/sizeof(size_t)];
27 	} WHIRLPOOL_CTX;
28 
29 #ifndef OPENSSL_NO_WHIRLPOOL
30 int WHIRLPOOL_Init	(WHIRLPOOL_CTX *c);
31 int WHIRLPOOL_Update	(WHIRLPOOL_CTX *c,const void *inp,size_t bytes);
32 void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c,const void *inp,size_t bits);
33 int WHIRLPOOL_Final	(unsigned char *md,WHIRLPOOL_CTX *c);
34 unsigned char *WHIRLPOOL(const void *inp,size_t bytes,unsigned char *md);
35 #endif
36 
37 #ifdef __cplusplus
38 }
39 #endif
40 
41 #endif
42