mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	 112c1bff94
			
		
	
	
		112c1bff94
		
			
		
	
	
	
	
		
			
			These paths are never exercised, as the parameters given are always different cipher and plaintext `crypto_data_t` pointers. Reviewed-by: Richard Laager <rlaager@wiktel.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Attila Fueloep <attila@fueloep.org> Signed-off-by: Dirkjan Bussink <d.bussink@gmail.com> Closes #9661 Closes #10015
		
			
				
	
	
		
			1481 lines
		
	
	
		
			37 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1481 lines
		
	
	
		
			37 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * 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 2008 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 <sys/zfs_context.h>
 | |
| #include <sys/crypto/api.h>
 | |
| #include <sys/crypto/spi.h>
 | |
| #include <sys/crypto/common.h>
 | |
| 
 | |
| #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			0x00000111
 | |
| #define	CKM_DES3_ECB		0x00000132
 | |
| #define	CKM_DES3_CBC		0x00000133
 | |
| #define	CKM_MD5			0x00000210
 | |
| #define	CKM_SHA_1		0x00000220
 | |
| #define	CKM_AES_ECB		0x00001081
 | |
| #define	CKM_AES_CBC		0x00001082
 | |
| 
 | |
| /*
 | |
|  * 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_limited;
 | |
| 	uint32_t prov_hash_threshold;
 | |
| 	uint32_t prov_hash_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)
 | |
| 
 | |
| /*
 | |
|  * 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;
 | |
| } 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;
 | |
| } 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;
 | |
| } 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;
 | |
| } 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 */
 |