summaryrefslogtreecommitdiff
path: root/lib/dns/sec/dst/dst_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dns/sec/dst/dst_internal.h')
-rw-r--r--lib/dns/sec/dst/dst_internal.h123
1 files changed, 123 insertions, 0 deletions
diff --git a/lib/dns/sec/dst/dst_internal.h b/lib/dns/sec/dst/dst_internal.h
new file mode 100644
index 00000000..7689fb03
--- /dev/null
+++ b/lib/dns/sec/dst/dst_internal.h
@@ -0,0 +1,123 @@
+#ifndef DST_INTERNAL_H
+#define DST_INTERNAL_H
+
+/*
+ * Portions Copyright (c) 1995-1998 by Trusted Information Systems, Inc.
+ *
+ * Permission to use, copy modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND TRUSTED INFORMATION SYSTEMS
+ * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
+ * TRUSTED INFORMATION SYSTEMS BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
+ * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+ * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+ * WITH THE USE OR PERFORMANCE OF THE SOFTWARE.
+ */
+#include <isc/lang.h>
+#include <isc/buffer.h>
+#include <isc/int.h>
+#include <isc/region.h>
+
+#include <dst/dst.h>
+#include <dst/result.h>
+
+ISC_LANG_BEGINDECLS
+
+/*
+ * define what crypto systems are supported.
+ * BSAFE, DNSSAFE for RSA
+ * OPENSSL for DSA
+ * Only one package per algorithm can be defined.
+ */
+#if defined(BSAFE) && defined(DNSSAFE)
+# error "Cannot have both BSAFE and DNSSAFE defined"
+#endif
+
+/***
+ *** Types
+ ***/
+
+typedef struct dst_func dst_func;
+
+struct dst_key {
+ unsigned int magic;
+ char * key_name; /* name of the key */
+ int key_size; /* size of the key in bits */
+ int key_proto; /* protocols this key is used for */
+ int key_alg; /* algorithm of the key */
+ isc_uint32_t key_flags; /* flags of the public key */
+ isc_uint16_t key_id; /* identifier of the key */
+ isc_mem_t *mctx; /* memory context */
+ void * opaque; /* pointer to key in crypto pkg fmt */
+ dst_func * func; /* crypto package specific functions */
+};
+
+struct dst_func {
+ dst_result_t (*sign)(const unsigned int mode, dst_key_t *key,
+ void **context, isc_region_t *data,
+ isc_buffer_t *sig, isc_mem_t *mctx);
+ dst_result_t (*verify)(const unsigned int mode, dst_key_t *key,
+ void **context, isc_region_t *data,
+ isc_region_t *sig, isc_mem_t *mctx);
+ dst_result_t (*computesecret)(const dst_key_t *pub,
+ const dst_key_t *priv,
+ isc_buffer_t *secret);
+ isc_boolean_t (*compare)(const dst_key_t *key1, const dst_key_t *key2);
+ isc_boolean_t (*paramcompare)(const dst_key_t *key1,
+ const dst_key_t *key2);
+ dst_result_t (*generate)(dst_key_t *key, int parms, isc_mem_t *mctx);
+ isc_boolean_t (*isprivate)(const dst_key_t *key);
+ void (*destroy)(void *key, isc_mem_t *mctx);
+ /* conversion functions */
+ dst_result_t (*to_dns)(const dst_key_t *key, isc_buffer_t *data);
+ dst_result_t (*from_dns)(dst_key_t *key, isc_buffer_t *data,
+ isc_mem_t *mctx);
+ dst_result_t (*to_file)(const dst_key_t *key);
+ dst_result_t (*from_file)(dst_key_t *key, const isc_uint16_t id,
+ isc_mem_t *mctx);
+};
+
+extern dst_func *dst_t_func[DST_MAX_ALGS];
+
+/* suffixes for key file names */
+#define PRIVATE_KEY "private"
+#define PUBLIC_KEY "key"
+
+#ifndef DST_HASH_SIZE
+#define DST_HASH_SIZE 20 /* RIPEMD160 & SHA-1 are 20 bytes, MD5 is 16 */
+#endif
+
+void dst_s_hmacmd5_init(void);
+void dst_s_bsafersa_init(void);
+void dst_s_openssldsa_init(void);
+void dst_s_openssldh_init(void);
+
+/* support functions */
+
+int dst_s_calculate_bits(const unsigned char *str, const int max_bits);
+isc_uint16_t dst_s_id_calc(const unsigned char *key, const int keysize);
+int dst_s_build_filename(char *filename, const char *name,
+ isc_uint16_t id, int alg,
+ const char *suffix,
+ size_t filename_length);
+
+
+/* digest functions */
+dst_result_t dst_s_md5(const unsigned int mode, void **context,
+ isc_region_t *data, isc_buffer_t *digest,
+ isc_mem_t *mctx);
+
+
+/* memory allocators using the DST memory pool */
+void * dst_mem_alloc(size_t size);
+void dst_mem_free(void *ptr);
+void * dst_mem_realloc(void *ptr, size_t size);
+
+
+ISC_LANG_ENDDECLS
+
+#endif /* DST_INTERNAL_H */