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