1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Copyright (c) 2024 Meta, Inc */
3 #include <linux/types.h>
4 #include <linux/module.h>
5 #include <linux/bpf_crypto.h>
6 #include <crypto/skcipher.h>
8 static void *bpf_crypto_lskcipher_alloc_tfm(const char *algo
)
10 return crypto_alloc_lskcipher(algo
, 0, 0);
13 static void bpf_crypto_lskcipher_free_tfm(void *tfm
)
15 crypto_free_lskcipher(tfm
);
18 static int bpf_crypto_lskcipher_has_algo(const char *algo
)
20 return crypto_has_skcipher(algo
, CRYPTO_ALG_TYPE_LSKCIPHER
, CRYPTO_ALG_TYPE_MASK
);
23 static int bpf_crypto_lskcipher_setkey(void *tfm
, const u8
*key
, unsigned int keylen
)
25 return crypto_lskcipher_setkey(tfm
, key
, keylen
);
28 static u32
bpf_crypto_lskcipher_get_flags(void *tfm
)
30 return crypto_lskcipher_get_flags(tfm
);
33 static unsigned int bpf_crypto_lskcipher_ivsize(void *tfm
)
35 return crypto_lskcipher_ivsize(tfm
);
38 static unsigned int bpf_crypto_lskcipher_statesize(void *tfm
)
40 return crypto_lskcipher_statesize(tfm
);
43 static int bpf_crypto_lskcipher_encrypt(void *tfm
, const u8
*src
, u8
*dst
,
44 unsigned int len
, u8
*siv
)
46 return crypto_lskcipher_encrypt(tfm
, src
, dst
, len
, siv
);
49 static int bpf_crypto_lskcipher_decrypt(void *tfm
, const u8
*src
, u8
*dst
,
50 unsigned int len
, u8
*siv
)
52 return crypto_lskcipher_decrypt(tfm
, src
, dst
, len
, siv
);
55 static const struct bpf_crypto_type bpf_crypto_lskcipher_type
= {
56 .alloc_tfm
= bpf_crypto_lskcipher_alloc_tfm
,
57 .free_tfm
= bpf_crypto_lskcipher_free_tfm
,
58 .has_algo
= bpf_crypto_lskcipher_has_algo
,
59 .setkey
= bpf_crypto_lskcipher_setkey
,
60 .encrypt
= bpf_crypto_lskcipher_encrypt
,
61 .decrypt
= bpf_crypto_lskcipher_decrypt
,
62 .ivsize
= bpf_crypto_lskcipher_ivsize
,
63 .statesize
= bpf_crypto_lskcipher_statesize
,
64 .get_flags
= bpf_crypto_lskcipher_get_flags
,
69 static int __init
bpf_crypto_skcipher_init(void)
71 return bpf_crypto_register_type(&bpf_crypto_lskcipher_type
);
74 static void __exit
bpf_crypto_skcipher_exit(void)
76 int err
= bpf_crypto_unregister_type(&bpf_crypto_lskcipher_type
);
80 module_init(bpf_crypto_skcipher_init
);
81 module_exit(bpf_crypto_skcipher_exit
);
82 MODULE_LICENSE("GPL");