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
15struct crypto_skcipher;
16
17struct camellia_ctx {
18 u64 key_table[CAMELLIA_TABLE_BYTE_LEN / sizeof(u64)];
19 u32 key_length;
20};
21
22extern int __camellia_setkey(struct camellia_ctx *cctx,
23 const unsigned char *key,
24 unsigned int key_len);
25
26/* regular block cipher functions */
27asmlinkage void __camellia_enc_blk(const void *ctx, u8 *dst, const u8 *src,
28 bool xor);
29asmlinkage void camellia_dec_blk(const void *ctx, u8 *dst, const u8 *src);
30
31/* 2-way parallel cipher functions */
32asmlinkage void __camellia_enc_blk_2way(const void *ctx, u8 *dst, const u8 *src,
33 bool xor);
34asmlinkage void camellia_dec_blk_2way(const void *ctx, u8 *dst, const u8 *src);
35
36/* 16-way parallel cipher functions (avx/aes-ni) */
37asmlinkage void camellia_ecb_enc_16way(const void *ctx, u8 *dst, const u8 *src);
38asmlinkage void camellia_ecb_dec_16way(const void *ctx, u8 *dst, const u8 *src);
39
40asmlinkage void camellia_cbc_dec_16way(const void *ctx, u8 *dst, const u8 *src);
41
42static 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
47static 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
52static 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
58static 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 */
65extern void camellia_decrypt_cbc_2way(const void *ctx, u8 *dst, const u8 *src);
66
67#endif /* ASM_X86_CAMELLIA_H */
68

source code of linux/arch/x86/crypto/camellia.h