1 /* 2 * Portions Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NETWORK ASSOCIATES DISCLAIMS 9 * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 10 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE 11 * FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 14 * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 * 16 * See the COPYRIGHT file distributed with this work for additional 17 * information regarding copyright ownership. 18 * 19 * Portions Copyright (C) Network Associates, Inc. 20 * 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. 24 * 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. 32 */ 33 34 /* $Id: dst_internal.h,v 1.14 2024/10/25 06:08:29 jsg Exp $ */ 35 36 #ifndef DST_DST_INTERNAL_H 37 #define DST_DST_INTERNAL_H 1 38 39 #include <isc/buffer.h> 40 #include <isc/region.h> 41 #include <isc/types.h> 42 #include <isc/refcount.h> 43 #include <isc/sha1.h> 44 #include <isc/sha2.h> 45 #include <isc/hmacsha.h> 46 47 #include <dns/time.h> 48 #include <dst/dst.h> 49 50 #include <openssl/err.h> 51 #include <openssl/objects.h> 52 53 /*** 54 *** Types 55 ***/ 56 57 typedef struct dst_func dst_func_t; 58 59 typedef struct dst_hmacsha1_key dst_hmacsha1_key_t; 60 typedef struct dst_hmacsha224_key dst_hmacsha224_key_t; 61 typedef struct dst_hmacsha256_key dst_hmacsha256_key_t; 62 typedef struct dst_hmacsha384_key dst_hmacsha384_key_t; 63 typedef struct dst_hmacsha512_key dst_hmacsha512_key_t; 64 65 /*% 66 * Indicate whether a DST context will be used for signing 67 * or for verification 68 */ 69 typedef enum { DO_SIGN, DO_VERIFY } dst_use_t; 70 71 /*% DST Key Structure */ 72 struct dst_key { 73 isc_refcount_t refs; 74 unsigned int key_size; /*%< size of the key in bits */ 75 unsigned int key_proto; /*%< protocols this key is used for */ 76 unsigned int key_alg; /*%< algorithm of the key */ 77 uint32_t key_flags; /*%< flags of the public key */ 78 uint16_t key_bits; /*%< hmac digest bits */ 79 union { 80 dst_hmacsha1_key_t *hmacsha1; 81 dst_hmacsha224_key_t *hmacsha224; 82 dst_hmacsha256_key_t *hmacsha256; 83 dst_hmacsha384_key_t *hmacsha384; 84 dst_hmacsha512_key_t *hmacsha512; 85 86 } keydata; /*%< pointer to key in crypto pkg fmt */ 87 88 dst_func_t * func; /*%< crypto package specific functions */ 89 }; 90 91 struct dst_context { 92 dst_use_t use; 93 dst_key_t *key; 94 isc_logcategory_t *category; 95 union { 96 isc_hmacsha1_t *hmacsha1ctx; 97 isc_hmacsha224_t *hmacsha224ctx; 98 isc_hmacsha256_t *hmacsha256ctx; 99 isc_hmacsha384_t *hmacsha384ctx; 100 isc_hmacsha512_t *hmacsha512ctx; 101 } ctxdata; 102 }; 103 104 struct dst_func { 105 /* 106 * Context functions 107 */ 108 isc_result_t (*createctx)(dst_key_t *key, dst_context_t *dctx); 109 void (*destroyctx)(dst_context_t *dctx); 110 isc_result_t (*adddata)(dst_context_t *dctx, const isc_region_t *data); 111 112 /* 113 * Key operations 114 */ 115 isc_result_t (*sign)(dst_context_t *dctx, isc_buffer_t *sig); 116 isc_result_t (*verify)(dst_context_t *dctx, const isc_region_t *sig); 117 void (*destroy)(dst_key_t *key); 118 119 /* conversion functions */ 120 isc_result_t (*todns)(const dst_key_t *key, isc_buffer_t *data); 121 isc_result_t (*fromdns)(dst_key_t *key, isc_buffer_t *data); 122 }; 123 124 /*% 125 * Initializers 126 */ 127 isc_result_t dst__openssl_init(void); 128 129 isc_result_t dst__hmacsha1_init(struct dst_func **funcp); 130 isc_result_t dst__hmacsha224_init(struct dst_func **funcp); 131 isc_result_t dst__hmacsha256_init(struct dst_func **funcp); 132 isc_result_t dst__hmacsha384_init(struct dst_func **funcp); 133 isc_result_t dst__hmacsha512_init(struct dst_func **funcp); 134 135 /*% 136 * Destructors 137 */ 138 void dst__openssl_destroy(void); 139 140 #endif /* DST_DST_INTERNAL_H */ 141 /*! \file */ 142