master
  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 <steffen.klassert@secunet.com>
  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 _LINUX_CRYPTOUSER_H
 23#define _LINUX_CRYPTOUSER_H
 24
 25#include <linux/types.h>
 26
 27/* Netlink configuration messages.  */
 28enum {
 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.  */
 44enum 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
 73struct 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. */
 84struct 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. */
 94struct 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. */
106struct 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. */
116struct 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. */
126struct 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. */
134struct 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. */
143struct 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. */
152struct crypto_stat_larval {
153	char type[CRYPTO_MAX_NAME];
154};
155
156struct crypto_report_larval {
157	char type[CRYPTO_MAX_NAME];
158};
159
160struct crypto_report_hash {
161	char type[CRYPTO_MAX_NAME];
162	unsigned int blocksize;
163	unsigned int digestsize;
164};
165
166struct 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
173struct 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
182struct 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
190struct crypto_report_comp {
191	char type[CRYPTO_MAX_NAME];
192};
193
194struct crypto_report_rng {
195	char type[CRYPTO_MAX_NAME];
196	unsigned int seedsize;
197};
198
199struct crypto_report_akcipher {
200	char type[CRYPTO_MAX_NAME];
201};
202
203struct crypto_report_kpp {
204	char type[CRYPTO_MAX_NAME];
205};
206
207struct crypto_report_acomp {
208	char type[CRYPTO_MAX_NAME];
209};
210
211struct 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 /* _LINUX_CRYPTOUSER_H */