/*	$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@mcafee.com>
 * Copyright (C) 2006-2010 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_

#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
#include <linux/in.h>
#endif


/* 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_LZS_COMP			26
#define CRYPTO_ESP_RFC2406 		27
//#define CRYPTO_ESP_RFC2406_TRANSPORT 20
#define CRYPTO_ESP_RFC4303  		28
#define CRYPTO_ESP4_RFC4303  		28
#define CRYPTO_ESP6_RFC4303  		29
#define CRYPTO_AH			30
#define CRYPTO_AH4			30
#define CRYPTO_AH6			31
#define CRYPTO_SHA2_HMAC		32 /*TODO is it a duplicate entry*/
#define CRYPTO_ALGORITHM_MAX		32 /* 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_flags;
	union {
		struct {
			int		cri_mlen;	/* Number of bytes we want from the
					   entire hash. 0 means all. */
			int			cri_klen;	/* Key length, in bits */
			caddr_t		cri_key;	/* key to use */
			u_int8_t	cri_iv[EALG_MAX_BLOCK_LEN];	/* IV to use */
		} cri_alg;
		struct {
			u_int32_t basealg;
			struct sockaddr_in tun_source;
			struct sockaddr_in tun_destination;
			int tun_df_mode;
			int tun_ds_mode;
		 	int tun_ttl_value;
		 	int tun_replay_windowsize;
		 	int spivalue ;
		 	int replayinit;  /* set to 0 to disable replay on receive */
		 	u_int64_t time_hard_lifetime;
		 	u_int64_t time_soft_lifetime;
		 	u_int64_t byte_hard_lifetime;
		 	u_int64_t byte_soft_lifetime;
		} cri_pack;	
	} u;
	struct cryptoini *cri_next;
};
#define cri_mlen		u.cri_alg.cri_mlen
#define cri_klen		u.cri_alg.cri_klen
#define cri_key			u.cri_alg.cri_key
#define cri_iv			u.cri_alg.cri_iv
#define crip_basealg			u.cri_pack.basealg
#define crip_tun_source 		u.cri_pack.tun_source
#define crip_tun_destination	u.cri_pack.tun_destination
#define crip_tun_df_mode		u.cri_pack.tun_df_mode
#define crip_tun_ds_mode	u.cri_pack.tun_ds_mode
#define crip_tun_ttl_value	u.cri_pack.tun_ttl_value
#define crip_tun_replay_windowsize u.cri_pack.tun_replay_windowsize
#define crip_spivalue 		u.cri_pack.spivalue
#define crip_replayinit		u.cri_pack.replayinit
#define crip_time_hard_lifetime 	 u.cri_pack.time_hard_lifetime
#define crip_time_soft_lifetime 	 u.cri_pack.time_soft_lifetime
#define crip_byte_hard_lifetime 	 u.cri_pack.byte_hard_lifetime
#define crip_byte_soft_lifetime 	 u.cri_pack.byte_soft_lifetime

/* 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
#define crd_mlen	CRD_INI.cri_mlen

	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_out_buf;	/* Crypto Result Buffer */
	caddr_t		crp_opaque;	/* Opaque pointer, passed along */
	struct cryptodesc *crp_desc;	/* Linked list of processing descriptors */

	int (*crp_callback)(struct cryptop *); /* Callback function */
};
enum crypto_packet_return_code {
		CRYPTO_OK=0,
		CRYPTO_SOFT_TTL = 2,
 		CRYPTO_HARD_TTL,
 		CRYPTO_SA_INACTIVE,
 		CRYPTO_REPLAY,
 		CRYPTO_ICV_FAIL,
 		CRYPTO_SEQ_ROLL,
 		CRYPTO_MEM_ERROR,
 		CRYPTO_VERS_ERROR,
 		CRYPTO_PROT_ERROR,
 		CRYPTO_PYLD_ERROR,
 		CRYPTO_PAD_ERROR 
};

enum crypto_accel_type {
                  CRYPTO_PACKET  =0x2,    /* OR together desired bits */
                  CRYPTO_HARDWARE=0x1,
                  CRYPTO_SOFTWARE=0x0
};

enum crypto_flags {
                  CRYPTO_ENCRYPT=0x1, 	// same for encap (OCF l2)
                  CRYPTO_DECRYPT=0x2,		// same for decap (OCF l2)
                  CRYPTO_MAC_GEN=0x4,
                  CRYPTO_MAC_CHECK=0x08,
                  CRYPTO_COMPRESS_SMALLER=0x10,
                  CRYPTO_COMPRESS_BIGGER=0x20
};

#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 <linux/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_ */
