Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/x86/crypto/camellia.h
26424 views
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, 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, 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, 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, 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
69