xref: /openbmc/linux/include/crypto/poly1305.h (revision ad8f5b88)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
22546f811SMartin Willi /*
32546f811SMartin Willi  * Common values for the Poly1305 algorithm
42546f811SMartin Willi  */
52546f811SMartin Willi 
62546f811SMartin Willi #ifndef _CRYPTO_POLY1305_H
72546f811SMartin Willi #define _CRYPTO_POLY1305_H
82546f811SMartin Willi 
92546f811SMartin Willi #include <linux/types.h>
102546f811SMartin Willi #include <linux/crypto.h>
112546f811SMartin Willi 
122546f811SMartin Willi #define POLY1305_BLOCK_SIZE	16
132546f811SMartin Willi #define POLY1305_KEY_SIZE	32
142546f811SMartin Willi #define POLY1305_DIGEST_SIZE	16
152546f811SMartin Willi 
16878afc35SEric Biggers struct poly1305_key {
17878afc35SEric Biggers 	u32 r[5];	/* key, base 2^26 */
18878afc35SEric Biggers };
19878afc35SEric Biggers 
20878afc35SEric Biggers struct poly1305_state {
21878afc35SEric Biggers 	u32 h[5];	/* accumulator, base 2^26 */
22878afc35SEric Biggers };
23878afc35SEric Biggers 
242546f811SMartin Willi struct poly1305_desc_ctx {
252546f811SMartin Willi 	/* partial buffer */
262546f811SMartin Willi 	u8 buf[POLY1305_BLOCK_SIZE];
272546f811SMartin Willi 	/* bytes used in partial buffer */
282546f811SMartin Willi 	unsigned int buflen;
29ad8f5b88SArd Biesheuvel 	/* how many keys have been set in r[] */
30ad8f5b88SArd Biesheuvel 	unsigned short rset;
31ad8f5b88SArd Biesheuvel 	/* whether s[] has been set */
322546f811SMartin Willi 	bool sset;
33ad8f5b88SArd Biesheuvel 	/* finalize key */
34ad8f5b88SArd Biesheuvel 	u32 s[4];
35ad8f5b88SArd Biesheuvel 	/* accumulator */
36ad8f5b88SArd Biesheuvel 	struct poly1305_state h;
37ad8f5b88SArd Biesheuvel 	/* key */
38ad8f5b88SArd Biesheuvel 	struct poly1305_key r[1];
392546f811SMartin Willi };
402546f811SMartin Willi 
412546f811SMartin Willi #endif
42