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 typedef void (*poly1305_blocks_f) (void *ctx, const unsigned char *inp, 11 size_t len, unsigned int padbit); 12 typedef void (*poly1305_emit_f) (void *ctx, unsigned char mac[16], 13 const unsigned int nonce[4]); 14 15 struct poly1305_context { 16 double opaque[24]; /* large enough to hold internal state, declared 17 * 'double' to ensure at least 64-bit invariant 18 * alignment across all platforms and 19 * configurations */ 20 unsigned int nonce[4]; 21 unsigned char data[POLY1305_BLOCK_SIZE]; 22 size_t num; 23 struct { 24 poly1305_blocks_f blocks; 25 poly1305_emit_f emit; 26 } func; 27 }; 28