xref: /OK3568_Linux_fs/kernel/include/uapi/linux/cryptouser.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Crypto user configuration API.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2011 secunet Security Networks AG
6*4882a593Smuzhiyun  * Copyright (C) 2011 Steffen Klassert <steffen.klassert@secunet.com>
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify it
9*4882a593Smuzhiyun  * under the terms and conditions of the GNU General Public License,
10*4882a593Smuzhiyun  * version 2, as published by the Free Software Foundation.
11*4882a593Smuzhiyun  *
12*4882a593Smuzhiyun  * This program is distributed in the hope it will be useful, but WITHOUT
13*4882a593Smuzhiyun  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15*4882a593Smuzhiyun  * more details.
16*4882a593Smuzhiyun  *
17*4882a593Smuzhiyun  * You should have received a copy of the GNU General Public License along with
18*4882a593Smuzhiyun  * this program; if not, write to the Free Software Foundation, Inc.,
19*4882a593Smuzhiyun  * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
20*4882a593Smuzhiyun  */
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #ifndef _UAPI_LINUX_CRYPTOUSER_H
23*4882a593Smuzhiyun #define _UAPI_LINUX_CRYPTOUSER_H
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #include <linux/types.h>
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun /* Netlink configuration messages.  */
28*4882a593Smuzhiyun enum {
29*4882a593Smuzhiyun 	CRYPTO_MSG_BASE = 0x10,
30*4882a593Smuzhiyun 	CRYPTO_MSG_NEWALG = 0x10,
31*4882a593Smuzhiyun 	CRYPTO_MSG_DELALG,
32*4882a593Smuzhiyun 	CRYPTO_MSG_UPDATEALG,
33*4882a593Smuzhiyun 	CRYPTO_MSG_GETALG,
34*4882a593Smuzhiyun 	CRYPTO_MSG_DELRNG,
35*4882a593Smuzhiyun 	CRYPTO_MSG_GETSTAT,
36*4882a593Smuzhiyun 	__CRYPTO_MSG_MAX
37*4882a593Smuzhiyun };
38*4882a593Smuzhiyun #define CRYPTO_MSG_MAX (__CRYPTO_MSG_MAX - 1)
39*4882a593Smuzhiyun #define CRYPTO_NR_MSGTYPES (CRYPTO_MSG_MAX + 1 - CRYPTO_MSG_BASE)
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun #define CRYPTO_MAX_NAME 64
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun /* Netlink message attributes.  */
44*4882a593Smuzhiyun enum crypto_attr_type_t {
45*4882a593Smuzhiyun 	CRYPTOCFGA_UNSPEC,
46*4882a593Smuzhiyun 	CRYPTOCFGA_PRIORITY_VAL,	/* __u32 */
47*4882a593Smuzhiyun 	CRYPTOCFGA_REPORT_LARVAL,	/* struct crypto_report_larval */
48*4882a593Smuzhiyun 	CRYPTOCFGA_REPORT_HASH,		/* struct crypto_report_hash */
49*4882a593Smuzhiyun 	CRYPTOCFGA_REPORT_BLKCIPHER,	/* struct crypto_report_blkcipher */
50*4882a593Smuzhiyun 	CRYPTOCFGA_REPORT_AEAD,		/* struct crypto_report_aead */
51*4882a593Smuzhiyun 	CRYPTOCFGA_REPORT_COMPRESS,	/* struct crypto_report_comp */
52*4882a593Smuzhiyun 	CRYPTOCFGA_REPORT_RNG,		/* struct crypto_report_rng */
53*4882a593Smuzhiyun 	CRYPTOCFGA_REPORT_CIPHER,	/* struct crypto_report_cipher */
54*4882a593Smuzhiyun 	CRYPTOCFGA_REPORT_AKCIPHER,	/* struct crypto_report_akcipher */
55*4882a593Smuzhiyun 	CRYPTOCFGA_REPORT_KPP,		/* struct crypto_report_kpp */
56*4882a593Smuzhiyun 	CRYPTOCFGA_REPORT_ACOMP,	/* struct crypto_report_acomp */
57*4882a593Smuzhiyun 	CRYPTOCFGA_STAT_LARVAL,		/* struct crypto_stat */
58*4882a593Smuzhiyun 	CRYPTOCFGA_STAT_HASH,		/* struct crypto_stat */
59*4882a593Smuzhiyun 	CRYPTOCFGA_STAT_BLKCIPHER,	/* struct crypto_stat */
60*4882a593Smuzhiyun 	CRYPTOCFGA_STAT_AEAD,		/* struct crypto_stat */
61*4882a593Smuzhiyun 	CRYPTOCFGA_STAT_COMPRESS,	/* struct crypto_stat */
62*4882a593Smuzhiyun 	CRYPTOCFGA_STAT_RNG,		/* struct crypto_stat */
63*4882a593Smuzhiyun 	CRYPTOCFGA_STAT_CIPHER,		/* struct crypto_stat */
64*4882a593Smuzhiyun 	CRYPTOCFGA_STAT_AKCIPHER,	/* struct crypto_stat */
65*4882a593Smuzhiyun 	CRYPTOCFGA_STAT_KPP,		/* struct crypto_stat */
66*4882a593Smuzhiyun 	CRYPTOCFGA_STAT_ACOMP,		/* struct crypto_stat */
67*4882a593Smuzhiyun 	__CRYPTOCFGA_MAX
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun #define CRYPTOCFGA_MAX (__CRYPTOCFGA_MAX - 1)
70*4882a593Smuzhiyun };
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun struct crypto_user_alg {
73*4882a593Smuzhiyun 	char cru_name[CRYPTO_MAX_NAME];
74*4882a593Smuzhiyun 	char cru_driver_name[CRYPTO_MAX_NAME];
75*4882a593Smuzhiyun 	char cru_module_name[CRYPTO_MAX_NAME];
76*4882a593Smuzhiyun 	__u32 cru_type;
77*4882a593Smuzhiyun 	__u32 cru_mask;
78*4882a593Smuzhiyun 	__u32 cru_refcnt;
79*4882a593Smuzhiyun 	__u32 cru_flags;
80*4882a593Smuzhiyun };
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun struct crypto_stat_aead {
83*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
84*4882a593Smuzhiyun 	__u64 stat_encrypt_cnt;
85*4882a593Smuzhiyun 	__u64 stat_encrypt_tlen;
86*4882a593Smuzhiyun 	__u64 stat_decrypt_cnt;
87*4882a593Smuzhiyun 	__u64 stat_decrypt_tlen;
88*4882a593Smuzhiyun 	__u64 stat_err_cnt;
89*4882a593Smuzhiyun };
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun struct crypto_stat_akcipher {
92*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
93*4882a593Smuzhiyun 	__u64 stat_encrypt_cnt;
94*4882a593Smuzhiyun 	__u64 stat_encrypt_tlen;
95*4882a593Smuzhiyun 	__u64 stat_decrypt_cnt;
96*4882a593Smuzhiyun 	__u64 stat_decrypt_tlen;
97*4882a593Smuzhiyun 	__u64 stat_verify_cnt;
98*4882a593Smuzhiyun 	__u64 stat_sign_cnt;
99*4882a593Smuzhiyun 	__u64 stat_err_cnt;
100*4882a593Smuzhiyun };
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun struct crypto_stat_cipher {
103*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
104*4882a593Smuzhiyun 	__u64 stat_encrypt_cnt;
105*4882a593Smuzhiyun 	__u64 stat_encrypt_tlen;
106*4882a593Smuzhiyun 	__u64 stat_decrypt_cnt;
107*4882a593Smuzhiyun 	__u64 stat_decrypt_tlen;
108*4882a593Smuzhiyun 	__u64 stat_err_cnt;
109*4882a593Smuzhiyun };
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun struct crypto_stat_compress {
112*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
113*4882a593Smuzhiyun 	__u64 stat_compress_cnt;
114*4882a593Smuzhiyun 	__u64 stat_compress_tlen;
115*4882a593Smuzhiyun 	__u64 stat_decompress_cnt;
116*4882a593Smuzhiyun 	__u64 stat_decompress_tlen;
117*4882a593Smuzhiyun 	__u64 stat_err_cnt;
118*4882a593Smuzhiyun };
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun struct crypto_stat_hash {
121*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
122*4882a593Smuzhiyun 	__u64 stat_hash_cnt;
123*4882a593Smuzhiyun 	__u64 stat_hash_tlen;
124*4882a593Smuzhiyun 	__u64 stat_err_cnt;
125*4882a593Smuzhiyun };
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun struct crypto_stat_kpp {
128*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
129*4882a593Smuzhiyun 	__u64 stat_setsecret_cnt;
130*4882a593Smuzhiyun 	__u64 stat_generate_public_key_cnt;
131*4882a593Smuzhiyun 	__u64 stat_compute_shared_secret_cnt;
132*4882a593Smuzhiyun 	__u64 stat_err_cnt;
133*4882a593Smuzhiyun };
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun struct crypto_stat_rng {
136*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
137*4882a593Smuzhiyun 	__u64 stat_generate_cnt;
138*4882a593Smuzhiyun 	__u64 stat_generate_tlen;
139*4882a593Smuzhiyun 	__u64 stat_seed_cnt;
140*4882a593Smuzhiyun 	__u64 stat_err_cnt;
141*4882a593Smuzhiyun };
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun struct crypto_stat_larval {
144*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
145*4882a593Smuzhiyun };
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun struct crypto_report_larval {
148*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
149*4882a593Smuzhiyun };
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun struct crypto_report_hash {
152*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
153*4882a593Smuzhiyun 	unsigned int blocksize;
154*4882a593Smuzhiyun 	unsigned int digestsize;
155*4882a593Smuzhiyun };
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun struct crypto_report_cipher {
158*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
159*4882a593Smuzhiyun 	unsigned int blocksize;
160*4882a593Smuzhiyun 	unsigned int min_keysize;
161*4882a593Smuzhiyun 	unsigned int max_keysize;
162*4882a593Smuzhiyun };
163*4882a593Smuzhiyun 
164*4882a593Smuzhiyun struct crypto_report_blkcipher {
165*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
166*4882a593Smuzhiyun 	char geniv[CRYPTO_MAX_NAME];
167*4882a593Smuzhiyun 	unsigned int blocksize;
168*4882a593Smuzhiyun 	unsigned int min_keysize;
169*4882a593Smuzhiyun 	unsigned int max_keysize;
170*4882a593Smuzhiyun 	unsigned int ivsize;
171*4882a593Smuzhiyun };
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun struct crypto_report_aead {
174*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
175*4882a593Smuzhiyun 	char geniv[CRYPTO_MAX_NAME];
176*4882a593Smuzhiyun 	unsigned int blocksize;
177*4882a593Smuzhiyun 	unsigned int maxauthsize;
178*4882a593Smuzhiyun 	unsigned int ivsize;
179*4882a593Smuzhiyun };
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun struct crypto_report_comp {
182*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
183*4882a593Smuzhiyun };
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun struct crypto_report_rng {
186*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
187*4882a593Smuzhiyun 	unsigned int seedsize;
188*4882a593Smuzhiyun };
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun struct crypto_report_akcipher {
191*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
192*4882a593Smuzhiyun };
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun struct crypto_report_kpp {
195*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
196*4882a593Smuzhiyun };
197*4882a593Smuzhiyun 
198*4882a593Smuzhiyun struct crypto_report_acomp {
199*4882a593Smuzhiyun 	char type[CRYPTO_MAX_NAME];
200*4882a593Smuzhiyun };
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun #define CRYPTO_REPORT_MAXSIZE (sizeof(struct crypto_user_alg) + \
203*4882a593Smuzhiyun 			       sizeof(struct crypto_report_blkcipher))
204*4882a593Smuzhiyun 
205*4882a593Smuzhiyun #endif /* _UAPI_LINUX_CRYPTOUSER_H */
206