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 2008 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/zfs_context.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 0x00000111
49 #define CKM_DES3_ECB 0x00000132
50 #define CKM_DES3_CBC 0x00000133
51 #define CKM_MD5 0x00000210
52 #define CKM_SHA_1 0x00000220
53 #define CKM_AES_ECB 0x00001081
54 #define CKM_AES_CBC 0x00001082
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_limited
;
135 uint32_t prov_hash_threshold
;
136 uint32_t prov_hash_limit
;
138 int total_threshold_count
;
139 fl_mechs_threshold_t fl_threshold
[MAX_NUM_THRESHOLD
];
140 } crypto_function_list_t
;
142 typedef struct crypto_get_function_list
{
143 uint_t fl_return_value
;
144 crypto_provider_id_t fl_provider_id
;
145 crypto_function_list_t fl_list
;
146 } crypto_get_function_list_t
;
148 typedef struct crypto_get_mechanism_number
{
149 uint_t pn_return_value
;
150 caddr_t pn_mechanism_string
;
151 size_t pn_mechanism_len
;
152 crypto_mech_type_t pn_internal_number
;
153 } crypto_get_mechanism_number_t
;
158 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
162 typedef struct crypto_get_mechanism_number32
{
163 uint32_t pn_return_value
;
164 caddr32_t pn_mechanism_string
;
165 size32_t pn_mechanism_len
;
166 crypto_mech_type_t pn_internal_number
;
167 } crypto_get_mechanism_number32_t
;
169 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
173 #endif /* _SYSCALL32 */
176 #define CRYPTO_GET_FUNCTION_LIST CRYPTO(20)
177 #define CRYPTO_GET_MECHANISM_NUMBER CRYPTO(21)
183 typedef uint32_t crypto_flags_t
;
185 typedef struct crypto_open_session
{
186 uint_t os_return_value
;
187 crypto_session_id_t os_session
;
188 crypto_flags_t os_flags
;
189 crypto_provider_id_t os_provider_id
;
190 } crypto_open_session_t
;
192 typedef struct crypto_close_session
{
193 uint_t cs_return_value
;
194 crypto_session_id_t cs_session
;
195 } crypto_close_session_t
;
197 typedef struct crypto_close_all_sessions
{
198 uint_t as_return_value
;
199 crypto_provider_id_t as_provider_id
;
200 } crypto_close_all_sessions_t
;
202 #define CRYPTO_OPEN_SESSION CRYPTO(30)
203 #define CRYPTO_CLOSE_SESSION CRYPTO(31)
204 #define CRYPTO_CLOSE_ALL_SESSIONS CRYPTO(32)
209 typedef struct crypto_login
{
210 uint_t co_return_value
;
211 crypto_session_id_t co_session
;
217 typedef struct crypto_logout
{
218 uint_t cl_return_value
;
219 crypto_session_id_t cl_session
;
225 typedef struct crypto_login32
{
226 uint32_t co_return_value
;
227 crypto_session_id_t co_session
;
228 uint32_t co_user_type
;
233 typedef struct crypto_logout32
{
234 uint32_t cl_return_value
;
235 crypto_session_id_t cl_session
;
238 #endif /* _SYSCALL32 */
241 #define CRYPTO_LOGIN CRYPTO(40)
242 #define CRYPTO_LOGOUT CRYPTO(41)
244 /* flag for encrypt and decrypt operations */
245 #define CRYPTO_INPLACE_OPERATION 0x00000001
248 * Cryptographic Ioctls
250 typedef struct crypto_encrypt
{
251 uint_t ce_return_value
;
252 crypto_session_id_t ce_session
;
260 typedef struct crypto_encrypt_init
{
261 uint_t ei_return_value
;
262 crypto_session_id_t ei_session
;
263 crypto_mechanism_t ei_mech
;
265 } crypto_encrypt_init_t
;
267 typedef struct crypto_encrypt_update
{
268 uint_t eu_return_value
;
269 crypto_session_id_t eu_session
;
274 } crypto_encrypt_update_t
;
276 typedef struct crypto_encrypt_final
{
277 uint_t ef_return_value
;
278 crypto_session_id_t ef_session
;
281 } crypto_encrypt_final_t
;
283 typedef struct crypto_decrypt
{
284 uint_t cd_return_value
;
285 crypto_session_id_t cd_session
;
293 typedef struct crypto_decrypt_init
{
294 uint_t di_return_value
;
295 crypto_session_id_t di_session
;
296 crypto_mechanism_t di_mech
;
298 } crypto_decrypt_init_t
;
300 typedef struct crypto_decrypt_update
{
301 uint_t du_return_value
;
302 crypto_session_id_t du_session
;
307 } crypto_decrypt_update_t
;
309 typedef struct crypto_decrypt_final
{
310 uint_t df_return_value
;
311 crypto_session_id_t df_session
;
314 } crypto_decrypt_final_t
;
316 typedef struct crypto_digest
{
317 uint_t cd_return_value
;
318 crypto_session_id_t cd_session
;
322 caddr_t cd_digestbuf
;
325 typedef struct crypto_digest_init
{
326 uint_t di_return_value
;
327 crypto_session_id_t di_session
;
328 crypto_mechanism_t di_mech
;
329 } crypto_digest_init_t
;
331 typedef struct crypto_digest_update
{
332 uint_t du_return_value
;
333 crypto_session_id_t du_session
;
336 } crypto_digest_update_t
;
338 typedef struct crypto_digest_key
{
339 uint_t dk_return_value
;
340 crypto_session_id_t dk_session
;
342 } crypto_digest_key_t
;
344 typedef struct crypto_digest_final
{
345 uint_t df_return_value
;
346 crypto_session_id_t df_session
;
348 caddr_t df_digestbuf
;
349 } crypto_digest_final_t
;
351 typedef struct crypto_mac
{
352 uint_t cm_return_value
;
353 crypto_session_id_t cm_session
;
360 typedef struct crypto_mac_init
{
361 uint_t mi_return_value
;
362 crypto_session_id_t mi_session
;
363 crypto_mechanism_t mi_mech
;
367 typedef struct crypto_mac_update
{
368 uint_t mu_return_value
;
369 crypto_session_id_t mu_session
;
372 } crypto_mac_update_t
;
374 typedef struct crypto_mac_final
{
375 uint_t mf_return_value
;
376 crypto_session_id_t mf_session
;
379 } crypto_mac_final_t
;
381 typedef struct crypto_sign
{
382 uint_t cs_return_value
;
383 crypto_session_id_t cs_session
;
390 typedef struct crypto_sign_init
{
391 uint_t si_return_value
;
392 crypto_session_id_t si_session
;
393 crypto_mechanism_t si_mech
;
395 } crypto_sign_init_t
;
397 typedef struct crypto_sign_update
{
398 uint_t su_return_value
;
399 crypto_session_id_t su_session
;
402 } crypto_sign_update_t
;
404 typedef struct crypto_sign_final
{
405 uint_t sf_return_value
;
406 crypto_session_id_t sf_session
;
409 } crypto_sign_final_t
;
411 typedef struct crypto_sign_recover_init
{
412 uint_t ri_return_value
;
413 crypto_session_id_t ri_session
;
414 crypto_mechanism_t ri_mech
;
416 } crypto_sign_recover_init_t
;
418 typedef struct crypto_sign_recover
{
419 uint_t sr_return_value
;
420 crypto_session_id_t sr_session
;
425 } crypto_sign_recover_t
;
427 typedef struct crypto_verify
{
428 uint_t cv_return_value
;
429 crypto_session_id_t cv_session
;
436 typedef struct crypto_verify_init
{
437 uint_t vi_return_value
;
438 crypto_session_id_t vi_session
;
439 crypto_mechanism_t vi_mech
;
441 } crypto_verify_init_t
;
443 typedef struct crypto_verify_update
{
444 uint_t vu_return_value
;
445 crypto_session_id_t vu_session
;
448 } crypto_verify_update_t
;
450 typedef struct crypto_verify_final
{
451 uint_t vf_return_value
;
452 crypto_session_id_t vf_session
;
455 } crypto_verify_final_t
;
457 typedef struct crypto_verify_recover_init
{
458 uint_t ri_return_value
;
459 crypto_session_id_t ri_session
;
460 crypto_mechanism_t ri_mech
;
462 } crypto_verify_recover_init_t
;
464 typedef struct crypto_verify_recover
{
465 uint_t vr_return_value
;
466 crypto_session_id_t vr_session
;
471 } crypto_verify_recover_t
;
473 typedef struct crypto_digest_encrypt_update
{
474 uint_t eu_return_value
;
475 crypto_session_id_t eu_session
;
480 } crypto_digest_encrypt_update_t
;
482 typedef struct crypto_decrypt_digest_update
{
483 uint_t du_return_value
;
484 crypto_session_id_t du_session
;
489 } crypto_decrypt_digest_update_t
;
491 typedef struct crypto_sign_encrypt_update
{
492 uint_t eu_return_value
;
493 crypto_session_id_t eu_session
;
498 } crypto_sign_encrypt_update_t
;
500 typedef struct crypto_decrypt_verify_update
{
501 uint_t vu_return_value
;
502 crypto_session_id_t vu_session
;
507 } crypto_decrypt_verify_update_t
;
512 typedef struct crypto_encrypt32
{
513 uint32_t ce_return_value
;
514 crypto_session_id_t ce_session
;
516 caddr32_t ce_databuf
;
518 caddr32_t ce_encrbuf
;
520 } crypto_encrypt32_t
;
522 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
526 typedef struct crypto_encrypt_init32
{
527 uint32_t ei_return_value
;
528 crypto_session_id_t ei_session
;
529 crypto_mechanism32_t ei_mech
;
530 crypto_key32_t ei_key
;
531 } crypto_encrypt_init32_t
;
533 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
537 typedef struct crypto_encrypt_update32
{
538 uint32_t eu_return_value
;
539 crypto_session_id_t eu_session
;
541 caddr32_t eu_databuf
;
543 caddr32_t eu_encrbuf
;
544 } crypto_encrypt_update32_t
;
546 typedef struct crypto_encrypt_final32
{
547 uint32_t ef_return_value
;
548 crypto_session_id_t ef_session
;
550 caddr32_t ef_encrbuf
;
551 } crypto_encrypt_final32_t
;
553 typedef struct crypto_decrypt32
{
554 uint32_t cd_return_value
;
555 crypto_session_id_t cd_session
;
557 caddr32_t cd_encrbuf
;
559 caddr32_t cd_databuf
;
561 } crypto_decrypt32_t
;
563 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
567 typedef struct crypto_decrypt_init32
{
568 uint32_t di_return_value
;
569 crypto_session_id_t di_session
;
570 crypto_mechanism32_t di_mech
;
571 crypto_key32_t di_key
;
572 } crypto_decrypt_init32_t
;
574 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
578 typedef struct crypto_decrypt_update32
{
579 uint32_t du_return_value
;
580 crypto_session_id_t du_session
;
582 caddr32_t du_encrbuf
;
584 caddr32_t du_databuf
;
585 } crypto_decrypt_update32_t
;
587 typedef struct crypto_decrypt_final32
{
588 uint32_t df_return_value
;
589 crypto_session_id_t df_session
;
591 caddr32_t df_databuf
;
592 } crypto_decrypt_final32_t
;
594 typedef struct crypto_digest32
{
595 uint32_t cd_return_value
;
596 crypto_session_id_t cd_session
;
598 caddr32_t cd_databuf
;
599 size32_t cd_digestlen
;
600 caddr32_t cd_digestbuf
;
603 typedef struct crypto_digest_init32
{
604 uint32_t di_return_value
;
605 crypto_session_id_t di_session
;
606 crypto_mechanism32_t di_mech
;
607 } crypto_digest_init32_t
;
609 typedef struct crypto_digest_update32
{
610 uint32_t du_return_value
;
611 crypto_session_id_t du_session
;
613 caddr32_t du_databuf
;
614 } crypto_digest_update32_t
;
616 typedef struct crypto_digest_key32
{
617 uint32_t dk_return_value
;
618 crypto_session_id_t dk_session
;
619 crypto_key32_t dk_key
;
620 } crypto_digest_key32_t
;
622 typedef struct crypto_digest_final32
{
623 uint32_t df_return_value
;
624 crypto_session_id_t df_session
;
625 size32_t df_digestlen
;
626 caddr32_t df_digestbuf
;
627 } crypto_digest_final32_t
;
629 typedef struct crypto_mac32
{
630 uint32_t cm_return_value
;
631 crypto_session_id_t cm_session
;
633 caddr32_t cm_databuf
;
638 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
642 typedef struct crypto_mac_init32
{
643 uint32_t mi_return_value
;
644 crypto_session_id_t mi_session
;
645 crypto_mechanism32_t mi_mech
;
646 crypto_key32_t mi_key
;
647 } crypto_mac_init32_t
;
649 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
653 typedef struct crypto_mac_update32
{
654 uint32_t mu_return_value
;
655 crypto_session_id_t mu_session
;
657 caddr32_t mu_databuf
;
658 } crypto_mac_update32_t
;
660 typedef struct crypto_mac_final32
{
661 uint32_t mf_return_value
;
662 crypto_session_id_t mf_session
;
665 } crypto_mac_final32_t
;
667 typedef struct crypto_sign32
{
668 uint32_t cs_return_value
;
669 crypto_session_id_t cs_session
;
671 caddr32_t cs_databuf
;
673 caddr32_t cs_signbuf
;
676 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
680 typedef struct crypto_sign_init32
{
681 uint32_t si_return_value
;
682 crypto_session_id_t si_session
;
683 crypto_mechanism32_t si_mech
;
684 crypto_key32_t si_key
;
685 } crypto_sign_init32_t
;
687 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
691 typedef struct crypto_sign_update32
{
692 uint32_t su_return_value
;
693 crypto_session_id_t su_session
;
695 caddr32_t su_databuf
;
696 } crypto_sign_update32_t
;
698 typedef struct crypto_sign_final32
{
699 uint32_t sf_return_value
;
700 crypto_session_id_t sf_session
;
702 caddr32_t sf_signbuf
;
703 } crypto_sign_final32_t
;
705 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
709 typedef struct crypto_sign_recover_init32
{
710 uint32_t ri_return_value
;
711 crypto_session_id_t ri_session
;
712 crypto_mechanism32_t ri_mech
;
713 crypto_key32_t ri_key
;
714 } crypto_sign_recover_init32_t
;
716 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
720 typedef struct crypto_sign_recover32
{
721 uint32_t sr_return_value
;
722 crypto_session_id_t sr_session
;
724 caddr32_t sr_databuf
;
726 caddr32_t sr_signbuf
;
727 } crypto_sign_recover32_t
;
729 typedef struct crypto_verify32
{
730 uint32_t cv_return_value
;
731 crypto_session_id_t cv_session
;
733 caddr32_t cv_databuf
;
735 caddr32_t cv_signbuf
;
738 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
742 typedef struct crypto_verify_init32
{
743 uint32_t vi_return_value
;
744 crypto_session_id_t vi_session
;
745 crypto_mechanism32_t vi_mech
;
746 crypto_key32_t vi_key
;
747 } crypto_verify_init32_t
;
749 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
753 typedef struct crypto_verify_update32
{
754 uint32_t vu_return_value
;
755 crypto_session_id_t vu_session
;
757 caddr32_t vu_databuf
;
758 } crypto_verify_update32_t
;
760 typedef struct crypto_verify_final32
{
761 uint32_t vf_return_value
;
762 crypto_session_id_t vf_session
;
764 caddr32_t vf_signbuf
;
765 } crypto_verify_final32_t
;
767 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
771 typedef struct crypto_verify_recover_init32
{
772 uint32_t ri_return_value
;
773 crypto_session_id_t ri_session
;
774 crypto_mechanism32_t ri_mech
;
775 crypto_key32_t ri_key
;
776 } crypto_verify_recover_init32_t
;
778 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
782 typedef struct crypto_verify_recover32
{
783 uint32_t vr_return_value
;
784 crypto_session_id_t vr_session
;
786 caddr32_t vr_signbuf
;
788 caddr32_t vr_databuf
;
789 } crypto_verify_recover32_t
;
791 typedef struct crypto_digest_encrypt_update32
{
792 uint32_t eu_return_value
;
793 crypto_session_id_t eu_session
;
795 caddr32_t eu_databuf
;
797 caddr32_t eu_encrbuf
;
798 } crypto_digest_encrypt_update32_t
;
800 typedef struct crypto_decrypt_digest_update32
{
801 uint32_t du_return_value
;
802 crypto_session_id_t du_session
;
804 caddr32_t du_encrbuf
;
806 caddr32_t du_databuf
;
807 } crypto_decrypt_digest_update32_t
;
809 typedef struct crypto_sign_encrypt_update32
{
810 uint32_t eu_return_value
;
811 crypto_session_id_t eu_session
;
813 caddr32_t eu_databuf
;
815 caddr32_t eu_encrbuf
;
816 } crypto_sign_encrypt_update32_t
;
818 typedef struct crypto_decrypt_verify_update32
{
819 uint32_t vu_return_value
;
820 crypto_session_id_t vu_session
;
822 caddr32_t vu_encrbuf
;
824 caddr32_t vu_databuf
;
825 } crypto_decrypt_verify_update32_t
;
827 #endif /* _SYSCALL32 */
830 #define CRYPTO_ENCRYPT CRYPTO(50)
831 #define CRYPTO_ENCRYPT_INIT CRYPTO(51)
832 #define CRYPTO_ENCRYPT_UPDATE CRYPTO(52)
833 #define CRYPTO_ENCRYPT_FINAL CRYPTO(53)
834 #define CRYPTO_DECRYPT CRYPTO(54)
835 #define CRYPTO_DECRYPT_INIT CRYPTO(55)
836 #define CRYPTO_DECRYPT_UPDATE CRYPTO(56)
837 #define CRYPTO_DECRYPT_FINAL CRYPTO(57)
839 #define CRYPTO_DIGEST CRYPTO(58)
840 #define CRYPTO_DIGEST_INIT CRYPTO(59)
841 #define CRYPTO_DIGEST_UPDATE CRYPTO(60)
842 #define CRYPTO_DIGEST_KEY CRYPTO(61)
843 #define CRYPTO_DIGEST_FINAL CRYPTO(62)
844 #define CRYPTO_MAC CRYPTO(63)
845 #define CRYPTO_MAC_INIT CRYPTO(64)
846 #define CRYPTO_MAC_UPDATE CRYPTO(65)
847 #define CRYPTO_MAC_FINAL CRYPTO(66)
849 #define CRYPTO_SIGN CRYPTO(67)
850 #define CRYPTO_SIGN_INIT CRYPTO(68)
851 #define CRYPTO_SIGN_UPDATE CRYPTO(69)
852 #define CRYPTO_SIGN_FINAL CRYPTO(70)
853 #define CRYPTO_SIGN_RECOVER_INIT CRYPTO(71)
854 #define CRYPTO_SIGN_RECOVER CRYPTO(72)
855 #define CRYPTO_VERIFY CRYPTO(73)
856 #define CRYPTO_VERIFY_INIT CRYPTO(74)
857 #define CRYPTO_VERIFY_UPDATE CRYPTO(75)
858 #define CRYPTO_VERIFY_FINAL CRYPTO(76)
859 #define CRYPTO_VERIFY_RECOVER_INIT CRYPTO(77)
860 #define CRYPTO_VERIFY_RECOVER CRYPTO(78)
862 #define CRYPTO_DIGEST_ENCRYPT_UPDATE CRYPTO(79)
863 #define CRYPTO_DECRYPT_DIGEST_UPDATE CRYPTO(80)
864 #define CRYPTO_SIGN_ENCRYPT_UPDATE CRYPTO(81)
865 #define CRYPTO_DECRYPT_VERIFY_UPDATE CRYPTO(82)
868 * Random Number Ioctls
870 typedef struct crypto_seed_random
{
871 uint_t sr_return_value
;
872 crypto_session_id_t sr_session
;
875 } crypto_seed_random_t
;
877 typedef struct crypto_generate_random
{
878 uint_t gr_return_value
;
879 crypto_session_id_t gr_session
;
882 } crypto_generate_random_t
;
887 typedef struct crypto_seed_random32
{
888 uint32_t sr_return_value
;
889 crypto_session_id_t sr_session
;
891 caddr32_t sr_seedbuf
;
892 } crypto_seed_random32_t
;
894 typedef struct crypto_generate_random32
{
895 uint32_t gr_return_value
;
896 crypto_session_id_t gr_session
;
899 } crypto_generate_random32_t
;
901 #endif /* _SYSCALL32 */
904 #define CRYPTO_SEED_RANDOM CRYPTO(90)
905 #define CRYPTO_GENERATE_RANDOM CRYPTO(91)
908 * Object Management Ioctls
910 typedef struct crypto_object_create
{
911 uint_t oc_return_value
;
912 crypto_session_id_t oc_session
;
913 crypto_object_id_t oc_handle
;
915 caddr_t oc_attributes
;
916 } crypto_object_create_t
;
918 typedef struct crypto_object_copy
{
919 uint_t oc_return_value
;
920 crypto_session_id_t oc_session
;
921 crypto_object_id_t oc_handle
;
922 crypto_object_id_t oc_new_handle
;
924 caddr_t oc_new_attributes
;
925 } crypto_object_copy_t
;
927 typedef struct crypto_object_destroy
{
928 uint_t od_return_value
;
929 crypto_session_id_t od_session
;
930 crypto_object_id_t od_handle
;
931 } crypto_object_destroy_t
;
933 typedef struct crypto_object_get_attribute_value
{
934 uint_t og_return_value
;
935 crypto_session_id_t og_session
;
936 crypto_object_id_t og_handle
;
938 caddr_t og_attributes
;
939 } crypto_object_get_attribute_value_t
;
941 typedef struct crypto_object_get_size
{
942 uint_t gs_return_value
;
943 crypto_session_id_t gs_session
;
944 crypto_object_id_t gs_handle
;
946 } crypto_object_get_size_t
;
948 typedef struct crypto_object_set_attribute_value
{
949 uint_t sa_return_value
;
950 crypto_session_id_t sa_session
;
951 crypto_object_id_t sa_handle
;
953 caddr_t sa_attributes
;
954 } crypto_object_set_attribute_value_t
;
956 typedef struct crypto_object_find_init
{
957 uint_t fi_return_value
;
958 crypto_session_id_t fi_session
;
960 caddr_t fi_attributes
;
961 } crypto_object_find_init_t
;
963 typedef struct crypto_object_find_update
{
964 uint_t fu_return_value
;
965 crypto_session_id_t fu_session
;
969 } crypto_object_find_update_t
;
971 typedef struct crypto_object_find_final
{
972 uint_t ff_return_value
;
973 crypto_session_id_t ff_session
;
974 } crypto_object_find_final_t
;
979 typedef struct crypto_object_create32
{
980 uint32_t oc_return_value
;
981 crypto_session_id_t oc_session
;
982 crypto_object_id_t oc_handle
;
984 caddr32_t oc_attributes
;
985 } crypto_object_create32_t
;
987 typedef struct crypto_object_copy32
{
988 uint32_t oc_return_value
;
989 crypto_session_id_t oc_session
;
990 crypto_object_id_t oc_handle
;
991 crypto_object_id_t oc_new_handle
;
993 caddr32_t oc_new_attributes
;
994 } crypto_object_copy32_t
;
996 typedef struct crypto_object_destroy32
{
997 uint32_t od_return_value
;
998 crypto_session_id_t od_session
;
999 crypto_object_id_t od_handle
;
1000 } crypto_object_destroy32_t
;
1002 typedef struct crypto_object_get_attribute_value32
{
1003 uint32_t og_return_value
;
1004 crypto_session_id_t og_session
;
1005 crypto_object_id_t og_handle
;
1007 caddr32_t og_attributes
;
1008 } crypto_object_get_attribute_value32_t
;
1010 typedef struct crypto_object_get_size32
{
1011 uint32_t gs_return_value
;
1012 crypto_session_id_t gs_session
;
1013 crypto_object_id_t gs_handle
;
1015 } crypto_object_get_size32_t
;
1017 typedef struct crypto_object_set_attribute_value32
{
1018 uint32_t sa_return_value
;
1019 crypto_session_id_t sa_session
;
1020 crypto_object_id_t sa_handle
;
1022 caddr32_t sa_attributes
;
1023 } crypto_object_set_attribute_value32_t
;
1025 typedef struct crypto_object_find_init32
{
1026 uint32_t fi_return_value
;
1027 crypto_session_id_t fi_session
;
1029 caddr32_t fi_attributes
;
1030 } crypto_object_find_init32_t
;
1032 typedef struct crypto_object_find_update32
{
1033 uint32_t fu_return_value
;
1034 crypto_session_id_t fu_session
;
1035 uint32_t fu_max_count
;
1037 caddr32_t fu_handles
;
1038 } crypto_object_find_update32_t
;
1040 typedef struct crypto_object_find_final32
{
1041 uint32_t ff_return_value
;
1042 crypto_session_id_t ff_session
;
1043 } crypto_object_find_final32_t
;
1045 #endif /* _SYSCALL32 */
1046 #endif /* _KERNEL */
1048 #define CRYPTO_OBJECT_CREATE CRYPTO(100)
1049 #define CRYPTO_OBJECT_COPY CRYPTO(101)
1050 #define CRYPTO_OBJECT_DESTROY CRYPTO(102)
1051 #define CRYPTO_OBJECT_GET_ATTRIBUTE_VALUE CRYPTO(103)
1052 #define CRYPTO_OBJECT_GET_SIZE CRYPTO(104)
1053 #define CRYPTO_OBJECT_SET_ATTRIBUTE_VALUE CRYPTO(105)
1054 #define CRYPTO_OBJECT_FIND_INIT CRYPTO(106)
1055 #define CRYPTO_OBJECT_FIND_UPDATE CRYPTO(107)
1056 #define CRYPTO_OBJECT_FIND_FINAL CRYPTO(108)
1059 * Key Generation Ioctls
1061 typedef struct crypto_object_generate_key
{
1062 uint_t gk_return_value
;
1063 crypto_session_id_t gk_session
;
1064 crypto_object_id_t gk_handle
;
1065 crypto_mechanism_t gk_mechanism
;
1067 caddr_t gk_attributes
;
1068 } crypto_object_generate_key_t
;
1070 typedef struct crypto_object_generate_key_pair
{
1071 uint_t kp_return_value
;
1072 crypto_session_id_t kp_session
;
1073 crypto_object_id_t kp_public_handle
;
1074 crypto_object_id_t kp_private_handle
;
1075 uint_t kp_public_count
;
1076 uint_t kp_private_count
;
1077 caddr_t kp_public_attributes
;
1078 caddr_t kp_private_attributes
;
1079 crypto_mechanism_t kp_mechanism
;
1080 } crypto_object_generate_key_pair_t
;
1082 typedef struct crypto_object_wrap_key
{
1083 uint_t wk_return_value
;
1084 crypto_session_id_t wk_session
;
1085 crypto_mechanism_t wk_mechanism
;
1086 crypto_key_t wk_wrapping_key
;
1087 crypto_object_id_t wk_object_handle
;
1088 size_t wk_wrapped_key_len
;
1089 caddr_t wk_wrapped_key
;
1090 } crypto_object_wrap_key_t
;
1092 typedef struct crypto_object_unwrap_key
{
1093 uint_t uk_return_value
;
1094 crypto_session_id_t uk_session
;
1095 crypto_mechanism_t uk_mechanism
;
1096 crypto_key_t uk_unwrapping_key
;
1097 crypto_object_id_t uk_object_handle
;
1098 size_t uk_wrapped_key_len
;
1099 caddr_t uk_wrapped_key
;
1101 caddr_t uk_attributes
;
1102 } crypto_object_unwrap_key_t
;
1104 typedef struct crypto_derive_key
{
1105 uint_t dk_return_value
;
1106 crypto_session_id_t dk_session
;
1107 crypto_mechanism_t dk_mechanism
;
1108 crypto_key_t dk_base_key
;
1109 crypto_object_id_t dk_object_handle
;
1111 caddr_t dk_attributes
;
1112 } crypto_derive_key_t
;
1117 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1121 typedef struct crypto_object_generate_key32
{
1122 uint32_t gk_return_value
;
1123 crypto_session_id_t gk_session
;
1124 crypto_object_id_t gk_handle
;
1125 crypto_mechanism32_t gk_mechanism
;
1127 caddr32_t gk_attributes
;
1128 } crypto_object_generate_key32_t
;
1130 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1134 typedef struct crypto_object_generate_key_pair32
{
1135 uint32_t kp_return_value
;
1136 crypto_session_id_t kp_session
;
1137 crypto_object_id_t kp_public_handle
;
1138 crypto_object_id_t kp_private_handle
;
1139 uint32_t kp_public_count
;
1140 uint32_t kp_private_count
;
1141 caddr32_t kp_public_attributes
;
1142 caddr32_t kp_private_attributes
;
1143 crypto_mechanism32_t kp_mechanism
;
1144 } crypto_object_generate_key_pair32_t
;
1146 typedef struct crypto_object_wrap_key32
{
1147 uint32_t wk_return_value
;
1148 crypto_session_id_t wk_session
;
1149 crypto_mechanism32_t wk_mechanism
;
1150 crypto_key32_t wk_wrapping_key
;
1151 crypto_object_id_t wk_object_handle
;
1152 size32_t wk_wrapped_key_len
;
1153 caddr32_t wk_wrapped_key
;
1154 } crypto_object_wrap_key32_t
;
1156 typedef struct crypto_object_unwrap_key32
{
1157 uint32_t uk_return_value
;
1158 crypto_session_id_t uk_session
;
1159 crypto_mechanism32_t uk_mechanism
;
1160 crypto_key32_t uk_unwrapping_key
;
1161 crypto_object_id_t uk_object_handle
;
1162 size32_t uk_wrapped_key_len
;
1163 caddr32_t uk_wrapped_key
;
1165 caddr32_t uk_attributes
;
1166 } crypto_object_unwrap_key32_t
;
1168 typedef struct crypto_derive_key32
{
1169 uint32_t dk_return_value
;
1170 crypto_session_id_t dk_session
;
1171 crypto_mechanism32_t dk_mechanism
;
1172 crypto_key32_t dk_base_key
;
1173 crypto_object_id_t dk_object_handle
;
1175 caddr32_t dk_attributes
;
1176 } crypto_derive_key32_t
;
1178 #endif /* _SYSCALL32 */
1179 #endif /* _KERNEL */
1181 #define CRYPTO_GENERATE_KEY CRYPTO(110)
1182 #define CRYPTO_GENERATE_KEY_PAIR CRYPTO(111)
1183 #define CRYPTO_WRAP_KEY CRYPTO(112)
1184 #define CRYPTO_UNWRAP_KEY CRYPTO(113)
1185 #define CRYPTO_DERIVE_KEY CRYPTO(114)
1188 * Provider Management Ioctls
1191 typedef struct crypto_get_provider_list
{
1192 uint_t pl_return_value
;
1194 crypto_provider_entry_t pl_list
[1];
1195 } crypto_get_provider_list_t
;
1197 typedef struct crypto_provider_data
{
1198 uchar_t pd_prov_desc
[CRYPTO_PROVIDER_DESCR_MAX_LEN
];
1199 uchar_t pd_label
[CRYPTO_EXT_SIZE_LABEL
];
1200 uchar_t pd_manufacturerID
[CRYPTO_EXT_SIZE_MANUF
];
1201 uchar_t pd_model
[CRYPTO_EXT_SIZE_MODEL
];
1202 uchar_t pd_serial_number
[CRYPTO_EXT_SIZE_SERIAL
];
1204 ulong_t pd_max_session_count
;
1205 ulong_t pd_session_count
;
1206 ulong_t pd_max_rw_session_count
;
1207 ulong_t pd_rw_session_count
;
1208 ulong_t pd_max_pin_len
;
1209 ulong_t pd_min_pin_len
;
1210 ulong_t pd_total_public_memory
;
1211 ulong_t pd_free_public_memory
;
1212 ulong_t pd_total_private_memory
;
1213 ulong_t pd_free_private_memory
;
1214 crypto_version_t pd_hardware_version
;
1215 crypto_version_t pd_firmware_version
;
1216 uchar_t pd_time
[CRYPTO_EXT_SIZE_TIME
];
1217 } crypto_provider_data_t
;
1219 typedef struct crypto_get_provider_info
{
1220 uint_t gi_return_value
;
1221 crypto_provider_id_t gi_provider_id
;
1222 crypto_provider_data_t gi_provider_data
;
1223 } crypto_get_provider_info_t
;
1225 typedef struct crypto_get_provider_mechanisms
{
1226 uint_t pm_return_value
;
1227 crypto_provider_id_t pm_provider_id
;
1229 crypto_mech_name_t pm_list
[1];
1230 } crypto_get_provider_mechanisms_t
;
1232 typedef struct crypto_get_provider_mechanism_info
{
1233 uint_t mi_return_value
;
1234 crypto_provider_id_t mi_provider_id
;
1235 crypto_mech_name_t mi_mechanism_name
;
1236 uint32_t mi_min_key_size
;
1237 uint32_t mi_max_key_size
;
1239 } crypto_get_provider_mechanism_info_t
;
1241 typedef struct crypto_init_token
{
1242 uint_t it_return_value
;
1243 crypto_provider_id_t it_provider_id
;
1247 } crypto_init_token_t
;
1249 typedef struct crypto_init_pin
{
1250 uint_t ip_return_value
;
1251 crypto_session_id_t ip_session
;
1254 } crypto_init_pin_t
;
1256 typedef struct crypto_set_pin
{
1257 uint_t sp_return_value
;
1258 crypto_session_id_t sp_session
;
1268 typedef struct crypto_get_provider_list32
{
1269 uint32_t pl_return_value
;
1271 crypto_provider_entry_t pl_list
[1];
1272 } crypto_get_provider_list32_t
;
1274 typedef struct crypto_version32
{
1277 } crypto_version32_t
;
1279 typedef struct crypto_provider_data32
{
1280 uchar_t pd_prov_desc
[CRYPTO_PROVIDER_DESCR_MAX_LEN
];
1281 uchar_t pd_label
[CRYPTO_EXT_SIZE_LABEL
];
1282 uchar_t pd_manufacturerID
[CRYPTO_EXT_SIZE_MANUF
];
1283 uchar_t pd_model
[CRYPTO_EXT_SIZE_MODEL
];
1284 uchar_t pd_serial_number
[CRYPTO_EXT_SIZE_SERIAL
];
1286 uint32_t pd_max_session_count
;
1287 uint32_t pd_session_count
;
1288 uint32_t pd_max_rw_session_count
;
1289 uint32_t pd_rw_session_count
;
1290 uint32_t pd_max_pin_len
;
1291 uint32_t pd_min_pin_len
;
1292 uint32_t pd_total_public_memory
;
1293 uint32_t pd_free_public_memory
;
1294 uint32_t pd_total_private_memory
;
1295 uint32_t pd_free_private_memory
;
1296 crypto_version32_t pd_hardware_version
;
1297 crypto_version32_t pd_firmware_version
;
1298 uchar_t pd_time
[CRYPTO_EXT_SIZE_TIME
];
1299 } crypto_provider_data32_t
;
1301 typedef struct crypto_get_provider_info32
{
1302 uint32_t gi_return_value
;
1303 crypto_provider_id_t gi_provider_id
;
1304 crypto_provider_data32_t gi_provider_data
;
1305 } crypto_get_provider_info32_t
;
1307 typedef struct crypto_get_provider_mechanisms32
{
1308 uint32_t pm_return_value
;
1309 crypto_provider_id_t pm_provider_id
;
1311 crypto_mech_name_t pm_list
[1];
1312 } crypto_get_provider_mechanisms32_t
;
1314 typedef struct crypto_init_token32
{
1315 uint32_t it_return_value
;
1316 crypto_provider_id_t it_provider_id
;
1318 size32_t it_pin_len
;
1320 } crypto_init_token32_t
;
1322 typedef struct crypto_init_pin32
{
1323 uint32_t ip_return_value
;
1324 crypto_session_id_t ip_session
;
1326 size32_t ip_pin_len
;
1327 } crypto_init_pin32_t
;
1329 typedef struct crypto_set_pin32
{
1330 uint32_t sp_return_value
;
1331 crypto_session_id_t sp_session
;
1332 caddr32_t sp_old_pin
;
1333 size32_t sp_old_len
;
1334 caddr32_t sp_new_pin
;
1335 size32_t sp_new_len
;
1336 } crypto_set_pin32_t
;
1338 #endif /* _SYSCALL32 */
1339 #endif /* _KERNEL */
1341 #define CRYPTO_GET_PROVIDER_LIST CRYPTO(120)
1342 #define CRYPTO_GET_PROVIDER_INFO CRYPTO(121)
1343 #define CRYPTO_GET_PROVIDER_MECHANISMS CRYPTO(122)
1344 #define CRYPTO_GET_PROVIDER_MECHANISM_INFO CRYPTO(123)
1345 #define CRYPTO_INIT_TOKEN CRYPTO(124)
1346 #define CRYPTO_INIT_PIN CRYPTO(125)
1347 #define CRYPTO_SET_PIN CRYPTO(126)
1350 * No (Key) Store Key Generation Ioctls
1352 typedef struct crypto_nostore_generate_key
{
1353 uint_t ngk_return_value
;
1354 crypto_session_id_t ngk_session
;
1355 crypto_mechanism_t ngk_mechanism
;
1356 uint_t ngk_in_count
;
1357 uint_t ngk_out_count
;
1358 caddr_t ngk_in_attributes
;
1359 caddr_t ngk_out_attributes
;
1360 } crypto_nostore_generate_key_t
;
1362 typedef struct crypto_nostore_generate_key_pair
{
1363 uint_t nkp_return_value
;
1364 crypto_session_id_t nkp_session
;
1365 uint_t nkp_in_public_count
;
1366 uint_t nkp_in_private_count
;
1367 uint_t nkp_out_public_count
;
1368 uint_t nkp_out_private_count
;
1369 caddr_t nkp_in_public_attributes
;
1370 caddr_t nkp_in_private_attributes
;
1371 caddr_t nkp_out_public_attributes
;
1372 caddr_t nkp_out_private_attributes
;
1373 crypto_mechanism_t nkp_mechanism
;
1374 } crypto_nostore_generate_key_pair_t
;
1376 typedef struct crypto_nostore_derive_key
{
1377 uint_t ndk_return_value
;
1378 crypto_session_id_t ndk_session
;
1379 crypto_mechanism_t ndk_mechanism
;
1380 crypto_key_t ndk_base_key
;
1381 uint_t ndk_in_count
;
1382 uint_t ndk_out_count
;
1383 caddr_t ndk_in_attributes
;
1384 caddr_t ndk_out_attributes
;
1385 } crypto_nostore_derive_key_t
;
1390 typedef struct crypto_nostore_generate_key32
{
1391 uint32_t ngk_return_value
;
1392 crypto_session_id_t ngk_session
;
1393 crypto_mechanism32_t ngk_mechanism
;
1394 uint32_t ngk_in_count
;
1395 uint32_t ngk_out_count
;
1396 caddr32_t ngk_in_attributes
;
1397 caddr32_t ngk_out_attributes
;
1398 } crypto_nostore_generate_key32_t
;
1400 typedef struct crypto_nostore_generate_key_pair32
{
1401 uint32_t nkp_return_value
;
1402 crypto_session_id_t nkp_session
;
1403 uint32_t nkp_in_public_count
;
1404 uint32_t nkp_in_private_count
;
1405 uint32_t nkp_out_public_count
;
1406 uint32_t nkp_out_private_count
;
1407 caddr32_t nkp_in_public_attributes
;
1408 caddr32_t nkp_in_private_attributes
;
1409 caddr32_t nkp_out_public_attributes
;
1410 caddr32_t nkp_out_private_attributes
;
1411 crypto_mechanism32_t nkp_mechanism
;
1412 } crypto_nostore_generate_key_pair32_t
;
1414 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1418 typedef struct crypto_nostore_derive_key32
{
1419 uint32_t ndk_return_value
;
1420 crypto_session_id_t ndk_session
;
1421 crypto_mechanism32_t ndk_mechanism
;
1422 crypto_key32_t ndk_base_key
;
1423 uint32_t ndk_in_count
;
1424 uint32_t ndk_out_count
;
1425 caddr32_t ndk_in_attributes
;
1426 caddr32_t ndk_out_attributes
;
1427 } crypto_nostore_derive_key32_t
;
1429 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1433 #endif /* _SYSCALL32 */
1434 #endif /* _KERNEL */
1436 #define CRYPTO_NOSTORE_GENERATE_KEY CRYPTO(127)
1437 #define CRYPTO_NOSTORE_GENERATE_KEY_PAIR CRYPTO(128)
1438 #define CRYPTO_NOSTORE_DERIVE_KEY CRYPTO(129)
1444 typedef struct crypto_get_mechanism_list
{
1445 uint_t ml_return_value
;
1447 crypto_mech_name_t ml_list
[1];
1448 } crypto_get_mechanism_list_t
;
1450 typedef struct crypto_get_all_mechanism_info
{
1451 uint_t mi_return_value
;
1452 crypto_mech_name_t mi_mechanism_name
;
1454 crypto_mechanism_info_t mi_list
[1];
1455 } crypto_get_all_mechanism_info_t
;
1460 typedef struct crypto_get_mechanism_list32
{
1461 uint32_t ml_return_value
;
1463 crypto_mech_name_t ml_list
[1];
1464 } crypto_get_mechanism_list32_t
;
1466 typedef struct crypto_get_all_mechanism_info32
{
1467 uint32_t mi_return_value
;
1468 crypto_mech_name_t mi_mechanism_name
;
1470 crypto_mechanism_info32_t mi_list
[1];
1471 } crypto_get_all_mechanism_info32_t
;
1473 #endif /* _SYSCALL32 */
1474 #endif /* _KERNEL */
1476 #define CRYPTO_GET_MECHANISM_LIST CRYPTO(140)
1477 #define CRYPTO_GET_ALL_MECHANISM_INFO CRYPTO(141)
1483 #endif /* _SYS_CRYPTO_IOCTL_H */