1 /* 2 * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the OpenSSL license (the "License"). You may not use 5 * this file except in compliance with the License. You can obtain a copy 6 * in the file LICENSE in the source distribution or at 7 * https://www.openssl.org/source/license.html 8 */ 9 10 /* From include/crypto/poly1305.h */ 11 12 #define POLY1305_BLOCK_SIZE 16 13 14 typedef struct poly1305_context POLY1305; 15 16 /* From crypto/poly1305/poly1305_local.h */ 17 18 typedef void (*poly1305_blocks_f) (void *ctx, const unsigned char *inp, 19 size_t len, unsigned int padbit); 20 typedef void (*poly1305_emit_f) (void *ctx, unsigned char mac[16], 21 const unsigned int nonce[4]); 22 23 struct poly1305_context { 24 double opaque[24]; /* large enough to hold internal state, declared 25 * 'double' to ensure at least 64-bit invariant 26 * alignment across all platforms and 27 * configurations */ 28 unsigned int nonce[4]; 29 unsigned char data[POLY1305_BLOCK_SIZE]; 30 size_t num; 31 struct { 32 poly1305_blocks_f blocks; 33 poly1305_emit_f emit; 34 } func; 35 }; 36 37 int ossl_poly1305_update(void *vctx, const void *buf, u_int len); 38 void Poly1305_Init(POLY1305 *ctx, const unsigned char key[32]); 39 void Poly1305_Update(POLY1305 *ctx, const unsigned char *inp, size_t len); 40 void Poly1305_Final(POLY1305 *ctx, unsigned char mac[16]); 41