xref: /OK3568_Linux_fs/kernel/include/uapi/linux/cryptodev.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR MIT) */
2*4882a593Smuzhiyun 
3*4882a593Smuzhiyun /* This is a source compatible implementation with the original API of
4*4882a593Smuzhiyun  * cryptodev by Angelos D. Keromytis, found at openbsd cryptodev.h.
5*4882a593Smuzhiyun  * Placed under public domain */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef _UAPI_CRYPTODEV_H
8*4882a593Smuzhiyun #define _UAPI_CRYPTODEV_H
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include <linux/types.h>
11*4882a593Smuzhiyun #include <linux/version.h>
12*4882a593Smuzhiyun #ifndef __KERNEL__
13*4882a593Smuzhiyun #define __user
14*4882a593Smuzhiyun #endif
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /* API extensions for linux */
17*4882a593Smuzhiyun #define CRYPTO_HMAC_MAX_KEY_LEN		512
18*4882a593Smuzhiyun #define CRYPTO_CIPHER_MAX_KEY_LEN	64
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun /* All the supported algorithms
21*4882a593Smuzhiyun  */
22*4882a593Smuzhiyun enum cryptodev_crypto_op_t {
23*4882a593Smuzhiyun 	CRYPTO_DES_CBC = 1,
24*4882a593Smuzhiyun 	CRYPTO_3DES_CBC = 2,
25*4882a593Smuzhiyun 	CRYPTO_BLF_CBC = 3,
26*4882a593Smuzhiyun 	CRYPTO_CAST_CBC = 4,
27*4882a593Smuzhiyun 	CRYPTO_SKIPJACK_CBC = 5,
28*4882a593Smuzhiyun 	CRYPTO_MD5_HMAC = 6,
29*4882a593Smuzhiyun 	CRYPTO_SHA1_HMAC = 7,
30*4882a593Smuzhiyun 	CRYPTO_RIPEMD160_HMAC = 8,
31*4882a593Smuzhiyun 	CRYPTO_MD5_KPDK = 9,
32*4882a593Smuzhiyun 	CRYPTO_SHA1_KPDK = 10,
33*4882a593Smuzhiyun 	CRYPTO_RIJNDAEL128_CBC = 11,
34*4882a593Smuzhiyun 	CRYPTO_AES_CBC = CRYPTO_RIJNDAEL128_CBC,
35*4882a593Smuzhiyun 	CRYPTO_ARC4 = 12,
36*4882a593Smuzhiyun 	CRYPTO_MD5 = 13,
37*4882a593Smuzhiyun 	CRYPTO_SHA1 = 14,
38*4882a593Smuzhiyun 	CRYPTO_DEFLATE_COMP = 15,
39*4882a593Smuzhiyun 	CRYPTO_NULL = 16,
40*4882a593Smuzhiyun 	CRYPTO_LZS_COMP = 17,
41*4882a593Smuzhiyun 	CRYPTO_SHA2_256_HMAC = 18,
42*4882a593Smuzhiyun 	CRYPTO_SHA2_384_HMAC = 19,
43*4882a593Smuzhiyun 	CRYPTO_SHA2_512_HMAC = 20,
44*4882a593Smuzhiyun 	CRYPTO_AES_CTR = 21,
45*4882a593Smuzhiyun 	CRYPTO_AES_XTS = 22,
46*4882a593Smuzhiyun 	CRYPTO_AES_ECB = 23,
47*4882a593Smuzhiyun 	CRYPTO_AES_GCM = 50,
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun 	CRYPTO_CAMELLIA_CBC = 101,
50*4882a593Smuzhiyun 	CRYPTO_RIPEMD160,
51*4882a593Smuzhiyun 	CRYPTO_SHA2_224,
52*4882a593Smuzhiyun 	CRYPTO_SHA2_256,
53*4882a593Smuzhiyun 	CRYPTO_SHA2_384,
54*4882a593Smuzhiyun 	CRYPTO_SHA2_512,
55*4882a593Smuzhiyun 	CRYPTO_SHA2_224_HMAC,
56*4882a593Smuzhiyun 	CRYPTO_TLS11_AES_CBC_HMAC_SHA1,
57*4882a593Smuzhiyun 	CRYPTO_TLS12_AES_CBC_HMAC_SHA256,
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun 	CRYPTO_RK_DES_ECB = 150,
60*4882a593Smuzhiyun 	CRYPTO_RK_DES_CBC,
61*4882a593Smuzhiyun 	CRYPTO_RK_DES_CFB,
62*4882a593Smuzhiyun 	CRYPTO_RK_DES_OFB,
63*4882a593Smuzhiyun 	CRYPTO_RK_3DES_ECB,
64*4882a593Smuzhiyun 	CRYPTO_RK_3DES_CBC,
65*4882a593Smuzhiyun 	CRYPTO_RK_3DES_CFB,
66*4882a593Smuzhiyun 	CRYPTO_RK_3DES_OFB,
67*4882a593Smuzhiyun 	CRYPTO_RK_SM4_ECB,
68*4882a593Smuzhiyun 	CRYPTO_RK_SM4_CBC,
69*4882a593Smuzhiyun 	CRYPTO_RK_SM4_CFB,
70*4882a593Smuzhiyun 	CRYPTO_RK_SM4_OFB,
71*4882a593Smuzhiyun 	CRYPTO_RK_SM4_CTS,
72*4882a593Smuzhiyun 	CRYPTO_RK_SM4_CTR,
73*4882a593Smuzhiyun 	CRYPTO_RK_SM4_XTS,
74*4882a593Smuzhiyun 	CRYPTO_RK_SM4_CCM,
75*4882a593Smuzhiyun 	CRYPTO_RK_SM4_GCM,
76*4882a593Smuzhiyun 	CRYPTO_RK_SM4_CMAC,
77*4882a593Smuzhiyun 	CRYPTO_RK_SM4_CBC_MAC,
78*4882a593Smuzhiyun 	CRYPTO_RK_AES_ECB,
79*4882a593Smuzhiyun 	CRYPTO_RK_AES_CBC,
80*4882a593Smuzhiyun 	CRYPTO_RK_AES_CFB,
81*4882a593Smuzhiyun 	CRYPTO_RK_AES_OFB,
82*4882a593Smuzhiyun 	CRYPTO_RK_AES_CTS,
83*4882a593Smuzhiyun 	CRYPTO_RK_AES_CTR,
84*4882a593Smuzhiyun 	CRYPTO_RK_AES_XTS,
85*4882a593Smuzhiyun 	CRYPTO_RK_AES_CCM,
86*4882a593Smuzhiyun 	CRYPTO_RK_AES_GCM,
87*4882a593Smuzhiyun 	CRYPTO_RK_AES_CMAC,
88*4882a593Smuzhiyun 	CRYPTO_RK_AES_CBC_MAC,
89*4882a593Smuzhiyun 	CRYPTO_RK_MD5,
90*4882a593Smuzhiyun 	CRYPTO_RK_SHA1,
91*4882a593Smuzhiyun 	CRYPTO_RK_SHA224,
92*4882a593Smuzhiyun 	CRYPTO_RK_SHA256,
93*4882a593Smuzhiyun 	CRYPTO_RK_SHA384,
94*4882a593Smuzhiyun 	CRYPTO_RK_SHA512,
95*4882a593Smuzhiyun 	CRYPTO_RK_SHA512_224,
96*4882a593Smuzhiyun 	CRYPTO_RK_SHA512_256,
97*4882a593Smuzhiyun 	CRYPTO_RK_MD5_HMAC,
98*4882a593Smuzhiyun 	CRYPTO_RK_SHA1_HMAC,
99*4882a593Smuzhiyun 	CRYPTO_RK_SHA256_HMAC,
100*4882a593Smuzhiyun 	CRYPTO_RK_SHA512_HMAC,
101*4882a593Smuzhiyun 	CRYPTO_RK_SM3,
102*4882a593Smuzhiyun 	CRYPTO_RK_SM3_HMAC,
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun 	CRYPTO_ALGORITHM_ALL, /* Keep updated - see below */
105*4882a593Smuzhiyun };
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun #define	CRYPTO_ALGORITHM_MAX	(CRYPTO_ALGORITHM_ALL - 1)
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun /* Values for ciphers */
110*4882a593Smuzhiyun #define DES_BLOCK_LEN		8
111*4882a593Smuzhiyun #define DES3_BLOCK_LEN		8
112*4882a593Smuzhiyun #define RIJNDAEL128_BLOCK_LEN	16
113*4882a593Smuzhiyun #define AES_BLOCK_LEN		RIJNDAEL128_BLOCK_LEN
114*4882a593Smuzhiyun #define CAMELLIA_BLOCK_LEN      16
115*4882a593Smuzhiyun #define BLOWFISH_BLOCK_LEN	8
116*4882a593Smuzhiyun #define SKIPJACK_BLOCK_LEN	8
117*4882a593Smuzhiyun #define CAST128_BLOCK_LEN	8
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun /* the maximum of the above */
120*4882a593Smuzhiyun #define EALG_MAX_BLOCK_LEN	16
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun /* Values for hashes/MAC */
123*4882a593Smuzhiyun #define AALG_MAX_RESULT_LEN		64
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun /* maximum length of verbose alg names (depends on CRYPTO_MAX_ALG_NAME) */
126*4882a593Smuzhiyun #define CRYPTODEV_MAX_ALG_NAME		64
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #define HASH_MAX_LEN 64
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun /* input of CIOCGSESSION */
131*4882a593Smuzhiyun struct session_op {
132*4882a593Smuzhiyun 	/* Specify either cipher or mac
133*4882a593Smuzhiyun 	 */
134*4882a593Smuzhiyun 	__u32	cipher;		/* cryptodev_crypto_op_t */
135*4882a593Smuzhiyun 	__u32	mac;		/* cryptodev_crypto_op_t */
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun 	__u32	keylen;
138*4882a593Smuzhiyun 	__u8	__user *key;
139*4882a593Smuzhiyun 	__u32	mackeylen;
140*4882a593Smuzhiyun 	__u8	__user *mackey;
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun 	__u32	ses;		/* session identifier */
143*4882a593Smuzhiyun };
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun struct session_info_op {
146*4882a593Smuzhiyun 	__u32 ses;		/* session identifier */
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun 	/* verbose names for the requested ciphers */
149*4882a593Smuzhiyun 	struct alg_info {
150*4882a593Smuzhiyun 		char cra_name[CRYPTODEV_MAX_ALG_NAME];
151*4882a593Smuzhiyun 		char cra_driver_name[CRYPTODEV_MAX_ALG_NAME];
152*4882a593Smuzhiyun 	} cipher_info, hash_info;
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun 	__u16	alignmask;	/* alignment constraints */
155*4882a593Smuzhiyun 	__u32   flags;          /* SIOP_FLAGS_* */
156*4882a593Smuzhiyun };
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun /* If this flag is set then this algorithm uses
159*4882a593Smuzhiyun  * a driver only available in kernel (software drivers,
160*4882a593Smuzhiyun  * or drivers based on instruction sets do not set this flag).
161*4882a593Smuzhiyun  *
162*4882a593Smuzhiyun  * If multiple algorithms are involved (as in AEAD case), then
163*4882a593Smuzhiyun  * if one of them is kernel-driver-only this flag will be set.
164*4882a593Smuzhiyun  */
165*4882a593Smuzhiyun #define SIOP_FLAG_KERNEL_DRIVER_ONLY 1
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun #define	COP_ENCRYPT	0
168*4882a593Smuzhiyun #define COP_DECRYPT	1
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun /* input of CIOCCRYPT */
171*4882a593Smuzhiyun struct crypt_op {
172*4882a593Smuzhiyun 	__u32	ses;		/* session identifier */
173*4882a593Smuzhiyun 	__u16	op;		/* COP_ENCRYPT or COP_DECRYPT */
174*4882a593Smuzhiyun 	__u16	flags;		/* see COP_FLAG_* */
175*4882a593Smuzhiyun 	__u32	len;		/* length of source data */
176*4882a593Smuzhiyun 	__u8	__user *src;	/* source data */
177*4882a593Smuzhiyun 	__u8	__user *dst;	/* pointer to output data */
178*4882a593Smuzhiyun 	/* pointer to output data for hash/MAC operations */
179*4882a593Smuzhiyun 	__u8	__user *mac;
180*4882a593Smuzhiyun 	/* initialization vector for encryption operations */
181*4882a593Smuzhiyun 	__u8	__user *iv;
182*4882a593Smuzhiyun };
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun /* input of CIOCAUTHCRYPT */
185*4882a593Smuzhiyun struct crypt_auth_op {
186*4882a593Smuzhiyun 	__u32	ses;		/* session identifier */
187*4882a593Smuzhiyun 	__u16	op;		/* COP_ENCRYPT or COP_DECRYPT */
188*4882a593Smuzhiyun 	__u16	flags;		/* see COP_FLAG_AEAD_* */
189*4882a593Smuzhiyun 	__u32	len;		/* length of source data */
190*4882a593Smuzhiyun 	__u32	auth_len;	/* length of auth data */
191*4882a593Smuzhiyun 	__u8	__user *auth_src;	/* authenticated-only data */
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun 	/* The current implementation is more efficient if data are
194*4882a593Smuzhiyun 	 * encrypted in-place (src==dst). */
195*4882a593Smuzhiyun 	__u8	__user *src;	/* data to be encrypted and authenticated */
196*4882a593Smuzhiyun 	__u8	__user *dst;	/* pointer to output data. Must have
197*4882a593Smuzhiyun 				 * space for tag. For TLS this should be at least
198*4882a593Smuzhiyun 				 * len + tag_size + block_size for padding
199*4882a593Smuzhiyun 				 */
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun 	__u8    __user *tag;    /* where the tag will be copied to. TLS mode
202*4882a593Smuzhiyun                                  * doesn't use that as tag is copied to dst.
203*4882a593Smuzhiyun                                  * SRTP mode copies tag there. */
204*4882a593Smuzhiyun 	__u32	tag_len;	/* the length of the tag. Use zero for digest size or max tag. */
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun 	/* initialization vector for encryption operations */
207*4882a593Smuzhiyun 	__u8	__user *iv;
208*4882a593Smuzhiyun 	__u32   iv_len;
209*4882a593Smuzhiyun };
210*4882a593Smuzhiyun 
211*4882a593Smuzhiyun /* In plain AEAD mode the following are required:
212*4882a593Smuzhiyun  *  flags   : 0
213*4882a593Smuzhiyun  *  iv      : the initialization vector (12 bytes)
214*4882a593Smuzhiyun  *  auth_len: the length of the data to be authenticated
215*4882a593Smuzhiyun  *  auth_src: the data to be authenticated
216*4882a593Smuzhiyun  *  len     : length of data to be encrypted
217*4882a593Smuzhiyun  *  src     : the data to be encrypted
218*4882a593Smuzhiyun  *  dst     : space to hold encrypted data. It must have
219*4882a593Smuzhiyun  *            at least a size of len + tag_size.
220*4882a593Smuzhiyun  *  tag_size: the size of the desired authentication tag or zero to use
221*4882a593Smuzhiyun  *            the maximum tag output.
222*4882a593Smuzhiyun  *
223*4882a593Smuzhiyun  * Note tag isn't being used because the Linux AEAD interface
224*4882a593Smuzhiyun  * copies the tag just after data.
225*4882a593Smuzhiyun  */
226*4882a593Smuzhiyun 
227*4882a593Smuzhiyun /* In TLS mode (used for CBC ciphers that required padding)
228*4882a593Smuzhiyun  * the following are required:
229*4882a593Smuzhiyun  *  flags   : COP_FLAG_AEAD_TLS_TYPE
230*4882a593Smuzhiyun  *  iv      : the initialization vector
231*4882a593Smuzhiyun  *  auth_len: the length of the data to be authenticated only
232*4882a593Smuzhiyun  *  len     : length of data to be encrypted
233*4882a593Smuzhiyun  *  auth_src: the data to be authenticated
234*4882a593Smuzhiyun  *  src     : the data to be encrypted
235*4882a593Smuzhiyun  *  dst     : space to hold encrypted data (preferably in-place). It must have
236*4882a593Smuzhiyun  *            at least a size of len + tag_size + blocksize.
237*4882a593Smuzhiyun  *  tag_size: the size of the desired authentication tag or zero to use
238*4882a593Smuzhiyun  *            the default mac output.
239*4882a593Smuzhiyun  *
240*4882a593Smuzhiyun  * Note that the padding used is the minimum padding.
241*4882a593Smuzhiyun  */
242*4882a593Smuzhiyun 
243*4882a593Smuzhiyun /* In SRTP mode the following are required:
244*4882a593Smuzhiyun  *  flags   : COP_FLAG_AEAD_SRTP_TYPE
245*4882a593Smuzhiyun  *  iv      : the initialization vector
246*4882a593Smuzhiyun  *  auth_len: the length of the data to be authenticated. This must
247*4882a593Smuzhiyun  *            include the SRTP header + SRTP payload (data to be encrypted) + rest
248*4882a593Smuzhiyun  *
249*4882a593Smuzhiyun  *  len     : length of data to be encrypted
250*4882a593Smuzhiyun  *  auth_src: pointer the data to be authenticated. Should point at the same buffer as src.
251*4882a593Smuzhiyun  *  src     : pointer to the data to be encrypted.
252*4882a593Smuzhiyun  *  dst     : This is mandatory to be the same as src (in-place only).
253*4882a593Smuzhiyun  *  tag_size: the size of the desired authentication tag or zero to use
254*4882a593Smuzhiyun  *            the default mac output.
255*4882a593Smuzhiyun  *  tag     : Pointer to an address where the authentication tag will be copied.
256*4882a593Smuzhiyun  */
257*4882a593Smuzhiyun 
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun /* struct crypt_op flags */
260*4882a593Smuzhiyun 
261*4882a593Smuzhiyun #define COP_FLAG_NONE		(0 << 0) /* totally no flag */
262*4882a593Smuzhiyun #define COP_FLAG_UPDATE		(1 << 0) /* multi-update hash mode */
263*4882a593Smuzhiyun #define COP_FLAG_FINAL		(1 << 1) /* multi-update final hash mode */
264*4882a593Smuzhiyun #define COP_FLAG_WRITE_IV	(1 << 2) /* update the IV during operation */
265*4882a593Smuzhiyun #define COP_FLAG_NO_ZC		(1 << 3) /* do not zero-copy */
266*4882a593Smuzhiyun #define COP_FLAG_AEAD_TLS_TYPE  (1 << 4) /* authenticate and encrypt using the
267*4882a593Smuzhiyun                                           * TLS protocol rules */
268*4882a593Smuzhiyun #define COP_FLAG_AEAD_SRTP_TYPE  (1 << 5) /* authenticate and encrypt using the
269*4882a593Smuzhiyun                                            * SRTP protocol rules */
270*4882a593Smuzhiyun #define COP_FLAG_RESET		(1 << 6) /* multi-update reset the state.
271*4882a593Smuzhiyun                                           * should be used in combination
272*4882a593Smuzhiyun                                           * with COP_FLAG_UPDATE */
273*4882a593Smuzhiyun #define COP_FLAG_AEAD_RK_TYPE	(1 << 11) /* authenticate and encrypt using the
274*4882a593Smuzhiyun 					   * rock-chips define rules
275*4882a593Smuzhiyun 					   */
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun /* Stuff for bignum arithmetic and public key
279*4882a593Smuzhiyun  * cryptography - not supported yet by linux
280*4882a593Smuzhiyun  * cryptodev.
281*4882a593Smuzhiyun  */
282*4882a593Smuzhiyun 
283*4882a593Smuzhiyun #define	CRYPTO_ALG_FLAG_SUPPORTED	1
284*4882a593Smuzhiyun #define	CRYPTO_ALG_FLAG_RNG_ENABLE	2
285*4882a593Smuzhiyun #define	CRYPTO_ALG_FLAG_DSA_SHA		4
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun struct crparam {
288*4882a593Smuzhiyun 	__u8	*crp_p;
289*4882a593Smuzhiyun 	__u32	crp_nbits;
290*4882a593Smuzhiyun };
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun #define CRK_MAXPARAM	8
293*4882a593Smuzhiyun 
294*4882a593Smuzhiyun /* input of CIOCKEY */
295*4882a593Smuzhiyun struct crypt_kop {
296*4882a593Smuzhiyun 	__u32	crk_op;		/* cryptodev_crk_op_t */
297*4882a593Smuzhiyun 	__u32	crk_status;
298*4882a593Smuzhiyun 	__u16	crk_iparams;
299*4882a593Smuzhiyun 	__u16	crk_oparams;
300*4882a593Smuzhiyun 	__u32	crk_pad1;
301*4882a593Smuzhiyun 	struct crparam	crk_param[CRK_MAXPARAM];
302*4882a593Smuzhiyun };
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun enum cryptodev_crk_op_t {
305*4882a593Smuzhiyun 	CRK_MOD_EXP = 0,
306*4882a593Smuzhiyun 	CRK_MOD_EXP_CRT = 1,
307*4882a593Smuzhiyun 	CRK_DSA_SIGN = 2,
308*4882a593Smuzhiyun 	CRK_DSA_VERIFY = 3,
309*4882a593Smuzhiyun 	CRK_DH_COMPUTE_KEY = 4,
310*4882a593Smuzhiyun 	CRK_ALGORITHM_ALL
311*4882a593Smuzhiyun };
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun /* input of CIOCCPHASH
314*4882a593Smuzhiyun  *  dst_ses : destination session identifier
315*4882a593Smuzhiyun  *  src_ses : source session identifier
316*4882a593Smuzhiyun  *  dst_ses must have been created with CIOGSESSION first
317*4882a593Smuzhiyun  */
318*4882a593Smuzhiyun #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29))
319*4882a593Smuzhiyun struct cphash_op {
320*4882a593Smuzhiyun 	__u32	dst_ses;
321*4882a593Smuzhiyun 	__u32	src_ses;
322*4882a593Smuzhiyun };
323*4882a593Smuzhiyun #endif
324*4882a593Smuzhiyun 
325*4882a593Smuzhiyun #define CRK_ALGORITHM_MAX	(CRK_ALGORITHM_ALL-1)
326*4882a593Smuzhiyun 
327*4882a593Smuzhiyun /* features to be queried with CIOCASYMFEAT ioctl
328*4882a593Smuzhiyun  */
329*4882a593Smuzhiyun #define CRF_MOD_EXP		(1 << CRK_MOD_EXP)
330*4882a593Smuzhiyun #define CRF_MOD_EXP_CRT		(1 << CRK_MOD_EXP_CRT)
331*4882a593Smuzhiyun #define CRF_DSA_SIGN		(1 << CRK_DSA_SIGN)
332*4882a593Smuzhiyun #define CRF_DSA_VERIFY		(1 << CRK_DSA_VERIFY)
333*4882a593Smuzhiyun #define CRF_DH_COMPUTE_KEY	(1 << CRK_DH_COMPUTE_KEY)
334*4882a593Smuzhiyun 
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun /* ioctl's. Compatible with old linux cryptodev.h
337*4882a593Smuzhiyun  */
338*4882a593Smuzhiyun #define CRIOGET         _IOWR('c', 101, __u32)
339*4882a593Smuzhiyun #define CIOCGSESSION    _IOWR('c', 102, struct session_op)
340*4882a593Smuzhiyun #define CIOCFSESSION    _IOW('c', 103, __u32)
341*4882a593Smuzhiyun #define CIOCCRYPT       _IOWR('c', 104, struct crypt_op)
342*4882a593Smuzhiyun #define CIOCKEY         _IOWR('c', 105, struct crypt_kop)
343*4882a593Smuzhiyun #define CIOCASYMFEAT    _IOR('c', 106, __u32)
344*4882a593Smuzhiyun #define CIOCGSESSINFO	_IOWR('c', 107, struct session_info_op)
345*4882a593Smuzhiyun 
346*4882a593Smuzhiyun /* to indicate that CRIOGET is not required in linux
347*4882a593Smuzhiyun  */
348*4882a593Smuzhiyun #define CRIOGET_NOT_NEEDED 1
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun /* additional ioctls for AEAD */
351*4882a593Smuzhiyun #define CIOCAUTHCRYPT   _IOWR('c', 109, struct crypt_auth_op)
352*4882a593Smuzhiyun 
353*4882a593Smuzhiyun /* additional ioctls for asynchronous operation.
354*4882a593Smuzhiyun  * These are conditionally enabled since version 1.6.
355*4882a593Smuzhiyun  */
356*4882a593Smuzhiyun #define CIOCASYNCCRYPT    _IOW('c', 110, struct crypt_op)
357*4882a593Smuzhiyun #define CIOCASYNCFETCH    _IOR('c', 111, struct crypt_op)
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun /* additional ioctl for copying of hash/mac session state data
360*4882a593Smuzhiyun  * between sessions.
361*4882a593Smuzhiyun  * The cphash_op parameter should contain the session id of
362*4882a593Smuzhiyun  * the source and destination sessions. Both sessions
363*4882a593Smuzhiyun  * must have been created with CIOGSESSION.
364*4882a593Smuzhiyun  */
365*4882a593Smuzhiyun #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29))
366*4882a593Smuzhiyun #define CIOCCPHASH	_IOW('c', 112, struct cphash_op)
367*4882a593Smuzhiyun #endif
368*4882a593Smuzhiyun 
369*4882a593Smuzhiyun #endif /* L_CRYPTODEV_H */
370