12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /*
- * cifra - embedded cryptography library
- * Written in 2014 by Joseph Birr-Pixton <jpixton@gmail.com>
- *
- * To the extent possible under law, the author(s) have dedicated all
- * copyright and related and neighboring rights to this software to the
- * public domain worldwide. This software is distributed without any
- * warranty.
- *
- * You should have received a copy of the CC0 Public Domain Dedication
- * along with this software. If not, see
- * <http://creativecommons.org/publicdomain/zero/1.0/>.
- */
- #ifndef POLY1305_H
- #define POLY1305_H
- #include <stddef.h>
- #include <stdint.h>
- /**
- * Poly1305
- * ========
- * This is an incremental interface to computing the poly1305
- * single shot MAC.
- *
- * Note: construct Poly1305-AES with this by taking a 16 byte
- * nonce and encrypting it, and then using the result as an
- * input to this function.
- */
- /* .. c:type:: cf_poly1305
- * Poly1305 incremental interface context.
- *
- * .. c:member:: cf_poly1305.h
- * Current accumulator.
- *
- * .. c:member:: cf_poly1305.r
- * Block multiplier.
- *
- * .. c:member:: cf_poly1305.s
- * Final XOR offset.
- *
- * .. c:member:: cf_poly1305.partial
- * Unprocessed input.
- *
- * .. c:member:: cf_poly1305.npartial
- * Number of bytes of unprocessed input.
- *
- */
- typedef struct
- {
- uint32_t h[17];
- uint32_t r[17];
- uint8_t s[16];
- uint8_t partial[16];
- size_t npartial;
- } cf_poly1305;
- /* .. c:function:: $DECL
- * Sets up `ctx` ready to compute a new MAC.
- *
- * In Poly1305-AES, `r` is the second half of the 32-byte key.
- * `s` is a nonce encrypted under the first half of the key.
- *
- * :param ctx: context (written)
- * :param r: MAC key.
- * :param s: preprocessed nonce.
- *
- */
- void cf_poly1305_init(cf_poly1305 *ctx,
- const uint8_t r[16],
- const uint8_t s[16]);
- /* .. c:function:: $DECL
- * Processes `nbytes` at `data`. Copies the data if there isn't enough to make
- * a full block.
- */
- void cf_poly1305_update(cf_poly1305 *ctx,
- const uint8_t *data,
- size_t nbytes);
- /* .. c:function:: $DECL
- * Finishes the operation, writing 16 bytes to `out`.
- *
- * This destroys `ctx`.
- */
- void cf_poly1305_finish(cf_poly1305 *ctx,
- uint8_t out[16]);
- #endif
|