/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _SYS_CRYPTO_IOCTL_H #define _SYS_CRYPTO_IOCTL_H #ifdef __cplusplus extern "C" { #endif #include #include #include #include #define CRYPTO_MAX_ATTRIBUTE_COUNT 128 #define CRYPTO_IOFLAGS_RW_SESSION 0x00000001 #define CRYPTO(x) (('y' << 8) | (x)) #define MAX_NUM_THRESHOLD 7 /* the PKCS11 Mechanisms */ #define CKM_RC4 0x00000111UL #define CKM_DES3_ECB 0x00000132UL #define CKM_DES3_CBC 0x00000133UL #define CKM_MD5 0x00000210UL #define CKM_SHA_1 0x00000220UL #define CKM_AES_ECB 0x00001081UL #define CKM_AES_CBC 0x00001082UL /* * General Purpose Ioctls */ typedef struct fl_mechs_threshold { int mech_type; uint32_t mech_threshold; } fl_mechs_threshold_t; typedef struct crypto_function_list { boolean_t fl_digest_init; boolean_t fl_digest; boolean_t fl_digest_update; boolean_t fl_digest_key; boolean_t fl_digest_final; boolean_t fl_encrypt_init; boolean_t fl_encrypt; boolean_t fl_encrypt_update; boolean_t fl_encrypt_final; boolean_t fl_decrypt_init; boolean_t fl_decrypt; boolean_t fl_decrypt_update; boolean_t fl_decrypt_final; boolean_t fl_mac_init; boolean_t fl_mac; boolean_t fl_mac_update; boolean_t fl_mac_final; boolean_t fl_sign_init; boolean_t fl_sign; boolean_t fl_sign_update; boolean_t fl_sign_final; boolean_t fl_sign_recover_init; boolean_t fl_sign_recover; boolean_t fl_verify_init; boolean_t fl_verify; boolean_t fl_verify_update; boolean_t fl_verify_final; boolean_t fl_verify_recover_init; boolean_t fl_verify_recover; boolean_t fl_digest_encrypt_update; boolean_t fl_decrypt_digest_update; boolean_t fl_sign_encrypt_update; boolean_t fl_decrypt_verify_update; boolean_t fl_seed_random; boolean_t fl_generate_random; boolean_t fl_session_open; boolean_t fl_session_close; boolean_t fl_session_login; boolean_t fl_session_logout; boolean_t fl_object_create; boolean_t fl_object_copy; boolean_t fl_object_destroy; boolean_t fl_object_get_size; boolean_t fl_object_get_attribute_value; boolean_t fl_object_set_attribute_value; boolean_t fl_object_find_init; boolean_t fl_object_find; boolean_t fl_object_find_final; boolean_t fl_key_generate; boolean_t fl_key_generate_pair; boolean_t fl_key_wrap; boolean_t fl_key_unwrap; boolean_t fl_key_derive; boolean_t fl_init_token; boolean_t fl_init_pin; boolean_t fl_set_pin; boolean_t prov_is_hash_limited; uint32_t prov_hash_threshold; uint32_t prov_hash_limit; boolean_t prov_is_hmac_limited; uint32_t prov_hmac_limit; int total_threshold_count; fl_mechs_threshold_t fl_threshold[MAX_NUM_THRESHOLD]; } crypto_function_list_t; typedef struct crypto_get_function_list { uint_t fl_return_value; crypto_provider_id_t fl_provider_id; crypto_function_list_t fl_list; } crypto_get_function_list_t; typedef struct crypto_get_mechanism_number { uint_t pn_return_value; caddr_t pn_mechanism_string; size_t pn_mechanism_len; crypto_mech_type_t pn_internal_number; } crypto_get_mechanism_number_t; #ifdef _KERNEL #ifdef _SYSCALL32 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack(4) #endif typedef struct crypto_get_mechanism_number32 { uint32_t pn_return_value; caddr32_t pn_mechanism_string; size32_t pn_mechanism_len; crypto_mech_type_t pn_internal_number; } crypto_get_mechanism_number32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack() #endif #endif /* _SYSCALL32 */ #endif /* _KERNEL */ #define CRYPTO_GET_FUNCTION_LIST CRYPTO(20) #define CRYPTO_GET_MECHANISM_NUMBER CRYPTO(21) /* * Session Ioctls */ typedef uint32_t crypto_flags_t; typedef struct crypto_open_session { uint_t os_return_value; crypto_session_id_t os_session; crypto_flags_t os_flags; crypto_provider_id_t os_provider_id; } crypto_open_session_t; typedef struct crypto_close_session { uint_t cs_return_value; crypto_session_id_t cs_session; } crypto_close_session_t; typedef struct crypto_close_all_sessions { uint_t as_return_value; crypto_provider_id_t as_provider_id; } crypto_close_all_sessions_t; #define CRYPTO_OPEN_SESSION CRYPTO(30) #define CRYPTO_CLOSE_SESSION CRYPTO(31) #define CRYPTO_CLOSE_ALL_SESSIONS CRYPTO(32) /* * Login Ioctls */ typedef struct crypto_login { uint_t co_return_value; crypto_session_id_t co_session; uint_t co_user_type; uint_t co_pin_len; caddr_t co_pin; } crypto_login_t; typedef struct crypto_logout { uint_t cl_return_value; crypto_session_id_t cl_session; } crypto_logout_t; #ifdef _KERNEL #ifdef _SYSCALL32 typedef struct crypto_login32 { uint32_t co_return_value; crypto_session_id_t co_session; uint32_t co_user_type; uint32_t co_pin_len; caddr32_t co_pin; } crypto_login32_t; typedef struct crypto_logout32 { uint32_t cl_return_value; crypto_session_id_t cl_session; } crypto_logout32_t; #endif /* _SYSCALL32 */ #endif /* _KERNEL */ #define CRYPTO_LOGIN CRYPTO(40) #define CRYPTO_LOGOUT CRYPTO(41) /* flag for encrypt and decrypt operations */ #define CRYPTO_INPLACE_OPERATION 0x00000001 /* * Cryptographic Ioctls */ typedef struct crypto_encrypt { uint_t ce_return_value; crypto_session_id_t ce_session; size_t ce_datalen; caddr_t ce_databuf; size_t ce_encrlen; caddr_t ce_encrbuf; uint_t ce_flags; } crypto_encrypt_t; typedef struct crypto_encrypt_init { uint_t ei_return_value; crypto_session_id_t ei_session; crypto_mechanism_t ei_mech; crypto_key_t ei_key; } crypto_encrypt_init_t; typedef struct crypto_encrypt_update { uint_t eu_return_value; crypto_session_id_t eu_session; size_t eu_datalen; caddr_t eu_databuf; size_t eu_encrlen; caddr_t eu_encrbuf; uint_t eu_flags; } crypto_encrypt_update_t; typedef struct crypto_encrypt_final { uint_t ef_return_value; crypto_session_id_t ef_session; size_t ef_encrlen; caddr_t ef_encrbuf; } crypto_encrypt_final_t; typedef struct crypto_decrypt { uint_t cd_return_value; crypto_session_id_t cd_session; size_t cd_encrlen; caddr_t cd_encrbuf; size_t cd_datalen; caddr_t cd_databuf; uint_t cd_flags; } crypto_decrypt_t; typedef struct crypto_decrypt_init { uint_t di_return_value; crypto_session_id_t di_session; crypto_mechanism_t di_mech; crypto_key_t di_key; } crypto_decrypt_init_t; typedef struct crypto_decrypt_update { uint_t du_return_value; crypto_session_id_t du_session; size_t du_encrlen; caddr_t du_encrbuf; size_t du_datalen; caddr_t du_databuf; uint_t du_flags; } crypto_decrypt_update_t; typedef struct crypto_decrypt_final { uint_t df_return_value; crypto_session_id_t df_session; size_t df_datalen; caddr_t df_databuf; } crypto_decrypt_final_t; typedef struct crypto_digest { uint_t cd_return_value; crypto_session_id_t cd_session; size_t cd_datalen; caddr_t cd_databuf; size_t cd_digestlen; caddr_t cd_digestbuf; } crypto_digest_t; typedef struct crypto_digest_init { uint_t di_return_value; crypto_session_id_t di_session; crypto_mechanism_t di_mech; } crypto_digest_init_t; typedef struct crypto_digest_update { uint_t du_return_value; crypto_session_id_t du_session; size_t du_datalen; caddr_t du_databuf; } crypto_digest_update_t; typedef struct crypto_digest_key { uint_t dk_return_value; crypto_session_id_t dk_session; crypto_key_t dk_key; } crypto_digest_key_t; typedef struct crypto_digest_final { uint_t df_return_value; crypto_session_id_t df_session; size_t df_digestlen; caddr_t df_digestbuf; } crypto_digest_final_t; typedef struct crypto_mac { uint_t cm_return_value; crypto_session_id_t cm_session; size_t cm_datalen; caddr_t cm_databuf; size_t cm_maclen; caddr_t cm_macbuf; } crypto_mac_t; typedef struct crypto_mac_init { uint_t mi_return_value; crypto_session_id_t mi_session; crypto_mechanism_t mi_mech; crypto_key_t mi_key; } crypto_mac_init_t; typedef struct crypto_mac_update { uint_t mu_return_value; crypto_session_id_t mu_session; size_t mu_datalen; caddr_t mu_databuf; } crypto_mac_update_t; typedef struct crypto_mac_final { uint_t mf_return_value; crypto_session_id_t mf_session; size_t mf_maclen; caddr_t mf_macbuf; } crypto_mac_final_t; typedef struct crypto_sign { uint_t cs_return_value; crypto_session_id_t cs_session; size_t cs_datalen; caddr_t cs_databuf; size_t cs_signlen; caddr_t cs_signbuf; } crypto_sign_t; typedef struct crypto_sign_init { uint_t si_return_value; crypto_session_id_t si_session; crypto_mechanism_t si_mech; crypto_key_t si_key; } crypto_sign_init_t; typedef struct crypto_sign_update { uint_t su_return_value; crypto_session_id_t su_session; size_t su_datalen; caddr_t su_databuf; } crypto_sign_update_t; typedef struct crypto_sign_final { uint_t sf_return_value; crypto_session_id_t sf_session; size_t sf_signlen; caddr_t sf_signbuf; } crypto_sign_final_t; typedef struct crypto_sign_recover_init { uint_t ri_return_value; crypto_session_id_t ri_session; crypto_mechanism_t ri_mech; crypto_key_t ri_key; } crypto_sign_recover_init_t; typedef struct crypto_sign_recover { uint_t sr_return_value; crypto_session_id_t sr_session; size_t sr_datalen; caddr_t sr_databuf; size_t sr_signlen; caddr_t sr_signbuf; } crypto_sign_recover_t; typedef struct crypto_verify { uint_t cv_return_value; crypto_session_id_t cv_session; size_t cv_datalen; caddr_t cv_databuf; size_t cv_signlen; caddr_t cv_signbuf; } crypto_verify_t; typedef struct crypto_verify_init { uint_t vi_return_value; crypto_session_id_t vi_session; crypto_mechanism_t vi_mech; crypto_key_t vi_key; } crypto_verify_init_t; typedef struct crypto_verify_update { uint_t vu_return_value; crypto_session_id_t vu_session; size_t vu_datalen; caddr_t vu_databuf; } crypto_verify_update_t; typedef struct crypto_verify_final { uint_t vf_return_value; crypto_session_id_t vf_session; size_t vf_signlen; caddr_t vf_signbuf; } crypto_verify_final_t; typedef struct crypto_verify_recover_init { uint_t ri_return_value; crypto_session_id_t ri_session; crypto_mechanism_t ri_mech; crypto_key_t ri_key; } crypto_verify_recover_init_t; typedef struct crypto_verify_recover { uint_t vr_return_value; crypto_session_id_t vr_session; size_t vr_signlen; caddr_t vr_signbuf; size_t vr_datalen; caddr_t vr_databuf; } crypto_verify_recover_t; typedef struct crypto_digest_encrypt_update { uint_t eu_return_value; crypto_session_id_t eu_session; size_t eu_datalen; caddr_t eu_databuf; size_t eu_encrlen; caddr_t eu_encrbuf; } crypto_digest_encrypt_update_t; typedef struct crypto_decrypt_digest_update { uint_t du_return_value; crypto_session_id_t du_session; size_t du_encrlen; caddr_t du_encrbuf; size_t du_datalen; caddr_t du_databuf; } crypto_decrypt_digest_update_t; typedef struct crypto_sign_encrypt_update { uint_t eu_return_value; crypto_session_id_t eu_session; size_t eu_datalen; caddr_t eu_databuf; size_t eu_encrlen; caddr_t eu_encrbuf; } crypto_sign_encrypt_update_t; typedef struct crypto_decrypt_verify_update { uint_t vu_return_value; crypto_session_id_t vu_session; size_t vu_encrlen; caddr_t vu_encrbuf; size_t vu_datalen; caddr_t vu_databuf; } crypto_decrypt_verify_update_t; #ifdef _KERNEL #ifdef _SYSCALL32 typedef struct crypto_encrypt32 { uint32_t ce_return_value; crypto_session_id_t ce_session; size32_t ce_datalen; caddr32_t ce_databuf; size32_t ce_encrlen; caddr32_t ce_encrbuf; uint32_t ce_flags; } crypto_encrypt32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack(4) #endif typedef struct crypto_encrypt_init32 { uint32_t ei_return_value; crypto_session_id_t ei_session; crypto_mechanism32_t ei_mech; crypto_key32_t ei_key; } crypto_encrypt_init32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack() #endif typedef struct crypto_encrypt_update32 { uint32_t eu_return_value; crypto_session_id_t eu_session; size32_t eu_datalen; caddr32_t eu_databuf; size32_t eu_encrlen; caddr32_t eu_encrbuf; uint_t eu_flags; } crypto_encrypt_update32_t; typedef struct crypto_encrypt_final32 { uint32_t ef_return_value; crypto_session_id_t ef_session; size32_t ef_encrlen; caddr32_t ef_encrbuf; } crypto_encrypt_final32_t; typedef struct crypto_decrypt32 { uint32_t cd_return_value; crypto_session_id_t cd_session; size32_t cd_encrlen; caddr32_t cd_encrbuf; size32_t cd_datalen; caddr32_t cd_databuf; uint32_t cd_flags; } crypto_decrypt32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack(4) #endif typedef struct crypto_decrypt_init32 { uint32_t di_return_value; crypto_session_id_t di_session; crypto_mechanism32_t di_mech; crypto_key32_t di_key; } crypto_decrypt_init32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack() #endif typedef struct crypto_decrypt_update32 { uint32_t du_return_value; crypto_session_id_t du_session; size32_t du_encrlen; caddr32_t du_encrbuf; size32_t du_datalen; caddr32_t du_databuf; uint_t du_flags; } crypto_decrypt_update32_t; typedef struct crypto_decrypt_final32 { uint32_t df_return_value; crypto_session_id_t df_session; size32_t df_datalen; caddr32_t df_databuf; } crypto_decrypt_final32_t; typedef struct crypto_digest32 { uint32_t cd_return_value; crypto_session_id_t cd_session; size32_t cd_datalen; caddr32_t cd_databuf; size32_t cd_digestlen; caddr32_t cd_digestbuf; } crypto_digest32_t; typedef struct crypto_digest_init32 { uint32_t di_return_value; crypto_session_id_t di_session; crypto_mechanism32_t di_mech; } crypto_digest_init32_t; typedef struct crypto_digest_update32 { uint32_t du_return_value; crypto_session_id_t du_session; size32_t du_datalen; caddr32_t du_databuf; } crypto_digest_update32_t; typedef struct crypto_digest_key32 { uint32_t dk_return_value; crypto_session_id_t dk_session; crypto_key32_t dk_key; } crypto_digest_key32_t; typedef struct crypto_digest_final32 { uint32_t df_return_value; crypto_session_id_t df_session; size32_t df_digestlen; caddr32_t df_digestbuf; } crypto_digest_final32_t; typedef struct crypto_mac32 { uint32_t cm_return_value; crypto_session_id_t cm_session; size32_t cm_datalen; caddr32_t cm_databuf; size32_t cm_maclen; caddr32_t cm_macbuf; } crypto_mac32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack(4) #endif typedef struct crypto_mac_init32 { uint32_t mi_return_value; crypto_session_id_t mi_session; crypto_mechanism32_t mi_mech; crypto_key32_t mi_key; } crypto_mac_init32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack() #endif typedef struct crypto_mac_update32 { uint32_t mu_return_value; crypto_session_id_t mu_session; size32_t mu_datalen; caddr32_t mu_databuf; } crypto_mac_update32_t; typedef struct crypto_mac_final32 { uint32_t mf_return_value; crypto_session_id_t mf_session; size32_t mf_maclen; caddr32_t mf_macbuf; } crypto_mac_final32_t; typedef struct crypto_sign32 { uint32_t cs_return_value; crypto_session_id_t cs_session; size32_t cs_datalen; caddr32_t cs_databuf; size32_t cs_signlen; caddr32_t cs_signbuf; } crypto_sign32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack(4) #endif typedef struct crypto_sign_init32 { uint32_t si_return_value; crypto_session_id_t si_session; crypto_mechanism32_t si_mech; crypto_key32_t si_key; } crypto_sign_init32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack() #endif typedef struct crypto_sign_update32 { uint32_t su_return_value; crypto_session_id_t su_session; size32_t su_datalen; caddr32_t su_databuf; } crypto_sign_update32_t; typedef struct crypto_sign_final32 { uint32_t sf_return_value; crypto_session_id_t sf_session; size32_t sf_signlen; caddr32_t sf_signbuf; } crypto_sign_final32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack(4) #endif typedef struct crypto_sign_recover_init32 { uint32_t ri_return_value; crypto_session_id_t ri_session; crypto_mechanism32_t ri_mech; crypto_key32_t ri_key; } crypto_sign_recover_init32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack() #endif typedef struct crypto_sign_recover32 { uint32_t sr_return_value; crypto_session_id_t sr_session; size32_t sr_datalen; caddr32_t sr_databuf; size32_t sr_signlen; caddr32_t sr_signbuf; } crypto_sign_recover32_t; typedef struct crypto_verify32 { uint32_t cv_return_value; crypto_session_id_t cv_session; size32_t cv_datalen; caddr32_t cv_databuf; size32_t cv_signlen; caddr32_t cv_signbuf; } crypto_verify32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack(4) #endif typedef struct crypto_verify_init32 { uint32_t vi_return_value; crypto_session_id_t vi_session; crypto_mechanism32_t vi_mech; crypto_key32_t vi_key; } crypto_verify_init32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack() #endif typedef struct crypto_verify_update32 { uint32_t vu_return_value; crypto_session_id_t vu_session; size32_t vu_datalen; caddr32_t vu_databuf; } crypto_verify_update32_t; typedef struct crypto_verify_final32 { uint32_t vf_return_value; crypto_session_id_t vf_session; size32_t vf_signlen; caddr32_t vf_signbuf; } crypto_verify_final32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack(4) #endif typedef struct crypto_verify_recover_init32 { uint32_t ri_return_value; crypto_session_id_t ri_session; crypto_mechanism32_t ri_mech; crypto_key32_t ri_key; } crypto_verify_recover_init32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack() #endif typedef struct crypto_verify_recover32 { uint32_t vr_return_value; crypto_session_id_t vr_session; size32_t vr_signlen; caddr32_t vr_signbuf; size32_t vr_datalen; caddr32_t vr_databuf; } crypto_verify_recover32_t; typedef struct crypto_digest_encrypt_update32 { uint32_t eu_return_value; crypto_session_id_t eu_session; size32_t eu_datalen; caddr32_t eu_databuf; size32_t eu_encrlen; caddr32_t eu_encrbuf; } crypto_digest_encrypt_update32_t; typedef struct crypto_decrypt_digest_update32 { uint32_t du_return_value; crypto_session_id_t du_session; size32_t du_encrlen; caddr32_t du_encrbuf; size32_t du_datalen; caddr32_t du_databuf; } crypto_decrypt_digest_update32_t; typedef struct crypto_sign_encrypt_update32 { uint32_t eu_return_value; crypto_session_id_t eu_session; size32_t eu_datalen; caddr32_t eu_databuf; size32_t eu_encrlen; caddr32_t eu_encrbuf; } crypto_sign_encrypt_update32_t; typedef struct crypto_decrypt_verify_update32 { uint32_t vu_return_value; crypto_session_id_t vu_session; size32_t vu_encrlen; caddr32_t vu_encrbuf; size32_t vu_datalen; caddr32_t vu_databuf; } crypto_decrypt_verify_update32_t; #endif /* _SYSCALL32 */ #endif /* _KERNEL */ #define CRYPTO_ENCRYPT CRYPTO(50) #define CRYPTO_ENCRYPT_INIT CRYPTO(51) #define CRYPTO_ENCRYPT_UPDATE CRYPTO(52) #define CRYPTO_ENCRYPT_FINAL CRYPTO(53) #define CRYPTO_DECRYPT CRYPTO(54) #define CRYPTO_DECRYPT_INIT CRYPTO(55) #define CRYPTO_DECRYPT_UPDATE CRYPTO(56) #define CRYPTO_DECRYPT_FINAL CRYPTO(57) #define CRYPTO_DIGEST CRYPTO(58) #define CRYPTO_DIGEST_INIT CRYPTO(59) #define CRYPTO_DIGEST_UPDATE CRYPTO(60) #define CRYPTO_DIGEST_KEY CRYPTO(61) #define CRYPTO_DIGEST_FINAL CRYPTO(62) #define CRYPTO_MAC CRYPTO(63) #define CRYPTO_MAC_INIT CRYPTO(64) #define CRYPTO_MAC_UPDATE CRYPTO(65) #define CRYPTO_MAC_FINAL CRYPTO(66) #define CRYPTO_SIGN CRYPTO(67) #define CRYPTO_SIGN_INIT CRYPTO(68) #define CRYPTO_SIGN_UPDATE CRYPTO(69) #define CRYPTO_SIGN_FINAL CRYPTO(70) #define CRYPTO_SIGN_RECOVER_INIT CRYPTO(71) #define CRYPTO_SIGN_RECOVER CRYPTO(72) #define CRYPTO_VERIFY CRYPTO(73) #define CRYPTO_VERIFY_INIT CRYPTO(74) #define CRYPTO_VERIFY_UPDATE CRYPTO(75) #define CRYPTO_VERIFY_FINAL CRYPTO(76) #define CRYPTO_VERIFY_RECOVER_INIT CRYPTO(77) #define CRYPTO_VERIFY_RECOVER CRYPTO(78) #define CRYPTO_DIGEST_ENCRYPT_UPDATE CRYPTO(79) #define CRYPTO_DECRYPT_DIGEST_UPDATE CRYPTO(80) #define CRYPTO_SIGN_ENCRYPT_UPDATE CRYPTO(81) #define CRYPTO_DECRYPT_VERIFY_UPDATE CRYPTO(82) /* * Random Number Ioctls */ typedef struct crypto_seed_random { uint_t sr_return_value; crypto_session_id_t sr_session; size_t sr_seedlen; caddr_t sr_seedbuf; } crypto_seed_random_t; typedef struct crypto_generate_random { uint_t gr_return_value; crypto_session_id_t gr_session; caddr_t gr_buf; size_t gr_buflen; } crypto_generate_random_t; #ifdef _KERNEL #ifdef _SYSCALL32 typedef struct crypto_seed_random32 { uint32_t sr_return_value; crypto_session_id_t sr_session; size32_t sr_seedlen; caddr32_t sr_seedbuf; } crypto_seed_random32_t; typedef struct crypto_generate_random32 { uint32_t gr_return_value; crypto_session_id_t gr_session; caddr32_t gr_buf; size32_t gr_buflen; } crypto_generate_random32_t; #endif /* _SYSCALL32 */ #endif /* _KERNEL */ #define CRYPTO_SEED_RANDOM CRYPTO(90) #define CRYPTO_GENERATE_RANDOM CRYPTO(91) /* * Object Management Ioctls */ typedef struct crypto_object_create { uint_t oc_return_value; crypto_session_id_t oc_session; crypto_object_id_t oc_handle; uint_t oc_count; caddr_t oc_attributes; } crypto_object_create_t; typedef struct crypto_object_copy { uint_t oc_return_value; crypto_session_id_t oc_session; crypto_object_id_t oc_handle; crypto_object_id_t oc_new_handle; uint_t oc_count; caddr_t oc_new_attributes; } crypto_object_copy_t; typedef struct crypto_object_destroy { uint_t od_return_value; crypto_session_id_t od_session; crypto_object_id_t od_handle; } crypto_object_destroy_t; typedef struct crypto_object_get_attribute_value { uint_t og_return_value; crypto_session_id_t og_session; crypto_object_id_t og_handle; uint_t og_count; caddr_t og_attributes; } crypto_object_get_attribute_value_t; typedef struct crypto_object_get_size { uint_t gs_return_value; crypto_session_id_t gs_session; crypto_object_id_t gs_handle; size_t gs_size; } crypto_object_get_size_t; typedef struct crypto_object_set_attribute_value { uint_t sa_return_value; crypto_session_id_t sa_session; crypto_object_id_t sa_handle; uint_t sa_count; caddr_t sa_attributes; } crypto_object_set_attribute_value_t; typedef struct crypto_object_find_init { uint_t fi_return_value; crypto_session_id_t fi_session; uint_t fi_count; caddr_t fi_attributes; } crypto_object_find_init_t; typedef struct crypto_object_find_update { uint_t fu_return_value; crypto_session_id_t fu_session; uint_t fu_max_count; uint_t fu_count; caddr_t fu_handles; } crypto_object_find_update_t; typedef struct crypto_object_find_final { uint_t ff_return_value; crypto_session_id_t ff_session; } crypto_object_find_final_t; #ifdef _KERNEL #ifdef _SYSCALL32 typedef struct crypto_object_create32 { uint32_t oc_return_value; crypto_session_id_t oc_session; crypto_object_id_t oc_handle; uint32_t oc_count; caddr32_t oc_attributes; } crypto_object_create32_t; typedef struct crypto_object_copy32 { uint32_t oc_return_value; crypto_session_id_t oc_session; crypto_object_id_t oc_handle; crypto_object_id_t oc_new_handle; uint32_t oc_count; caddr32_t oc_new_attributes; } crypto_object_copy32_t; typedef struct crypto_object_destroy32 { uint32_t od_return_value; crypto_session_id_t od_session; crypto_object_id_t od_handle; } crypto_object_destroy32_t; typedef struct crypto_object_get_attribute_value32 { uint32_t og_return_value; crypto_session_id_t og_session; crypto_object_id_t og_handle; uint32_t og_count; caddr32_t og_attributes; } crypto_object_get_attribute_value32_t; typedef struct crypto_object_get_size32 { uint32_t gs_return_value; crypto_session_id_t gs_session; crypto_object_id_t gs_handle; size32_t gs_size; } crypto_object_get_size32_t; typedef struct crypto_object_set_attribute_value32 { uint32_t sa_return_value; crypto_session_id_t sa_session; crypto_object_id_t sa_handle; uint32_t sa_count; caddr32_t sa_attributes; } crypto_object_set_attribute_value32_t; typedef struct crypto_object_find_init32 { uint32_t fi_return_value; crypto_session_id_t fi_session; uint32_t fi_count; caddr32_t fi_attributes; } crypto_object_find_init32_t; typedef struct crypto_object_find_update32 { uint32_t fu_return_value; crypto_session_id_t fu_session; uint32_t fu_max_count; uint32_t fu_count; caddr32_t fu_handles; } crypto_object_find_update32_t; typedef struct crypto_object_find_final32 { uint32_t ff_return_value; crypto_session_id_t ff_session; } crypto_object_find_final32_t; #endif /* _SYSCALL32 */ #endif /* _KERNEL */ #define CRYPTO_OBJECT_CREATE CRYPTO(100) #define CRYPTO_OBJECT_COPY CRYPTO(101) #define CRYPTO_OBJECT_DESTROY CRYPTO(102) #define CRYPTO_OBJECT_GET_ATTRIBUTE_VALUE CRYPTO(103) #define CRYPTO_OBJECT_GET_SIZE CRYPTO(104) #define CRYPTO_OBJECT_SET_ATTRIBUTE_VALUE CRYPTO(105) #define CRYPTO_OBJECT_FIND_INIT CRYPTO(106) #define CRYPTO_OBJECT_FIND_UPDATE CRYPTO(107) #define CRYPTO_OBJECT_FIND_FINAL CRYPTO(108) /* * Key Generation Ioctls */ typedef struct crypto_object_generate_key { uint_t gk_return_value; crypto_session_id_t gk_session; crypto_object_id_t gk_handle; crypto_mechanism_t gk_mechanism; uint_t gk_count; caddr_t gk_attributes; } crypto_object_generate_key_t; typedef struct crypto_object_generate_key_pair { uint_t kp_return_value; crypto_session_id_t kp_session; crypto_object_id_t kp_public_handle; crypto_object_id_t kp_private_handle; uint_t kp_public_count; uint_t kp_private_count; caddr_t kp_public_attributes; caddr_t kp_private_attributes; crypto_mechanism_t kp_mechanism; } crypto_object_generate_key_pair_t; typedef struct crypto_object_wrap_key { uint_t wk_return_value; crypto_session_id_t wk_session; crypto_mechanism_t wk_mechanism; crypto_key_t wk_wrapping_key; crypto_object_id_t wk_object_handle; size_t wk_wrapped_key_len; caddr_t wk_wrapped_key; } crypto_object_wrap_key_t; typedef struct crypto_object_unwrap_key { uint_t uk_return_value; crypto_session_id_t uk_session; crypto_mechanism_t uk_mechanism; crypto_key_t uk_unwrapping_key; crypto_object_id_t uk_object_handle; size_t uk_wrapped_key_len; caddr_t uk_wrapped_key; uint_t uk_count; caddr_t uk_attributes; } crypto_object_unwrap_key_t; typedef struct crypto_derive_key { uint_t dk_return_value; crypto_session_id_t dk_session; crypto_mechanism_t dk_mechanism; crypto_key_t dk_base_key; crypto_object_id_t dk_object_handle; uint_t dk_count; caddr_t dk_attributes; } crypto_derive_key_t; #ifdef _KERNEL #ifdef _SYSCALL32 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack(4) #endif typedef struct crypto_object_generate_key32 { uint32_t gk_return_value; crypto_session_id_t gk_session; crypto_object_id_t gk_handle; crypto_mechanism32_t gk_mechanism; uint32_t gk_count; caddr32_t gk_attributes; } crypto_object_generate_key32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack() #endif typedef struct crypto_object_generate_key_pair32 { uint32_t kp_return_value; crypto_session_id_t kp_session; crypto_object_id_t kp_public_handle; crypto_object_id_t kp_private_handle; uint32_t kp_public_count; uint32_t kp_private_count; caddr32_t kp_public_attributes; caddr32_t kp_private_attributes; crypto_mechanism32_t kp_mechanism; } crypto_object_generate_key_pair32_t; typedef struct crypto_object_wrap_key32 { uint32_t wk_return_value; crypto_session_id_t wk_session; crypto_mechanism32_t wk_mechanism; crypto_key32_t wk_wrapping_key; crypto_object_id_t wk_object_handle; size32_t wk_wrapped_key_len; caddr32_t wk_wrapped_key; } crypto_object_wrap_key32_t; typedef struct crypto_object_unwrap_key32 { uint32_t uk_return_value; crypto_session_id_t uk_session; crypto_mechanism32_t uk_mechanism; crypto_key32_t uk_unwrapping_key; crypto_object_id_t uk_object_handle; size32_t uk_wrapped_key_len; caddr32_t uk_wrapped_key; uint32_t uk_count; caddr32_t uk_attributes; } crypto_object_unwrap_key32_t; typedef struct crypto_derive_key32 { uint32_t dk_return_value; crypto_session_id_t dk_session; crypto_mechanism32_t dk_mechanism; crypto_key32_t dk_base_key; crypto_object_id_t dk_object_handle; uint32_t dk_count; caddr32_t dk_attributes; } crypto_derive_key32_t; #endif /* _SYSCALL32 */ #endif /* _KERNEL */ #define CRYPTO_GENERATE_KEY CRYPTO(110) #define CRYPTO_GENERATE_KEY_PAIR CRYPTO(111) #define CRYPTO_WRAP_KEY CRYPTO(112) #define CRYPTO_UNWRAP_KEY CRYPTO(113) #define CRYPTO_DERIVE_KEY CRYPTO(114) /* * Provider Management Ioctls */ typedef struct crypto_get_provider_list { uint_t pl_return_value; uint_t pl_count; crypto_provider_entry_t pl_list[1]; } crypto_get_provider_list_t; typedef struct crypto_provider_data { uchar_t pd_prov_desc[CRYPTO_PROVIDER_DESCR_MAX_LEN]; uchar_t pd_label[CRYPTO_EXT_SIZE_LABEL]; uchar_t pd_manufacturerID[CRYPTO_EXT_SIZE_MANUF]; uchar_t pd_model[CRYPTO_EXT_SIZE_MODEL]; uchar_t pd_serial_number[CRYPTO_EXT_SIZE_SERIAL]; ulong_t pd_flags; ulong_t pd_max_session_count; ulong_t pd_session_count; ulong_t pd_max_rw_session_count; ulong_t pd_rw_session_count; ulong_t pd_max_pin_len; ulong_t pd_min_pin_len; ulong_t pd_total_public_memory; ulong_t pd_free_public_memory; ulong_t pd_total_private_memory; ulong_t pd_free_private_memory; crypto_version_t pd_hardware_version; crypto_version_t pd_firmware_version; uchar_t pd_time[CRYPTO_EXT_SIZE_TIME]; } crypto_provider_data_t; typedef struct crypto_get_provider_info { uint_t gi_return_value; crypto_provider_id_t gi_provider_id; crypto_provider_data_t gi_provider_data; } crypto_get_provider_info_t; typedef struct crypto_get_provider_mechanisms { uint_t pm_return_value; crypto_provider_id_t pm_provider_id; uint_t pm_count; crypto_mech_name_t pm_list[1]; } crypto_get_provider_mechanisms_t; typedef struct crypto_get_provider_mechanism_info { uint_t mi_return_value; crypto_provider_id_t mi_provider_id; crypto_mech_name_t mi_mechanism_name; uint32_t mi_min_key_size; uint32_t mi_max_key_size; uint32_t mi_flags; } crypto_get_provider_mechanism_info_t; typedef struct crypto_init_token { uint_t it_return_value; crypto_provider_id_t it_provider_id; caddr_t it_pin; size_t it_pin_len; caddr_t it_label; } crypto_init_token_t; typedef struct crypto_init_pin { uint_t ip_return_value; crypto_session_id_t ip_session; caddr_t ip_pin; size_t ip_pin_len; } crypto_init_pin_t; typedef struct crypto_set_pin { uint_t sp_return_value; crypto_session_id_t sp_session; caddr_t sp_old_pin; size_t sp_old_len; caddr_t sp_new_pin; size_t sp_new_len; } crypto_set_pin_t; #ifdef _KERNEL #ifdef _SYSCALL32 typedef struct crypto_get_provider_list32 { uint32_t pl_return_value; uint32_t pl_count; crypto_provider_entry_t pl_list[1]; } crypto_get_provider_list32_t; typedef struct crypto_version32 { uchar_t cv_major; uchar_t cv_minor; } crypto_version32_t; typedef struct crypto_provider_data32 { uchar_t pd_prov_desc[CRYPTO_PROVIDER_DESCR_MAX_LEN]; uchar_t pd_label[CRYPTO_EXT_SIZE_LABEL]; uchar_t pd_manufacturerID[CRYPTO_EXT_SIZE_MANUF]; uchar_t pd_model[CRYPTO_EXT_SIZE_MODEL]; uchar_t pd_serial_number[CRYPTO_EXT_SIZE_SERIAL]; uint32_t pd_flags; uint32_t pd_max_session_count; uint32_t pd_session_count; uint32_t pd_max_rw_session_count; uint32_t pd_rw_session_count; uint32_t pd_max_pin_len; uint32_t pd_min_pin_len; uint32_t pd_total_public_memory; uint32_t pd_free_public_memory; uint32_t pd_total_private_memory; uint32_t pd_free_private_memory; crypto_version32_t pd_hardware_version; crypto_version32_t pd_firmware_version; uchar_t pd_time[CRYPTO_EXT_SIZE_TIME]; } crypto_provider_data32_t; typedef struct crypto_get_provider_info32 { uint32_t gi_return_value; crypto_provider_id_t gi_provider_id; crypto_provider_data32_t gi_provider_data; } crypto_get_provider_info32_t; typedef struct crypto_get_provider_mechanisms32 { uint32_t pm_return_value; crypto_provider_id_t pm_provider_id; uint32_t pm_count; crypto_mech_name_t pm_list[1]; } crypto_get_provider_mechanisms32_t; typedef struct crypto_init_token32 { uint32_t it_return_value; crypto_provider_id_t it_provider_id; caddr32_t it_pin; size32_t it_pin_len; caddr32_t it_label; } crypto_init_token32_t; typedef struct crypto_init_pin32 { uint32_t ip_return_value; crypto_session_id_t ip_session; caddr32_t ip_pin; size32_t ip_pin_len; } crypto_init_pin32_t; typedef struct crypto_set_pin32 { uint32_t sp_return_value; crypto_session_id_t sp_session; caddr32_t sp_old_pin; size32_t sp_old_len; caddr32_t sp_new_pin; size32_t sp_new_len; } crypto_set_pin32_t; #endif /* _SYSCALL32 */ #endif /* _KERNEL */ #define CRYPTO_GET_PROVIDER_LIST CRYPTO(120) #define CRYPTO_GET_PROVIDER_INFO CRYPTO(121) #define CRYPTO_GET_PROVIDER_MECHANISMS CRYPTO(122) #define CRYPTO_GET_PROVIDER_MECHANISM_INFO CRYPTO(123) #define CRYPTO_INIT_TOKEN CRYPTO(124) #define CRYPTO_INIT_PIN CRYPTO(125) #define CRYPTO_SET_PIN CRYPTO(126) /* * No (Key) Store Key Generation Ioctls */ typedef struct crypto_nostore_generate_key { uint_t ngk_return_value; crypto_session_id_t ngk_session; crypto_mechanism_t ngk_mechanism; uint_t ngk_in_count; uint_t ngk_out_count; caddr_t ngk_in_attributes; caddr_t ngk_out_attributes; } crypto_nostore_generate_key_t; typedef struct crypto_nostore_generate_key_pair { uint_t nkp_return_value; crypto_session_id_t nkp_session; uint_t nkp_in_public_count; uint_t nkp_in_private_count; uint_t nkp_out_public_count; uint_t nkp_out_private_count; caddr_t nkp_in_public_attributes; caddr_t nkp_in_private_attributes; caddr_t nkp_out_public_attributes; caddr_t nkp_out_private_attributes; crypto_mechanism_t nkp_mechanism; } crypto_nostore_generate_key_pair_t; typedef struct crypto_nostore_derive_key { uint_t ndk_return_value; crypto_session_id_t ndk_session; crypto_mechanism_t ndk_mechanism; crypto_key_t ndk_base_key; uint_t ndk_in_count; uint_t ndk_out_count; caddr_t ndk_in_attributes; caddr_t ndk_out_attributes; } crypto_nostore_derive_key_t; #ifdef _KERNEL #ifdef _SYSCALL32 typedef struct crypto_nostore_generate_key32 { uint32_t ngk_return_value; crypto_session_id_t ngk_session; crypto_mechanism32_t ngk_mechanism; uint32_t ngk_in_count; uint32_t ngk_out_count; caddr32_t ngk_in_attributes; caddr32_t ngk_out_attributes; } crypto_nostore_generate_key32_t; typedef struct crypto_nostore_generate_key_pair32 { uint32_t nkp_return_value; crypto_session_id_t nkp_session; uint32_t nkp_in_public_count; uint32_t nkp_in_private_count; uint32_t nkp_out_public_count; uint32_t nkp_out_private_count; caddr32_t nkp_in_public_attributes; caddr32_t nkp_in_private_attributes; caddr32_t nkp_out_public_attributes; caddr32_t nkp_out_private_attributes; crypto_mechanism32_t nkp_mechanism; } crypto_nostore_generate_key_pair32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack(4) #endif typedef struct crypto_nostore_derive_key32 { uint32_t ndk_return_value; crypto_session_id_t ndk_session; crypto_mechanism32_t ndk_mechanism; crypto_key32_t ndk_base_key; uint32_t ndk_in_count; uint32_t ndk_out_count; caddr32_t ndk_in_attributes; caddr32_t ndk_out_attributes; } crypto_nostore_derive_key32_t; #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 #pragma pack() #endif #endif /* _SYSCALL32 */ #endif /* _KERNEL */ #define CRYPTO_NOSTORE_GENERATE_KEY CRYPTO(127) #define CRYPTO_NOSTORE_GENERATE_KEY_PAIR CRYPTO(128) #define CRYPTO_NOSTORE_DERIVE_KEY CRYPTO(129) /* * Mechanism Ioctls */ typedef struct crypto_get_mechanism_list { uint_t ml_return_value; uint_t ml_count; crypto_mech_name_t ml_list[1]; } crypto_get_mechanism_list_t; typedef struct crypto_get_all_mechanism_info { uint_t mi_return_value; crypto_mech_name_t mi_mechanism_name; uint_t mi_count; crypto_mechanism_info_t mi_list[1]; } crypto_get_all_mechanism_info_t; #ifdef _KERNEL #ifdef _SYSCALL32 typedef struct crypto_get_mechanism_list32 { uint32_t ml_return_value; uint32_t ml_count; crypto_mech_name_t ml_list[1]; } crypto_get_mechanism_list32_t; typedef struct crypto_get_all_mechanism_info32 { uint32_t mi_return_value; crypto_mech_name_t mi_mechanism_name; uint32_t mi_count; crypto_mechanism_info32_t mi_list[1]; } crypto_get_all_mechanism_info32_t; #endif /* _SYSCALL32 */ #endif /* _KERNEL */ #define CRYPTO_GET_MECHANISM_LIST CRYPTO(140) #define CRYPTO_GET_ALL_MECHANISM_INFO CRYPTO(141) #ifdef __cplusplus } #endif #endif /* _SYS_CRYPTO_IOCTL_H */