1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef ASM_X86_CAMELLIA_H |
3 | #define ASM_X86_CAMELLIA_H |
4 | |
5 | #include <crypto/b128ops.h> |
6 | #include <linux/crypto.h> |
7 | #include <linux/kernel.h> |
8 | |
9 | #define CAMELLIA_MIN_KEY_SIZE 16 |
10 | #define CAMELLIA_MAX_KEY_SIZE 32 |
11 | #define CAMELLIA_BLOCK_SIZE 16 |
12 | #define CAMELLIA_TABLE_BYTE_LEN 272 |
13 | #define CAMELLIA_PARALLEL_BLOCKS 2 |
14 | |
15 | struct crypto_skcipher; |
16 | |
17 | struct camellia_ctx { |
18 | u64 key_table[CAMELLIA_TABLE_BYTE_LEN / sizeof(u64)]; |
19 | u32 key_length; |
20 | }; |
21 | |
22 | extern int __camellia_setkey(struct camellia_ctx *cctx, |
23 | const unsigned char *key, |
24 | unsigned int key_len); |
25 | |
26 | /* regular block cipher functions */ |
27 | asmlinkage void __camellia_enc_blk(const void *ctx, u8 *dst, const u8 *src, |
28 | bool xor); |
29 | asmlinkage void camellia_dec_blk(const void *ctx, u8 *dst, const u8 *src); |
30 | |
31 | /* 2-way parallel cipher functions */ |
32 | asmlinkage void __camellia_enc_blk_2way(const void *ctx, u8 *dst, const u8 *src, |
33 | bool xor); |
34 | asmlinkage void camellia_dec_blk_2way(const void *ctx, u8 *dst, const u8 *src); |
35 | |
36 | /* 16-way parallel cipher functions (avx/aes-ni) */ |
37 | asmlinkage void camellia_ecb_enc_16way(const void *ctx, u8 *dst, const u8 *src); |
38 | asmlinkage void camellia_ecb_dec_16way(const void *ctx, u8 *dst, const u8 *src); |
39 | |
40 | asmlinkage void camellia_cbc_dec_16way(const void *ctx, u8 *dst, const u8 *src); |
41 | |
42 | static inline void camellia_enc_blk(const void *ctx, u8 *dst, const u8 *src) |
43 | { |
44 | __camellia_enc_blk(ctx, dst, src, xor: false); |
45 | } |
46 | |
47 | static inline void camellia_enc_blk_xor(const void *ctx, u8 *dst, const u8 *src) |
48 | { |
49 | __camellia_enc_blk(ctx, dst, src, xor: true); |
50 | } |
51 | |
52 | static inline void camellia_enc_blk_2way(const void *ctx, u8 *dst, |
53 | const u8 *src) |
54 | { |
55 | __camellia_enc_blk_2way(ctx, dst, src, xor: false); |
56 | } |
57 | |
58 | static inline void camellia_enc_blk_xor_2way(const void *ctx, u8 *dst, |
59 | const u8 *src) |
60 | { |
61 | __camellia_enc_blk_2way(ctx, dst, src, xor: true); |
62 | } |
63 | |
64 | /* glue helpers */ |
65 | extern void camellia_decrypt_cbc_2way(const void *ctx, u8 *dst, const u8 *src); |
66 | |
67 | #endif /* ASM_X86_CAMELLIA_H */ |
68 | |