xref: /linux-6.15/include/uapi/linux/cryptouser.h (revision 65c4c93c)
1e2be04c7SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2d0497524SHerbert Xu /*
3d0497524SHerbert Xu  * Crypto user configuration API.
4d0497524SHerbert Xu  *
5d0497524SHerbert Xu  * Copyright (C) 2011 secunet Security Networks AG
6d0497524SHerbert Xu  * Copyright (C) 2011 Steffen Klassert <[email protected]>
7d0497524SHerbert Xu  *
8d0497524SHerbert Xu  * This program is free software; you can redistribute it and/or modify it
9d0497524SHerbert Xu  * under the terms and conditions of the GNU General Public License,
10d0497524SHerbert Xu  * version 2, as published by the Free Software Foundation.
11d0497524SHerbert Xu  *
12d0497524SHerbert Xu  * This program is distributed in the hope it will be useful, but WITHOUT
13d0497524SHerbert Xu  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14d0497524SHerbert Xu  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15d0497524SHerbert Xu  * more details.
16d0497524SHerbert Xu  *
17d0497524SHerbert Xu  * You should have received a copy of the GNU General Public License along with
18d0497524SHerbert Xu  * this program; if not, write to the Free Software Foundation, Inc.,
19d0497524SHerbert Xu  * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
20d0497524SHerbert Xu  */
21d0497524SHerbert Xu 
2268289c63SMasahiro Yamada #ifndef _UAPI_LINUX_CRYPTOUSER_H
2368289c63SMasahiro Yamada #define _UAPI_LINUX_CRYPTOUSER_H
2468289c63SMasahiro Yamada 
259078b4eeSNicolas Dichtel #include <linux/types.h>
269078b4eeSNicolas Dichtel 
27d0497524SHerbert Xu /* Netlink configuration messages.  */
28d0497524SHerbert Xu enum {
29d0497524SHerbert Xu 	CRYPTO_MSG_BASE = 0x10,
30d0497524SHerbert Xu 	CRYPTO_MSG_NEWALG = 0x10,
31d0497524SHerbert Xu 	CRYPTO_MSG_DELALG,
32d0497524SHerbert Xu 	CRYPTO_MSG_UPDATEALG,
33d0497524SHerbert Xu 	CRYPTO_MSG_GETALG,
349aa867e4SHerbert Xu 	CRYPTO_MSG_DELRNG,
3529ce50e0SEric Biggers 	CRYPTO_MSG_GETSTAT, /* No longer supported, do not use. */
36d0497524SHerbert Xu 	__CRYPTO_MSG_MAX
37d0497524SHerbert Xu };
38d0497524SHerbert Xu #define CRYPTO_MSG_MAX (__CRYPTO_MSG_MAX - 1)
39d0497524SHerbert Xu #define CRYPTO_NR_MSGTYPES (CRYPTO_MSG_MAX + 1 - CRYPTO_MSG_BASE)
40d0497524SHerbert Xu 
414473710dSHerbert Xu #define CRYPTO_MAX_NAME 64
42d0497524SHerbert Xu 
43d0497524SHerbert Xu /* Netlink message attributes.  */
44d0497524SHerbert Xu enum crypto_attr_type_t {
45d0497524SHerbert Xu 	CRYPTOCFGA_UNSPEC,
46d0497524SHerbert Xu 	CRYPTOCFGA_PRIORITY_VAL,	/* __u32 */
47d0497524SHerbert Xu 	CRYPTOCFGA_REPORT_LARVAL,	/* struct crypto_report_larval */
48d0497524SHerbert Xu 	CRYPTOCFGA_REPORT_HASH,		/* struct crypto_report_hash */
49d0497524SHerbert Xu 	CRYPTOCFGA_REPORT_BLKCIPHER,	/* struct crypto_report_blkcipher */
50d0497524SHerbert Xu 	CRYPTOCFGA_REPORT_AEAD,		/* struct crypto_report_aead */
51d0497524SHerbert Xu 	CRYPTOCFGA_REPORT_COMPRESS,	/* struct crypto_report_comp */
52d0497524SHerbert Xu 	CRYPTOCFGA_REPORT_RNG,		/* struct crypto_report_rng */
53d0497524SHerbert Xu 	CRYPTOCFGA_REPORT_CIPHER,	/* struct crypto_report_cipher */
54d0497524SHerbert Xu 	CRYPTOCFGA_REPORT_AKCIPHER,	/* struct crypto_report_akcipher */
554e5f2c40SSalvatore Benedetto 	CRYPTOCFGA_REPORT_KPP,		/* struct crypto_report_kpp */
562ebda74fSGiovanni Cabiddu 	CRYPTOCFGA_REPORT_ACOMP,	/* struct crypto_report_acomp */
5729ce50e0SEric Biggers 	CRYPTOCFGA_STAT_LARVAL,		/* No longer supported, do not use. */
5829ce50e0SEric Biggers 	CRYPTOCFGA_STAT_HASH,		/* No longer supported, do not use. */
5929ce50e0SEric Biggers 	CRYPTOCFGA_STAT_BLKCIPHER,	/* No longer supported, do not use. */
6029ce50e0SEric Biggers 	CRYPTOCFGA_STAT_AEAD,		/* No longer supported, do not use. */
6129ce50e0SEric Biggers 	CRYPTOCFGA_STAT_COMPRESS,	/* No longer supported, do not use. */
6229ce50e0SEric Biggers 	CRYPTOCFGA_STAT_RNG,		/* No longer supported, do not use. */
6329ce50e0SEric Biggers 	CRYPTOCFGA_STAT_CIPHER,		/* No longer supported, do not use. */
6429ce50e0SEric Biggers 	CRYPTOCFGA_STAT_AKCIPHER,	/* No longer supported, do not use. */
6529ce50e0SEric Biggers 	CRYPTOCFGA_STAT_KPP,		/* No longer supported, do not use. */
6629ce50e0SEric Biggers 	CRYPTOCFGA_STAT_ACOMP,		/* No longer supported, do not use. */
67*65c4c93cSLukas Wunner 	CRYPTOCFGA_REPORT_SIG,		/* struct crypto_report_sig */
68d0497524SHerbert Xu 	__CRYPTOCFGA_MAX
69d0497524SHerbert Xu 
70d0497524SHerbert Xu #define CRYPTOCFGA_MAX (__CRYPTOCFGA_MAX - 1)
71d0497524SHerbert Xu };
72d0497524SHerbert Xu 
73d0497524SHerbert Xu struct crypto_user_alg {
744473710dSHerbert Xu 	char cru_name[CRYPTO_MAX_NAME];
754473710dSHerbert Xu 	char cru_driver_name[CRYPTO_MAX_NAME];
764473710dSHerbert Xu 	char cru_module_name[CRYPTO_MAX_NAME];
77d0497524SHerbert Xu 	__u32 cru_type;
78d0497524SHerbert Xu 	__u32 cru_mask;
79d0497524SHerbert Xu 	__u32 cru_refcnt;
80d0497524SHerbert Xu 	__u32 cru_flags;
81d0497524SHerbert Xu };
82d0497524SHerbert Xu 
8329ce50e0SEric Biggers /* No longer supported, do not use. */
847f0a9d5cSCorentin Labbe struct crypto_stat_aead {
85cac5818cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
866e8e72cdSCorentin Labbe 	__u64 stat_encrypt_cnt;
87cac5818cSCorentin Labbe 	__u64 stat_encrypt_tlen;
887f0a9d5cSCorentin Labbe 	__u64 stat_decrypt_cnt;
897f0a9d5cSCorentin Labbe 	__u64 stat_decrypt_tlen;
9044f13133SCorentin Labbe 	__u64 stat_err_cnt;
917f0a9d5cSCorentin Labbe };
927f0a9d5cSCorentin Labbe 
9329ce50e0SEric Biggers /* No longer supported, do not use. */
947f0a9d5cSCorentin Labbe struct crypto_stat_akcipher {
957f0a9d5cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
967f0a9d5cSCorentin Labbe 	__u64 stat_encrypt_cnt;
977f0a9d5cSCorentin Labbe 	__u64 stat_encrypt_tlen;
987f0a9d5cSCorentin Labbe 	__u64 stat_decrypt_cnt;
997f0a9d5cSCorentin Labbe 	__u64 stat_decrypt_tlen;
1007f0a9d5cSCorentin Labbe 	__u64 stat_verify_cnt;
1017f0a9d5cSCorentin Labbe 	__u64 stat_sign_cnt;
10244f13133SCorentin Labbe 	__u64 stat_err_cnt;
1037f0a9d5cSCorentin Labbe };
1047f0a9d5cSCorentin Labbe 
10529ce50e0SEric Biggers /* No longer supported, do not use. */
1067f0a9d5cSCorentin Labbe struct crypto_stat_cipher {
1077f0a9d5cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
1087f0a9d5cSCorentin Labbe 	__u64 stat_encrypt_cnt;
1097f0a9d5cSCorentin Labbe 	__u64 stat_encrypt_tlen;
1107f0a9d5cSCorentin Labbe 	__u64 stat_decrypt_cnt;
1117f0a9d5cSCorentin Labbe 	__u64 stat_decrypt_tlen;
11244f13133SCorentin Labbe 	__u64 stat_err_cnt;
1137f0a9d5cSCorentin Labbe };
1147f0a9d5cSCorentin Labbe 
11529ce50e0SEric Biggers /* No longer supported, do not use. */
1167f0a9d5cSCorentin Labbe struct crypto_stat_compress {
1177f0a9d5cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
1187f0a9d5cSCorentin Labbe 	__u64 stat_compress_cnt;
1197f0a9d5cSCorentin Labbe 	__u64 stat_compress_tlen;
1207f0a9d5cSCorentin Labbe 	__u64 stat_decompress_cnt;
1217f0a9d5cSCorentin Labbe 	__u64 stat_decompress_tlen;
12244f13133SCorentin Labbe 	__u64 stat_err_cnt;
1237f0a9d5cSCorentin Labbe };
1247f0a9d5cSCorentin Labbe 
12529ce50e0SEric Biggers /* No longer supported, do not use. */
1267f0a9d5cSCorentin Labbe struct crypto_stat_hash {
1277f0a9d5cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
1287f0a9d5cSCorentin Labbe 	__u64 stat_hash_cnt;
1297f0a9d5cSCorentin Labbe 	__u64 stat_hash_tlen;
13044f13133SCorentin Labbe 	__u64 stat_err_cnt;
1317f0a9d5cSCorentin Labbe };
1327f0a9d5cSCorentin Labbe 
13329ce50e0SEric Biggers /* No longer supported, do not use. */
1347f0a9d5cSCorentin Labbe struct crypto_stat_kpp {
1357f0a9d5cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
1367f0a9d5cSCorentin Labbe 	__u64 stat_setsecret_cnt;
1377f0a9d5cSCorentin Labbe 	__u64 stat_generate_public_key_cnt;
1387f0a9d5cSCorentin Labbe 	__u64 stat_compute_shared_secret_cnt;
13944f13133SCorentin Labbe 	__u64 stat_err_cnt;
140cac5818cSCorentin Labbe };
1417f0a9d5cSCorentin Labbe 
14229ce50e0SEric Biggers /* No longer supported, do not use. */
1437f0a9d5cSCorentin Labbe struct crypto_stat_rng {
1447f0a9d5cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
1457f0a9d5cSCorentin Labbe 	__u64 stat_generate_cnt;
1467f0a9d5cSCorentin Labbe 	__u64 stat_generate_tlen;
1476e8e72cdSCorentin Labbe 	__u64 stat_seed_cnt;
14844f13133SCorentin Labbe 	__u64 stat_err_cnt;
149cac5818cSCorentin Labbe };
1507f0a9d5cSCorentin Labbe 
15129ce50e0SEric Biggers /* No longer supported, do not use. */
1527f0a9d5cSCorentin Labbe struct crypto_stat_larval {
1537f0a9d5cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
154cac5818cSCorentin Labbe };
155cac5818cSCorentin Labbe 
156d0497524SHerbert Xu struct crypto_report_larval {
157d0497524SHerbert Xu 	char type[CRYPTO_MAX_NAME];
158d0497524SHerbert Xu };
159d0497524SHerbert Xu 
160d0497524SHerbert Xu struct crypto_report_hash {
161d0497524SHerbert Xu 	char type[CRYPTO_MAX_NAME];
162d0497524SHerbert Xu 	unsigned int blocksize;
163d0497524SHerbert Xu 	unsigned int digestsize;
164d0497524SHerbert Xu };
165d0497524SHerbert Xu 
166d0497524SHerbert Xu struct crypto_report_cipher {
1674473710dSHerbert Xu 	char type[CRYPTO_MAX_NAME];
168d0497524SHerbert Xu 	unsigned int blocksize;
169d0497524SHerbert Xu 	unsigned int min_keysize;
170d0497524SHerbert Xu 	unsigned int max_keysize;
171d0497524SHerbert Xu };
172d0497524SHerbert Xu 
173d0497524SHerbert Xu struct crypto_report_blkcipher {
174d0497524SHerbert Xu 	char type[CRYPTO_MAX_NAME];
175d0497524SHerbert Xu 	char geniv[CRYPTO_MAX_NAME];
176d0497524SHerbert Xu 	unsigned int blocksize;
177d0497524SHerbert Xu 	unsigned int min_keysize;
178d0497524SHerbert Xu 	unsigned int max_keysize;
179d0497524SHerbert Xu 	unsigned int ivsize;
180d0497524SHerbert Xu };
181d0497524SHerbert Xu 
182d0497524SHerbert Xu struct crypto_report_aead {
183d0497524SHerbert Xu 	char type[CRYPTO_MAX_NAME];
184d0497524SHerbert Xu 	char geniv[CRYPTO_MAX_NAME];
185d0497524SHerbert Xu 	unsigned int blocksize;
186d0497524SHerbert Xu 	unsigned int maxauthsize;
187d0497524SHerbert Xu 	unsigned int ivsize;
188d0497524SHerbert Xu };
189d0497524SHerbert Xu 
190d0497524SHerbert Xu struct crypto_report_comp {
191d0497524SHerbert Xu 	char type[CRYPTO_MAX_NAME];
192d0497524SHerbert Xu };
193d0497524SHerbert Xu 
194d0497524SHerbert Xu struct crypto_report_rng {
195d0497524SHerbert Xu 	char type[CRYPTO_MAX_NAME];
196d0497524SHerbert Xu 	unsigned int seedsize;
197d0497524SHerbert Xu };
198d0497524SHerbert Xu 
199d0497524SHerbert Xu struct crypto_report_akcipher {
200d0497524SHerbert Xu 	char type[CRYPTO_MAX_NAME];
201d0497524SHerbert Xu };
202d0497524SHerbert Xu 
2034e5f2c40SSalvatore Benedetto struct crypto_report_kpp {
2044e5f2c40SSalvatore Benedetto 	char type[CRYPTO_MAX_NAME];
2054e5f2c40SSalvatore Benedetto };
2064e5f2c40SSalvatore Benedetto 
2072ebda74fSGiovanni Cabiddu struct crypto_report_acomp {
2082ebda74fSGiovanni Cabiddu 	char type[CRYPTO_MAX_NAME];
2092ebda74fSGiovanni Cabiddu };
2102ebda74fSGiovanni Cabiddu 
211*65c4c93cSLukas Wunner struct crypto_report_sig {
212*65c4c93cSLukas Wunner 	char type[CRYPTO_MAX_NAME];
213*65c4c93cSLukas Wunner };
214*65c4c93cSLukas Wunner 
215d0497524SHerbert Xu #define CRYPTO_REPORT_MAXSIZE (sizeof(struct crypto_user_alg) + \
216d0497524SHerbert Xu 			       sizeof(struct crypto_report_blkcipher))
21768289c63SMasahiro Yamada 
21868289c63SMasahiro Yamada #endif /* _UAPI_LINUX_CRYPTOUSER_H */
219