Leancrypto 1.6.0
Post-Quantum Cryptographic Library
Loading...
Searching...
No Matches
lc_ascon_hash.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2024 - 2025, Stephan Mueller <smueller@chronox.de>
3 *
4 * License: see LICENSE file in root directory
5 *
6 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
7 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
8 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
9 * WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
10 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
11 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
12 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
13 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
14 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
15 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
16 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
17 * DAMAGE.
18 */
19
20#ifndef LC_ASCON_HASH_H
21#define LC_ASCON_HASH_H
22
23#include "lc_hash.h"
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
30#define LC_ASCON_HASH_STATE_WORDS 5
31#define LC_ASCON_HASH_STATE_SIZE (LC_ASCON_HASH_STATE_WORDS * sizeof(uint64_t))
32
33#define LC_ASCON_HASH_RATE (64 / 8)
34#define LC_ASCON_HASH_RATE_WORDS (LC_ASCON_HASH_RATE / sizeof(uint64_t))
35
36#define LC_ASCON_HASH_DIGESTSIZE_BITS 256
37#define LC_ASCON_HASH_DIGESTSIZE (LC_ASCON_HASH_DIGESTSIZE_BITS >> 3)
38
39/* Macro set during leancrypto compile time for target platform */
40#undef LC_DEF_ASCON_AVX512
41
42struct lc_ascon_hash {
43 uint64_t state[LC_ASCON_HASH_STATE_WORDS
44#ifdef LC_DEF_ASCON_AVX512
45 + 3
46#endif
47 ];
48 size_t msg_len;
49 size_t digestsize;
50 uint8_t roundb;
51 uint8_t offset;
52 uint8_t squeeze_more : 1;
53};
54
55#define LC_ASCON_STATE_SIZE (sizeof(struct lc_ascon_hash))
56#define LC_ASCON_CTX_SIZE (sizeof(struct lc_hash) + LC_ASCON_STATE_SIZE)
57
58#define LC_ASCON_CTX(name, ascon) \
59 LC_HASH_SET_CTX(name, ascon); \
60 lc_hash_zero(name)
61
62#define LC_ASCON_CTX_ON_STACK(name, ascon) \
63 _Pragma("GCC diagnostic push") \
64 _Pragma("GCC diagnostic ignored \"-Wvla\"") _Pragma( \
65 "GCC diagnostic ignored \"-Wdeclaration-after-statement\"") \
66 LC_ALIGNED_BUFFER(name##_ctx_buf, LC_ASCON_CTX_SIZE, \
67 LC_HASH_COMMON_ALIGNMENT); \
68 struct lc_hash_ctx *name = (struct lc_hash_ctx *)name##_ctx_buf; \
69 LC_ASCON_CTX(name, ascon); \
70 _Pragma("GCC diagnostic pop")
72
77extern const struct lc_hash *lc_ascon_256;
78
83extern const struct lc_hash *lc_ascon_128a;
84
89extern const struct lc_hash *lc_ascon_xof;
90
96#define LC_ASCON_256_CTX_ON_STACK(name) \
97 LC_ASCON_CTX_ON_STACK(name, lc_ascon_256)
98
104#define LC_ASCON_XOF_CTX_ON_STACK(name) \
105 LC_ASCON_CTX_ON_STACK(name, lc_ascon_xof)
106
107#ifdef __cplusplus
108}
109#endif
110
111#endif /* LC_ASCON_HASH_H */
int lc_hash(const struct lc_hash *hash, const uint8_t *in, size_t inlen, uint8_t *digest)
Calculate message digest - one-shot.
const struct lc_hash * lc_ascon_256
Ascon 256 message digest algorithm.
const struct lc_hash * lc_ascon_xof
Ascon XOF extended output function.
const struct lc_hash * lc_ascon_128a
Ascon 128a message digest algorithm.