4 * Portions Copyright (C) 2004-2009 Internet Systems Consortium, Inc. ("ISC")
5 * Portions Copyright (C) 2000-2002 Internet Software Consortium.
7 * Permission to use, copy, modify, and/or distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
11 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NETWORK ASSOCIATES DISCLAIMS
12 * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
13 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE
14 * FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
17 * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 * Portions Copyright (C) 1995-2000 by Network Associates, Inc.
21 * Permission to use, copy, modify, and/or distribute this software for any
22 * purpose with or without fee is hereby granted, provided that the above
23 * copyright notice and this permission notice appear in all copies.
25 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NETWORK ASSOCIATES DISCLAIMS
26 * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
27 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE
28 * FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
29 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
30 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
31 * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
34 /* Id: dst_internal.h,v 1.23 2009/10/27 22:25:37 marka Exp */
36 #ifndef DST_DST_INTERNAL_H
37 #define DST_DST_INTERNAL_H 1
40 #include <isc/buffer.h>
42 #include <isc/magic.h>
43 #include <isc/region.h>
44 #include <isc/types.h>
48 #include <isc/stdtime.h>
49 #include <isc/hmacmd5.h>
50 #include <isc/hmacsha.h>
57 #include <openssl/dh.h>
58 #include <openssl/dsa.h>
59 #include <openssl/err.h>
60 #include <openssl/evp.h>
61 #include <openssl/objects.h>
62 #include <openssl/rsa.h>
67 #define KEY_MAGIC ISC_MAGIC('D','S','T','K')
68 #define CTX_MAGIC ISC_MAGIC('D','S','T','C')
70 #define VALID_KEY(x) ISC_MAGIC_VALID(x, KEY_MAGIC)
71 #define VALID_CTX(x) ISC_MAGIC_VALID(x, CTX_MAGIC)
73 extern isc_mem_t
*dst__memory_pool
;
79 typedef struct dst_func dst_func_t
;
81 typedef struct dst_hmacmd5_key dst_hmacmd5_key_t
;
82 typedef struct dst_hmacsha1_key dst_hmacsha1_key_t
;
83 typedef struct dst_hmacsha224_key dst_hmacsha224_key_t
;
84 typedef struct dst_hmacsha256_key dst_hmacsha256_key_t
;
85 typedef struct dst_hmacsha384_key dst_hmacsha384_key_t
;
86 typedef struct dst_hmacsha512_key dst_hmacsha512_key_t
;
88 /*% DST Key Structure */
91 dns_name_t
* key_name
; /*%< name of the key */
92 unsigned int key_size
; /*%< size of the key in bits */
93 unsigned int key_proto
; /*%< protocols this key is used for */
94 unsigned int key_alg
; /*%< algorithm of the key */
95 isc_uint32_t key_flags
; /*%< flags of the public key */
96 isc_uint16_t key_id
; /*%< identifier of the key */
97 isc_uint16_t key_bits
; /*%< hmac digest bits */
98 dns_rdataclass_t key_class
; /*%< class of the key record */
99 isc_mem_t
*mctx
; /*%< memory context */
100 char *engine
; /*%< engine name (HSM) */
101 char *label
; /*%< engine label (HSM) */
106 #if !defined(USE_EVP) || !USE_EVP
113 dst_hmacmd5_key_t
*hmacmd5
;
114 dst_hmacsha1_key_t
*hmacsha1
;
115 dst_hmacsha224_key_t
*hmacsha224
;
116 dst_hmacsha256_key_t
*hmacsha256
;
117 dst_hmacsha384_key_t
*hmacsha384
;
118 dst_hmacsha512_key_t
*hmacsha512
;
120 } keydata
; /*%< pointer to key in crypto pkg fmt */
122 isc_stdtime_t times
[DST_MAX_TIMES
+ 1]; /*%< timing metadata */
123 isc_boolean_t timeset
[DST_MAX_TIMES
+ 1]; /*%< data set? */
124 isc_stdtime_t nums
[DST_MAX_NUMERIC
+ 1]; /*%< numeric metadata */
125 isc_boolean_t numset
[DST_MAX_NUMERIC
+ 1]; /*%< data set? */
127 int fmt_major
; /*%< private key format, major version */
128 int fmt_minor
; /*%< private key format, minor version */
130 dst_func_t
* func
; /*%< crypto package specific functions */
139 dst_gssapi_signverifyctx_t
*gssctx
;
142 isc_sha256_t
*sha256ctx
;
143 isc_sha512_t
*sha512ctx
;
144 isc_hmacmd5_t
*hmacmd5ctx
;
145 isc_hmacsha1_t
*hmacsha1ctx
;
146 isc_hmacsha224_t
*hmacsha224ctx
;
147 isc_hmacsha256_t
*hmacsha256ctx
;
148 isc_hmacsha384_t
*hmacsha384ctx
;
149 isc_hmacsha512_t
*hmacsha512ctx
;
151 EVP_MD_CTX
*evp_md_ctx
;
160 isc_result_t (*createctx
)(dst_key_t
*key
, dst_context_t
*dctx
);
161 void (*destroyctx
)(dst_context_t
*dctx
);
162 isc_result_t (*adddata
)(dst_context_t
*dctx
, const isc_region_t
*data
);
167 isc_result_t (*sign
)(dst_context_t
*dctx
, isc_buffer_t
*sig
);
168 isc_result_t (*verify
)(dst_context_t
*dctx
, const isc_region_t
*sig
);
169 isc_result_t (*computesecret
)(const dst_key_t
*pub
,
170 const dst_key_t
*priv
,
171 isc_buffer_t
*secret
);
172 isc_boolean_t (*compare
)(const dst_key_t
*key1
, const dst_key_t
*key2
);
173 isc_boolean_t (*paramcompare
)(const dst_key_t
*key1
,
174 const dst_key_t
*key2
);
175 isc_result_t (*generate
)(dst_key_t
*key
, int parms
,
176 void (*callback
)(int));
177 isc_boolean_t (*isprivate
)(const dst_key_t
*key
);
178 void (*destroy
)(dst_key_t
*key
);
180 /* conversion functions */
181 isc_result_t (*todns
)(const dst_key_t
*key
, isc_buffer_t
*data
);
182 isc_result_t (*fromdns
)(dst_key_t
*key
, isc_buffer_t
*data
);
183 isc_result_t (*tofile
)(const dst_key_t
*key
, const char *directory
);
184 isc_result_t (*parse
)(dst_key_t
*key
,
189 void (*cleanup
)(void);
191 isc_result_t (*fromlabel
)(dst_key_t
*key
, const char *engine
,
192 const char *label
, const char *pin
);
198 isc_result_t
dst__openssl_init(const char *engine
);
200 isc_result_t
dst__hmacmd5_init(struct dst_func
**funcp
);
201 isc_result_t
dst__hmacsha1_init(struct dst_func
**funcp
);
202 isc_result_t
dst__hmacsha224_init(struct dst_func
**funcp
);
203 isc_result_t
dst__hmacsha256_init(struct dst_func
**funcp
);
204 isc_result_t
dst__hmacsha384_init(struct dst_func
**funcp
);
205 isc_result_t
dst__hmacsha512_init(struct dst_func
**funcp
);
206 isc_result_t
dst__opensslrsa_init(struct dst_func
**funcp
,
207 unsigned char algorithm
);
208 isc_result_t
dst__openssldsa_init(struct dst_func
**funcp
);
209 isc_result_t
dst__openssldh_init(struct dst_func
**funcp
);
210 isc_result_t
dst__gssapi_init(struct dst_func
**funcp
);
215 void dst__openssl_destroy(void);
218 * Memory allocators using the DST memory pool.
220 void * dst__mem_alloc(size_t size
);
221 void dst__mem_free(void *ptr
);
222 void * dst__mem_realloc(void *ptr
, size_t size
);
225 * Entropy retriever using the DST entropy pool.
227 isc_result_t
dst__entropy_getdata(void *buf
, unsigned int len
,
228 isc_boolean_t pseudo
);
231 * Entropy status hook.
233 unsigned int dst__entropy_status(void);
237 #endif /* DST_DST_INTERNAL_H */