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