]>
Commit | Line | Data |
---|---|---|
aa6bb135 | 1 | /* |
a28d06f3 | 2 | * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. |
7dcb2186 | 3 | * |
48f4ad77 | 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use |
aa6bb135 RS |
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 | |
7dcb2186 | 8 | */ |
aa6bb135 | 9 | |
80ce21fe F |
10 | #ifndef OSSL_CRYPTO_POLY1305_H |
11 | # define OSSL_CRYPTO_POLY1305_H | |
12 | # pragma once | |
13 | ||
7dcb2186 AP |
14 | #include <stddef.h> |
15 | ||
52ad5b60 TS |
16 | #define POLY1305_BLOCK_SIZE 16 |
17 | #define POLY1305_DIGEST_SIZE 16 | |
18 | #define POLY1305_KEY_SIZE 32 | |
7dcb2186 AP |
19 | |
20 | typedef struct poly1305_context POLY1305; | |
21 | ||
3d5a7578 SL |
22 | typedef void (*poly1305_blocks_f) (void *ctx, const unsigned char *inp, |
23 | size_t len, unsigned int padbit); | |
24 | typedef void (*poly1305_emit_f) (void *ctx, unsigned char mac[16], | |
25 | const unsigned int nonce[4]); | |
26 | ||
27 | struct poly1305_context { | |
28 | double opaque[24]; /* large enough to hold internal state, declared | |
29 | * 'double' to ensure at least 64-bit invariant | |
30 | * alignment across all platforms and | |
31 | * configurations */ | |
32 | unsigned int nonce[4]; | |
33 | unsigned char data[POLY1305_BLOCK_SIZE]; | |
34 | size_t num; | |
35 | struct { | |
36 | poly1305_blocks_f blocks; | |
37 | poly1305_emit_f emit; | |
38 | } func; | |
39 | }; | |
40 | ||
7dcb2186 AP |
41 | size_t Poly1305_ctx_size(void); |
42 | void Poly1305_Init(POLY1305 *ctx, const unsigned char key[32]); | |
43 | void Poly1305_Update(POLY1305 *ctx, const unsigned char *inp, size_t len); | |
44 | void Poly1305_Final(POLY1305 *ctx, unsigned char mac[16]); | |
80ce21fe F |
45 | |
46 | #endif /* OSSL_CRYPTO_POLY1305_H */ |