| 1 | |
| 2 | |
| 3 | * Copyright (C) 2019 Linaro Ltd <[email protected]>
|
| 4 |
|
| 5 |
|
| 6 | #include <asm/cpufeature.h>
|
| 7 | #include <asm/simd.h>
|
| 8 |
|
| 9 | #include "aegis.h"
|
| 10 | #include "aegis-neon.h"
|
| 11 |
|
| 12 | int aegis128_have_aes_insn __ro_after_init;
|
| 13 |
|
| 14 | bool crypto_aegis128_have_simd(void)
|
| 15 | {
|
| 16 | if (cpu_have_feature(cpu_feature(AES))) {
|
| 17 | aegis128_have_aes_insn = 1;
|
| 18 | return true;
|
| 19 | }
|
| 20 | return IS_ENABLED(CONFIG_ARM64);
|
| 21 | }
|
| 22 |
|
| 23 | void crypto_aegis128_init_simd(struct aegis_state *state,
|
| 24 | const union aegis_block *key,
|
| 25 | const u8 *iv)
|
| 26 | {
|
| 27 | scoped_ksimd()
|
| 28 | crypto_aegis128_init_neon(state, key, iv);
|
| 29 | }
|
| 30 |
|
| 31 | void crypto_aegis128_update_simd(struct aegis_state *state, const void *msg)
|
| 32 | {
|
| 33 | scoped_ksimd()
|
| 34 | crypto_aegis128_update_neon(state, msg);
|
| 35 | }
|
| 36 |
|
| 37 | void crypto_aegis128_encrypt_chunk_simd(struct aegis_state *state, u8 *dst,
|
| 38 | const u8 *src, unsigned int size)
|
| 39 | {
|
| 40 | scoped_ksimd()
|
| 41 | crypto_aegis128_encrypt_chunk_neon(state, dst, src, size);
|
| 42 | }
|
| 43 |
|
| 44 | void crypto_aegis128_decrypt_chunk_simd(struct aegis_state *state, u8 *dst,
|
| 45 | const u8 *src, unsigned int size)
|
| 46 | {
|
| 47 | scoped_ksimd()
|
| 48 | crypto_aegis128_decrypt_chunk_neon(state, dst, src, size);
|
| 49 | }
|
| 50 |
|
| 51 | int crypto_aegis128_final_simd(struct aegis_state *state,
|
| 52 | union aegis_block *tag_xor,
|
| 53 | unsigned int assoclen,
|
| 54 | unsigned int cryptlen,
|
| 55 | unsigned int authsize)
|
| 56 | {
|
| 57 | scoped_ksimd()
|
| 58 | return crypto_aegis128_final_neon(state, tag_xor, assoclen,
|
| 59 | cryptlen, authsize);
|
| 60 | }
|