xref: /linux/include/uapi/linux/cryptouser.h (revision 976e3645923bdd2fe7893aae33fd7a21098bfb28)
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 <steffen.klassert@secunet.com>
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 
22*68289c63SMasahiro Yamada #ifndef _UAPI_LINUX_CRYPTOUSER_H
23*68289c63SMasahiro Yamada #define _UAPI_LINUX_CRYPTOUSER_H
24*68289c63SMasahiro 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,
35cac5818cSCorentin Labbe 	CRYPTO_MSG_GETSTAT,
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 */
57cac5818cSCorentin Labbe 	CRYPTOCFGA_STAT_LARVAL,		/* struct crypto_stat */
58cac5818cSCorentin Labbe 	CRYPTOCFGA_STAT_HASH,		/* struct crypto_stat */
59cac5818cSCorentin Labbe 	CRYPTOCFGA_STAT_BLKCIPHER,	/* struct crypto_stat */
60cac5818cSCorentin Labbe 	CRYPTOCFGA_STAT_AEAD,		/* struct crypto_stat */
61cac5818cSCorentin Labbe 	CRYPTOCFGA_STAT_COMPRESS,	/* struct crypto_stat */
62cac5818cSCorentin Labbe 	CRYPTOCFGA_STAT_RNG,		/* struct crypto_stat */
63cac5818cSCorentin Labbe 	CRYPTOCFGA_STAT_CIPHER,		/* struct crypto_stat */
64cac5818cSCorentin Labbe 	CRYPTOCFGA_STAT_AKCIPHER,	/* struct crypto_stat */
65cac5818cSCorentin Labbe 	CRYPTOCFGA_STAT_KPP,		/* struct crypto_stat */
66cac5818cSCorentin Labbe 	CRYPTOCFGA_STAT_ACOMP,		/* struct crypto_stat */
67d0497524SHerbert Xu 	__CRYPTOCFGA_MAX
68d0497524SHerbert Xu 
69d0497524SHerbert Xu #define CRYPTOCFGA_MAX (__CRYPTOCFGA_MAX - 1)
70d0497524SHerbert Xu };
71d0497524SHerbert Xu 
72d0497524SHerbert Xu struct crypto_user_alg {
734473710dSHerbert Xu 	char cru_name[CRYPTO_MAX_NAME];
744473710dSHerbert Xu 	char cru_driver_name[CRYPTO_MAX_NAME];
754473710dSHerbert Xu 	char cru_module_name[CRYPTO_MAX_NAME];
76d0497524SHerbert Xu 	__u32 cru_type;
77d0497524SHerbert Xu 	__u32 cru_mask;
78d0497524SHerbert Xu 	__u32 cru_refcnt;
79d0497524SHerbert Xu 	__u32 cru_flags;
80d0497524SHerbert Xu };
81d0497524SHerbert Xu 
827f0a9d5cSCorentin Labbe struct crypto_stat_aead {
83cac5818cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
846e8e72cdSCorentin Labbe 	__u64 stat_encrypt_cnt;
85cac5818cSCorentin Labbe 	__u64 stat_encrypt_tlen;
867f0a9d5cSCorentin Labbe 	__u64 stat_decrypt_cnt;
877f0a9d5cSCorentin Labbe 	__u64 stat_decrypt_tlen;
8844f13133SCorentin Labbe 	__u64 stat_err_cnt;
897f0a9d5cSCorentin Labbe };
907f0a9d5cSCorentin Labbe 
917f0a9d5cSCorentin Labbe struct crypto_stat_akcipher {
927f0a9d5cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
937f0a9d5cSCorentin Labbe 	__u64 stat_encrypt_cnt;
947f0a9d5cSCorentin Labbe 	__u64 stat_encrypt_tlen;
957f0a9d5cSCorentin Labbe 	__u64 stat_decrypt_cnt;
967f0a9d5cSCorentin Labbe 	__u64 stat_decrypt_tlen;
977f0a9d5cSCorentin Labbe 	__u64 stat_verify_cnt;
987f0a9d5cSCorentin Labbe 	__u64 stat_sign_cnt;
9944f13133SCorentin Labbe 	__u64 stat_err_cnt;
1007f0a9d5cSCorentin Labbe };
1017f0a9d5cSCorentin Labbe 
1027f0a9d5cSCorentin Labbe struct crypto_stat_cipher {
1037f0a9d5cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
1047f0a9d5cSCorentin Labbe 	__u64 stat_encrypt_cnt;
1057f0a9d5cSCorentin Labbe 	__u64 stat_encrypt_tlen;
1067f0a9d5cSCorentin Labbe 	__u64 stat_decrypt_cnt;
1077f0a9d5cSCorentin Labbe 	__u64 stat_decrypt_tlen;
10844f13133SCorentin Labbe 	__u64 stat_err_cnt;
1097f0a9d5cSCorentin Labbe };
1107f0a9d5cSCorentin Labbe 
1117f0a9d5cSCorentin Labbe struct crypto_stat_compress {
1127f0a9d5cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
1137f0a9d5cSCorentin Labbe 	__u64 stat_compress_cnt;
1147f0a9d5cSCorentin Labbe 	__u64 stat_compress_tlen;
1157f0a9d5cSCorentin Labbe 	__u64 stat_decompress_cnt;
1167f0a9d5cSCorentin Labbe 	__u64 stat_decompress_tlen;
11744f13133SCorentin Labbe 	__u64 stat_err_cnt;
1187f0a9d5cSCorentin Labbe };
1197f0a9d5cSCorentin Labbe 
1207f0a9d5cSCorentin Labbe struct crypto_stat_hash {
1217f0a9d5cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
1227f0a9d5cSCorentin Labbe 	__u64 stat_hash_cnt;
1237f0a9d5cSCorentin Labbe 	__u64 stat_hash_tlen;
12444f13133SCorentin Labbe 	__u64 stat_err_cnt;
1257f0a9d5cSCorentin Labbe };
1267f0a9d5cSCorentin Labbe 
1277f0a9d5cSCorentin Labbe struct crypto_stat_kpp {
1287f0a9d5cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
1297f0a9d5cSCorentin Labbe 	__u64 stat_setsecret_cnt;
1307f0a9d5cSCorentin Labbe 	__u64 stat_generate_public_key_cnt;
1317f0a9d5cSCorentin Labbe 	__u64 stat_compute_shared_secret_cnt;
13244f13133SCorentin Labbe 	__u64 stat_err_cnt;
133cac5818cSCorentin Labbe };
1347f0a9d5cSCorentin Labbe 
1357f0a9d5cSCorentin Labbe struct crypto_stat_rng {
1367f0a9d5cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
1377f0a9d5cSCorentin Labbe 	__u64 stat_generate_cnt;
1387f0a9d5cSCorentin Labbe 	__u64 stat_generate_tlen;
1396e8e72cdSCorentin Labbe 	__u64 stat_seed_cnt;
14044f13133SCorentin Labbe 	__u64 stat_err_cnt;
141cac5818cSCorentin Labbe };
1427f0a9d5cSCorentin Labbe 
1437f0a9d5cSCorentin Labbe struct crypto_stat_larval {
1447f0a9d5cSCorentin Labbe 	char type[CRYPTO_MAX_NAME];
145cac5818cSCorentin Labbe };
146cac5818cSCorentin Labbe 
147d0497524SHerbert Xu struct crypto_report_larval {
148d0497524SHerbert Xu 	char type[CRYPTO_MAX_NAME];
149d0497524SHerbert Xu };
150d0497524SHerbert Xu 
151d0497524SHerbert Xu struct crypto_report_hash {
152d0497524SHerbert Xu 	char type[CRYPTO_MAX_NAME];
153d0497524SHerbert Xu 	unsigned int blocksize;
154d0497524SHerbert Xu 	unsigned int digestsize;
155d0497524SHerbert Xu };
156d0497524SHerbert Xu 
157d0497524SHerbert Xu struct crypto_report_cipher {
1584473710dSHerbert Xu 	char type[CRYPTO_MAX_NAME];
159d0497524SHerbert Xu 	unsigned int blocksize;
160d0497524SHerbert Xu 	unsigned int min_keysize;
161d0497524SHerbert Xu 	unsigned int max_keysize;
162d0497524SHerbert Xu };
163d0497524SHerbert Xu 
164d0497524SHerbert Xu struct crypto_report_blkcipher {
165d0497524SHerbert Xu 	char type[CRYPTO_MAX_NAME];
166d0497524SHerbert Xu 	char geniv[CRYPTO_MAX_NAME];
167d0497524SHerbert Xu 	unsigned int blocksize;
168d0497524SHerbert Xu 	unsigned int min_keysize;
169d0497524SHerbert Xu 	unsigned int max_keysize;
170d0497524SHerbert Xu 	unsigned int ivsize;
171d0497524SHerbert Xu };
172d0497524SHerbert Xu 
173d0497524SHerbert Xu struct crypto_report_aead {
174d0497524SHerbert Xu 	char type[CRYPTO_MAX_NAME];
175d0497524SHerbert Xu 	char geniv[CRYPTO_MAX_NAME];
176d0497524SHerbert Xu 	unsigned int blocksize;
177d0497524SHerbert Xu 	unsigned int maxauthsize;
178d0497524SHerbert Xu 	unsigned int ivsize;
179d0497524SHerbert Xu };
180d0497524SHerbert Xu 
181d0497524SHerbert Xu struct crypto_report_comp {
182d0497524SHerbert Xu 	char type[CRYPTO_MAX_NAME];
183d0497524SHerbert Xu };
184d0497524SHerbert Xu 
185d0497524SHerbert Xu struct crypto_report_rng {
186d0497524SHerbert Xu 	char type[CRYPTO_MAX_NAME];
187d0497524SHerbert Xu 	unsigned int seedsize;
188d0497524SHerbert Xu };
189d0497524SHerbert Xu 
190d0497524SHerbert Xu struct crypto_report_akcipher {
191d0497524SHerbert Xu 	char type[CRYPTO_MAX_NAME];
192d0497524SHerbert Xu };
193d0497524SHerbert Xu 
1944e5f2c40SSalvatore Benedetto struct crypto_report_kpp {
1954e5f2c40SSalvatore Benedetto 	char type[CRYPTO_MAX_NAME];
1964e5f2c40SSalvatore Benedetto };
1974e5f2c40SSalvatore Benedetto 
1982ebda74fSGiovanni Cabiddu struct crypto_report_acomp {
1992ebda74fSGiovanni Cabiddu 	char type[CRYPTO_MAX_NAME];
2002ebda74fSGiovanni Cabiddu };
2012ebda74fSGiovanni Cabiddu 
202d0497524SHerbert Xu #define CRYPTO_REPORT_MAXSIZE (sizeof(struct crypto_user_alg) + \
203d0497524SHerbert Xu 			       sizeof(struct crypto_report_blkcipher))
204*68289c63SMasahiro Yamada 
205*68289c63SMasahiro Yamada #endif /* _UAPI_LINUX_CRYPTOUSER_H */
206