add package for ocf-crypto-headers
SVN-Revision: 13283
This commit is contained in:
		
							
								
								
									
										34
									
								
								package/ocf-crypto-headers/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								package/ocf-crypto-headers/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | # | ||||||
|  | # Copyright (C) 2008 OpenWrt.org | ||||||
|  | # | ||||||
|  | # This is free software, licensed under the GNU General Public License v2. | ||||||
|  | # See /LICENSE for more information. | ||||||
|  | # | ||||||
|  | include $(TOPDIR)/rules.mk | ||||||
|  |  | ||||||
|  | PKG_NAME:=ocf-crypto-headers | ||||||
|  | PKG_VERSION:=20080917 | ||||||
|  | PKG_RELEASE:=1 | ||||||
|  |  | ||||||
|  | PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) | ||||||
|  |  | ||||||
|  | include $(INCLUDE_DIR)/package.mk | ||||||
|  |  | ||||||
|  | define Package/ocf-crypto-headers | ||||||
|  |   SECTION:=utils | ||||||
|  |   CATEGORY:=Utilities | ||||||
|  |   TITLE:=OCF-Linux cryptodev header | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Build/Configure | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Build/Compile | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define Build/InstallDev | ||||||
|  | 	mkdir -p $(1)/usr/include/crypto | ||||||
|  | 	$(CP) ./src/cryptodev.h $(1)/usr/include/crypto | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | $(eval $(call BuildPackage,ocf-crypto-headers)) | ||||||
							
								
								
									
										478
									
								
								package/ocf-crypto-headers/src/cryptodev.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										478
									
								
								package/ocf-crypto-headers/src/cryptodev.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,478 @@ | |||||||
|  | /*	$FreeBSD: src/sys/opencrypto/cryptodev.h,v 1.25 2007/05/09 19:37:02 gnn Exp $	*/ | ||||||
|  | /*	$OpenBSD: cryptodev.h,v 1.31 2002/06/11 11:14:29 beck Exp $	*/ | ||||||
|  |  | ||||||
|  | /*- | ||||||
|  |  * Linux port done by David McCullough <david_mccullough@securecomputing.com> | ||||||
|  |  * Copyright (C) 2006-2007 David McCullough | ||||||
|  |  * Copyright (C) 2004-2005 Intel Corporation. | ||||||
|  |  * The license and original author are listed below. | ||||||
|  |  * | ||||||
|  |  * The author of this code is Angelos D. Keromytis (angelos@cis.upenn.edu) | ||||||
|  |  * Copyright (c) 2002-2006 Sam Leffler, Errno Consulting | ||||||
|  |  * | ||||||
|  |  * This code was written by Angelos D. Keromytis in Athens, Greece, in | ||||||
|  |  * February 2000. Network Security Technologies Inc. (NSTI) kindly | ||||||
|  |  * supported the development of this code. | ||||||
|  |  * | ||||||
|  |  * Copyright (c) 2000 Angelos D. Keromytis | ||||||
|  |  * | ||||||
|  |  * Permission to use, copy, and modify this software with or without fee | ||||||
|  |  * is hereby granted, provided that this entire notice is included in | ||||||
|  |  * all source code copies of any software which is or includes a copy or | ||||||
|  |  * modification of this software. | ||||||
|  |  * | ||||||
|  |  * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR | ||||||
|  |  * IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY | ||||||
|  |  * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE | ||||||
|  |  * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR | ||||||
|  |  * PURPOSE. | ||||||
|  |  * | ||||||
|  |  * Copyright (c) 2001 Theo de Raadt | ||||||
|  |  * | ||||||
|  |  * Redistribution and use in source and binary forms, with or without | ||||||
|  |  * modification, are permitted provided that the following conditions | ||||||
|  |  * are met: | ||||||
|  |  * | ||||||
|  |  * 1. Redistributions of source code must retain the above copyright | ||||||
|  |  *   notice, this list of conditions and the following disclaimer. | ||||||
|  |  * 2. Redistributions in binary form must reproduce the above copyright | ||||||
|  |  *   notice, this list of conditions and the following disclaimer in the | ||||||
|  |  *   documentation and/or other materials provided with the distribution. | ||||||
|  |  * 3. The name of the author may not be used to endorse or promote products | ||||||
|  |  *   derived from this software without specific prior written permission. | ||||||
|  |  * | ||||||
|  |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | ||||||
|  |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | ||||||
|  |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | ||||||
|  |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||||||
|  |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||||||
|  |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||||
|  |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||||
|  |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||||
|  |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||||||
|  |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  |  * | ||||||
|  |  * Effort sponsored in part by the Defense Advanced Research Projects | ||||||
|  |  * Agency (DARPA) and Air Force Research Laboratory, Air Force | ||||||
|  |  * Materiel Command, USAF, under agreement number F30602-01-2-0537. | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifndef _CRYPTO_CRYPTO_H_ | ||||||
|  | #define _CRYPTO_CRYPTO_H_ | ||||||
|  |  | ||||||
|  | /* Some initial values */ | ||||||
|  | #define CRYPTO_DRIVERS_INITIAL	4 | ||||||
|  | #define CRYPTO_SW_SESSIONS	32 | ||||||
|  |  | ||||||
|  | /* Hash values */ | ||||||
|  | #define NULL_HASH_LEN		0 | ||||||
|  | #define MD5_HASH_LEN		16 | ||||||
|  | #define SHA1_HASH_LEN		20 | ||||||
|  | #define RIPEMD160_HASH_LEN	20 | ||||||
|  | #define SHA2_256_HASH_LEN	32 | ||||||
|  | #define SHA2_384_HASH_LEN	48 | ||||||
|  | #define SHA2_512_HASH_LEN	64 | ||||||
|  | #define MD5_KPDK_HASH_LEN	16 | ||||||
|  | #define SHA1_KPDK_HASH_LEN	20 | ||||||
|  | /* Maximum hash algorithm result length */ | ||||||
|  | #define HASH_MAX_LEN		SHA2_512_HASH_LEN /* Keep this updated */ | ||||||
|  |  | ||||||
|  | /* HMAC values */ | ||||||
|  | #define NULL_HMAC_BLOCK_LEN			1 | ||||||
|  | #define MD5_HMAC_BLOCK_LEN			64 | ||||||
|  | #define SHA1_HMAC_BLOCK_LEN			64 | ||||||
|  | #define RIPEMD160_HMAC_BLOCK_LEN	64 | ||||||
|  | #define SHA2_256_HMAC_BLOCK_LEN		64 | ||||||
|  | #define SHA2_384_HMAC_BLOCK_LEN		128 | ||||||
|  | #define SHA2_512_HMAC_BLOCK_LEN		128 | ||||||
|  | /* Maximum HMAC block length */ | ||||||
|  | #define HMAC_MAX_BLOCK_LEN		SHA2_512_HMAC_BLOCK_LEN /* Keep this updated */ | ||||||
|  | #define HMAC_IPAD_VAL			0x36 | ||||||
|  | #define HMAC_OPAD_VAL			0x5C | ||||||
|  |  | ||||||
|  | /* Encryption algorithm block sizes */ | ||||||
|  | #define NULL_BLOCK_LEN			1 | ||||||
|  | #define DES_BLOCK_LEN			8 | ||||||
|  | #define DES3_BLOCK_LEN			8 | ||||||
|  | #define BLOWFISH_BLOCK_LEN		8 | ||||||
|  | #define SKIPJACK_BLOCK_LEN		8 | ||||||
|  | #define CAST128_BLOCK_LEN		8 | ||||||
|  | #define RIJNDAEL128_BLOCK_LEN	16 | ||||||
|  | #define AES_BLOCK_LEN			RIJNDAEL128_BLOCK_LEN | ||||||
|  | #define CAMELLIA_BLOCK_LEN		16 | ||||||
|  | #define ARC4_BLOCK_LEN			1 | ||||||
|  | #define EALG_MAX_BLOCK_LEN		AES_BLOCK_LEN /* Keep this updated */ | ||||||
|  |  | ||||||
|  | /* Encryption algorithm min and max key sizes */ | ||||||
|  | #define NULL_MIN_KEY_LEN		0 | ||||||
|  | #define NULL_MAX_KEY_LEN		0 | ||||||
|  | #define DES_MIN_KEY_LEN			8 | ||||||
|  | #define DES_MAX_KEY_LEN			8 | ||||||
|  | #define DES3_MIN_KEY_LEN		24 | ||||||
|  | #define DES3_MAX_KEY_LEN		24 | ||||||
|  | #define BLOWFISH_MIN_KEY_LEN	4 | ||||||
|  | #define BLOWFISH_MAX_KEY_LEN	56 | ||||||
|  | #define SKIPJACK_MIN_KEY_LEN	10 | ||||||
|  | #define SKIPJACK_MAX_KEY_LEN	10 | ||||||
|  | #define CAST128_MIN_KEY_LEN		5 | ||||||
|  | #define CAST128_MAX_KEY_LEN		16 | ||||||
|  | #define RIJNDAEL128_MIN_KEY_LEN	16 | ||||||
|  | #define RIJNDAEL128_MAX_KEY_LEN	32 | ||||||
|  | #define AES_MIN_KEY_LEN			RIJNDAEL128_MIN_KEY_LEN | ||||||
|  | #define AES_MAX_KEY_LEN			RIJNDAEL128_MAX_KEY_LEN | ||||||
|  | #define CAMELLIA_MIN_KEY_LEN	16 | ||||||
|  | #define CAMELLIA_MAX_KEY_LEN	32 | ||||||
|  | #define ARC4_MIN_KEY_LEN		1 | ||||||
|  | #define ARC4_MAX_KEY_LEN		256 | ||||||
|  |  | ||||||
|  | /* Max size of data that can be processed */ | ||||||
|  | #define CRYPTO_MAX_DATA_LEN		64*1024 - 1 | ||||||
|  |  | ||||||
|  | #define CRYPTO_ALGORITHM_MIN	1 | ||||||
|  | #define CRYPTO_DES_CBC			1 | ||||||
|  | #define CRYPTO_3DES_CBC			2 | ||||||
|  | #define CRYPTO_BLF_CBC			3 | ||||||
|  | #define CRYPTO_CAST_CBC			4 | ||||||
|  | #define CRYPTO_SKIPJACK_CBC		5 | ||||||
|  | #define CRYPTO_MD5_HMAC			6 | ||||||
|  | #define CRYPTO_SHA1_HMAC		7 | ||||||
|  | #define CRYPTO_RIPEMD160_HMAC	8 | ||||||
|  | #define CRYPTO_MD5_KPDK			9 | ||||||
|  | #define CRYPTO_SHA1_KPDK		10 | ||||||
|  | #define CRYPTO_RIJNDAEL128_CBC	11 /* 128 bit blocksize */ | ||||||
|  | #define CRYPTO_AES_CBC			11 /* 128 bit blocksize -- the same as above */ | ||||||
|  | #define CRYPTO_ARC4				12 | ||||||
|  | #define CRYPTO_MD5				13 | ||||||
|  | #define CRYPTO_SHA1				14 | ||||||
|  | #define CRYPTO_NULL_HMAC		15 | ||||||
|  | #define CRYPTO_NULL_CBC			16 | ||||||
|  | #define CRYPTO_DEFLATE_COMP		17 /* Deflate compression algorithm */ | ||||||
|  | #define CRYPTO_SHA2_256_HMAC	18 | ||||||
|  | #define CRYPTO_SHA2_384_HMAC	19 | ||||||
|  | #define CRYPTO_SHA2_512_HMAC	20 | ||||||
|  | #define CRYPTO_CAMELLIA_CBC		21 | ||||||
|  | #define CRYPTO_SHA2_256			22 | ||||||
|  | #define CRYPTO_SHA2_384			23 | ||||||
|  | #define CRYPTO_SHA2_512			24 | ||||||
|  | #define CRYPTO_RIPEMD160		25 | ||||||
|  | #define CRYPTO_ALGORITHM_MAX	25 /* Keep updated - see below */ | ||||||
|  |  | ||||||
|  | /* Algorithm flags */ | ||||||
|  | #define CRYPTO_ALG_FLAG_SUPPORTED	0x01 /* Algorithm is supported */ | ||||||
|  | #define CRYPTO_ALG_FLAG_RNG_ENABLE	0x02 /* Has HW RNG for DH/DSA */ | ||||||
|  | #define CRYPTO_ALG_FLAG_DSA_SHA		0x04 /* Can do SHA on msg */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Crypto driver/device flags.  They can set in the crid | ||||||
|  |  * parameter when creating a session or submitting a key | ||||||
|  |  * op to affect the device/driver assigned.  If neither | ||||||
|  |  * of these are specified then the crid is assumed to hold | ||||||
|  |  * the driver id of an existing (and suitable) device that | ||||||
|  |  * must be used to satisfy the request. | ||||||
|  |  */ | ||||||
|  | #define CRYPTO_FLAG_HARDWARE	0x01000000	/* hardware accelerated */ | ||||||
|  | #define CRYPTO_FLAG_SOFTWARE	0x02000000	/* software implementation */ | ||||||
|  |  | ||||||
|  | /* NB: deprecated */ | ||||||
|  | struct session_op { | ||||||
|  | 	u_int32_t	cipher;		/* ie. CRYPTO_DES_CBC */ | ||||||
|  | 	u_int32_t	mac;		/* ie. CRYPTO_MD5_HMAC */ | ||||||
|  |  | ||||||
|  | 	u_int32_t	keylen;		/* cipher key */ | ||||||
|  | 	caddr_t		key; | ||||||
|  | 	int		mackeylen;	/* mac key */ | ||||||
|  | 	caddr_t		mackey; | ||||||
|  |  | ||||||
|  |   	u_int32_t	ses;		/* returns: session # */  | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | struct session2_op { | ||||||
|  | 	u_int32_t	cipher;		/* ie. CRYPTO_DES_CBC */ | ||||||
|  | 	u_int32_t	mac;		/* ie. CRYPTO_MD5_HMAC */ | ||||||
|  |  | ||||||
|  | 	u_int32_t	keylen;		/* cipher key */ | ||||||
|  | 	caddr_t		key; | ||||||
|  | 	int		mackeylen;	/* mac key */ | ||||||
|  | 	caddr_t		mackey; | ||||||
|  |  | ||||||
|  |   	u_int32_t	ses;		/* returns: session # */  | ||||||
|  | 	int		crid;		/* driver id + flags (rw) */ | ||||||
|  | 	int		pad[4];		/* for future expansion */ | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | struct crypt_op { | ||||||
|  | 	u_int32_t	ses; | ||||||
|  | 	u_int16_t	op;		/* i.e. COP_ENCRYPT */ | ||||||
|  | #define COP_NONE	0 | ||||||
|  | #define COP_ENCRYPT	1 | ||||||
|  | #define COP_DECRYPT	2 | ||||||
|  | 	u_int16_t	flags; | ||||||
|  | #define	COP_F_BATCH	0x0008		/* Batch op if possible */ | ||||||
|  | 	u_int		len; | ||||||
|  | 	caddr_t		src, dst;	/* become iov[] inside kernel */ | ||||||
|  | 	caddr_t		mac;		/* must be big enough for chosen MAC */ | ||||||
|  | 	caddr_t		iv; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Parameters for looking up a crypto driver/device by | ||||||
|  |  * device name or by id.  The latter are returned for | ||||||
|  |  * created sessions (crid) and completed key operations. | ||||||
|  |  */ | ||||||
|  | struct crypt_find_op { | ||||||
|  | 	int		crid;		/* driver id + flags */ | ||||||
|  | 	char		name[32];	/* device/driver name */ | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* bignum parameter, in packed bytes, ... */ | ||||||
|  | struct crparam { | ||||||
|  | 	caddr_t		crp_p; | ||||||
|  | 	u_int		crp_nbits; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | #define CRK_MAXPARAM	8 | ||||||
|  |  | ||||||
|  | struct crypt_kop { | ||||||
|  | 	u_int		crk_op;		/* ie. CRK_MOD_EXP or other */ | ||||||
|  | 	u_int		crk_status;	/* return status */ | ||||||
|  | 	u_short		crk_iparams;	/* # of input parameters */ | ||||||
|  | 	u_short		crk_oparams;	/* # of output parameters */ | ||||||
|  | 	u_int		crk_crid;	/* NB: only used by CIOCKEY2 (rw) */ | ||||||
|  | 	struct crparam	crk_param[CRK_MAXPARAM]; | ||||||
|  | }; | ||||||
|  | #define CRK_ALGORITM_MIN	0 | ||||||
|  | #define CRK_MOD_EXP		0 | ||||||
|  | #define CRK_MOD_EXP_CRT		1 | ||||||
|  | #define CRK_DSA_SIGN		2 | ||||||
|  | #define CRK_DSA_VERIFY		3 | ||||||
|  | #define CRK_DH_COMPUTE_KEY	4 | ||||||
|  | #define CRK_ALGORITHM_MAX	4 /* Keep updated - see below */ | ||||||
|  |  | ||||||
|  | #define CRF_MOD_EXP		(1 << CRK_MOD_EXP) | ||||||
|  | #define CRF_MOD_EXP_CRT		(1 << CRK_MOD_EXP_CRT) | ||||||
|  | #define CRF_DSA_SIGN		(1 << CRK_DSA_SIGN) | ||||||
|  | #define CRF_DSA_VERIFY		(1 << CRK_DSA_VERIFY) | ||||||
|  | #define CRF_DH_COMPUTE_KEY	(1 << CRK_DH_COMPUTE_KEY) | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * done against open of /dev/crypto, to get a cloned descriptor. | ||||||
|  |  * Please use F_SETFD against the cloned descriptor. | ||||||
|  |  */ | ||||||
|  | #define CRIOGET		_IOWR('c', 100, u_int32_t) | ||||||
|  | #define CRIOASYMFEAT	CIOCASYMFEAT | ||||||
|  | #define CRIOFINDDEV	CIOCFINDDEV | ||||||
|  |  | ||||||
|  | /* the following are done against the cloned descriptor */ | ||||||
|  | #define CIOCGSESSION	_IOWR('c', 101, struct session_op) | ||||||
|  | #define CIOCFSESSION	_IOW('c', 102, u_int32_t) | ||||||
|  | #define CIOCCRYPT	_IOWR('c', 103, struct crypt_op) | ||||||
|  | #define CIOCKEY		_IOWR('c', 104, struct crypt_kop) | ||||||
|  | #define CIOCASYMFEAT	_IOR('c', 105, u_int32_t) | ||||||
|  | #define CIOCGSESSION2	_IOWR('c', 106, struct session2_op) | ||||||
|  | #define CIOCKEY2	_IOWR('c', 107, struct crypt_kop) | ||||||
|  | #define CIOCFINDDEV	_IOWR('c', 108, struct crypt_find_op) | ||||||
|  |  | ||||||
|  | struct cryptotstat { | ||||||
|  | 	struct timespec	acc;		/* total accumulated time */ | ||||||
|  | 	struct timespec	min;		/* min time */ | ||||||
|  | 	struct timespec	max;		/* max time */ | ||||||
|  | 	u_int32_t	count;		/* number of observations */ | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | struct cryptostats { | ||||||
|  | 	u_int32_t	cs_ops;		/* symmetric crypto ops submitted */ | ||||||
|  | 	u_int32_t	cs_errs;	/* symmetric crypto ops that failed */ | ||||||
|  | 	u_int32_t	cs_kops;	/* asymetric/key ops submitted */ | ||||||
|  | 	u_int32_t	cs_kerrs;	/* asymetric/key ops that failed */ | ||||||
|  | 	u_int32_t	cs_intrs;	/* crypto swi thread activations */ | ||||||
|  | 	u_int32_t	cs_rets;	/* crypto return thread activations */ | ||||||
|  | 	u_int32_t	cs_blocks;	/* symmetric op driver block */ | ||||||
|  | 	u_int32_t	cs_kblocks;	/* symmetric op driver block */ | ||||||
|  | 	/* | ||||||
|  | 	 * When CRYPTO_TIMING is defined at compile time and the | ||||||
|  | 	 * sysctl debug.crypto is set to 1, the crypto system will | ||||||
|  | 	 * accumulate statistics about how long it takes to process | ||||||
|  | 	 * crypto requests at various points during processing. | ||||||
|  | 	 */ | ||||||
|  | 	struct cryptotstat cs_invoke;	/* crypto_dipsatch -> crypto_invoke */ | ||||||
|  | 	struct cryptotstat cs_done;	/* crypto_invoke -> crypto_done */ | ||||||
|  | 	struct cryptotstat cs_cb;	/* crypto_done -> callback */ | ||||||
|  | 	struct cryptotstat cs_finis;	/* callback -> callback return */ | ||||||
|  |  | ||||||
|  | 	u_int32_t	cs_drops;		/* crypto ops dropped due to congestion */ | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | #ifdef __KERNEL__ | ||||||
|  |  | ||||||
|  | /* Standard initialization structure beginning */ | ||||||
|  | struct cryptoini { | ||||||
|  | 	int		cri_alg;	/* Algorithm to use */ | ||||||
|  | 	int		cri_klen;	/* Key length, in bits */ | ||||||
|  | 	int		cri_mlen;	/* Number of bytes we want from the | ||||||
|  | 					   entire hash. 0 means all. */ | ||||||
|  | 	caddr_t		cri_key;	/* key to use */ | ||||||
|  | 	u_int8_t	cri_iv[EALG_MAX_BLOCK_LEN];	/* IV to use */ | ||||||
|  | 	struct cryptoini *cri_next; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* Describe boundaries of a single crypto operation */ | ||||||
|  | struct cryptodesc { | ||||||
|  | 	int		crd_skip;	/* How many bytes to ignore from start */ | ||||||
|  | 	int		crd_len;	/* How many bytes to process */ | ||||||
|  | 	int		crd_inject;	/* Where to inject results, if applicable */ | ||||||
|  | 	int		crd_flags; | ||||||
|  |  | ||||||
|  | #define CRD_F_ENCRYPT		0x01	/* Set when doing encryption */ | ||||||
|  | #define CRD_F_IV_PRESENT	0x02	/* When encrypting, IV is already in | ||||||
|  | 					   place, so don't copy. */ | ||||||
|  | #define CRD_F_IV_EXPLICIT	0x04	/* IV explicitly provided */ | ||||||
|  | #define CRD_F_DSA_SHA_NEEDED	0x08	/* Compute SHA-1 of buffer for DSA */ | ||||||
|  | #define CRD_F_KEY_EXPLICIT	0x10	/* Key explicitly provided */ | ||||||
|  | #define CRD_F_COMP		0x0f    /* Set when doing compression */ | ||||||
|  |  | ||||||
|  | 	struct cryptoini	CRD_INI; /* Initialization/context data */ | ||||||
|  | #define crd_iv		CRD_INI.cri_iv | ||||||
|  | #define crd_key		CRD_INI.cri_key | ||||||
|  | #define crd_alg		CRD_INI.cri_alg | ||||||
|  | #define crd_klen	CRD_INI.cri_klen | ||||||
|  |  | ||||||
|  | 	struct cryptodesc *crd_next; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* Structure describing complete operation */ | ||||||
|  | struct cryptop { | ||||||
|  | 	struct list_head crp_next; | ||||||
|  | 	wait_queue_head_t crp_waitq; | ||||||
|  |  | ||||||
|  | 	u_int64_t	crp_sid;	/* Session ID */ | ||||||
|  | 	int		crp_ilen;	/* Input data total length */ | ||||||
|  | 	int		crp_olen;	/* Result total length */ | ||||||
|  |  | ||||||
|  | 	int		crp_etype;	/* | ||||||
|  | 					 * Error type (zero means no error). | ||||||
|  | 					 * All error codes except EAGAIN | ||||||
|  | 					 * indicate possible data corruption (as in, | ||||||
|  | 					 * the data have been touched). On all | ||||||
|  | 					 * errors, the crp_sid may have changed | ||||||
|  | 					 * (reset to a new one), so the caller | ||||||
|  | 					 * should always check and use the new | ||||||
|  | 					 * value on future requests. | ||||||
|  | 					 */ | ||||||
|  | 	int		crp_flags; | ||||||
|  |  | ||||||
|  | #define CRYPTO_F_SKBUF		0x0001	/* Input/output are skbuf chains */ | ||||||
|  | #define CRYPTO_F_IOV		0x0002	/* Input/output are uio */ | ||||||
|  | #define CRYPTO_F_REL		0x0004	/* Must return data in same place */ | ||||||
|  | #define CRYPTO_F_BATCH		0x0008	/* Batch op if possible */ | ||||||
|  | #define CRYPTO_F_CBIMM		0x0010	/* Do callback immediately */ | ||||||
|  | #define CRYPTO_F_DONE		0x0020	/* Operation completed */ | ||||||
|  | #define CRYPTO_F_CBIFSYNC	0x0040	/* Do CBIMM if op is synchronous */ | ||||||
|  |  | ||||||
|  | 	caddr_t		crp_buf;	/* Data to be processed */ | ||||||
|  | 	caddr_t		crp_opaque;	/* Opaque pointer, passed along */ | ||||||
|  | 	struct cryptodesc *crp_desc;	/* Linked list of processing descriptors */ | ||||||
|  |  | ||||||
|  | 	int (*crp_callback)(struct cryptop *); /* Callback function */ | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | #define CRYPTO_BUF_CONTIG	0x0 | ||||||
|  | #define CRYPTO_BUF_IOV		0x1 | ||||||
|  | #define CRYPTO_BUF_SKBUF		0x2 | ||||||
|  |  | ||||||
|  | #define CRYPTO_OP_DECRYPT	0x0 | ||||||
|  | #define CRYPTO_OP_ENCRYPT	0x1 | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Hints passed to process methods. | ||||||
|  |  */ | ||||||
|  | #define CRYPTO_HINT_MORE	0x1	/* more ops coming shortly */ | ||||||
|  |  | ||||||
|  | struct cryptkop { | ||||||
|  | 	struct list_head krp_next; | ||||||
|  | 	wait_queue_head_t krp_waitq; | ||||||
|  |  | ||||||
|  | 	int		krp_flags; | ||||||
|  | #define CRYPTO_KF_DONE		0x0001	/* Operation completed */ | ||||||
|  | #define CRYPTO_KF_CBIMM		0x0002	/* Do callback immediately */ | ||||||
|  |  | ||||||
|  | 	u_int		krp_op;		/* ie. CRK_MOD_EXP or other */ | ||||||
|  | 	u_int		krp_status;	/* return status */ | ||||||
|  | 	u_short		krp_iparams;	/* # of input parameters */ | ||||||
|  | 	u_short		krp_oparams;	/* # of output parameters */ | ||||||
|  | 	u_int		krp_crid;	/* desired device, etc. */ | ||||||
|  | 	u_int32_t	krp_hid; | ||||||
|  | 	struct crparam	krp_param[CRK_MAXPARAM];	/* kvm */ | ||||||
|  | 	int		(*krp_callback)(struct cryptkop *); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | #include <ocf-compat.h> | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Session ids are 64 bits.  The lower 32 bits contain a "local id" which | ||||||
|  |  * is a driver-private session identifier.  The upper 32 bits contain a | ||||||
|  |  * "hardware id" used by the core crypto code to identify the driver and | ||||||
|  |  * a copy of the driver's capabilities that can be used by client code to | ||||||
|  |  * optimize operation. | ||||||
|  |  */ | ||||||
|  | #define CRYPTO_SESID2HID(_sid)	(((_sid) >> 32) & 0x00ffffff) | ||||||
|  | #define CRYPTO_SESID2CAPS(_sid)	(((_sid) >> 32) & 0xff000000) | ||||||
|  | #define CRYPTO_SESID2LID(_sid)	(((u_int32_t) (_sid)) & 0xffffffff) | ||||||
|  |  | ||||||
|  | extern	int crypto_newsession(u_int64_t *sid, struct cryptoini *cri, int hard); | ||||||
|  | extern	int crypto_freesession(u_int64_t sid); | ||||||
|  | #define CRYPTOCAP_F_HARDWARE	CRYPTO_FLAG_HARDWARE | ||||||
|  | #define CRYPTOCAP_F_SOFTWARE	CRYPTO_FLAG_SOFTWARE | ||||||
|  | #define CRYPTOCAP_F_SYNC	0x04000000	/* operates synchronously */ | ||||||
|  | extern	int32_t crypto_get_driverid(device_t dev, int flags); | ||||||
|  | extern	int crypto_find_driver(const char *); | ||||||
|  | extern	device_t crypto_find_device_byhid(int hid); | ||||||
|  | extern	int crypto_getcaps(int hid); | ||||||
|  | extern	int crypto_register(u_int32_t driverid, int alg, u_int16_t maxoplen, | ||||||
|  | 	    u_int32_t flags); | ||||||
|  | extern	int crypto_kregister(u_int32_t, int, u_int32_t); | ||||||
|  | extern	int crypto_unregister(u_int32_t driverid, int alg); | ||||||
|  | extern	int crypto_unregister_all(u_int32_t driverid); | ||||||
|  | extern	int crypto_dispatch(struct cryptop *crp); | ||||||
|  | extern	int crypto_kdispatch(struct cryptkop *); | ||||||
|  | #define CRYPTO_SYMQ	0x1 | ||||||
|  | #define CRYPTO_ASYMQ	0x2 | ||||||
|  | extern	int crypto_unblock(u_int32_t, int); | ||||||
|  | extern	void crypto_done(struct cryptop *crp); | ||||||
|  | extern	void crypto_kdone(struct cryptkop *); | ||||||
|  | extern	int crypto_getfeat(int *); | ||||||
|  |  | ||||||
|  | extern	void crypto_freereq(struct cryptop *crp); | ||||||
|  | extern	struct cryptop *crypto_getreq(int num); | ||||||
|  |  | ||||||
|  | extern  int crypto_usercrypto;      /* userland may do crypto requests */ | ||||||
|  | extern  int crypto_userasymcrypto;  /* userland may do asym crypto reqs */ | ||||||
|  | extern  int crypto_devallowsoft;    /* only use hardware crypto */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * random number support,  crypto_unregister_all will unregister | ||||||
|  |  */ | ||||||
|  | extern int crypto_rregister(u_int32_t driverid, | ||||||
|  | 		int (*read_random)(void *arg, u_int32_t *buf, int len), void *arg); | ||||||
|  | extern int crypto_runregister_all(u_int32_t driverid); | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Crypto-related utility routines used mainly by drivers. | ||||||
|  |  * | ||||||
|  |  * XXX these don't really belong here; but for now they're | ||||||
|  |  *     kept apart from the rest of the system. | ||||||
|  |  */ | ||||||
|  | struct uio; | ||||||
|  | extern	void cuio_copydata(struct uio* uio, int off, int len, caddr_t cp); | ||||||
|  | extern	void cuio_copyback(struct uio* uio, int off, int len, caddr_t cp); | ||||||
|  | extern	struct iovec *cuio_getptr(struct uio *uio, int loc, int *off); | ||||||
|  |  | ||||||
|  | extern	void crypto_copyback(int flags, caddr_t buf, int off, int size, | ||||||
|  | 	    caddr_t in); | ||||||
|  | extern	void crypto_copydata(int flags, caddr_t buf, int off, int size, | ||||||
|  | 	    caddr_t out); | ||||||
|  | extern	int crypto_apply(int flags, caddr_t buf, int off, int len, | ||||||
|  | 	    int (*f)(void *, void *, u_int), void *arg); | ||||||
|  |  | ||||||
|  | #endif /* __KERNEL__ */ | ||||||
|  | #endif /* _CRYPTO_CRYPTO_H_ */ | ||||||
		Reference in New Issue
	
	Block a user
	 Gabor Juhos
					Gabor Juhos