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