xref: /titanic_51/usr/src/uts/common/sys/crypto/ioctl.h (revision a60fc142342386d0b786e65fba901234400d7020)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef	_SYS_CRYPTO_IOCTL_H
28 #define	_SYS_CRYPTO_IOCTL_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 #ifdef	__cplusplus
33 extern "C" {
34 #endif
35 
36 #include <sys/types.h>
37 #include <sys/crypto/spi.h>
38 #include <sys/crypto/common.h>
39 
40 #define	CRYPTO_MAX_ATTRIBUTE_COUNT	128
41 
42 #define	CRYPTO_IOFLAGS_RW_SESSION	0x00000001
43 
44 #define	CRYPTO(x)		(('y' << 8) | (x))
45 
46 /*
47  * General Purpose Ioctls
48  */
49 
50 typedef struct crypto_function_list {
51 	boolean_t fl_digest_init;
52 	boolean_t fl_digest;
53 	boolean_t fl_digest_update;
54 	boolean_t fl_digest_key;
55 	boolean_t fl_digest_final;
56 
57 	boolean_t fl_encrypt_init;
58 	boolean_t fl_encrypt;
59 	boolean_t fl_encrypt_update;
60 	boolean_t fl_encrypt_final;
61 
62 	boolean_t fl_decrypt_init;
63 	boolean_t fl_decrypt;
64 	boolean_t fl_decrypt_update;
65 	boolean_t fl_decrypt_final;
66 
67 	boolean_t fl_mac_init;
68 	boolean_t fl_mac;
69 	boolean_t fl_mac_update;
70 	boolean_t fl_mac_final;
71 
72 	boolean_t fl_sign_init;
73 	boolean_t fl_sign;
74 	boolean_t fl_sign_update;
75 	boolean_t fl_sign_final;
76 	boolean_t fl_sign_recover_init;
77 	boolean_t fl_sign_recover;
78 
79 	boolean_t fl_verify_init;
80 	boolean_t fl_verify;
81 	boolean_t fl_verify_update;
82 	boolean_t fl_verify_final;
83 	boolean_t fl_verify_recover_init;
84 	boolean_t fl_verify_recover;
85 
86 	boolean_t fl_digest_encrypt_update;
87 	boolean_t fl_decrypt_digest_update;
88 	boolean_t fl_sign_encrypt_update;
89 	boolean_t fl_decrypt_verify_update;
90 
91 	boolean_t fl_seed_random;
92 	boolean_t fl_generate_random;
93 
94 	boolean_t fl_session_open;
95 	boolean_t fl_session_close;
96 	boolean_t fl_session_login;
97 	boolean_t fl_session_logout;
98 
99 	boolean_t fl_object_create;
100 	boolean_t fl_object_copy;
101 	boolean_t fl_object_destroy;
102 	boolean_t fl_object_get_size;
103 	boolean_t fl_object_get_attribute_value;
104 	boolean_t fl_object_set_attribute_value;
105 	boolean_t fl_object_find_init;
106 	boolean_t fl_object_find;
107 	boolean_t fl_object_find_final;
108 
109 	boolean_t fl_key_generate;
110 	boolean_t fl_key_generate_pair;
111 	boolean_t fl_key_wrap;
112 	boolean_t fl_key_unwrap;
113 	boolean_t fl_key_derive;
114 
115 	boolean_t fl_init_token;
116 	boolean_t fl_init_pin;
117 	boolean_t fl_set_pin;
118 
119 	boolean_t prov_is_limited;
120 	uint32_t prov_hash_threshold;
121 	uint32_t prov_hash_limit;
122 } crypto_function_list_t;
123 
124 typedef struct crypto_get_function_list {
125 	uint_t			fl_return_value;
126 	crypto_provider_id_t	fl_provider_id;
127 	crypto_function_list_t	fl_list;
128 } crypto_get_function_list_t;
129 
130 typedef struct crypto_get_mechanism_number {
131 	uint_t			pn_return_value;
132 	caddr_t			pn_mechanism_string;
133 	size_t			pn_mechanism_len;
134 	crypto_mech_type_t	pn_internal_number;
135 } crypto_get_mechanism_number_t;
136 
137 #ifdef	_KERNEL
138 #ifdef	_SYSCALL32
139 
140 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
141 #pragma pack(4)
142 #endif
143 
144 typedef struct crypto_get_mechanism_number32 {
145 	uint32_t		pn_return_value;
146 	caddr32_t		pn_mechanism_string;
147 	size32_t		pn_mechanism_len;
148 	crypto_mech_type_t	pn_internal_number;
149 } crypto_get_mechanism_number32_t;
150 
151 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
152 #pragma pack()
153 #endif
154 
155 #endif	/* _SYSCALL32 */
156 #endif	/* _KERNEL */
157 
158 #define	CRYPTO_GET_FUNCTION_LIST	CRYPTO(20)
159 #define	CRYPTO_GET_MECHANISM_NUMBER	CRYPTO(21)
160 
161 /*
162  * Session Ioctls
163  */
164 
165 typedef uint32_t	crypto_flags_t;
166 
167 typedef struct crypto_open_session {
168 	uint_t			os_return_value;
169 	crypto_session_id_t	os_session;
170 	crypto_flags_t		os_flags;
171 	crypto_provider_id_t	os_provider_id;
172 } crypto_open_session_t;
173 
174 typedef struct crypto_close_session {
175 	uint_t			cs_return_value;
176 	crypto_session_id_t	cs_session;
177 } crypto_close_session_t;
178 
179 typedef struct crypto_close_all_sessions {
180 	uint_t			as_return_value;
181 	crypto_provider_id_t	as_provider_id;
182 } crypto_close_all_sessions_t;
183 
184 #define	CRYPTO_OPEN_SESSION		CRYPTO(30)
185 #define	CRYPTO_CLOSE_SESSION		CRYPTO(31)
186 #define	CRYPTO_CLOSE_ALL_SESSIONS	CRYPTO(32)
187 
188 /*
189  * Login Ioctls
190  */
191 typedef struct crypto_login {
192 	uint_t			co_return_value;
193 	crypto_session_id_t	co_session;
194 	uint_t			co_user_type;
195 	uint_t			co_pin_len;
196 	caddr_t			co_pin;
197 } crypto_login_t;
198 
199 typedef struct crypto_logout {
200 	uint_t			cl_return_value;
201 	crypto_session_id_t	cl_session;
202 } crypto_logout_t;
203 
204 #ifdef	_KERNEL
205 #ifdef	_SYSCALL32
206 
207 typedef struct crypto_login32 {
208 	uint32_t		co_return_value;
209 	crypto_session_id_t	co_session;
210 	uint32_t		co_user_type;
211 	uint32_t		co_pin_len;
212 	caddr32_t		co_pin;
213 } crypto_login32_t;
214 
215 typedef struct crypto_logout32 {
216 	uint32_t		cl_return_value;
217 	crypto_session_id_t	cl_session;
218 } crypto_logout32_t;
219 
220 #endif	/* _SYSCALL32 */
221 #endif	/* _KERNEL */
222 
223 #define	CRYPTO_LOGIN			CRYPTO(40)
224 #define	CRYPTO_LOGOUT			CRYPTO(41)
225 
226 /*
227  * Cryptographic Ioctls
228  */
229 typedef struct crypto_encrypt {
230 	uint_t			ce_return_value;
231 	crypto_session_id_t	ce_session;
232 	size_t			ce_datalen;
233 	caddr_t			ce_databuf;
234 	size_t			ce_encrlen;
235 	caddr_t			ce_encrbuf;
236 } crypto_encrypt_t;
237 
238 typedef struct crypto_encrypt_init {
239 	uint_t			ei_return_value;
240 	crypto_session_id_t	ei_session;
241 	crypto_mechanism_t	ei_mech;
242 	crypto_key_t		ei_key;
243 } crypto_encrypt_init_t;
244 
245 typedef struct crypto_encrypt_update {
246 	uint_t			eu_return_value;
247 	crypto_session_id_t	eu_session;
248 	size_t			eu_datalen;
249 	caddr_t			eu_databuf;
250 	size_t			eu_encrlen;
251 	caddr_t			eu_encrbuf;
252 } crypto_encrypt_update_t;
253 
254 typedef struct crypto_encrypt_final {
255 	uint_t			ef_return_value;
256 	crypto_session_id_t	ef_session;
257 	size_t			ef_encrlen;
258 	caddr_t			ef_encrbuf;
259 } crypto_encrypt_final_t;
260 
261 typedef struct crypto_decrypt {
262 	uint_t			cd_return_value;
263 	crypto_session_id_t	cd_session;
264 	size_t			cd_encrlen;
265 	caddr_t			cd_encrbuf;
266 	size_t			cd_datalen;
267 	caddr_t			cd_databuf;
268 } crypto_decrypt_t;
269 
270 typedef struct crypto_decrypt_init {
271 	uint_t			di_return_value;
272 	crypto_session_id_t	di_session;
273 	crypto_mechanism_t	di_mech;
274 	crypto_key_t		di_key;
275 } crypto_decrypt_init_t;
276 
277 typedef struct crypto_decrypt_update {
278 	uint_t			du_return_value;
279 	crypto_session_id_t	du_session;
280 	size_t			du_encrlen;
281 	caddr_t			du_encrbuf;
282 	size_t			du_datalen;
283 	caddr_t			du_databuf;
284 } crypto_decrypt_update_t;
285 
286 typedef struct crypto_decrypt_final {
287 	uint_t			df_return_value;
288 	crypto_session_id_t	df_session;
289 	size_t			df_datalen;
290 	caddr_t			df_databuf;
291 } crypto_decrypt_final_t;
292 
293 typedef struct crypto_digest {
294 	uint_t			cd_return_value;
295 	crypto_session_id_t	cd_session;
296 	size_t			cd_datalen;
297 	caddr_t			cd_databuf;
298 	size_t			cd_digestlen;
299 	caddr_t			cd_digestbuf;
300 } crypto_digest_t;
301 
302 typedef struct crypto_digest_init {
303 	uint_t			di_return_value;
304 	crypto_session_id_t	di_session;
305 	crypto_mechanism_t	di_mech;
306 } crypto_digest_init_t;
307 
308 typedef struct crypto_digest_update {
309 	uint_t			du_return_value;
310 	crypto_session_id_t	du_session;
311 	size_t			du_datalen;
312 	caddr_t			du_databuf;
313 } crypto_digest_update_t;
314 
315 typedef struct crypto_digest_key {
316 	uint_t			dk_return_value;
317 	crypto_session_id_t	dk_session;
318 	crypto_key_t		dk_key;
319 } crypto_digest_key_t;
320 
321 typedef struct crypto_digest_final {
322 	uint_t			df_return_value;
323 	crypto_session_id_t	df_session;
324 	size_t			df_digestlen;
325 	caddr_t			df_digestbuf;
326 } crypto_digest_final_t;
327 
328 typedef struct crypto_mac {
329 	uint_t			cm_return_value;
330 	crypto_session_id_t	cm_session;
331 	size_t			cm_datalen;
332 	caddr_t			cm_databuf;
333 	size_t			cm_maclen;
334 	caddr_t			cm_macbuf;
335 } crypto_mac_t;
336 
337 typedef struct crypto_mac_init {
338 	uint_t			mi_return_value;
339 	crypto_session_id_t	mi_session;
340 	crypto_mechanism_t	mi_mech;
341 	crypto_key_t		mi_key;
342 } crypto_mac_init_t;
343 
344 typedef struct crypto_mac_update {
345 	uint_t			mu_return_value;
346 	crypto_session_id_t	mu_session;
347 	size_t			mu_datalen;
348 	caddr_t			mu_databuf;
349 } crypto_mac_update_t;
350 
351 typedef struct crypto_mac_final {
352 	uint_t			mf_return_value;
353 	crypto_session_id_t	mf_session;
354 	size_t			mf_maclen;
355 	caddr_t			mf_macbuf;
356 } crypto_mac_final_t;
357 
358 typedef struct crypto_sign {
359 	uint_t			cs_return_value;
360 	crypto_session_id_t	cs_session;
361 	size_t			cs_datalen;
362 	caddr_t			cs_databuf;
363 	size_t			cs_signlen;
364 	caddr_t			cs_signbuf;
365 } crypto_sign_t;
366 
367 typedef struct crypto_sign_init {
368 	uint_t			si_return_value;
369 	crypto_session_id_t	si_session;
370 	crypto_mechanism_t	si_mech;
371 	crypto_key_t		si_key;
372 } crypto_sign_init_t;
373 
374 typedef struct crypto_sign_update {
375 	uint_t			su_return_value;
376 	crypto_session_id_t	su_session;
377 	size_t			su_datalen;
378 	caddr_t			su_databuf;
379 } crypto_sign_update_t;
380 
381 typedef struct crypto_sign_final {
382 	uint_t			sf_return_value;
383 	crypto_session_id_t	sf_session;
384 	size_t			sf_signlen;
385 	caddr_t			sf_signbuf;
386 } crypto_sign_final_t;
387 
388 typedef struct crypto_sign_recover_init {
389 	uint_t			ri_return_value;
390 	crypto_session_id_t	ri_session;
391 	crypto_mechanism_t	ri_mech;
392 	crypto_key_t		ri_key;
393 } crypto_sign_recover_init_t;
394 
395 typedef struct crypto_sign_recover {
396 	uint_t			sr_return_value;
397 	crypto_session_id_t	sr_session;
398 	size_t			sr_datalen;
399 	caddr_t			sr_databuf;
400 	size_t			sr_signlen;
401 	caddr_t			sr_signbuf;
402 } crypto_sign_recover_t;
403 
404 typedef struct crypto_verify {
405 	uint_t			cv_return_value;
406 	crypto_session_id_t	cv_session;
407 	size_t			cv_datalen;
408 	caddr_t			cv_databuf;
409 	size_t			cv_signlen;
410 	caddr_t			cv_signbuf;
411 } crypto_verify_t;
412 
413 typedef struct crypto_verify_init {
414 	uint_t			vi_return_value;
415 	crypto_session_id_t	vi_session;
416 	crypto_mechanism_t	vi_mech;
417 	crypto_key_t		vi_key;
418 } crypto_verify_init_t;
419 
420 typedef struct crypto_verify_update {
421 	uint_t			vu_return_value;
422 	crypto_session_id_t	vu_session;
423 	size_t			vu_datalen;
424 	caddr_t			vu_databuf;
425 } crypto_verify_update_t;
426 
427 typedef struct crypto_verify_final {
428 	uint_t			vf_return_value;
429 	crypto_session_id_t	vf_session;
430 	size_t			vf_signlen;
431 	caddr_t			vf_signbuf;
432 } crypto_verify_final_t;
433 
434 typedef struct crypto_verify_recover_init {
435 	uint_t			ri_return_value;
436 	crypto_session_id_t	ri_session;
437 	crypto_mechanism_t	ri_mech;
438 	crypto_key_t		ri_key;
439 } crypto_verify_recover_init_t;
440 
441 typedef struct crypto_verify_recover {
442 	uint_t			vr_return_value;
443 	crypto_session_id_t	vr_session;
444 	size_t			vr_signlen;
445 	caddr_t			vr_signbuf;
446 	size_t			vr_datalen;
447 	caddr_t			vr_databuf;
448 } crypto_verify_recover_t;
449 
450 typedef struct crypto_digest_encrypt_update {
451 	uint_t			eu_return_value;
452 	crypto_session_id_t	eu_session;
453 	size_t			eu_datalen;
454 	caddr_t			eu_databuf;
455 	size_t			eu_encrlen;
456 	caddr_t			eu_encrbuf;
457 } crypto_digest_encrypt_update_t;
458 
459 typedef struct crypto_decrypt_digest_update {
460 	uint_t			du_return_value;
461 	crypto_session_id_t	du_session;
462 	size_t			du_encrlen;
463 	caddr_t			du_encrbuf;
464 	size_t			du_datalen;
465 	caddr_t			du_databuf;
466 } crypto_decrypt_digest_update_t;
467 
468 typedef struct crypto_sign_encrypt_update {
469 	uint_t			eu_return_value;
470 	crypto_session_id_t	eu_session;
471 	size_t			eu_datalen;
472 	caddr_t			eu_databuf;
473 	size_t			eu_encrlen;
474 	caddr_t			eu_encrbuf;
475 } crypto_sign_encrypt_update_t;
476 
477 typedef struct crypto_decrypt_verify_update {
478 	uint_t			vu_return_value;
479 	crypto_session_id_t	vu_session;
480 	size_t			vu_encrlen;
481 	caddr_t			vu_encrbuf;
482 	size_t			vu_datalen;
483 	caddr_t			vu_databuf;
484 } crypto_decrypt_verify_update_t;
485 
486 #ifdef	_KERNEL
487 #ifdef	_SYSCALL32
488 
489 typedef struct crypto_encrypt32 {
490 	uint32_t		ce_return_value;
491 	crypto_session_id_t	ce_session;
492 	size32_t		ce_datalen;
493 	caddr32_t		ce_databuf;
494 	size32_t		ce_encrlen;
495 	caddr32_t		ce_encrbuf;
496 } crypto_encrypt32_t;
497 
498 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
499 #pragma pack(4)
500 #endif
501 
502 typedef struct crypto_encrypt_init32 {
503 	uint32_t		ei_return_value;
504 	crypto_session_id_t	ei_session;
505 	crypto_mechanism32_t	ei_mech;
506 	crypto_key32_t		ei_key;
507 } crypto_encrypt_init32_t;
508 
509 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
510 #pragma pack()
511 #endif
512 
513 typedef struct crypto_encrypt_update32 {
514 	uint32_t		eu_return_value;
515 	crypto_session_id_t	eu_session;
516 	size32_t		eu_datalen;
517 	caddr32_t		eu_databuf;
518 	size32_t		eu_encrlen;
519 	caddr32_t		eu_encrbuf;
520 } crypto_encrypt_update32_t;
521 
522 typedef struct crypto_encrypt_final32 {
523 	uint32_t		ef_return_value;
524 	crypto_session_id_t	ef_session;
525 	size32_t		ef_encrlen;
526 	caddr32_t		ef_encrbuf;
527 } crypto_encrypt_final32_t;
528 
529 typedef struct crypto_decrypt32 {
530 	uint32_t		cd_return_value;
531 	crypto_session_id_t	cd_session;
532 	size32_t		cd_encrlen;
533 	caddr32_t		cd_encrbuf;
534 	size32_t		cd_datalen;
535 	caddr32_t		cd_databuf;
536 } crypto_decrypt32_t;
537 
538 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
539 #pragma pack(4)
540 #endif
541 
542 typedef struct crypto_decrypt_init32 {
543 	uint32_t		di_return_value;
544 	crypto_session_id_t	di_session;
545 	crypto_mechanism32_t	di_mech;
546 	crypto_key32_t		di_key;
547 } crypto_decrypt_init32_t;
548 
549 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
550 #pragma pack()
551 #endif
552 
553 typedef struct crypto_decrypt_update32 {
554 	uint32_t		du_return_value;
555 	crypto_session_id_t	du_session;
556 	size32_t		du_encrlen;
557 	caddr32_t		du_encrbuf;
558 	size32_t		du_datalen;
559 	caddr32_t		du_databuf;
560 } crypto_decrypt_update32_t;
561 
562 typedef struct crypto_decrypt_final32 {
563 	uint32_t		df_return_value;
564 	crypto_session_id_t	df_session;
565 	size32_t		df_datalen;
566 	caddr32_t		df_databuf;
567 } crypto_decrypt_final32_t;
568 
569 typedef struct crypto_digest32 {
570 	uint32_t		cd_return_value;
571 	crypto_session_id_t	cd_session;
572 	size32_t		cd_datalen;
573 	caddr32_t		cd_databuf;
574 	size32_t		cd_digestlen;
575 	caddr32_t		cd_digestbuf;
576 } crypto_digest32_t;
577 
578 typedef struct crypto_digest_init32 {
579 	uint32_t		di_return_value;
580 	crypto_session_id_t	di_session;
581 	crypto_mechanism32_t	di_mech;
582 } crypto_digest_init32_t;
583 
584 typedef struct crypto_digest_update32 {
585 	uint32_t		du_return_value;
586 	crypto_session_id_t	du_session;
587 	size32_t		du_datalen;
588 	caddr32_t		du_databuf;
589 } crypto_digest_update32_t;
590 
591 typedef struct crypto_digest_key32 {
592 	uint32_t		dk_return_value;
593 	crypto_session_id_t	dk_session;
594 	crypto_key32_t		dk_key;
595 } crypto_digest_key32_t;
596 
597 typedef struct crypto_digest_final32 {
598 	uint32_t		df_return_value;
599 	crypto_session_id_t	df_session;
600 	size32_t		df_digestlen;
601 	caddr32_t		df_digestbuf;
602 } crypto_digest_final32_t;
603 
604 typedef struct crypto_mac32 {
605 	uint32_t		cm_return_value;
606 	crypto_session_id_t	cm_session;
607 	size32_t		cm_datalen;
608 	caddr32_t		cm_databuf;
609 	size32_t		cm_maclen;
610 	caddr32_t		cm_macbuf;
611 } crypto_mac32_t;
612 
613 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
614 #pragma pack(4)
615 #endif
616 
617 typedef struct crypto_mac_init32 {
618 	uint32_t		mi_return_value;
619 	crypto_session_id_t	mi_session;
620 	crypto_mechanism32_t	mi_mech;
621 	crypto_key32_t		mi_key;
622 } crypto_mac_init32_t;
623 
624 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
625 #pragma pack()
626 #endif
627 
628 typedef struct crypto_mac_update32 {
629 	uint32_t		mu_return_value;
630 	crypto_session_id_t	mu_session;
631 	size32_t		mu_datalen;
632 	caddr32_t		mu_databuf;
633 } crypto_mac_update32_t;
634 
635 typedef struct crypto_mac_final32 {
636 	uint32_t		mf_return_value;
637 	crypto_session_id_t	mf_session;
638 	size32_t		mf_maclen;
639 	caddr32_t		mf_macbuf;
640 } crypto_mac_final32_t;
641 
642 typedef struct crypto_sign32 {
643 	uint32_t		cs_return_value;
644 	crypto_session_id_t	cs_session;
645 	size32_t		cs_datalen;
646 	caddr32_t		cs_databuf;
647 	size32_t		cs_signlen;
648 	caddr32_t		cs_signbuf;
649 } crypto_sign32_t;
650 
651 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
652 #pragma pack(4)
653 #endif
654 
655 typedef struct crypto_sign_init32 {
656 	uint32_t		si_return_value;
657 	crypto_session_id_t	si_session;
658 	crypto_mechanism32_t	si_mech;
659 	crypto_key32_t		si_key;
660 } crypto_sign_init32_t;
661 
662 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
663 #pragma pack()
664 #endif
665 
666 typedef struct crypto_sign_update32 {
667 	uint32_t		su_return_value;
668 	crypto_session_id_t	su_session;
669 	size32_t		su_datalen;
670 	caddr32_t		su_databuf;
671 } crypto_sign_update32_t;
672 
673 typedef struct crypto_sign_final32 {
674 	uint32_t		sf_return_value;
675 	crypto_session_id_t	sf_session;
676 	size32_t		sf_signlen;
677 	caddr32_t		sf_signbuf;
678 } crypto_sign_final32_t;
679 
680 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
681 #pragma pack(4)
682 #endif
683 
684 typedef struct crypto_sign_recover_init32 {
685 	uint32_t		ri_return_value;
686 	crypto_session_id_t	ri_session;
687 	crypto_mechanism32_t	ri_mech;
688 	crypto_key32_t		ri_key;
689 } crypto_sign_recover_init32_t;
690 
691 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
692 #pragma pack()
693 #endif
694 
695 typedef struct crypto_sign_recover32 {
696 	uint32_t		sr_return_value;
697 	crypto_session_id_t	sr_session;
698 	size32_t		sr_datalen;
699 	caddr32_t		sr_databuf;
700 	size32_t		sr_signlen;
701 	caddr32_t		sr_signbuf;
702 } crypto_sign_recover32_t;
703 
704 typedef struct crypto_verify32 {
705 	uint32_t		cv_return_value;
706 	crypto_session_id_t	cv_session;
707 	size32_t		cv_datalen;
708 	caddr32_t		cv_databuf;
709 	size32_t		cv_signlen;
710 	caddr32_t		cv_signbuf;
711 } crypto_verify32_t;
712 
713 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
714 #pragma pack(4)
715 #endif
716 
717 typedef struct crypto_verify_init32 {
718 	uint32_t		vi_return_value;
719 	crypto_session_id_t	vi_session;
720 	crypto_mechanism32_t	vi_mech;
721 	crypto_key32_t		vi_key;
722 } crypto_verify_init32_t;
723 
724 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
725 #pragma pack()
726 #endif
727 
728 typedef struct crypto_verify_update32 {
729 	uint32_t		vu_return_value;
730 	crypto_session_id_t	vu_session;
731 	size32_t		vu_datalen;
732 	caddr32_t		vu_databuf;
733 } crypto_verify_update32_t;
734 
735 typedef struct crypto_verify_final32 {
736 	uint32_t		vf_return_value;
737 	crypto_session_id_t	vf_session;
738 	size32_t		vf_signlen;
739 	caddr32_t		vf_signbuf;
740 } crypto_verify_final32_t;
741 
742 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
743 #pragma pack(4)
744 #endif
745 
746 typedef struct crypto_verify_recover_init32 {
747 	uint32_t		ri_return_value;
748 	crypto_session_id_t	ri_session;
749 	crypto_mechanism32_t	ri_mech;
750 	crypto_key32_t		ri_key;
751 } crypto_verify_recover_init32_t;
752 
753 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
754 #pragma pack()
755 #endif
756 
757 typedef struct crypto_verify_recover32 {
758 	uint32_t		vr_return_value;
759 	crypto_session_id_t	vr_session;
760 	size32_t		vr_signlen;
761 	caddr32_t		vr_signbuf;
762 	size32_t		vr_datalen;
763 	caddr32_t		vr_databuf;
764 } crypto_verify_recover32_t;
765 
766 typedef struct crypto_digest_encrypt_update32 {
767 	uint32_t		eu_return_value;
768 	crypto_session_id_t	eu_session;
769 	size32_t		eu_datalen;
770 	caddr32_t		eu_databuf;
771 	size32_t		eu_encrlen;
772 	caddr32_t		eu_encrbuf;
773 } crypto_digest_encrypt_update32_t;
774 
775 typedef struct crypto_decrypt_digest_update32 {
776 	uint32_t		du_return_value;
777 	crypto_session_id_t	du_session;
778 	size32_t		du_encrlen;
779 	caddr32_t		du_encrbuf;
780 	size32_t		du_datalen;
781 	caddr32_t		du_databuf;
782 } crypto_decrypt_digest_update32_t;
783 
784 typedef struct crypto_sign_encrypt_update32 {
785 	uint32_t		eu_return_value;
786 	crypto_session_id_t	eu_session;
787 	size32_t		eu_datalen;
788 	caddr32_t		eu_databuf;
789 	size32_t		eu_encrlen;
790 	caddr32_t		eu_encrbuf;
791 } crypto_sign_encrypt_update32_t;
792 
793 typedef struct crypto_decrypt_verify_update32 {
794 	uint32_t		vu_return_value;
795 	crypto_session_id_t	vu_session;
796 	size32_t		vu_encrlen;
797 	caddr32_t		vu_encrbuf;
798 	size32_t		vu_datalen;
799 	caddr32_t		vu_databuf;
800 } crypto_decrypt_verify_update32_t;
801 
802 #endif	/* _SYSCALL32 */
803 #endif	/* _KERNEL */
804 
805 #define	CRYPTO_ENCRYPT			CRYPTO(50)
806 #define	CRYPTO_ENCRYPT_INIT		CRYPTO(51)
807 #define	CRYPTO_ENCRYPT_UPDATE		CRYPTO(52)
808 #define	CRYPTO_ENCRYPT_FINAL		CRYPTO(53)
809 #define	CRYPTO_DECRYPT			CRYPTO(54)
810 #define	CRYPTO_DECRYPT_INIT		CRYPTO(55)
811 #define	CRYPTO_DECRYPT_UPDATE		CRYPTO(56)
812 #define	CRYPTO_DECRYPT_FINAL		CRYPTO(57)
813 
814 #define	CRYPTO_DIGEST			CRYPTO(58)
815 #define	CRYPTO_DIGEST_INIT		CRYPTO(59)
816 #define	CRYPTO_DIGEST_UPDATE		CRYPTO(60)
817 #define	CRYPTO_DIGEST_KEY		CRYPTO(61)
818 #define	CRYPTO_DIGEST_FINAL		CRYPTO(62)
819 #define	CRYPTO_MAC			CRYPTO(63)
820 #define	CRYPTO_MAC_INIT			CRYPTO(64)
821 #define	CRYPTO_MAC_UPDATE		CRYPTO(65)
822 #define	CRYPTO_MAC_FINAL		CRYPTO(66)
823 
824 #define	CRYPTO_SIGN			CRYPTO(67)
825 #define	CRYPTO_SIGN_INIT		CRYPTO(68)
826 #define	CRYPTO_SIGN_UPDATE		CRYPTO(69)
827 #define	CRYPTO_SIGN_FINAL		CRYPTO(70)
828 #define	CRYPTO_SIGN_RECOVER_INIT	CRYPTO(71)
829 #define	CRYPTO_SIGN_RECOVER		CRYPTO(72)
830 #define	CRYPTO_VERIFY			CRYPTO(73)
831 #define	CRYPTO_VERIFY_INIT		CRYPTO(74)
832 #define	CRYPTO_VERIFY_UPDATE		CRYPTO(75)
833 #define	CRYPTO_VERIFY_FINAL		CRYPTO(76)
834 #define	CRYPTO_VERIFY_RECOVER_INIT	CRYPTO(77)
835 #define	CRYPTO_VERIFY_RECOVER		CRYPTO(78)
836 
837 #define	CRYPTO_DIGEST_ENCRYPT_UPDATE	CRYPTO(79)
838 #define	CRYPTO_DECRYPT_DIGEST_UPDATE	CRYPTO(80)
839 #define	CRYPTO_SIGN_ENCRYPT_UPDATE	CRYPTO(81)
840 #define	CRYPTO_DECRYPT_VERIFY_UPDATE	CRYPTO(82)
841 
842 /*
843  * Random Number Ioctls
844  */
845 typedef struct crypto_seed_random {
846 	uint_t			sr_return_value;
847 	crypto_session_id_t	sr_session;
848 	size_t			sr_seedlen;
849 	caddr_t			sr_seedbuf;
850 } crypto_seed_random_t;
851 
852 typedef struct crypto_generate_random {
853 	uint_t			gr_return_value;
854 	crypto_session_id_t	gr_session;
855 	caddr_t			gr_buf;
856 	size_t			gr_buflen;
857 } crypto_generate_random_t;
858 
859 #ifdef	_KERNEL
860 #ifdef	_SYSCALL32
861 
862 typedef struct crypto_seed_random32 {
863 	uint32_t		sr_return_value;
864 	crypto_session_id_t	sr_session;
865 	size32_t		sr_seedlen;
866 	caddr32_t		sr_seedbuf;
867 } crypto_seed_random32_t;
868 
869 typedef struct crypto_generate_random32 {
870 	uint32_t		gr_return_value;
871 	crypto_session_id_t	gr_session;
872 	caddr32_t		gr_buf;
873 	size32_t		gr_buflen;
874 } crypto_generate_random32_t;
875 
876 #endif	/* _SYSCALL32 */
877 #endif	/* _KERNEL */
878 
879 #define	CRYPTO_SEED_RANDOM		CRYPTO(90)
880 #define	CRYPTO_GENERATE_RANDOM		CRYPTO(91)
881 
882 /*
883  * Object Management Ioctls
884  */
885 typedef struct crypto_object_create {
886 	uint_t			oc_return_value;
887 	crypto_session_id_t	oc_session;
888 	crypto_object_id_t	oc_handle;
889 	uint_t			oc_count;
890 	caddr_t			oc_attributes;
891 } crypto_object_create_t;
892 
893 typedef struct crypto_object_copy {
894 	uint_t			oc_return_value;
895 	crypto_session_id_t	oc_session;
896 	crypto_object_id_t	oc_handle;
897 	crypto_object_id_t	oc_new_handle;
898 	uint_t			oc_count;
899 	caddr_t			oc_new_attributes;
900 } crypto_object_copy_t;
901 
902 typedef struct crypto_object_destroy {
903 	uint_t			od_return_value;
904 	crypto_session_id_t	od_session;
905 	crypto_object_id_t	od_handle;
906 } crypto_object_destroy_t;
907 
908 typedef struct crypto_object_get_attribute_value {
909 	uint_t			og_return_value;
910 	crypto_session_id_t	og_session;
911 	crypto_object_id_t	og_handle;
912 	uint_t			og_count;
913 	caddr_t			og_attributes;
914 } crypto_object_get_attribute_value_t;
915 
916 typedef struct crypto_object_get_size {
917 	uint_t			gs_return_value;
918 	crypto_session_id_t	gs_session;
919 	crypto_object_id_t	gs_handle;
920 	size_t			gs_size;
921 } crypto_object_get_size_t;
922 
923 typedef struct crypto_object_set_attribute_value {
924 	uint_t			sa_return_value;
925 	crypto_session_id_t	sa_session;
926 	crypto_object_id_t	sa_handle;
927 	uint_t			sa_count;
928 	caddr_t			sa_attributes;
929 } crypto_object_set_attribute_value_t;
930 
931 typedef struct crypto_object_find_init {
932 	uint_t			fi_return_value;
933 	crypto_session_id_t	fi_session;
934 	uint_t			fi_count;
935 	caddr_t			fi_attributes;
936 } crypto_object_find_init_t;
937 
938 typedef struct crypto_object_find_update {
939 	uint_t			fu_return_value;
940 	crypto_session_id_t	fu_session;
941 	uint_t			fu_max_count;
942 	uint_t			fu_count;
943 	caddr_t			fu_handles;
944 } crypto_object_find_update_t;
945 
946 typedef struct crypto_object_find_final {
947 	uint_t			ff_return_value;
948 	crypto_session_id_t	ff_session;
949 } crypto_object_find_final_t;
950 
951 #ifdef	_KERNEL
952 #ifdef	_SYSCALL32
953 
954 typedef struct crypto_object_create32 {
955 	uint32_t		oc_return_value;
956 	crypto_session_id_t	oc_session;
957 	crypto_object_id_t	oc_handle;
958 	uint32_t		oc_count;
959 	caddr32_t		oc_attributes;
960 } crypto_object_create32_t;
961 
962 typedef struct crypto_object_copy32 {
963 	uint32_t		oc_return_value;
964 	crypto_session_id_t	oc_session;
965 	crypto_object_id_t	oc_handle;
966 	crypto_object_id_t	oc_new_handle;
967 	uint32_t		oc_count;
968 	caddr32_t		oc_new_attributes;
969 } crypto_object_copy32_t;
970 
971 typedef struct crypto_object_destroy32 {
972 	uint32_t		od_return_value;
973 	crypto_session_id_t	od_session;
974 	crypto_object_id_t	od_handle;
975 } crypto_object_destroy32_t;
976 
977 typedef struct crypto_object_get_attribute_value32 {
978 	uint32_t		og_return_value;
979 	crypto_session_id_t	og_session;
980 	crypto_object_id_t	og_handle;
981 	uint32_t		og_count;
982 	caddr32_t		og_attributes;
983 } crypto_object_get_attribute_value32_t;
984 
985 typedef struct crypto_object_get_size32 {
986 	uint32_t		gs_return_value;
987 	crypto_session_id_t	gs_session;
988 	crypto_object_id_t	gs_handle;
989 	size32_t		gs_size;
990 } crypto_object_get_size32_t;
991 
992 typedef struct crypto_object_set_attribute_value32 {
993 	uint32_t		sa_return_value;
994 	crypto_session_id_t	sa_session;
995 	crypto_object_id_t	sa_handle;
996 	uint32_t		sa_count;
997 	caddr32_t		sa_attributes;
998 } crypto_object_set_attribute_value32_t;
999 
1000 typedef struct crypto_object_find_init32 {
1001 	uint32_t		fi_return_value;
1002 	crypto_session_id_t	fi_session;
1003 	uint32_t		fi_count;
1004 	caddr32_t		fi_attributes;
1005 } crypto_object_find_init32_t;
1006 
1007 typedef struct crypto_object_find_update32 {
1008 	uint32_t		fu_return_value;
1009 	crypto_session_id_t	fu_session;
1010 	uint32_t		fu_max_count;
1011 	uint32_t		fu_count;
1012 	caddr32_t		fu_handles;
1013 } crypto_object_find_update32_t;
1014 
1015 typedef struct crypto_object_find_final32 {
1016 	uint32_t		ff_return_value;
1017 	crypto_session_id_t	ff_session;
1018 } crypto_object_find_final32_t;
1019 
1020 #endif	/* _SYSCALL32 */
1021 #endif	/* _KERNEL */
1022 
1023 #define	CRYPTO_OBJECT_CREATE			CRYPTO(100)
1024 #define	CRYPTO_OBJECT_COPY			CRYPTO(101)
1025 #define	CRYPTO_OBJECT_DESTROY			CRYPTO(102)
1026 #define	CRYPTO_OBJECT_GET_ATTRIBUTE_VALUE	CRYPTO(103)
1027 #define	CRYPTO_OBJECT_GET_SIZE			CRYPTO(104)
1028 #define	CRYPTO_OBJECT_SET_ATTRIBUTE_VALUE	CRYPTO(105)
1029 #define	CRYPTO_OBJECT_FIND_INIT			CRYPTO(106)
1030 #define	CRYPTO_OBJECT_FIND_UPDATE		CRYPTO(107)
1031 #define	CRYPTO_OBJECT_FIND_FINAL		CRYPTO(108)
1032 
1033 /*
1034  * Key Generation Ioctls
1035  */
1036 typedef struct crypto_object_generate_key {
1037 	uint_t			gk_return_value;
1038 	crypto_session_id_t	gk_session;
1039 	crypto_object_id_t	gk_handle;
1040 	crypto_mechanism_t	gk_mechanism;
1041 	uint_t			gk_count;
1042 	caddr_t			gk_attributes;
1043 } crypto_object_generate_key_t;
1044 
1045 typedef struct crypto_object_generate_key_pair {
1046 	uint_t			kp_return_value;
1047 	crypto_session_id_t	kp_session;
1048 	crypto_object_id_t	kp_public_handle;
1049 	crypto_object_id_t	kp_private_handle;
1050 	uint_t			kp_public_count;
1051 	uint_t			kp_private_count;
1052 	caddr_t			kp_public_attributes;
1053 	caddr_t			kp_private_attributes;
1054 	crypto_mechanism_t	kp_mechanism;
1055 } crypto_object_generate_key_pair_t;
1056 
1057 typedef struct crypto_object_wrap_key {
1058 	uint_t			wk_return_value;
1059 	crypto_session_id_t	wk_session;
1060 	crypto_mechanism_t	wk_mechanism;
1061 	crypto_key_t		wk_wrapping_key;
1062 	crypto_object_id_t	wk_object_handle;
1063 	size_t			wk_wrapped_key_len;
1064 	caddr_t			wk_wrapped_key;
1065 } crypto_object_wrap_key_t;
1066 
1067 typedef struct crypto_object_unwrap_key {
1068 	uint_t			uk_return_value;
1069 	crypto_session_id_t	uk_session;
1070 	crypto_mechanism_t	uk_mechanism;
1071 	crypto_key_t		uk_unwrapping_key;
1072 	crypto_object_id_t	uk_object_handle;
1073 	size_t			uk_wrapped_key_len;
1074 	caddr_t			uk_wrapped_key;
1075 	uint_t			uk_count;
1076 	caddr_t			uk_attributes;
1077 } crypto_object_unwrap_key_t;
1078 
1079 typedef struct crypto_derive_key {
1080 	uint_t			dk_return_value;
1081 	crypto_session_id_t	dk_session;
1082 	crypto_mechanism_t	dk_mechanism;
1083 	crypto_key_t		dk_base_key;
1084 	crypto_object_id_t	dk_object_handle;
1085 	uint_t			dk_count;
1086 	caddr_t			dk_attributes;
1087 } crypto_derive_key_t;
1088 
1089 #ifdef	_KERNEL
1090 #ifdef	_SYSCALL32
1091 
1092 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1093 #pragma pack(4)
1094 #endif
1095 
1096 typedef struct crypto_object_generate_key32 {
1097 	uint32_t		gk_return_value;
1098 	crypto_session_id_t	gk_session;
1099 	crypto_object_id_t	gk_handle;
1100 	crypto_mechanism32_t	gk_mechanism;
1101 	uint32_t		gk_count;
1102 	caddr32_t		gk_attributes;
1103 } crypto_object_generate_key32_t;
1104 
1105 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1106 #pragma pack()
1107 #endif
1108 
1109 typedef struct crypto_object_generate_key_pair32 {
1110 	uint32_t		kp_return_value;
1111 	crypto_session_id_t	kp_session;
1112 	crypto_object_id_t	kp_public_handle;
1113 	crypto_object_id_t	kp_private_handle;
1114 	uint32_t		kp_public_count;
1115 	uint32_t		kp_private_count;
1116 	caddr32_t		kp_public_attributes;
1117 	caddr32_t		kp_private_attributes;
1118 	crypto_mechanism32_t	kp_mechanism;
1119 } crypto_object_generate_key_pair32_t;
1120 
1121 typedef struct crypto_object_wrap_key32 {
1122 	uint32_t		wk_return_value;
1123 	crypto_session_id_t	wk_session;
1124 	crypto_mechanism32_t	wk_mechanism;
1125 	crypto_key32_t		wk_wrapping_key;
1126 	crypto_object_id_t	wk_object_handle;
1127 	size32_t		wk_wrapped_key_len;
1128 	caddr32_t		wk_wrapped_key;
1129 } crypto_object_wrap_key32_t;
1130 
1131 typedef struct crypto_object_unwrap_key32 {
1132 	uint32_t		uk_return_value;
1133 	crypto_session_id_t	uk_session;
1134 	crypto_mechanism32_t	uk_mechanism;
1135 	crypto_key32_t		uk_unwrapping_key;
1136 	crypto_object_id_t	uk_object_handle;
1137 	size32_t		uk_wrapped_key_len;
1138 	caddr32_t		uk_wrapped_key;
1139 	uint32_t		uk_count;
1140 	caddr32_t		uk_attributes;
1141 } crypto_object_unwrap_key32_t;
1142 
1143 typedef struct crypto_derive_key32 {
1144 	uint32_t		dk_return_value;
1145 	crypto_session_id_t	dk_session;
1146 	crypto_mechanism32_t	dk_mechanism;
1147 	crypto_key32_t		dk_base_key;
1148 	crypto_object_id_t	dk_object_handle;
1149 	uint32_t		dk_count;
1150 	caddr32_t		dk_attributes;
1151 } crypto_derive_key32_t;
1152 
1153 #endif	/* _SYSCALL32 */
1154 #endif	/* _KERNEL */
1155 
1156 #define	CRYPTO_GENERATE_KEY		CRYPTO(110)
1157 #define	CRYPTO_GENERATE_KEY_PAIR	CRYPTO(111)
1158 #define	CRYPTO_WRAP_KEY			CRYPTO(112)
1159 #define	CRYPTO_UNWRAP_KEY		CRYPTO(113)
1160 #define	CRYPTO_DERIVE_KEY		CRYPTO(114)
1161 
1162 /*
1163  * Provider Management Ioctls
1164  */
1165 
1166 typedef struct crypto_get_provider_list {
1167 	uint_t			pl_return_value;
1168 	uint_t			pl_count;
1169 	crypto_provider_entry_t	pl_list[1];
1170 } crypto_get_provider_list_t;
1171 
1172 typedef struct crypto_provider_data {
1173 	uchar_t			pd_prov_desc[CRYPTO_PROVIDER_DESCR_MAX_LEN];
1174 	uchar_t			pd_label[CRYPTO_EXT_SIZE_LABEL];
1175 	uchar_t			pd_manufacturerID[CRYPTO_EXT_SIZE_MANUF];
1176 	uchar_t			pd_model[CRYPTO_EXT_SIZE_MODEL];
1177 	uchar_t			pd_serial_number[CRYPTO_EXT_SIZE_SERIAL];
1178 	ulong_t			pd_flags;
1179 	ulong_t			pd_max_session_count;
1180 	ulong_t			pd_session_count;
1181 	ulong_t			pd_max_rw_session_count;
1182 	ulong_t			pd_rw_session_count;
1183 	ulong_t			pd_max_pin_len;
1184 	ulong_t			pd_min_pin_len;
1185 	ulong_t			pd_total_public_memory;
1186 	ulong_t			pd_free_public_memory;
1187 	ulong_t			pd_total_private_memory;
1188 	ulong_t			pd_free_private_memory;
1189 	crypto_version_t	pd_hardware_version;
1190 	crypto_version_t	pd_firmware_version;
1191 	uchar_t			pd_time[CRYPTO_EXT_SIZE_TIME];
1192 } crypto_provider_data_t;
1193 
1194 typedef struct crypto_get_provider_info {
1195 	uint_t			gi_return_value;
1196 	crypto_provider_id_t	gi_provider_id;
1197 	crypto_provider_data_t	gi_provider_data;
1198 } crypto_get_provider_info_t;
1199 
1200 typedef struct crypto_get_provider_mechanisms {
1201 	uint_t			pm_return_value;
1202 	crypto_provider_id_t	pm_provider_id;
1203 	uint_t			pm_count;
1204 	crypto_mech_name_t	pm_list[1];
1205 } crypto_get_provider_mechanisms_t;
1206 
1207 typedef struct crypto_get_provider_mechanism_info {
1208 	uint_t			mi_return_value;
1209 	crypto_provider_id_t	mi_provider_id;
1210 	crypto_mech_name_t	mi_mechanism_name;
1211 	uint32_t		mi_min_key_size;
1212 	uint32_t		mi_max_key_size;
1213 	uint32_t		mi_flags;
1214 } crypto_get_provider_mechanism_info_t;
1215 
1216 typedef struct crypto_init_token {
1217 	uint_t			it_return_value;
1218 	crypto_provider_id_t	it_provider_id;
1219 	caddr_t			it_pin;
1220 	size_t			it_pin_len;
1221 	caddr_t			it_label;
1222 } crypto_init_token_t;
1223 
1224 typedef struct crypto_init_pin {
1225 	uint_t			ip_return_value;
1226 	crypto_session_id_t	ip_session;
1227 	caddr_t			ip_pin;
1228 	size_t			ip_pin_len;
1229 } crypto_init_pin_t;
1230 
1231 typedef struct crypto_set_pin {
1232 	uint_t			sp_return_value;
1233 	crypto_session_id_t	sp_session;
1234 	caddr_t			sp_old_pin;
1235 	size_t			sp_old_len;
1236 	caddr_t			sp_new_pin;
1237 	size_t			sp_new_len;
1238 } crypto_set_pin_t;
1239 
1240 #ifdef	_KERNEL
1241 #ifdef	_SYSCALL32
1242 
1243 typedef struct crypto_get_provider_list32 {
1244 	uint32_t		pl_return_value;
1245 	uint32_t		pl_count;
1246 	crypto_provider_entry_t pl_list[1];
1247 } crypto_get_provider_list32_t;
1248 
1249 typedef struct crypto_version32 {
1250 	uchar_t	cv_major;
1251 	uchar_t	cv_minor;
1252 } crypto_version32_t;
1253 
1254 typedef struct crypto_provider_data32 {
1255 	uchar_t			pd_prov_desc[CRYPTO_PROVIDER_DESCR_MAX_LEN];
1256 	uchar_t			pd_label[CRYPTO_EXT_SIZE_LABEL];
1257 	uchar_t			pd_manufacturerID[CRYPTO_EXT_SIZE_MANUF];
1258 	uchar_t			pd_model[CRYPTO_EXT_SIZE_MODEL];
1259 	uchar_t			pd_serial_number[CRYPTO_EXT_SIZE_SERIAL];
1260 	uint32_t		pd_flags;
1261 	uint32_t		pd_max_session_count;
1262 	uint32_t		pd_session_count;
1263 	uint32_t		pd_max_rw_session_count;
1264 	uint32_t		pd_rw_session_count;
1265 	uint32_t		pd_max_pin_len;
1266 	uint32_t		pd_min_pin_len;
1267 	uint32_t		pd_total_public_memory;
1268 	uint32_t		pd_free_public_memory;
1269 	uint32_t		pd_total_private_memory;
1270 	uint32_t		pd_free_private_memory;
1271 	crypto_version32_t	pd_hardware_version;
1272 	crypto_version32_t	pd_firmware_version;
1273 	uchar_t			pd_time[CRYPTO_EXT_SIZE_TIME];
1274 } crypto_provider_data32_t;
1275 
1276 typedef struct crypto_get_provider_info32 {
1277 	uint32_t		gi_return_value;
1278 	crypto_provider_id_t	gi_provider_id;
1279 	crypto_provider_data32_t gi_provider_data;
1280 } crypto_get_provider_info32_t;
1281 
1282 typedef struct crypto_get_provider_mechanisms32 {
1283 	uint32_t		pm_return_value;
1284 	crypto_provider_id_t	pm_provider_id;
1285 	uint32_t		pm_count;
1286 	crypto_mech_name_t	pm_list[1];
1287 } crypto_get_provider_mechanisms32_t;
1288 
1289 typedef struct crypto_init_token32 {
1290 	uint32_t		it_return_value;
1291 	crypto_provider_id_t	it_provider_id;
1292 	caddr32_t		it_pin;
1293 	size32_t		it_pin_len;
1294 	caddr32_t		it_label;
1295 } crypto_init_token32_t;
1296 
1297 typedef struct crypto_init_pin32 {
1298 	uint32_t		ip_return_value;
1299 	crypto_session_id_t	ip_session;
1300 	caddr32_t		ip_pin;
1301 	size32_t		ip_pin_len;
1302 } crypto_init_pin32_t;
1303 
1304 typedef struct crypto_set_pin32 {
1305 	uint32_t		sp_return_value;
1306 	crypto_session_id_t	sp_session;
1307 	caddr32_t		sp_old_pin;
1308 	size32_t		sp_old_len;
1309 	caddr32_t		sp_new_pin;
1310 	size32_t		sp_new_len;
1311 } crypto_set_pin32_t;
1312 
1313 #endif	/* _SYSCALL32 */
1314 #endif	/* _KERNEL */
1315 
1316 #define	CRYPTO_GET_PROVIDER_LIST		CRYPTO(120)
1317 #define	CRYPTO_GET_PROVIDER_INFO		CRYPTO(121)
1318 #define	CRYPTO_GET_PROVIDER_MECHANISMS		CRYPTO(122)
1319 #define	CRYPTO_GET_PROVIDER_MECHANISM_INFO	CRYPTO(123)
1320 #define	CRYPTO_INIT_TOKEN			CRYPTO(124)
1321 #define	CRYPTO_INIT_PIN				CRYPTO(125)
1322 #define	CRYPTO_SET_PIN				CRYPTO(126)
1323 
1324 /*
1325  * No (Key) Store Key Generation Ioctls
1326  */
1327 typedef struct crypto_nostore_generate_key {
1328 	uint_t			ngk_return_value;
1329 	crypto_session_id_t	ngk_session;
1330 	crypto_mechanism_t	ngk_mechanism;
1331 	uint_t			ngk_in_count;
1332 	uint_t			ngk_out_count;
1333 	caddr_t			ngk_in_attributes;
1334 	caddr_t			ngk_out_attributes;
1335 } crypto_nostore_generate_key_t;
1336 
1337 typedef struct crypto_nostore_generate_key_pair {
1338 	uint_t			nkp_return_value;
1339 	crypto_session_id_t	nkp_session;
1340 	uint_t			nkp_in_public_count;
1341 	uint_t			nkp_in_private_count;
1342 	uint_t			nkp_out_public_count;
1343 	uint_t			nkp_out_private_count;
1344 	caddr_t			nkp_in_public_attributes;
1345 	caddr_t			nkp_in_private_attributes;
1346 	caddr_t			nkp_out_public_attributes;
1347 	caddr_t			nkp_out_private_attributes;
1348 	crypto_mechanism_t	nkp_mechanism;
1349 } crypto_nostore_generate_key_pair_t;
1350 
1351 typedef struct crypto_nostore_derive_key {
1352 	uint_t			ndk_return_value;
1353 	crypto_session_id_t	ndk_session;
1354 	crypto_mechanism_t	ndk_mechanism;
1355 	crypto_key_t		ndk_base_key;
1356 	uint_t			ndk_in_count;
1357 	uint_t			ndk_out_count;
1358 	caddr_t			ndk_in_attributes;
1359 	caddr_t			ndk_out_attributes;
1360 } crypto_nostore_derive_key_t;
1361 
1362 #ifdef	_KERNEL
1363 #ifdef	_SYSCALL32
1364 
1365 typedef struct crypto_nostore_generate_key32 {
1366 	uint32_t		ngk_return_value;
1367 	crypto_session_id_t	ngk_session;
1368 	crypto_mechanism32_t	ngk_mechanism;
1369 	uint32_t		ngk_in_count;
1370 	uint32_t		ngk_out_count;
1371 	caddr32_t		ngk_in_attributes;
1372 	caddr32_t		ngk_out_attributes;
1373 } crypto_nostore_generate_key32_t;
1374 
1375 typedef struct crypto_nostore_generate_key_pair32 {
1376 	uint32_t		nkp_return_value;
1377 	crypto_session_id_t	nkp_session;
1378 	uint32_t		nkp_in_public_count;
1379 	uint32_t		nkp_in_private_count;
1380 	uint32_t		nkp_out_public_count;
1381 	uint32_t		nkp_out_private_count;
1382 	caddr32_t		nkp_in_public_attributes;
1383 	caddr32_t		nkp_in_private_attributes;
1384 	caddr32_t		nkp_out_public_attributes;
1385 	caddr32_t		nkp_out_private_attributes;
1386 	crypto_mechanism32_t	nkp_mechanism;
1387 } crypto_nostore_generate_key_pair32_t;
1388 
1389 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1390 #pragma pack(4)
1391 #endif
1392 
1393 typedef struct crypto_nostore_derive_key32 {
1394 	uint32_t		ndk_return_value;
1395 	crypto_session_id_t	ndk_session;
1396 	crypto_mechanism32_t	ndk_mechanism;
1397 	crypto_key32_t		ndk_base_key;
1398 	uint32_t		ndk_in_count;
1399 	uint32_t		ndk_out_count;
1400 	caddr32_t		ndk_in_attributes;
1401 	caddr32_t		ndk_out_attributes;
1402 } crypto_nostore_derive_key32_t;
1403 
1404 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1405 #pragma pack()
1406 #endif
1407 
1408 #endif	/* _SYSCALL32 */
1409 #endif	/* _KERNEL */
1410 
1411 #define	CRYPTO_NOSTORE_GENERATE_KEY		CRYPTO(127)
1412 #define	CRYPTO_NOSTORE_GENERATE_KEY_PAIR	CRYPTO(128)
1413 #define	CRYPTO_NOSTORE_DERIVE_KEY		CRYPTO(129)
1414 
1415 #ifdef	__cplusplus
1416 }
1417 #endif
1418 
1419 #endif	/* _SYS_CRYPTO_IOCTL_H */
1420