blob: f1592619dd651b107c3b36f4c56d7f40b47ce69e [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001/* 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
22struct camellia_xts_ctx {
23 struct camellia_ctx tweak_ctx;
24 struct camellia_ctx crypt_ctx;
25};
26
27extern int __camellia_setkey(struct camellia_ctx *cctx,
28 const unsigned char *key,
29 unsigned int key_len, u32 *flags);
30
31extern int xts_camellia_setkey(struct crypto_skcipher *tfm, const u8 *key,
32 unsigned int keylen);
33
34/* regular block cipher functions */
35asmlinkage void __camellia_enc_blk(const void *ctx, u8 *dst, const u8 *src,
36 bool xor);
37asmlinkage void camellia_dec_blk(const void *ctx, u8 *dst, const u8 *src);
38
39/* 2-way parallel cipher functions */
40asmlinkage void __camellia_enc_blk_2way(const void *ctx, u8 *dst, const u8 *src,
41 bool xor);
42asmlinkage void camellia_dec_blk_2way(const void *ctx, u8 *dst, const u8 *src);
43
44/* 16-way parallel cipher functions (avx/aes-ni) */
45asmlinkage void camellia_ecb_enc_16way(const void *ctx, u8 *dst, const u8 *src);
46asmlinkage void camellia_ecb_dec_16way(const void *ctx, u8 *dst, const u8 *src);
47
48asmlinkage void camellia_cbc_dec_16way(const void *ctx, u8 *dst, const u8 *src);
49asmlinkage void camellia_ctr_16way(const void *ctx, u8 *dst, const u8 *src,
50 le128 *iv);
51
52asmlinkage void camellia_xts_enc_16way(const void *ctx, u8 *dst, const u8 *src,
53 le128 *iv);
54asmlinkage void camellia_xts_dec_16way(const void *ctx, u8 *dst, const u8 *src,
55 le128 *iv);
56
57static inline void camellia_enc_blk(const void *ctx, u8 *dst, const u8 *src)
58{
59 __camellia_enc_blk(ctx, dst, src, false);
60}
61
62static inline void camellia_enc_blk_xor(const void *ctx, u8 *dst, const u8 *src)
63{
64 __camellia_enc_blk(ctx, dst, src, true);
65}
66
67static inline void camellia_enc_blk_2way(const void *ctx, u8 *dst,
68 const u8 *src)
69{
70 __camellia_enc_blk_2way(ctx, dst, src, false);
71}
72
73static inline void camellia_enc_blk_xor_2way(const void *ctx, u8 *dst,
74 const u8 *src)
75{
76 __camellia_enc_blk_2way(ctx, dst, src, true);
77}
78
79/* glue helpers */
80extern void camellia_decrypt_cbc_2way(const void *ctx, u8 *dst, const u8 *src);
81extern void camellia_crypt_ctr(const void *ctx, u8 *dst, const u8 *src,
82 le128 *iv);
83extern void camellia_crypt_ctr_2way(const void *ctx, u8 *dst, const u8 *src,
84 le128 *iv);
85
86extern void camellia_xts_enc(const void *ctx, u8 *dst, const u8 *src,
87 le128 *iv);
88extern void camellia_xts_dec(const void *ctx, u8 *dst, const u8 *src,
89 le128 *iv);
90
91#endif /* ASM_X86_CAMELLIA_H */