xref: /minix3/external/bsd/bind/dist/lib/dns/dst_internal.h (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek /*	$NetBSD: dst_internal.h,v 1.10 2014/12/10 04:37:58 christos Exp $	*/
2*00b67f09SDavid van Moolenbroek 
3*00b67f09SDavid van Moolenbroek /*
4*00b67f09SDavid van Moolenbroek  * Portions Copyright (C) 2004-2014  Internet Systems Consortium, Inc. ("ISC")
5*00b67f09SDavid van Moolenbroek  * Portions Copyright (C) 2000-2002  Internet Software Consortium.
6*00b67f09SDavid van Moolenbroek  *
7*00b67f09SDavid van Moolenbroek  * Permission to use, copy, modify, and/or distribute this software for any
8*00b67f09SDavid van Moolenbroek  * purpose with or without fee is hereby granted, provided that the above
9*00b67f09SDavid van Moolenbroek  * copyright notice and this permission notice appear in all copies.
10*00b67f09SDavid van Moolenbroek  *
11*00b67f09SDavid van Moolenbroek  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NETWORK ASSOCIATES DISCLAIMS
12*00b67f09SDavid van Moolenbroek  * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
13*00b67f09SDavid van Moolenbroek  * WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE
14*00b67f09SDavid van Moolenbroek  * FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15*00b67f09SDavid van Moolenbroek  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16*00b67f09SDavid van Moolenbroek  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
17*00b67f09SDavid van Moolenbroek  * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18*00b67f09SDavid van Moolenbroek  *
19*00b67f09SDavid van Moolenbroek  * Portions Copyright (C) 1995-2000 by Network Associates, Inc.
20*00b67f09SDavid van Moolenbroek  *
21*00b67f09SDavid van Moolenbroek  * Permission to use, copy, modify, and/or distribute this software for any
22*00b67f09SDavid van Moolenbroek  * purpose with or without fee is hereby granted, provided that the above
23*00b67f09SDavid van Moolenbroek  * copyright notice and this permission notice appear in all copies.
24*00b67f09SDavid van Moolenbroek  *
25*00b67f09SDavid van Moolenbroek  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NETWORK ASSOCIATES DISCLAIMS
26*00b67f09SDavid van Moolenbroek  * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
27*00b67f09SDavid van Moolenbroek  * WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE
28*00b67f09SDavid van Moolenbroek  * FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
29*00b67f09SDavid van Moolenbroek  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
30*00b67f09SDavid van Moolenbroek  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
31*00b67f09SDavid van Moolenbroek  * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
32*00b67f09SDavid van Moolenbroek  */
33*00b67f09SDavid van Moolenbroek 
34*00b67f09SDavid van Moolenbroek /* Id: dst_internal.h,v 1.31 2011/10/20 21:20:02 marka Exp  */
35*00b67f09SDavid van Moolenbroek 
36*00b67f09SDavid van Moolenbroek #ifndef DST_DST_INTERNAL_H
37*00b67f09SDavid van Moolenbroek #define DST_DST_INTERNAL_H 1
38*00b67f09SDavid van Moolenbroek 
39*00b67f09SDavid van Moolenbroek #include <isc/lang.h>
40*00b67f09SDavid van Moolenbroek #include <isc/buffer.h>
41*00b67f09SDavid van Moolenbroek #include <isc/int.h>
42*00b67f09SDavid van Moolenbroek #include <isc/magic.h>
43*00b67f09SDavid van Moolenbroek #include <isc/region.h>
44*00b67f09SDavid van Moolenbroek #include <isc/types.h>
45*00b67f09SDavid van Moolenbroek #include <isc/md5.h>
46*00b67f09SDavid van Moolenbroek #include <isc/refcount.h>
47*00b67f09SDavid van Moolenbroek #include <isc/sha1.h>
48*00b67f09SDavid van Moolenbroek #include <isc/sha2.h>
49*00b67f09SDavid van Moolenbroek #include <isc/stdtime.h>
50*00b67f09SDavid van Moolenbroek #include <isc/hmacmd5.h>
51*00b67f09SDavid van Moolenbroek #include <isc/hmacsha.h>
52*00b67f09SDavid van Moolenbroek 
53*00b67f09SDavid van Moolenbroek #include <dns/time.h>
54*00b67f09SDavid van Moolenbroek 
55*00b67f09SDavid van Moolenbroek #include <dst/dst.h>
56*00b67f09SDavid van Moolenbroek 
57*00b67f09SDavid van Moolenbroek #ifdef OPENSSL
58*00b67f09SDavid van Moolenbroek #include <openssl/dh.h>
59*00b67f09SDavid van Moolenbroek #include <openssl/dsa.h>
60*00b67f09SDavid van Moolenbroek #include <openssl/err.h>
61*00b67f09SDavid van Moolenbroek #include <openssl/evp.h>
62*00b67f09SDavid van Moolenbroek #include <openssl/objects.h>
63*00b67f09SDavid van Moolenbroek #include <openssl/rsa.h>
64*00b67f09SDavid van Moolenbroek #endif
65*00b67f09SDavid van Moolenbroek 
66*00b67f09SDavid van Moolenbroek ISC_LANG_BEGINDECLS
67*00b67f09SDavid van Moolenbroek 
68*00b67f09SDavid van Moolenbroek #define KEY_MAGIC	ISC_MAGIC('D','S','T','K')
69*00b67f09SDavid van Moolenbroek #define CTX_MAGIC	ISC_MAGIC('D','S','T','C')
70*00b67f09SDavid van Moolenbroek 
71*00b67f09SDavid van Moolenbroek #define VALID_KEY(x) ISC_MAGIC_VALID(x, KEY_MAGIC)
72*00b67f09SDavid van Moolenbroek #define VALID_CTX(x) ISC_MAGIC_VALID(x, CTX_MAGIC)
73*00b67f09SDavid van Moolenbroek 
74*00b67f09SDavid van Moolenbroek extern isc_mem_t *dst__memory_pool;
75*00b67f09SDavid van Moolenbroek 
76*00b67f09SDavid van Moolenbroek /***
77*00b67f09SDavid van Moolenbroek  *** Types
78*00b67f09SDavid van Moolenbroek  ***/
79*00b67f09SDavid van Moolenbroek 
80*00b67f09SDavid van Moolenbroek typedef struct dst_func dst_func_t;
81*00b67f09SDavid van Moolenbroek 
82*00b67f09SDavid van Moolenbroek typedef struct dst_hmacmd5_key	  dst_hmacmd5_key_t;
83*00b67f09SDavid van Moolenbroek typedef struct dst_hmacsha1_key   dst_hmacsha1_key_t;
84*00b67f09SDavid van Moolenbroek typedef struct dst_hmacsha224_key dst_hmacsha224_key_t;
85*00b67f09SDavid van Moolenbroek typedef struct dst_hmacsha256_key dst_hmacsha256_key_t;
86*00b67f09SDavid van Moolenbroek typedef struct dst_hmacsha384_key dst_hmacsha384_key_t;
87*00b67f09SDavid van Moolenbroek typedef struct dst_hmacsha512_key dst_hmacsha512_key_t;
88*00b67f09SDavid van Moolenbroek 
89*00b67f09SDavid van Moolenbroek /*%
90*00b67f09SDavid van Moolenbroek  * Indicate whether a DST context will be used for signing
91*00b67f09SDavid van Moolenbroek  * or for verification
92*00b67f09SDavid van Moolenbroek  */
93*00b67f09SDavid van Moolenbroek typedef enum { DO_SIGN, DO_VERIFY } dst_use_t;
94*00b67f09SDavid van Moolenbroek 
95*00b67f09SDavid van Moolenbroek /*% DST Key Structure */
96*00b67f09SDavid van Moolenbroek struct dst_key {
97*00b67f09SDavid van Moolenbroek 	unsigned int	magic;
98*00b67f09SDavid van Moolenbroek 	isc_refcount_t	refs;
99*00b67f09SDavid van Moolenbroek 	dns_name_t *	key_name;	/*%< name of the key */
100*00b67f09SDavid van Moolenbroek 	unsigned int	key_size;	/*%< size of the key in bits */
101*00b67f09SDavid van Moolenbroek 	unsigned int	key_proto;	/*%< protocols this key is used for */
102*00b67f09SDavid van Moolenbroek 	unsigned int	key_alg;	/*%< algorithm of the key */
103*00b67f09SDavid van Moolenbroek 	isc_uint32_t	key_flags;	/*%< flags of the public key */
104*00b67f09SDavid van Moolenbroek 	isc_uint16_t	key_id;		/*%< identifier of the key */
105*00b67f09SDavid van Moolenbroek 	isc_uint16_t	key_rid;	/*%< identifier of the key when
106*00b67f09SDavid van Moolenbroek 					     revoked */
107*00b67f09SDavid van Moolenbroek 	isc_uint16_t	key_bits;	/*%< hmac digest bits */
108*00b67f09SDavid van Moolenbroek 	dns_rdataclass_t key_class;	/*%< class of the key record */
109*00b67f09SDavid van Moolenbroek 	dns_ttl_t	key_ttl;	/*%< default/initial dnskey ttl */
110*00b67f09SDavid van Moolenbroek 	isc_mem_t	*mctx;		/*%< memory context */
111*00b67f09SDavid van Moolenbroek 	char		*engine;	/*%< engine name (HSM) */
112*00b67f09SDavid van Moolenbroek 	char		*label;		/*%< engine label (HSM) */
113*00b67f09SDavid van Moolenbroek 	union {
114*00b67f09SDavid van Moolenbroek 		void *generic;
115*00b67f09SDavid van Moolenbroek 		gss_ctx_id_t gssctx;
116*00b67f09SDavid van Moolenbroek #ifdef OPENSSL
117*00b67f09SDavid van Moolenbroek #if !defined(USE_EVP) || !USE_EVP
118*00b67f09SDavid van Moolenbroek 		RSA *rsa;
119*00b67f09SDavid van Moolenbroek #endif
120*00b67f09SDavid van Moolenbroek 		DSA *dsa;
121*00b67f09SDavid van Moolenbroek 		DH *dh;
122*00b67f09SDavid van Moolenbroek 		EVP_PKEY *pkey;
123*00b67f09SDavid van Moolenbroek #elif PKCS11CRYPTO
124*00b67f09SDavid van Moolenbroek 		pk11_object_t *pkey;
125*00b67f09SDavid van Moolenbroek #endif
126*00b67f09SDavid van Moolenbroek 		dst_hmacmd5_key_t *hmacmd5;
127*00b67f09SDavid van Moolenbroek 		dst_hmacsha1_key_t *hmacsha1;
128*00b67f09SDavid van Moolenbroek 		dst_hmacsha224_key_t *hmacsha224;
129*00b67f09SDavid van Moolenbroek 		dst_hmacsha256_key_t *hmacsha256;
130*00b67f09SDavid van Moolenbroek 		dst_hmacsha384_key_t *hmacsha384;
131*00b67f09SDavid van Moolenbroek 		dst_hmacsha512_key_t *hmacsha512;
132*00b67f09SDavid van Moolenbroek 
133*00b67f09SDavid van Moolenbroek 	} keydata;			/*%< pointer to key in crypto pkg fmt */
134*00b67f09SDavid van Moolenbroek 
135*00b67f09SDavid van Moolenbroek 	isc_stdtime_t	times[DST_MAX_TIMES + 1];    /*%< timing metadata */
136*00b67f09SDavid van Moolenbroek 	isc_boolean_t	timeset[DST_MAX_TIMES + 1];  /*%< data set? */
137*00b67f09SDavid van Moolenbroek 	isc_stdtime_t	nums[DST_MAX_NUMERIC + 1];   /*%< numeric metadata */
138*00b67f09SDavid van Moolenbroek 	isc_boolean_t	numset[DST_MAX_NUMERIC + 1]; /*%< data set? */
139*00b67f09SDavid van Moolenbroek 	isc_boolean_t 	inactive;      /*%< private key not present as it is
140*00b67f09SDavid van Moolenbroek 					    inactive */
141*00b67f09SDavid van Moolenbroek 	isc_boolean_t 	external;      /*%< external key */
142*00b67f09SDavid van Moolenbroek 
143*00b67f09SDavid van Moolenbroek 	int		fmt_major;     /*%< private key format, major version */
144*00b67f09SDavid van Moolenbroek 	int		fmt_minor;     /*%< private key format, minor version */
145*00b67f09SDavid van Moolenbroek 
146*00b67f09SDavid van Moolenbroek 	dst_func_t *    func;	       /*%< crypto package specific functions */
147*00b67f09SDavid van Moolenbroek 	isc_buffer_t   *key_tkeytoken; /*%< TKEY token data */
148*00b67f09SDavid van Moolenbroek };
149*00b67f09SDavid van Moolenbroek 
150*00b67f09SDavid van Moolenbroek struct dst_context {
151*00b67f09SDavid van Moolenbroek 	unsigned int magic;
152*00b67f09SDavid van Moolenbroek 	dst_use_t use;
153*00b67f09SDavid van Moolenbroek 	dst_key_t *key;
154*00b67f09SDavid van Moolenbroek 	isc_mem_t *mctx;
155*00b67f09SDavid van Moolenbroek 	isc_logcategory_t *category;
156*00b67f09SDavid van Moolenbroek 	union {
157*00b67f09SDavid van Moolenbroek 		void *generic;
158*00b67f09SDavid van Moolenbroek 		dst_gssapi_signverifyctx_t *gssctx;
159*00b67f09SDavid van Moolenbroek 		isc_md5_t *md5ctx;
160*00b67f09SDavid van Moolenbroek 		isc_sha1_t *sha1ctx;
161*00b67f09SDavid van Moolenbroek 		isc_sha256_t *sha256ctx;
162*00b67f09SDavid van Moolenbroek 		isc_sha512_t *sha512ctx;
163*00b67f09SDavid van Moolenbroek 		isc_hmacmd5_t *hmacmd5ctx;
164*00b67f09SDavid van Moolenbroek 		isc_hmacsha1_t *hmacsha1ctx;
165*00b67f09SDavid van Moolenbroek 		isc_hmacsha224_t *hmacsha224ctx;
166*00b67f09SDavid van Moolenbroek 		isc_hmacsha256_t *hmacsha256ctx;
167*00b67f09SDavid van Moolenbroek 		isc_hmacsha384_t *hmacsha384ctx;
168*00b67f09SDavid van Moolenbroek 		isc_hmacsha512_t *hmacsha512ctx;
169*00b67f09SDavid van Moolenbroek #ifdef OPENSSL
170*00b67f09SDavid van Moolenbroek 		EVP_MD_CTX *evp_md_ctx;
171*00b67f09SDavid van Moolenbroek #elif PKCS11CRYPTO
172*00b67f09SDavid van Moolenbroek 		pk11_context_t *pk11_ctx;
173*00b67f09SDavid van Moolenbroek #endif
174*00b67f09SDavid van Moolenbroek 	} ctxdata;
175*00b67f09SDavid van Moolenbroek };
176*00b67f09SDavid van Moolenbroek 
177*00b67f09SDavid van Moolenbroek struct dst_func {
178*00b67f09SDavid van Moolenbroek 	/*
179*00b67f09SDavid van Moolenbroek 	 * Context functions
180*00b67f09SDavid van Moolenbroek 	 */
181*00b67f09SDavid van Moolenbroek 	isc_result_t (*createctx)(dst_key_t *key, dst_context_t *dctx);
182*00b67f09SDavid van Moolenbroek 	isc_result_t (*createctx2)(dst_key_t *key, int maxbits,
183*00b67f09SDavid van Moolenbroek 				   dst_context_t *dctx);
184*00b67f09SDavid van Moolenbroek 	void (*destroyctx)(dst_context_t *dctx);
185*00b67f09SDavid van Moolenbroek 	isc_result_t (*adddata)(dst_context_t *dctx, const isc_region_t *data);
186*00b67f09SDavid van Moolenbroek 
187*00b67f09SDavid van Moolenbroek 	/*
188*00b67f09SDavid van Moolenbroek 	 * Key operations
189*00b67f09SDavid van Moolenbroek 	 */
190*00b67f09SDavid van Moolenbroek 	isc_result_t (*sign)(dst_context_t *dctx, isc_buffer_t *sig);
191*00b67f09SDavid van Moolenbroek 	isc_result_t (*verify)(dst_context_t *dctx, const isc_region_t *sig);
192*00b67f09SDavid van Moolenbroek 	isc_result_t (*verify2)(dst_context_t *dctx, int maxbits,
193*00b67f09SDavid van Moolenbroek 				const isc_region_t *sig);
194*00b67f09SDavid van Moolenbroek 	isc_result_t (*computesecret)(const dst_key_t *pub,
195*00b67f09SDavid van Moolenbroek 				      const dst_key_t *priv,
196*00b67f09SDavid van Moolenbroek 				      isc_buffer_t *secret);
197*00b67f09SDavid van Moolenbroek 	isc_boolean_t (*compare)(const dst_key_t *key1, const dst_key_t *key2);
198*00b67f09SDavid van Moolenbroek 	isc_boolean_t (*paramcompare)(const dst_key_t *key1,
199*00b67f09SDavid van Moolenbroek 				      const dst_key_t *key2);
200*00b67f09SDavid van Moolenbroek 	isc_result_t (*generate)(dst_key_t *key, int parms,
201*00b67f09SDavid van Moolenbroek 				 void (*callback)(int));
202*00b67f09SDavid van Moolenbroek 	isc_boolean_t (*isprivate)(const dst_key_t *key);
203*00b67f09SDavid van Moolenbroek 	void (*destroy)(dst_key_t *key);
204*00b67f09SDavid van Moolenbroek 
205*00b67f09SDavid van Moolenbroek 	/* conversion functions */
206*00b67f09SDavid van Moolenbroek 	isc_result_t (*todns)(const dst_key_t *key, isc_buffer_t *data);
207*00b67f09SDavid van Moolenbroek 	isc_result_t (*fromdns)(dst_key_t *key, isc_buffer_t *data);
208*00b67f09SDavid van Moolenbroek 	isc_result_t (*tofile)(const dst_key_t *key, const char *directory);
209*00b67f09SDavid van Moolenbroek 	isc_result_t (*parse)(dst_key_t *key,
210*00b67f09SDavid van Moolenbroek 			      isc_lex_t *lexer,
211*00b67f09SDavid van Moolenbroek 			      dst_key_t *pub);
212*00b67f09SDavid van Moolenbroek 
213*00b67f09SDavid van Moolenbroek 	/* cleanup */
214*00b67f09SDavid van Moolenbroek 	void (*cleanup)(void);
215*00b67f09SDavid van Moolenbroek 
216*00b67f09SDavid van Moolenbroek 	isc_result_t (*fromlabel)(dst_key_t *key, const char *engine,
217*00b67f09SDavid van Moolenbroek 				  const char *label, const char *pin);
218*00b67f09SDavid van Moolenbroek 	isc_result_t (*dump)(dst_key_t *key, isc_mem_t *mctx, char **buffer,
219*00b67f09SDavid van Moolenbroek 			     int *length);
220*00b67f09SDavid van Moolenbroek 	isc_result_t (*restore)(dst_key_t *key, const char *keystr);
221*00b67f09SDavid van Moolenbroek };
222*00b67f09SDavid van Moolenbroek 
223*00b67f09SDavid van Moolenbroek /*%
224*00b67f09SDavid van Moolenbroek  * Initializers
225*00b67f09SDavid van Moolenbroek  */
226*00b67f09SDavid van Moolenbroek isc_result_t dst__openssl_init(const char *engine);
227*00b67f09SDavid van Moolenbroek #define dst__pkcs11_init pk11_initialize
228*00b67f09SDavid van Moolenbroek 
229*00b67f09SDavid van Moolenbroek isc_result_t dst__hmacmd5_init(struct dst_func **funcp);
230*00b67f09SDavid van Moolenbroek isc_result_t dst__hmacsha1_init(struct dst_func **funcp);
231*00b67f09SDavid van Moolenbroek isc_result_t dst__hmacsha224_init(struct dst_func **funcp);
232*00b67f09SDavid van Moolenbroek isc_result_t dst__hmacsha256_init(struct dst_func **funcp);
233*00b67f09SDavid van Moolenbroek isc_result_t dst__hmacsha384_init(struct dst_func **funcp);
234*00b67f09SDavid van Moolenbroek isc_result_t dst__hmacsha512_init(struct dst_func **funcp);
235*00b67f09SDavid van Moolenbroek isc_result_t dst__opensslrsa_init(struct dst_func **funcp,
236*00b67f09SDavid van Moolenbroek 				  unsigned char algorithm);
237*00b67f09SDavid van Moolenbroek isc_result_t dst__pkcs11rsa_init(struct dst_func **funcp);
238*00b67f09SDavid van Moolenbroek isc_result_t dst__openssldsa_init(struct dst_func **funcp);
239*00b67f09SDavid van Moolenbroek isc_result_t dst__pkcs11dsa_init(struct dst_func **funcp);
240*00b67f09SDavid van Moolenbroek isc_result_t dst__openssldh_init(struct dst_func **funcp);
241*00b67f09SDavid van Moolenbroek isc_result_t dst__pkcs11dh_init(struct dst_func **funcp);
242*00b67f09SDavid van Moolenbroek isc_result_t dst__gssapi_init(struct dst_func **funcp);
243*00b67f09SDavid van Moolenbroek #ifdef HAVE_OPENSSL_ECDSA
244*00b67f09SDavid van Moolenbroek isc_result_t dst__opensslecdsa_init(struct dst_func **funcp);
245*00b67f09SDavid van Moolenbroek #endif
246*00b67f09SDavid van Moolenbroek #ifdef HAVE_PKCS11_ECDSA
247*00b67f09SDavid van Moolenbroek isc_result_t dst__pkcs11ecdsa_init(struct dst_func **funcp);
248*00b67f09SDavid van Moolenbroek #endif
249*00b67f09SDavid van Moolenbroek #ifdef HAVE_OPENSSL_GOST
250*00b67f09SDavid van Moolenbroek isc_result_t dst__opensslgost_init(struct dst_func **funcp);
251*00b67f09SDavid van Moolenbroek #endif
252*00b67f09SDavid van Moolenbroek #ifdef HAVE_PKCS11_GOST
253*00b67f09SDavid van Moolenbroek isc_result_t dst__pkcs11gost_init(struct dst_func **funcp);
254*00b67f09SDavid van Moolenbroek #endif
255*00b67f09SDavid van Moolenbroek 
256*00b67f09SDavid van Moolenbroek /*%
257*00b67f09SDavid van Moolenbroek  * Destructors
258*00b67f09SDavid van Moolenbroek  */
259*00b67f09SDavid van Moolenbroek void dst__openssl_destroy(void);
260*00b67f09SDavid van Moolenbroek #define dst__pkcs11_destroy pk11_finalize
261*00b67f09SDavid van Moolenbroek 
262*00b67f09SDavid van Moolenbroek /*%
263*00b67f09SDavid van Moolenbroek  * Memory allocators using the DST memory pool.
264*00b67f09SDavid van Moolenbroek  */
265*00b67f09SDavid van Moolenbroek void * dst__mem_alloc(size_t size);
266*00b67f09SDavid van Moolenbroek void   dst__mem_free(void *ptr);
267*00b67f09SDavid van Moolenbroek void * dst__mem_realloc(void *ptr, size_t size);
268*00b67f09SDavid van Moolenbroek 
269*00b67f09SDavid van Moolenbroek /*%
270*00b67f09SDavid van Moolenbroek  * Entropy retriever using the DST entropy pool.
271*00b67f09SDavid van Moolenbroek  */
272*00b67f09SDavid van Moolenbroek isc_result_t dst__entropy_getdata(void *buf, unsigned int len,
273*00b67f09SDavid van Moolenbroek 				  isc_boolean_t pseudo);
274*00b67f09SDavid van Moolenbroek 
275*00b67f09SDavid van Moolenbroek /*
276*00b67f09SDavid van Moolenbroek  * Entropy status hook.
277*00b67f09SDavid van Moolenbroek  */
278*00b67f09SDavid van Moolenbroek unsigned int dst__entropy_status(void);
279*00b67f09SDavid van Moolenbroek 
280*00b67f09SDavid van Moolenbroek ISC_LANG_ENDDECLS
281*00b67f09SDavid van Moolenbroek 
282*00b67f09SDavid van Moolenbroek #endif /* DST_DST_INTERNAL_H */
283*00b67f09SDavid van Moolenbroek /*! \file */
284