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