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