]>
Commit | Line | Data |
---|---|---|
a4397635 AB |
1 | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | /* | |
3 | * Copyright (C) 2019 Linaro Ltd <[email protected]> | |
4 | */ | |
5 | ||
6 | #include <asm/cpufeature.h> | |
7 | #include <asm/neon.h> | |
8 | ||
9 | #include "aegis.h" | |
10 | ||
52828263 | 11 | void crypto_aegis128_init_neon(void *state, const void *key, const void *iv); |
a4397635 AB |
12 | void crypto_aegis128_update_neon(void *state, const void *msg); |
13 | void crypto_aegis128_encrypt_chunk_neon(void *state, void *dst, const void *src, | |
14 | unsigned int size); | |
15 | void crypto_aegis128_decrypt_chunk_neon(void *state, void *dst, const void *src, | |
16 | unsigned int size); | |
97b70180 AB |
17 | int crypto_aegis128_final_neon(void *state, void *tag_xor, |
18 | unsigned int assoclen, | |
19 | unsigned int cryptlen, | |
20 | unsigned int authsize); | |
a4397635 | 21 | |
19842963 AB |
22 | int aegis128_have_aes_insn __ro_after_init; |
23 | ||
a4397635 AB |
24 | bool crypto_aegis128_have_simd(void) |
25 | { | |
19842963 AB |
26 | if (cpu_have_feature(cpu_feature(AES))) { |
27 | aegis128_have_aes_insn = 1; | |
28 | return true; | |
29 | } | |
30 | return IS_ENABLED(CONFIG_ARM64); | |
a4397635 AB |
31 | } |
32 | ||
52828263 AB |
33 | void crypto_aegis128_init_simd(union aegis_block *state, |
34 | const union aegis_block *key, | |
35 | const u8 *iv) | |
36 | { | |
37 | kernel_neon_begin(); | |
38 | crypto_aegis128_init_neon(state, key, iv); | |
39 | kernel_neon_end(); | |
40 | } | |
41 | ||
a4397635 AB |
42 | void crypto_aegis128_update_simd(union aegis_block *state, const void *msg) |
43 | { | |
44 | kernel_neon_begin(); | |
45 | crypto_aegis128_update_neon(state, msg); | |
46 | kernel_neon_end(); | |
47 | } | |
48 | ||
49 | void crypto_aegis128_encrypt_chunk_simd(union aegis_block *state, u8 *dst, | |
50 | const u8 *src, unsigned int size) | |
51 | { | |
52 | kernel_neon_begin(); | |
53 | crypto_aegis128_encrypt_chunk_neon(state, dst, src, size); | |
54 | kernel_neon_end(); | |
55 | } | |
56 | ||
57 | void crypto_aegis128_decrypt_chunk_simd(union aegis_block *state, u8 *dst, | |
58 | const u8 *src, unsigned int size) | |
59 | { | |
60 | kernel_neon_begin(); | |
61 | crypto_aegis128_decrypt_chunk_neon(state, dst, src, size); | |
62 | kernel_neon_end(); | |
63 | } | |
52828263 | 64 | |
97b70180 AB |
65 | int crypto_aegis128_final_simd(union aegis_block *state, |
66 | union aegis_block *tag_xor, | |
67 | unsigned int assoclen, | |
68 | unsigned int cryptlen, | |
69 | unsigned int authsize) | |
52828263 | 70 | { |
97b70180 AB |
71 | int ret; |
72 | ||
52828263 | 73 | kernel_neon_begin(); |
97b70180 AB |
74 | ret = crypto_aegis128_final_neon(state, tag_xor, assoclen, cryptlen, |
75 | authsize); | |
52828263 | 76 | kernel_neon_end(); |
97b70180 AB |
77 | |
78 | return ret; | |
52828263 | 79 | } |