xref: /dflybsd-src/sys/crypto/poly1305/poly1305.h (revision be5bbc0b5d4a0165d4b4d2887210fc9ddb3317e7)
1e64de06aSAaron LI /*	$OpenBSD: poly1305.h,v 1.2 2020/07/22 13:54:30 tobhe Exp $	*/
2e64de06aSAaron LI /*
3e64de06aSAaron LI  * Public Domain poly1305 from Andrew Moon
4e64de06aSAaron LI  *
5e64de06aSAaron LI  * poly1305 implementation using 32 bit * 32 bit = 64 bit multiplication
6e64de06aSAaron LI  * and 64 bit addition from https://github.com/floodyberry/poly1305-donna
7e64de06aSAaron LI  */
8e64de06aSAaron LI 
9e64de06aSAaron LI #ifndef _POLY1305_H_
10e64de06aSAaron LI #define _POLY1305_H_
11e64de06aSAaron LI 
12*be5bbc0bSAaron LI #define POLY1305_KEY_SIZE	32
1369e8d0efSAaron LI #define POLY1305_BLOCK_SIZE	16
14*be5bbc0bSAaron LI #define POLY1305_MAC_SIZE	16
15e64de06aSAaron LI 
16e64de06aSAaron LI typedef struct poly1305_state {
17e64de06aSAaron LI 	unsigned long r[5];
18e64de06aSAaron LI 	unsigned long h[5];
19e64de06aSAaron LI 	unsigned long pad[4];
20e64de06aSAaron LI 	size_t leftover;
21*be5bbc0bSAaron LI 	uint8_t buffer[POLY1305_BLOCK_SIZE];
22*be5bbc0bSAaron LI 	uint8_t final;
23e64de06aSAaron LI } poly1305_state;
24e64de06aSAaron LI 
25*be5bbc0bSAaron LI void	poly1305_init(poly1305_state *, const uint8_t[POLY1305_KEY_SIZE]);
26*be5bbc0bSAaron LI void	poly1305_update(poly1305_state *, const uint8_t *, size_t);
27*be5bbc0bSAaron LI void	poly1305_finish(poly1305_state *, uint8_t[POLY1305_MAC_SIZE]);
28e64de06aSAaron LI 
29e64de06aSAaron LI #endif	/* _POLY1305_H_ */
30