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.
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.
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]
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _SYS_CRYPTO_IOCTL_H
28 #define _SYS_CRYPTO_IOCTL_H
34 #include <sys/types.h>
35 #include <sys/crypto/api.h>
36 #include <sys/crypto/spi.h>
37 #include <sys/crypto/common.h>
39 #define CRYPTO_MAX_ATTRIBUTE_COUNT 128
41 #define CRYPTO_IOFLAGS_RW_SESSION 0x00000001
43 #define CRYPTO(x) (('y' << 8) | (x))
45 #define MAX_NUM_THRESHOLD 7
47 /* the PKCS11 Mechanisms */
48 #define CKM_RC4 0x00000111UL
49 #define CKM_DES3_ECB 0x00000132UL
50 #define CKM_DES3_CBC 0x00000133UL
51 #define CKM_MD5 0x00000210UL
52 #define CKM_SHA_1 0x00000220UL
53 #define CKM_AES_ECB 0x00001081UL
54 #define CKM_AES_CBC 0x00001082UL
57 * General Purpose Ioctls
60 typedef struct fl_mechs_threshold
{
62 uint32_t mech_threshold
;
63 } fl_mechs_threshold_t
;
65 typedef struct crypto_function_list
{
66 boolean_t fl_digest_init
;
68 boolean_t fl_digest_update
;
69 boolean_t fl_digest_key
;
70 boolean_t fl_digest_final
;
72 boolean_t fl_encrypt_init
;
74 boolean_t fl_encrypt_update
;
75 boolean_t fl_encrypt_final
;
77 boolean_t fl_decrypt_init
;
79 boolean_t fl_decrypt_update
;
80 boolean_t fl_decrypt_final
;
82 boolean_t fl_mac_init
;
84 boolean_t fl_mac_update
;
85 boolean_t fl_mac_final
;
87 boolean_t fl_sign_init
;
89 boolean_t fl_sign_update
;
90 boolean_t fl_sign_final
;
91 boolean_t fl_sign_recover_init
;
92 boolean_t fl_sign_recover
;
94 boolean_t fl_verify_init
;
96 boolean_t fl_verify_update
;
97 boolean_t fl_verify_final
;
98 boolean_t fl_verify_recover_init
;
99 boolean_t fl_verify_recover
;
101 boolean_t fl_digest_encrypt_update
;
102 boolean_t fl_decrypt_digest_update
;
103 boolean_t fl_sign_encrypt_update
;
104 boolean_t fl_decrypt_verify_update
;
106 boolean_t fl_seed_random
;
107 boolean_t fl_generate_random
;
109 boolean_t fl_session_open
;
110 boolean_t fl_session_close
;
111 boolean_t fl_session_login
;
112 boolean_t fl_session_logout
;
114 boolean_t fl_object_create
;
115 boolean_t fl_object_copy
;
116 boolean_t fl_object_destroy
;
117 boolean_t fl_object_get_size
;
118 boolean_t fl_object_get_attribute_value
;
119 boolean_t fl_object_set_attribute_value
;
120 boolean_t fl_object_find_init
;
121 boolean_t fl_object_find
;
122 boolean_t fl_object_find_final
;
124 boolean_t fl_key_generate
;
125 boolean_t fl_key_generate_pair
;
126 boolean_t fl_key_wrap
;
127 boolean_t fl_key_unwrap
;
128 boolean_t fl_key_derive
;
130 boolean_t fl_init_token
;
131 boolean_t fl_init_pin
;
132 boolean_t fl_set_pin
;
134 boolean_t prov_is_hash_limited
;
135 uint32_t prov_hash_threshold
;
136 uint32_t prov_hash_limit
;
138 boolean_t prov_is_hmac_limited
;
139 uint32_t prov_hmac_limit
;
141 int total_threshold_count
;
142 fl_mechs_threshold_t fl_threshold
[MAX_NUM_THRESHOLD
];
143 } crypto_function_list_t
;
145 typedef struct crypto_get_function_list
{
146 uint_t fl_return_value
;
147 crypto_provider_id_t fl_provider_id
;
148 crypto_function_list_t fl_list
;
149 } crypto_get_function_list_t
;
151 typedef struct crypto_get_mechanism_number
{
152 uint_t pn_return_value
;
153 caddr_t pn_mechanism_string
;
154 size_t pn_mechanism_len
;
155 crypto_mech_type_t pn_internal_number
;
156 } crypto_get_mechanism_number_t
;
161 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
165 typedef struct crypto_get_mechanism_number32
{
166 uint32_t pn_return_value
;
167 caddr32_t pn_mechanism_string
;
168 size32_t pn_mechanism_len
;
169 crypto_mech_type_t pn_internal_number
;
170 } crypto_get_mechanism_number32_t
;
172 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
176 #endif /* _SYSCALL32 */
179 #define CRYPTO_GET_FUNCTION_LIST CRYPTO(20)
180 #define CRYPTO_GET_MECHANISM_NUMBER CRYPTO(21)
186 typedef uint32_t crypto_flags_t
;
188 typedef struct crypto_open_session
{
189 uint_t os_return_value
;
190 crypto_session_id_t os_session
;
191 crypto_flags_t os_flags
;
192 crypto_provider_id_t os_provider_id
;
193 } crypto_open_session_t
;
195 typedef struct crypto_close_session
{
196 uint_t cs_return_value
;
197 crypto_session_id_t cs_session
;
198 } crypto_close_session_t
;
200 typedef struct crypto_close_all_sessions
{
201 uint_t as_return_value
;
202 crypto_provider_id_t as_provider_id
;
203 } crypto_close_all_sessions_t
;
205 #define CRYPTO_OPEN_SESSION CRYPTO(30)
206 #define CRYPTO_CLOSE_SESSION CRYPTO(31)
207 #define CRYPTO_CLOSE_ALL_SESSIONS CRYPTO(32)
212 typedef struct crypto_login
{
213 uint_t co_return_value
;
214 crypto_session_id_t co_session
;
220 typedef struct crypto_logout
{
221 uint_t cl_return_value
;
222 crypto_session_id_t cl_session
;
228 typedef struct crypto_login32
{
229 uint32_t co_return_value
;
230 crypto_session_id_t co_session
;
231 uint32_t co_user_type
;
236 typedef struct crypto_logout32
{
237 uint32_t cl_return_value
;
238 crypto_session_id_t cl_session
;
241 #endif /* _SYSCALL32 */
244 #define CRYPTO_LOGIN CRYPTO(40)
245 #define CRYPTO_LOGOUT CRYPTO(41)
247 /* flag for encrypt and decrypt operations */
248 #define CRYPTO_INPLACE_OPERATION 0x00000001
251 * Cryptographic Ioctls
253 typedef struct crypto_encrypt
{
254 uint_t ce_return_value
;
255 crypto_session_id_t ce_session
;
263 typedef struct crypto_encrypt_init
{
264 uint_t ei_return_value
;
265 crypto_session_id_t ei_session
;
266 crypto_mechanism_t ei_mech
;
268 } crypto_encrypt_init_t
;
270 typedef struct crypto_encrypt_update
{
271 uint_t eu_return_value
;
272 crypto_session_id_t eu_session
;
278 } crypto_encrypt_update_t
;
280 typedef struct crypto_encrypt_final
{
281 uint_t ef_return_value
;
282 crypto_session_id_t ef_session
;
285 } crypto_encrypt_final_t
;
287 typedef struct crypto_decrypt
{
288 uint_t cd_return_value
;
289 crypto_session_id_t cd_session
;
297 typedef struct crypto_decrypt_init
{
298 uint_t di_return_value
;
299 crypto_session_id_t di_session
;
300 crypto_mechanism_t di_mech
;
302 } crypto_decrypt_init_t
;
304 typedef struct crypto_decrypt_update
{
305 uint_t du_return_value
;
306 crypto_session_id_t du_session
;
312 } crypto_decrypt_update_t
;
314 typedef struct crypto_decrypt_final
{
315 uint_t df_return_value
;
316 crypto_session_id_t df_session
;
319 } crypto_decrypt_final_t
;
321 typedef struct crypto_digest
{
322 uint_t cd_return_value
;
323 crypto_session_id_t cd_session
;
327 caddr_t cd_digestbuf
;
330 typedef struct crypto_digest_init
{
331 uint_t di_return_value
;
332 crypto_session_id_t di_session
;
333 crypto_mechanism_t di_mech
;
334 } crypto_digest_init_t
;
336 typedef struct crypto_digest_update
{
337 uint_t du_return_value
;
338 crypto_session_id_t du_session
;
341 } crypto_digest_update_t
;
343 typedef struct crypto_digest_key
{
344 uint_t dk_return_value
;
345 crypto_session_id_t dk_session
;
347 } crypto_digest_key_t
;
349 typedef struct crypto_digest_final
{
350 uint_t df_return_value
;
351 crypto_session_id_t df_session
;
353 caddr_t df_digestbuf
;
354 } crypto_digest_final_t
;
356 typedef struct crypto_mac
{
357 uint_t cm_return_value
;
358 crypto_session_id_t cm_session
;
365 typedef struct crypto_mac_init
{
366 uint_t mi_return_value
;
367 crypto_session_id_t mi_session
;
368 crypto_mechanism_t mi_mech
;
372 typedef struct crypto_mac_update
{
373 uint_t mu_return_value
;
374 crypto_session_id_t mu_session
;
377 } crypto_mac_update_t
;
379 typedef struct crypto_mac_final
{
380 uint_t mf_return_value
;
381 crypto_session_id_t mf_session
;
384 } crypto_mac_final_t
;
386 typedef struct crypto_sign
{
387 uint_t cs_return_value
;
388 crypto_session_id_t cs_session
;
395 typedef struct crypto_sign_init
{
396 uint_t si_return_value
;
397 crypto_session_id_t si_session
;
398 crypto_mechanism_t si_mech
;
400 } crypto_sign_init_t
;
402 typedef struct crypto_sign_update
{
403 uint_t su_return_value
;
404 crypto_session_id_t su_session
;
407 } crypto_sign_update_t
;
409 typedef struct crypto_sign_final
{
410 uint_t sf_return_value
;
411 crypto_session_id_t sf_session
;
414 } crypto_sign_final_t
;
416 typedef struct crypto_sign_recover_init
{
417 uint_t ri_return_value
;
418 crypto_session_id_t ri_session
;
419 crypto_mechanism_t ri_mech
;
421 } crypto_sign_recover_init_t
;
423 typedef struct crypto_sign_recover
{
424 uint_t sr_return_value
;
425 crypto_session_id_t sr_session
;
430 } crypto_sign_recover_t
;
432 typedef struct crypto_verify
{
433 uint_t cv_return_value
;
434 crypto_session_id_t cv_session
;
441 typedef struct crypto_verify_init
{
442 uint_t vi_return_value
;
443 crypto_session_id_t vi_session
;
444 crypto_mechanism_t vi_mech
;
446 } crypto_verify_init_t
;
448 typedef struct crypto_verify_update
{
449 uint_t vu_return_value
;
450 crypto_session_id_t vu_session
;
453 } crypto_verify_update_t
;
455 typedef struct crypto_verify_final
{
456 uint_t vf_return_value
;
457 crypto_session_id_t vf_session
;
460 } crypto_verify_final_t
;
462 typedef struct crypto_verify_recover_init
{
463 uint_t ri_return_value
;
464 crypto_session_id_t ri_session
;
465 crypto_mechanism_t ri_mech
;
467 } crypto_verify_recover_init_t
;
469 typedef struct crypto_verify_recover
{
470 uint_t vr_return_value
;
471 crypto_session_id_t vr_session
;
476 } crypto_verify_recover_t
;
478 typedef struct crypto_digest_encrypt_update
{
479 uint_t eu_return_value
;
480 crypto_session_id_t eu_session
;
485 } crypto_digest_encrypt_update_t
;
487 typedef struct crypto_decrypt_digest_update
{
488 uint_t du_return_value
;
489 crypto_session_id_t du_session
;
494 } crypto_decrypt_digest_update_t
;
496 typedef struct crypto_sign_encrypt_update
{
497 uint_t eu_return_value
;
498 crypto_session_id_t eu_session
;
503 } crypto_sign_encrypt_update_t
;
505 typedef struct crypto_decrypt_verify_update
{
506 uint_t vu_return_value
;
507 crypto_session_id_t vu_session
;
512 } crypto_decrypt_verify_update_t
;
517 typedef struct crypto_encrypt32
{
518 uint32_t ce_return_value
;
519 crypto_session_id_t ce_session
;
521 caddr32_t ce_databuf
;
523 caddr32_t ce_encrbuf
;
525 } crypto_encrypt32_t
;
527 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
531 typedef struct crypto_encrypt_init32
{
532 uint32_t ei_return_value
;
533 crypto_session_id_t ei_session
;
534 crypto_mechanism32_t ei_mech
;
535 crypto_key32_t ei_key
;
536 } crypto_encrypt_init32_t
;
538 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
542 typedef struct crypto_encrypt_update32
{
543 uint32_t eu_return_value
;
544 crypto_session_id_t eu_session
;
546 caddr32_t eu_databuf
;
548 caddr32_t eu_encrbuf
;
550 } crypto_encrypt_update32_t
;
552 typedef struct crypto_encrypt_final32
{
553 uint32_t ef_return_value
;
554 crypto_session_id_t ef_session
;
556 caddr32_t ef_encrbuf
;
557 } crypto_encrypt_final32_t
;
559 typedef struct crypto_decrypt32
{
560 uint32_t cd_return_value
;
561 crypto_session_id_t cd_session
;
563 caddr32_t cd_encrbuf
;
565 caddr32_t cd_databuf
;
567 } crypto_decrypt32_t
;
569 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
573 typedef struct crypto_decrypt_init32
{
574 uint32_t di_return_value
;
575 crypto_session_id_t di_session
;
576 crypto_mechanism32_t di_mech
;
577 crypto_key32_t di_key
;
578 } crypto_decrypt_init32_t
;
580 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
584 typedef struct crypto_decrypt_update32
{
585 uint32_t du_return_value
;
586 crypto_session_id_t du_session
;
588 caddr32_t du_encrbuf
;
590 caddr32_t du_databuf
;
592 } crypto_decrypt_update32_t
;
594 typedef struct crypto_decrypt_final32
{
595 uint32_t df_return_value
;
596 crypto_session_id_t df_session
;
598 caddr32_t df_databuf
;
599 } crypto_decrypt_final32_t
;
601 typedef struct crypto_digest32
{
602 uint32_t cd_return_value
;
603 crypto_session_id_t cd_session
;
605 caddr32_t cd_databuf
;
606 size32_t cd_digestlen
;
607 caddr32_t cd_digestbuf
;
610 typedef struct crypto_digest_init32
{
611 uint32_t di_return_value
;
612 crypto_session_id_t di_session
;
613 crypto_mechanism32_t di_mech
;
614 } crypto_digest_init32_t
;
616 typedef struct crypto_digest_update32
{
617 uint32_t du_return_value
;
618 crypto_session_id_t du_session
;
620 caddr32_t du_databuf
;
621 } crypto_digest_update32_t
;
623 typedef struct crypto_digest_key32
{
624 uint32_t dk_return_value
;
625 crypto_session_id_t dk_session
;
626 crypto_key32_t dk_key
;
627 } crypto_digest_key32_t
;
629 typedef struct crypto_digest_final32
{
630 uint32_t df_return_value
;
631 crypto_session_id_t df_session
;
632 size32_t df_digestlen
;
633 caddr32_t df_digestbuf
;
634 } crypto_digest_final32_t
;
636 typedef struct crypto_mac32
{
637 uint32_t cm_return_value
;
638 crypto_session_id_t cm_session
;
640 caddr32_t cm_databuf
;
645 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
649 typedef struct crypto_mac_init32
{
650 uint32_t mi_return_value
;
651 crypto_session_id_t mi_session
;
652 crypto_mechanism32_t mi_mech
;
653 crypto_key32_t mi_key
;
654 } crypto_mac_init32_t
;
656 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
660 typedef struct crypto_mac_update32
{
661 uint32_t mu_return_value
;
662 crypto_session_id_t mu_session
;
664 caddr32_t mu_databuf
;
665 } crypto_mac_update32_t
;
667 typedef struct crypto_mac_final32
{
668 uint32_t mf_return_value
;
669 crypto_session_id_t mf_session
;
672 } crypto_mac_final32_t
;
674 typedef struct crypto_sign32
{
675 uint32_t cs_return_value
;
676 crypto_session_id_t cs_session
;
678 caddr32_t cs_databuf
;
680 caddr32_t cs_signbuf
;
683 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
687 typedef struct crypto_sign_init32
{
688 uint32_t si_return_value
;
689 crypto_session_id_t si_session
;
690 crypto_mechanism32_t si_mech
;
691 crypto_key32_t si_key
;
692 } crypto_sign_init32_t
;
694 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
698 typedef struct crypto_sign_update32
{
699 uint32_t su_return_value
;
700 crypto_session_id_t su_session
;
702 caddr32_t su_databuf
;
703 } crypto_sign_update32_t
;
705 typedef struct crypto_sign_final32
{
706 uint32_t sf_return_value
;
707 crypto_session_id_t sf_session
;
709 caddr32_t sf_signbuf
;
710 } crypto_sign_final32_t
;
712 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
716 typedef struct crypto_sign_recover_init32
{
717 uint32_t ri_return_value
;
718 crypto_session_id_t ri_session
;
719 crypto_mechanism32_t ri_mech
;
720 crypto_key32_t ri_key
;
721 } crypto_sign_recover_init32_t
;
723 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
727 typedef struct crypto_sign_recover32
{
728 uint32_t sr_return_value
;
729 crypto_session_id_t sr_session
;
731 caddr32_t sr_databuf
;
733 caddr32_t sr_signbuf
;
734 } crypto_sign_recover32_t
;
736 typedef struct crypto_verify32
{
737 uint32_t cv_return_value
;
738 crypto_session_id_t cv_session
;
740 caddr32_t cv_databuf
;
742 caddr32_t cv_signbuf
;
745 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
749 typedef struct crypto_verify_init32
{
750 uint32_t vi_return_value
;
751 crypto_session_id_t vi_session
;
752 crypto_mechanism32_t vi_mech
;
753 crypto_key32_t vi_key
;
754 } crypto_verify_init32_t
;
756 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
760 typedef struct crypto_verify_update32
{
761 uint32_t vu_return_value
;
762 crypto_session_id_t vu_session
;
764 caddr32_t vu_databuf
;
765 } crypto_verify_update32_t
;
767 typedef struct crypto_verify_final32
{
768 uint32_t vf_return_value
;
769 crypto_session_id_t vf_session
;
771 caddr32_t vf_signbuf
;
772 } crypto_verify_final32_t
;
774 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
778 typedef struct crypto_verify_recover_init32
{
779 uint32_t ri_return_value
;
780 crypto_session_id_t ri_session
;
781 crypto_mechanism32_t ri_mech
;
782 crypto_key32_t ri_key
;
783 } crypto_verify_recover_init32_t
;
785 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
789 typedef struct crypto_verify_recover32
{
790 uint32_t vr_return_value
;
791 crypto_session_id_t vr_session
;
793 caddr32_t vr_signbuf
;
795 caddr32_t vr_databuf
;
796 } crypto_verify_recover32_t
;
798 typedef struct crypto_digest_encrypt_update32
{
799 uint32_t eu_return_value
;
800 crypto_session_id_t eu_session
;
802 caddr32_t eu_databuf
;
804 caddr32_t eu_encrbuf
;
805 } crypto_digest_encrypt_update32_t
;
807 typedef struct crypto_decrypt_digest_update32
{
808 uint32_t du_return_value
;
809 crypto_session_id_t du_session
;
811 caddr32_t du_encrbuf
;
813 caddr32_t du_databuf
;
814 } crypto_decrypt_digest_update32_t
;
816 typedef struct crypto_sign_encrypt_update32
{
817 uint32_t eu_return_value
;
818 crypto_session_id_t eu_session
;
820 caddr32_t eu_databuf
;
822 caddr32_t eu_encrbuf
;
823 } crypto_sign_encrypt_update32_t
;
825 typedef struct crypto_decrypt_verify_update32
{
826 uint32_t vu_return_value
;
827 crypto_session_id_t vu_session
;
829 caddr32_t vu_encrbuf
;
831 caddr32_t vu_databuf
;
832 } crypto_decrypt_verify_update32_t
;
834 #endif /* _SYSCALL32 */
837 #define CRYPTO_ENCRYPT CRYPTO(50)
838 #define CRYPTO_ENCRYPT_INIT CRYPTO(51)
839 #define CRYPTO_ENCRYPT_UPDATE CRYPTO(52)
840 #define CRYPTO_ENCRYPT_FINAL CRYPTO(53)
841 #define CRYPTO_DECRYPT CRYPTO(54)
842 #define CRYPTO_DECRYPT_INIT CRYPTO(55)
843 #define CRYPTO_DECRYPT_UPDATE CRYPTO(56)
844 #define CRYPTO_DECRYPT_FINAL CRYPTO(57)
846 #define CRYPTO_DIGEST CRYPTO(58)
847 #define CRYPTO_DIGEST_INIT CRYPTO(59)
848 #define CRYPTO_DIGEST_UPDATE CRYPTO(60)
849 #define CRYPTO_DIGEST_KEY CRYPTO(61)
850 #define CRYPTO_DIGEST_FINAL CRYPTO(62)
851 #define CRYPTO_MAC CRYPTO(63)
852 #define CRYPTO_MAC_INIT CRYPTO(64)
853 #define CRYPTO_MAC_UPDATE CRYPTO(65)
854 #define CRYPTO_MAC_FINAL CRYPTO(66)
856 #define CRYPTO_SIGN CRYPTO(67)
857 #define CRYPTO_SIGN_INIT CRYPTO(68)
858 #define CRYPTO_SIGN_UPDATE CRYPTO(69)
859 #define CRYPTO_SIGN_FINAL CRYPTO(70)
860 #define CRYPTO_SIGN_RECOVER_INIT CRYPTO(71)
861 #define CRYPTO_SIGN_RECOVER CRYPTO(72)
862 #define CRYPTO_VERIFY CRYPTO(73)
863 #define CRYPTO_VERIFY_INIT CRYPTO(74)
864 #define CRYPTO_VERIFY_UPDATE CRYPTO(75)
865 #define CRYPTO_VERIFY_FINAL CRYPTO(76)
866 #define CRYPTO_VERIFY_RECOVER_INIT CRYPTO(77)
867 #define CRYPTO_VERIFY_RECOVER CRYPTO(78)
869 #define CRYPTO_DIGEST_ENCRYPT_UPDATE CRYPTO(79)
870 #define CRYPTO_DECRYPT_DIGEST_UPDATE CRYPTO(80)
871 #define CRYPTO_SIGN_ENCRYPT_UPDATE CRYPTO(81)
872 #define CRYPTO_DECRYPT_VERIFY_UPDATE CRYPTO(82)
875 * Random Number Ioctls
877 typedef struct crypto_seed_random
{
878 uint_t sr_return_value
;
879 crypto_session_id_t sr_session
;
882 } crypto_seed_random_t
;
884 typedef struct crypto_generate_random
{
885 uint_t gr_return_value
;
886 crypto_session_id_t gr_session
;
889 } crypto_generate_random_t
;
894 typedef struct crypto_seed_random32
{
895 uint32_t sr_return_value
;
896 crypto_session_id_t sr_session
;
898 caddr32_t sr_seedbuf
;
899 } crypto_seed_random32_t
;
901 typedef struct crypto_generate_random32
{
902 uint32_t gr_return_value
;
903 crypto_session_id_t gr_session
;
906 } crypto_generate_random32_t
;
908 #endif /* _SYSCALL32 */
911 #define CRYPTO_SEED_RANDOM CRYPTO(90)
912 #define CRYPTO_GENERATE_RANDOM CRYPTO(91)
915 * Object Management Ioctls
917 typedef struct crypto_object_create
{
918 uint_t oc_return_value
;
919 crypto_session_id_t oc_session
;
920 crypto_object_id_t oc_handle
;
922 caddr_t oc_attributes
;
923 } crypto_object_create_t
;
925 typedef struct crypto_object_copy
{
926 uint_t oc_return_value
;
927 crypto_session_id_t oc_session
;
928 crypto_object_id_t oc_handle
;
929 crypto_object_id_t oc_new_handle
;
931 caddr_t oc_new_attributes
;
932 } crypto_object_copy_t
;
934 typedef struct crypto_object_destroy
{
935 uint_t od_return_value
;
936 crypto_session_id_t od_session
;
937 crypto_object_id_t od_handle
;
938 } crypto_object_destroy_t
;
940 typedef struct crypto_object_get_attribute_value
{
941 uint_t og_return_value
;
942 crypto_session_id_t og_session
;
943 crypto_object_id_t og_handle
;
945 caddr_t og_attributes
;
946 } crypto_object_get_attribute_value_t
;
948 typedef struct crypto_object_get_size
{
949 uint_t gs_return_value
;
950 crypto_session_id_t gs_session
;
951 crypto_object_id_t gs_handle
;
953 } crypto_object_get_size_t
;
955 typedef struct crypto_object_set_attribute_value
{
956 uint_t sa_return_value
;
957 crypto_session_id_t sa_session
;
958 crypto_object_id_t sa_handle
;
960 caddr_t sa_attributes
;
961 } crypto_object_set_attribute_value_t
;
963 typedef struct crypto_object_find_init
{
964 uint_t fi_return_value
;
965 crypto_session_id_t fi_session
;
967 caddr_t fi_attributes
;
968 } crypto_object_find_init_t
;
970 typedef struct crypto_object_find_update
{
971 uint_t fu_return_value
;
972 crypto_session_id_t fu_session
;
976 } crypto_object_find_update_t
;
978 typedef struct crypto_object_find_final
{
979 uint_t ff_return_value
;
980 crypto_session_id_t ff_session
;
981 } crypto_object_find_final_t
;
986 typedef struct crypto_object_create32
{
987 uint32_t oc_return_value
;
988 crypto_session_id_t oc_session
;
989 crypto_object_id_t oc_handle
;
991 caddr32_t oc_attributes
;
992 } crypto_object_create32_t
;
994 typedef struct crypto_object_copy32
{
995 uint32_t oc_return_value
;
996 crypto_session_id_t oc_session
;
997 crypto_object_id_t oc_handle
;
998 crypto_object_id_t oc_new_handle
;
1000 caddr32_t oc_new_attributes
;
1001 } crypto_object_copy32_t
;
1003 typedef struct crypto_object_destroy32
{
1004 uint32_t od_return_value
;
1005 crypto_session_id_t od_session
;
1006 crypto_object_id_t od_handle
;
1007 } crypto_object_destroy32_t
;
1009 typedef struct crypto_object_get_attribute_value32
{
1010 uint32_t og_return_value
;
1011 crypto_session_id_t og_session
;
1012 crypto_object_id_t og_handle
;
1014 caddr32_t og_attributes
;
1015 } crypto_object_get_attribute_value32_t
;
1017 typedef struct crypto_object_get_size32
{
1018 uint32_t gs_return_value
;
1019 crypto_session_id_t gs_session
;
1020 crypto_object_id_t gs_handle
;
1022 } crypto_object_get_size32_t
;
1024 typedef struct crypto_object_set_attribute_value32
{
1025 uint32_t sa_return_value
;
1026 crypto_session_id_t sa_session
;
1027 crypto_object_id_t sa_handle
;
1029 caddr32_t sa_attributes
;
1030 } crypto_object_set_attribute_value32_t
;
1032 typedef struct crypto_object_find_init32
{
1033 uint32_t fi_return_value
;
1034 crypto_session_id_t fi_session
;
1036 caddr32_t fi_attributes
;
1037 } crypto_object_find_init32_t
;
1039 typedef struct crypto_object_find_update32
{
1040 uint32_t fu_return_value
;
1041 crypto_session_id_t fu_session
;
1042 uint32_t fu_max_count
;
1044 caddr32_t fu_handles
;
1045 } crypto_object_find_update32_t
;
1047 typedef struct crypto_object_find_final32
{
1048 uint32_t ff_return_value
;
1049 crypto_session_id_t ff_session
;
1050 } crypto_object_find_final32_t
;
1052 #endif /* _SYSCALL32 */
1053 #endif /* _KERNEL */
1055 #define CRYPTO_OBJECT_CREATE CRYPTO(100)
1056 #define CRYPTO_OBJECT_COPY CRYPTO(101)
1057 #define CRYPTO_OBJECT_DESTROY CRYPTO(102)
1058 #define CRYPTO_OBJECT_GET_ATTRIBUTE_VALUE CRYPTO(103)
1059 #define CRYPTO_OBJECT_GET_SIZE CRYPTO(104)
1060 #define CRYPTO_OBJECT_SET_ATTRIBUTE_VALUE CRYPTO(105)
1061 #define CRYPTO_OBJECT_FIND_INIT CRYPTO(106)
1062 #define CRYPTO_OBJECT_FIND_UPDATE CRYPTO(107)
1063 #define CRYPTO_OBJECT_FIND_FINAL CRYPTO(108)
1066 * Key Generation Ioctls
1068 typedef struct crypto_object_generate_key
{
1069 uint_t gk_return_value
;
1070 crypto_session_id_t gk_session
;
1071 crypto_object_id_t gk_handle
;
1072 crypto_mechanism_t gk_mechanism
;
1074 caddr_t gk_attributes
;
1075 } crypto_object_generate_key_t
;
1077 typedef struct crypto_object_generate_key_pair
{
1078 uint_t kp_return_value
;
1079 crypto_session_id_t kp_session
;
1080 crypto_object_id_t kp_public_handle
;
1081 crypto_object_id_t kp_private_handle
;
1082 uint_t kp_public_count
;
1083 uint_t kp_private_count
;
1084 caddr_t kp_public_attributes
;
1085 caddr_t kp_private_attributes
;
1086 crypto_mechanism_t kp_mechanism
;
1087 } crypto_object_generate_key_pair_t
;
1089 typedef struct crypto_object_wrap_key
{
1090 uint_t wk_return_value
;
1091 crypto_session_id_t wk_session
;
1092 crypto_mechanism_t wk_mechanism
;
1093 crypto_key_t wk_wrapping_key
;
1094 crypto_object_id_t wk_object_handle
;
1095 size_t wk_wrapped_key_len
;
1096 caddr_t wk_wrapped_key
;
1097 } crypto_object_wrap_key_t
;
1099 typedef struct crypto_object_unwrap_key
{
1100 uint_t uk_return_value
;
1101 crypto_session_id_t uk_session
;
1102 crypto_mechanism_t uk_mechanism
;
1103 crypto_key_t uk_unwrapping_key
;
1104 crypto_object_id_t uk_object_handle
;
1105 size_t uk_wrapped_key_len
;
1106 caddr_t uk_wrapped_key
;
1108 caddr_t uk_attributes
;
1109 } crypto_object_unwrap_key_t
;
1111 typedef struct crypto_derive_key
{
1112 uint_t dk_return_value
;
1113 crypto_session_id_t dk_session
;
1114 crypto_mechanism_t dk_mechanism
;
1115 crypto_key_t dk_base_key
;
1116 crypto_object_id_t dk_object_handle
;
1118 caddr_t dk_attributes
;
1119 } crypto_derive_key_t
;
1124 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1128 typedef struct crypto_object_generate_key32
{
1129 uint32_t gk_return_value
;
1130 crypto_session_id_t gk_session
;
1131 crypto_object_id_t gk_handle
;
1132 crypto_mechanism32_t gk_mechanism
;
1134 caddr32_t gk_attributes
;
1135 } crypto_object_generate_key32_t
;
1137 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1141 typedef struct crypto_object_generate_key_pair32
{
1142 uint32_t kp_return_value
;
1143 crypto_session_id_t kp_session
;
1144 crypto_object_id_t kp_public_handle
;
1145 crypto_object_id_t kp_private_handle
;
1146 uint32_t kp_public_count
;
1147 uint32_t kp_private_count
;
1148 caddr32_t kp_public_attributes
;
1149 caddr32_t kp_private_attributes
;
1150 crypto_mechanism32_t kp_mechanism
;
1151 } crypto_object_generate_key_pair32_t
;
1153 typedef struct crypto_object_wrap_key32
{
1154 uint32_t wk_return_value
;
1155 crypto_session_id_t wk_session
;
1156 crypto_mechanism32_t wk_mechanism
;
1157 crypto_key32_t wk_wrapping_key
;
1158 crypto_object_id_t wk_object_handle
;
1159 size32_t wk_wrapped_key_len
;
1160 caddr32_t wk_wrapped_key
;
1161 } crypto_object_wrap_key32_t
;
1163 typedef struct crypto_object_unwrap_key32
{
1164 uint32_t uk_return_value
;
1165 crypto_session_id_t uk_session
;
1166 crypto_mechanism32_t uk_mechanism
;
1167 crypto_key32_t uk_unwrapping_key
;
1168 crypto_object_id_t uk_object_handle
;
1169 size32_t uk_wrapped_key_len
;
1170 caddr32_t uk_wrapped_key
;
1172 caddr32_t uk_attributes
;
1173 } crypto_object_unwrap_key32_t
;
1175 typedef struct crypto_derive_key32
{
1176 uint32_t dk_return_value
;
1177 crypto_session_id_t dk_session
;
1178 crypto_mechanism32_t dk_mechanism
;
1179 crypto_key32_t dk_base_key
;
1180 crypto_object_id_t dk_object_handle
;
1182 caddr32_t dk_attributes
;
1183 } crypto_derive_key32_t
;
1185 #endif /* _SYSCALL32 */
1186 #endif /* _KERNEL */
1188 #define CRYPTO_GENERATE_KEY CRYPTO(110)
1189 #define CRYPTO_GENERATE_KEY_PAIR CRYPTO(111)
1190 #define CRYPTO_WRAP_KEY CRYPTO(112)
1191 #define CRYPTO_UNWRAP_KEY CRYPTO(113)
1192 #define CRYPTO_DERIVE_KEY CRYPTO(114)
1195 * Provider Management Ioctls
1198 typedef struct crypto_get_provider_list
{
1199 uint_t pl_return_value
;
1201 crypto_provider_entry_t pl_list
[1];
1202 } crypto_get_provider_list_t
;
1204 typedef struct crypto_provider_data
{
1205 uchar_t pd_prov_desc
[CRYPTO_PROVIDER_DESCR_MAX_LEN
];
1206 uchar_t pd_label
[CRYPTO_EXT_SIZE_LABEL
];
1207 uchar_t pd_manufacturerID
[CRYPTO_EXT_SIZE_MANUF
];
1208 uchar_t pd_model
[CRYPTO_EXT_SIZE_MODEL
];
1209 uchar_t pd_serial_number
[CRYPTO_EXT_SIZE_SERIAL
];
1211 ulong_t pd_max_session_count
;
1212 ulong_t pd_session_count
;
1213 ulong_t pd_max_rw_session_count
;
1214 ulong_t pd_rw_session_count
;
1215 ulong_t pd_max_pin_len
;
1216 ulong_t pd_min_pin_len
;
1217 ulong_t pd_total_public_memory
;
1218 ulong_t pd_free_public_memory
;
1219 ulong_t pd_total_private_memory
;
1220 ulong_t pd_free_private_memory
;
1221 crypto_version_t pd_hardware_version
;
1222 crypto_version_t pd_firmware_version
;
1223 uchar_t pd_time
[CRYPTO_EXT_SIZE_TIME
];
1224 } crypto_provider_data_t
;
1226 typedef struct crypto_get_provider_info
{
1227 uint_t gi_return_value
;
1228 crypto_provider_id_t gi_provider_id
;
1229 crypto_provider_data_t gi_provider_data
;
1230 } crypto_get_provider_info_t
;
1232 typedef struct crypto_get_provider_mechanisms
{
1233 uint_t pm_return_value
;
1234 crypto_provider_id_t pm_provider_id
;
1236 crypto_mech_name_t pm_list
[1];
1237 } crypto_get_provider_mechanisms_t
;
1239 typedef struct crypto_get_provider_mechanism_info
{
1240 uint_t mi_return_value
;
1241 crypto_provider_id_t mi_provider_id
;
1242 crypto_mech_name_t mi_mechanism_name
;
1243 uint32_t mi_min_key_size
;
1244 uint32_t mi_max_key_size
;
1246 } crypto_get_provider_mechanism_info_t
;
1248 typedef struct crypto_init_token
{
1249 uint_t it_return_value
;
1250 crypto_provider_id_t it_provider_id
;
1254 } crypto_init_token_t
;
1256 typedef struct crypto_init_pin
{
1257 uint_t ip_return_value
;
1258 crypto_session_id_t ip_session
;
1261 } crypto_init_pin_t
;
1263 typedef struct crypto_set_pin
{
1264 uint_t sp_return_value
;
1265 crypto_session_id_t sp_session
;
1275 typedef struct crypto_get_provider_list32
{
1276 uint32_t pl_return_value
;
1278 crypto_provider_entry_t pl_list
[1];
1279 } crypto_get_provider_list32_t
;
1281 typedef struct crypto_version32
{
1284 } crypto_version32_t
;
1286 typedef struct crypto_provider_data32
{
1287 uchar_t pd_prov_desc
[CRYPTO_PROVIDER_DESCR_MAX_LEN
];
1288 uchar_t pd_label
[CRYPTO_EXT_SIZE_LABEL
];
1289 uchar_t pd_manufacturerID
[CRYPTO_EXT_SIZE_MANUF
];
1290 uchar_t pd_model
[CRYPTO_EXT_SIZE_MODEL
];
1291 uchar_t pd_serial_number
[CRYPTO_EXT_SIZE_SERIAL
];
1293 uint32_t pd_max_session_count
;
1294 uint32_t pd_session_count
;
1295 uint32_t pd_max_rw_session_count
;
1296 uint32_t pd_rw_session_count
;
1297 uint32_t pd_max_pin_len
;
1298 uint32_t pd_min_pin_len
;
1299 uint32_t pd_total_public_memory
;
1300 uint32_t pd_free_public_memory
;
1301 uint32_t pd_total_private_memory
;
1302 uint32_t pd_free_private_memory
;
1303 crypto_version32_t pd_hardware_version
;
1304 crypto_version32_t pd_firmware_version
;
1305 uchar_t pd_time
[CRYPTO_EXT_SIZE_TIME
];
1306 } crypto_provider_data32_t
;
1308 typedef struct crypto_get_provider_info32
{
1309 uint32_t gi_return_value
;
1310 crypto_provider_id_t gi_provider_id
;
1311 crypto_provider_data32_t gi_provider_data
;
1312 } crypto_get_provider_info32_t
;
1314 typedef struct crypto_get_provider_mechanisms32
{
1315 uint32_t pm_return_value
;
1316 crypto_provider_id_t pm_provider_id
;
1318 crypto_mech_name_t pm_list
[1];
1319 } crypto_get_provider_mechanisms32_t
;
1321 typedef struct crypto_init_token32
{
1322 uint32_t it_return_value
;
1323 crypto_provider_id_t it_provider_id
;
1325 size32_t it_pin_len
;
1327 } crypto_init_token32_t
;
1329 typedef struct crypto_init_pin32
{
1330 uint32_t ip_return_value
;
1331 crypto_session_id_t ip_session
;
1333 size32_t ip_pin_len
;
1334 } crypto_init_pin32_t
;
1336 typedef struct crypto_set_pin32
{
1337 uint32_t sp_return_value
;
1338 crypto_session_id_t sp_session
;
1339 caddr32_t sp_old_pin
;
1340 size32_t sp_old_len
;
1341 caddr32_t sp_new_pin
;
1342 size32_t sp_new_len
;
1343 } crypto_set_pin32_t
;
1345 #endif /* _SYSCALL32 */
1346 #endif /* _KERNEL */
1348 #define CRYPTO_GET_PROVIDER_LIST CRYPTO(120)
1349 #define CRYPTO_GET_PROVIDER_INFO CRYPTO(121)
1350 #define CRYPTO_GET_PROVIDER_MECHANISMS CRYPTO(122)
1351 #define CRYPTO_GET_PROVIDER_MECHANISM_INFO CRYPTO(123)
1352 #define CRYPTO_INIT_TOKEN CRYPTO(124)
1353 #define CRYPTO_INIT_PIN CRYPTO(125)
1354 #define CRYPTO_SET_PIN CRYPTO(126)
1357 * No (Key) Store Key Generation Ioctls
1359 typedef struct crypto_nostore_generate_key
{
1360 uint_t ngk_return_value
;
1361 crypto_session_id_t ngk_session
;
1362 crypto_mechanism_t ngk_mechanism
;
1363 uint_t ngk_in_count
;
1364 uint_t ngk_out_count
;
1365 caddr_t ngk_in_attributes
;
1366 caddr_t ngk_out_attributes
;
1367 } crypto_nostore_generate_key_t
;
1369 typedef struct crypto_nostore_generate_key_pair
{
1370 uint_t nkp_return_value
;
1371 crypto_session_id_t nkp_session
;
1372 uint_t nkp_in_public_count
;
1373 uint_t nkp_in_private_count
;
1374 uint_t nkp_out_public_count
;
1375 uint_t nkp_out_private_count
;
1376 caddr_t nkp_in_public_attributes
;
1377 caddr_t nkp_in_private_attributes
;
1378 caddr_t nkp_out_public_attributes
;
1379 caddr_t nkp_out_private_attributes
;
1380 crypto_mechanism_t nkp_mechanism
;
1381 } crypto_nostore_generate_key_pair_t
;
1383 typedef struct crypto_nostore_derive_key
{
1384 uint_t ndk_return_value
;
1385 crypto_session_id_t ndk_session
;
1386 crypto_mechanism_t ndk_mechanism
;
1387 crypto_key_t ndk_base_key
;
1388 uint_t ndk_in_count
;
1389 uint_t ndk_out_count
;
1390 caddr_t ndk_in_attributes
;
1391 caddr_t ndk_out_attributes
;
1392 } crypto_nostore_derive_key_t
;
1397 typedef struct crypto_nostore_generate_key32
{
1398 uint32_t ngk_return_value
;
1399 crypto_session_id_t ngk_session
;
1400 crypto_mechanism32_t ngk_mechanism
;
1401 uint32_t ngk_in_count
;
1402 uint32_t ngk_out_count
;
1403 caddr32_t ngk_in_attributes
;
1404 caddr32_t ngk_out_attributes
;
1405 } crypto_nostore_generate_key32_t
;
1407 typedef struct crypto_nostore_generate_key_pair32
{
1408 uint32_t nkp_return_value
;
1409 crypto_session_id_t nkp_session
;
1410 uint32_t nkp_in_public_count
;
1411 uint32_t nkp_in_private_count
;
1412 uint32_t nkp_out_public_count
;
1413 uint32_t nkp_out_private_count
;
1414 caddr32_t nkp_in_public_attributes
;
1415 caddr32_t nkp_in_private_attributes
;
1416 caddr32_t nkp_out_public_attributes
;
1417 caddr32_t nkp_out_private_attributes
;
1418 crypto_mechanism32_t nkp_mechanism
;
1419 } crypto_nostore_generate_key_pair32_t
;
1421 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1425 typedef struct crypto_nostore_derive_key32
{
1426 uint32_t ndk_return_value
;
1427 crypto_session_id_t ndk_session
;
1428 crypto_mechanism32_t ndk_mechanism
;
1429 crypto_key32_t ndk_base_key
;
1430 uint32_t ndk_in_count
;
1431 uint32_t ndk_out_count
;
1432 caddr32_t ndk_in_attributes
;
1433 caddr32_t ndk_out_attributes
;
1434 } crypto_nostore_derive_key32_t
;
1436 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1440 #endif /* _SYSCALL32 */
1441 #endif /* _KERNEL */
1443 #define CRYPTO_NOSTORE_GENERATE_KEY CRYPTO(127)
1444 #define CRYPTO_NOSTORE_GENERATE_KEY_PAIR CRYPTO(128)
1445 #define CRYPTO_NOSTORE_DERIVE_KEY CRYPTO(129)
1451 typedef struct crypto_get_mechanism_list
{
1452 uint_t ml_return_value
;
1454 crypto_mech_name_t ml_list
[1];
1455 } crypto_get_mechanism_list_t
;
1457 typedef struct crypto_get_all_mechanism_info
{
1458 uint_t mi_return_value
;
1459 crypto_mech_name_t mi_mechanism_name
;
1461 crypto_mechanism_info_t mi_list
[1];
1462 } crypto_get_all_mechanism_info_t
;
1467 typedef struct crypto_get_mechanism_list32
{
1468 uint32_t ml_return_value
;
1470 crypto_mech_name_t ml_list
[1];
1471 } crypto_get_mechanism_list32_t
;
1473 typedef struct crypto_get_all_mechanism_info32
{
1474 uint32_t mi_return_value
;
1475 crypto_mech_name_t mi_mechanism_name
;
1477 crypto_mechanism_info32_t mi_list
[1];
1478 } crypto_get_all_mechanism_info32_t
;
1480 #endif /* _SYSCALL32 */
1481 #endif /* _KERNEL */
1483 #define CRYPTO_GET_MECHANISM_LIST CRYPTO(140)
1484 #define CRYPTO_GET_ALL_MECHANISM_INFO CRYPTO(141)
1486 #define CRYPTO_GET_PROVIDER_BY_MECH CRYPTO(142)
1488 typedef struct crypto_by_mech
{
1491 crypto_mech_type_t mech_type
;
1493 crypto_func_group_t mech_fg
;
1494 crypto_session_id_t session_id
;
1501 #endif /* _SYS_CRYPTO_IOCTL_H */