pq_crypto-seal 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/ci.yml +66 -0
- data/CHANGELOG.md +44 -0
- data/FORMAT.md +139 -0
- data/GET_STARTED.md +30 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +215 -0
- data/RELEASING.md +34 -0
- data/Rakefile +19 -0
- data/SECURITY.md +85 -0
- data/VENDORING.md +14 -0
- data/ext/pq_crypto_seal/aegis_unused_stubs.c +20 -0
- data/ext/pq_crypto_seal/extconf.rb +296 -0
- data/ext/pq_crypto_seal/pq_crypto_seal.c +390 -0
- data/ext/pq_crypto_seal/vendor/libaegis/LICENSE +21 -0
- data/ext/pq_crypto_seal/vendor/libaegis/TREE_SHA256 +1 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128l/aegis128l.c +246 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128l/aegis128l_aesni.c +73 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128l/aegis128l_aesni.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128l/aegis128l_altivec.c +70 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128l/aegis128l_altivec.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128l/aegis128l_common.h +691 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128l/aegis128l_neon_aes.c +77 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128l/aegis128l_neon_aes.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128l/aegis128l_neon_sha3.c +86 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128l/aegis128l_neon_sha3.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128l/aegis128l_soft.c +63 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128l/aegis128l_soft.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128l/implementations.h +40 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x2/aegis128x2.c +247 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x2/aegis128x2_aesni.c +108 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x2/aegis128x2_aesni.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x2/aegis128x2_altivec.c +103 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x2/aegis128x2_altivec.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x2/aegis128x2_avx2.c +79 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x2/aegis128x2_avx2.h +11 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x2/aegis128x2_common.h +795 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x2/aegis128x2_neon_aes.c +111 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x2/aegis128x2_neon_aes.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x2/aegis128x2_soft.c +96 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x2/aegis128x2_soft.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x2/implementations.h +40 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/aegis128x4.c +252 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/aegis128x4_aesni.c +117 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/aegis128x4_aesni.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/aegis128x4_altivec.c +111 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/aegis128x4_altivec.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/aegis128x4_avx2.c +112 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/aegis128x4_avx2.h +11 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/aegis128x4_avx512.c +85 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/aegis128x4_avx512.h +11 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/aegis128x4_common.h +808 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/aegis128x4_neon_aes.c +119 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/aegis128x4_neon_aes.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/aegis128x4_soft.c +104 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/aegis128x4_soft.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis128x4/implementations.h +41 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256/aegis256.c +240 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256/aegis256_aesni.c +68 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256/aegis256_aesni.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256/aegis256_altivec.c +68 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256/aegis256_altivec.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256/aegis256_common.h +673 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256/aegis256_neon_aes.c +75 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256/aegis256_neon_aes.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256/aegis256_soft.c +58 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256/aegis256_soft.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256/implementations.h +39 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x2/aegis256x2.c +247 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x2/aegis256x2_aesni.c +103 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x2/aegis256x2_aesni.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x2/aegis256x2_altivec.c +101 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x2/aegis256x2_altivec.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x2/aegis256x2_avx2.c +74 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x2/aegis256x2_avx2.h +11 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x2/aegis256x2_common.h +790 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x2/aegis256x2_neon_aes.c +109 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x2/aegis256x2_neon_aes.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x2/aegis256x2_soft.c +91 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x2/aegis256x2_soft.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x2/implementations.h +41 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/aegis256x4.c +252 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/aegis256x4_aesni.c +112 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/aegis256x4_aesni.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/aegis256x4_altivec.c +109 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/aegis256x4_altivec.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/aegis256x4_avx2.c +107 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/aegis256x4_avx2.h +11 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/aegis256x4_avx512.c +79 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/aegis256x4_avx512.h +11 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/aegis256x4_common.h +805 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/aegis256x4_neon_aes.c +117 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/aegis256x4_neon_aes.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/aegis256x4_soft.c +99 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/aegis256x4_soft.h +9 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/aegis256x4/implementations.h +42 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/common/common.c +81 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/common/common.h +144 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/common/cpu.c +378 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/common/cpu.h +34 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/common/keccak.c +187 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/common/keccak.h +13 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/common/softaes.c +338 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/common/softaes.h +69 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/include/aegis.h +77 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/include/aegis128l.h +311 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/include/aegis128x2.h +313 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/include/aegis128x4.h +313 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/include/aegis256.h +311 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/include/aegis256x2.h +313 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/include/aegis256x4.h +313 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/include/aegis_raf.h +580 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/raf/raf.c +87 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/raf/raf_aegis128l.c +20 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/raf/raf_aegis128x2.c +20 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/raf/raf_aegis128x4.c +20 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/raf/raf_aegis256.c +20 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/raf/raf_aegis256x2.c +20 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/raf/raf_aegis256x4.c +20 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/raf/raf_internal.h +152 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/raf/raf_merkle.c +268 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/raf/raf_merkle.h +165 -0
- data/ext/pq_crypto_seal/vendor/libaegis/src/raf/raf_variant.h +1119 -0
- data/fuzz/decrypt_fuzz.rb +119 -0
- data/lib/pq_crypto/seal/binary.rb +62 -0
- data/lib/pq_crypto/seal/core.rb +398 -0
- data/lib/pq_crypto/seal/errors.rb +15 -0
- data/lib/pq_crypto/seal/format.rb +275 -0
- data/lib/pq_crypto/seal/io.rb +336 -0
- data/lib/pq_crypto/seal/native.rb +13 -0
- data/lib/pq_crypto/seal/padding.rb +47 -0
- data/lib/pq_crypto/seal/version.rb +6 -0
- data/lib/pq_crypto/seal.rb +32 -0
- data/pq_crypto-seal.gemspec +37 -0
- data/script/vendor_libs.rb +79 -0
- data/test/aegis_vectors_test.rb +54 -0
- data/test/golden_vectors_test.rb +183 -0
- data/test/io_test.rb +125 -0
- data/test/native_test.rb +36 -0
- data/test/seal_test.rb +238 -0
- data/test/test_helper.rb +6 -0
- metadata +244 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#if defined(__ALTIVEC__) && defined(__CRYPTO__)
|
|
2
|
+
|
|
3
|
+
# include <stddef.h>
|
|
4
|
+
# include <stdint.h>
|
|
5
|
+
|
|
6
|
+
# include "../common/common.h"
|
|
7
|
+
# include "aegis128x2.h"
|
|
8
|
+
# include "aegis128x2_altivec.h"
|
|
9
|
+
|
|
10
|
+
# include <altivec.h>
|
|
11
|
+
|
|
12
|
+
# ifdef __clang__
|
|
13
|
+
# pragma clang attribute push(__attribute__((target("altivec,crypto"))), apply_to = function)
|
|
14
|
+
# elif defined(__GNUC__)
|
|
15
|
+
# pragma GCC target("altivec,crypto")
|
|
16
|
+
# endif
|
|
17
|
+
|
|
18
|
+
# define AES_BLOCK_LENGTH 32
|
|
19
|
+
|
|
20
|
+
typedef struct {
|
|
21
|
+
vector unsigned char b0;
|
|
22
|
+
vector unsigned char b1;
|
|
23
|
+
} aes_block_t;
|
|
24
|
+
|
|
25
|
+
static inline aes_block_t
|
|
26
|
+
AES_BLOCK_XOR(const aes_block_t a, const aes_block_t b)
|
|
27
|
+
{
|
|
28
|
+
return (aes_block_t) { vec_xor(a.b0, b.b0), vec_xor(a.b1, b.b1) };
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
static inline aes_block_t
|
|
32
|
+
AES_BLOCK_AND(const aes_block_t a, const aes_block_t b)
|
|
33
|
+
{
|
|
34
|
+
return (aes_block_t) { vec_and(a.b0, b.b0), vec_and(a.b1, b.b1) };
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
static inline aes_block_t
|
|
38
|
+
AES_BLOCK_LOAD(const uint8_t *a)
|
|
39
|
+
{
|
|
40
|
+
return (aes_block_t) { vec_xl_be(0, a), vec_xl_be(0, a + 16) };
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
static inline aes_block_t
|
|
44
|
+
AES_BLOCK_LOAD_64x2(uint64_t a, uint64_t b)
|
|
45
|
+
{
|
|
46
|
+
const vector unsigned char t = ((vector unsigned char) vec_revb(
|
|
47
|
+
vec_insert(a, vec_promote((unsigned long long) (b), 1), 0)));
|
|
48
|
+
return (aes_block_t) { t, t };
|
|
49
|
+
}
|
|
50
|
+
static inline void
|
|
51
|
+
AES_BLOCK_STORE(uint8_t *a, const aes_block_t b)
|
|
52
|
+
{
|
|
53
|
+
vec_xst_be(b.b0, 0, a);
|
|
54
|
+
vec_xst_be(b.b1, 0, a + 16);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
static inline aes_block_t
|
|
58
|
+
AES_ENC(const aes_block_t a, const aes_block_t b)
|
|
59
|
+
{
|
|
60
|
+
return (aes_block_t) { vec_cipher_be(a.b0, b.b0), vec_cipher_be(a.b1, b.b1) };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
static inline void
|
|
64
|
+
aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2)
|
|
65
|
+
{
|
|
66
|
+
aes_block_t tmp;
|
|
67
|
+
|
|
68
|
+
tmp = state[7];
|
|
69
|
+
state[7] = AES_ENC(state[6], state[7]);
|
|
70
|
+
state[6] = AES_ENC(state[5], state[6]);
|
|
71
|
+
state[5] = AES_ENC(state[4], state[5]);
|
|
72
|
+
state[4] = AES_BLOCK_XOR(AES_ENC(state[3], state[4]), d2);
|
|
73
|
+
state[3] = AES_ENC(state[2], state[3]);
|
|
74
|
+
state[2] = AES_ENC(state[1], state[2]);
|
|
75
|
+
state[1] = AES_ENC(state[0], state[1]);
|
|
76
|
+
state[0] = AES_BLOCK_XOR(AES_ENC(tmp, state[0]), d1);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
# include "aegis128x2_common.h"
|
|
80
|
+
|
|
81
|
+
struct aegis128x2_implementation aegis128x2_altivec_implementation = {
|
|
82
|
+
.encrypt_detached = encrypt_detached,
|
|
83
|
+
.decrypt_detached = decrypt_detached,
|
|
84
|
+
.encrypt_unauthenticated = encrypt_unauthenticated,
|
|
85
|
+
.decrypt_unauthenticated = decrypt_unauthenticated,
|
|
86
|
+
.stream = stream,
|
|
87
|
+
.state_init = state_init,
|
|
88
|
+
.state_encrypt_update = state_encrypt_update,
|
|
89
|
+
.state_encrypt_final = state_encrypt_final,
|
|
90
|
+
.state_decrypt_update = state_decrypt_update,
|
|
91
|
+
.state_decrypt_final = state_decrypt_final,
|
|
92
|
+
.state_mac_init = state_mac_init,
|
|
93
|
+
.state_mac_update = state_mac_update,
|
|
94
|
+
.state_mac_final = state_mac_final,
|
|
95
|
+
.state_mac_reset = state_mac_reset,
|
|
96
|
+
.state_mac_clone = state_mac_clone,
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
# ifdef __clang__
|
|
100
|
+
# pragma clang attribute pop
|
|
101
|
+
# endif
|
|
102
|
+
|
|
103
|
+
#endif
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#if defined(__i386__) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_AMD64)
|
|
2
|
+
|
|
3
|
+
# include <stddef.h>
|
|
4
|
+
# include <stdint.h>
|
|
5
|
+
|
|
6
|
+
# include "../common/common.h"
|
|
7
|
+
# include "aegis128x2.h"
|
|
8
|
+
# include "aegis128x2_avx2.h"
|
|
9
|
+
|
|
10
|
+
# ifdef HAVE_VAESINTRIN_H
|
|
11
|
+
|
|
12
|
+
# ifdef __clang__
|
|
13
|
+
# pragma clang attribute push(__attribute__((target("aes,vaes,avx2"))), \
|
|
14
|
+
apply_to = function)
|
|
15
|
+
# elif defined(__GNUC__)
|
|
16
|
+
# pragma GCC target("aes,vaes,avx2")
|
|
17
|
+
# endif
|
|
18
|
+
|
|
19
|
+
# include <immintrin.h>
|
|
20
|
+
|
|
21
|
+
# define AES_BLOCK_LENGTH 32
|
|
22
|
+
|
|
23
|
+
typedef __m256i aes_block_t;
|
|
24
|
+
|
|
25
|
+
# define AES_BLOCK_XOR(A, B) _mm256_xor_si256((A), (B))
|
|
26
|
+
# define AES_BLOCK_AND(A, B) _mm256_and_si256((A), (B))
|
|
27
|
+
# define AES_BLOCK_LOAD128_BROADCAST(A) \
|
|
28
|
+
_mm256_broadcastsi128_si256(_mm_loadu_si128((const void *) (A)))
|
|
29
|
+
# define AES_BLOCK_LOAD(A) _mm256_loadu_si256((const aes_block_t *) (const void *) (A))
|
|
30
|
+
# define AES_BLOCK_LOAD_64x2(A, B) _mm256_broadcastsi128_si256(_mm_set_epi64x((A), (B)))
|
|
31
|
+
# define AES_BLOCK_STORE(A, B) _mm256_storeu_si256((aes_block_t *) (void *) (A), (B))
|
|
32
|
+
# define AES_ENC(A, B) _mm256_aesenc_epi128((A), (B))
|
|
33
|
+
|
|
34
|
+
static inline void
|
|
35
|
+
aegis128x2_update(aes_block_t *const state, const aes_block_t d1, const aes_block_t d2)
|
|
36
|
+
{
|
|
37
|
+
aes_block_t tmp;
|
|
38
|
+
|
|
39
|
+
tmp = state[7];
|
|
40
|
+
state[7] = AES_ENC(state[6], state[7]);
|
|
41
|
+
state[6] = AES_ENC(state[5], state[6]);
|
|
42
|
+
state[5] = AES_ENC(state[4], state[5]);
|
|
43
|
+
state[4] = AES_ENC(state[3], state[4]);
|
|
44
|
+
state[3] = AES_ENC(state[2], state[3]);
|
|
45
|
+
state[2] = AES_ENC(state[1], state[2]);
|
|
46
|
+
state[1] = AES_ENC(state[0], state[1]);
|
|
47
|
+
state[0] = AES_ENC(tmp, state[0]);
|
|
48
|
+
|
|
49
|
+
state[0] = AES_BLOCK_XOR(state[0], d1);
|
|
50
|
+
state[4] = AES_BLOCK_XOR(state[4], d2);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
# include "aegis128x2_common.h"
|
|
54
|
+
|
|
55
|
+
struct aegis128x2_implementation aegis128x2_avx2_implementation = {
|
|
56
|
+
.encrypt_detached = encrypt_detached,
|
|
57
|
+
.decrypt_detached = decrypt_detached,
|
|
58
|
+
.encrypt_unauthenticated = encrypt_unauthenticated,
|
|
59
|
+
.decrypt_unauthenticated = decrypt_unauthenticated,
|
|
60
|
+
.stream = stream,
|
|
61
|
+
.state_init = state_init,
|
|
62
|
+
.state_encrypt_update = state_encrypt_update,
|
|
63
|
+
.state_encrypt_final = state_encrypt_final,
|
|
64
|
+
.state_decrypt_update = state_decrypt_update,
|
|
65
|
+
.state_decrypt_final = state_decrypt_final,
|
|
66
|
+
.state_mac_init = state_mac_init,
|
|
67
|
+
.state_mac_update = state_mac_update,
|
|
68
|
+
.state_mac_final = state_mac_final,
|
|
69
|
+
.state_mac_reset = state_mac_reset,
|
|
70
|
+
.state_mac_clone = state_mac_clone,
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
# ifdef __clang__
|
|
74
|
+
# pragma clang attribute pop
|
|
75
|
+
# endif
|
|
76
|
+
|
|
77
|
+
# endif
|
|
78
|
+
|
|
79
|
+
#endif
|