Electroneum
val_sigcrypt.h
Go to the documentation of this file.
1 /*
2  * validator/val_sigcrypt.h - validator signature crypto functions.
3  *
4  * Copyright (c) 2007, NLnet Labs. All rights reserved.
5  *
6  * This software is open source.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * Redistributions of source code must retain the above copyright notice,
13  * this list of conditions and the following disclaimer.
14  *
15  * Redistributions in binary form must reproduce the above copyright notice,
16  * this list of conditions and the following disclaimer in the documentation
17  * and/or other materials provided with the distribution.
18  *
19  * Neither the name of the NLNET LABS nor the names of its contributors may
20  * be used to endorse or promote products derived from this software without
21  * specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
29  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34  */
35 
44 #ifndef VALIDATOR_VAL_SIGCRYPT_H
45 #define VALIDATOR_VAL_SIGCRYPT_H
46 #include "util/data/packed_rrset.h"
47 #include "sldns/pkthdr.h"
48 struct val_env;
49 struct module_env;
50 struct module_qstate;
51 struct ub_packed_rrset_key;
52 struct rbtree_type;
53 struct regional;
54 struct sldns_buffer;
55 
57 #define ALGO_NEEDS_MAX 256
58 
62 struct algo_needs {
71  size_t num;
72 };
73 
82  struct ub_packed_rrset_key* dnskey, uint8_t* sigalg);
83 
89 void algo_needs_init_list(struct algo_needs* n, uint8_t* sigalg);
90 
99 void algo_needs_init_ds(struct algo_needs* n, struct ub_packed_rrset_key* ds,
100  int fav_ds_algo, uint8_t* sigalg);
101 
108 int algo_needs_set_secure(struct algo_needs* n, uint8_t algo);
109 
116 void algo_needs_set_bogus(struct algo_needs* n, uint8_t algo);
117 
123 size_t algo_needs_num_missing(struct algo_needs* n);
124 
132 int algo_needs_missing(struct algo_needs* n);
133 
141 void algo_needs_reason(struct module_env* env, int alg, char** reason, char* s);
142 
153 int ds_digest_match_dnskey(struct module_env* env,
154  struct ub_packed_rrset_key* dnskey_rrset, size_t dnskey_idx,
155  struct ub_packed_rrset_key* ds_rrset, size_t ds_idx);
156 
163 uint16_t dnskey_calc_keytag(struct ub_packed_rrset_key* dnskey_rrset,
164  size_t dnskey_idx);
165 
172 uint16_t ds_get_keytag(struct ub_packed_rrset_key* ds_rrset, size_t ds_idx);
173 
180 int dnskey_algo_is_supported(struct ub_packed_rrset_key* dnskey_rrset,
181  size_t dnskey_idx);
182 
190  size_t ds_idx);
191 
198 int ds_get_digest_algo(struct ub_packed_rrset_key* ds_rrset, size_t ds_idx);
199 
206 int ds_key_algo_is_supported(struct ub_packed_rrset_key* ds_rrset,
207  size_t ds_idx);
208 
215 int ds_get_key_algo(struct ub_packed_rrset_key* k, size_t idx);
216 
223 int dnskey_get_algo(struct ub_packed_rrset_key* k, size_t idx);
224 
231 uint16_t dnskey_get_flags(struct ub_packed_rrset_key* k, size_t idx);
232 
249  struct val_env* ve, struct ub_packed_rrset_key* rrset,
250  struct ub_packed_rrset_key* dnskey, uint8_t* sigalg, char** reason,
251  sldns_pkt_section section, struct module_qstate* qstate);
252 
266 enum sec_status dnskey_verify_rrset(struct module_env* env,
267  struct val_env* ve, struct ub_packed_rrset_key* rrset,
268  struct ub_packed_rrset_key* dnskey, size_t dnskey_idx, char** reason,
269  sldns_pkt_section section, struct module_qstate* qstate);
270 
288  struct val_env* ve, time_t now, struct ub_packed_rrset_key* rrset,
289  struct ub_packed_rrset_key* dnskey, size_t sig_idx,
290  struct rbtree_type** sortree, char** reason, sldns_pkt_section section,
291  struct module_qstate* qstate);
292 
314 enum sec_status dnskey_verify_rrset_sig(struct regional* region,
315  struct sldns_buffer* buf, struct val_env* ve, time_t now,
316  struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey,
317  size_t dnskey_idx, size_t sig_idx,
318  struct rbtree_type** sortree, int* buf_canon, char** reason,
319  sldns_pkt_section section, struct module_qstate* qstate);
320 
324 int canonical_tree_compare(const void* k1, const void* k2);
325 
334 int rrset_canonical_equal(struct regional* region,
335  struct ub_packed_rrset_key* k1, struct ub_packed_rrset_key* k2);
336 
337 #endif /* VALIDATOR_VAL_SIGCRYPT_H */
int dnskey_get_algo(struct ub_packed_rrset_key *k, size_t idx)
void algo_needs_init_ds(struct algo_needs *n, struct ub_packed_rrset_key *ds, int fav_ds_algo, uint8_t *sigalg)
int dnskey_algo_is_supported(struct ub_packed_rrset_key *dnskey_rrset, size_t dnskey_idx)
enum sec_status dnskeyset_verify_rrset(struct module_env *env, struct val_env *ve, struct ub_packed_rrset_key *rrset, struct ub_packed_rrset_key *dnskey, uint8_t *sigalg, char **reason, sldns_pkt_section section, struct module_qstate *qstate)
int ds_digest_algo_is_supported(struct ub_packed_rrset_key *ds_rrset, size_t ds_idx)
int algo_needs_missing(struct algo_needs *n)
unsigned short uint16_t
Definition: stdint.h:125
unsigned char uint8_t
Definition: stdint.h:124
uint16_t ds_get_keytag(struct ub_packed_rrset_key *ds_rrset, size_t ds_idx)
int ds_get_key_algo(struct ub_packed_rrset_key *k, size_t idx)
enum sec_status dnskey_verify_rrset(struct module_env *env, struct val_env *ve, struct ub_packed_rrset_key *rrset, struct ub_packed_rrset_key *dnskey, size_t dnskey_idx, char **reason, sldns_pkt_section section, struct module_qstate *qstate)
size_t algo_needs_num_missing(struct algo_needs *n)
int algo_needs_set_secure(struct algo_needs *n, uint8_t algo)
enum sec_status dnskey_verify_rrset_sig(struct regional *region, struct sldns_buffer *buf, struct val_env *ve, time_t now, struct ub_packed_rrset_key *rrset, struct ub_packed_rrset_key *dnskey, size_t dnskey_idx, size_t sig_idx, struct rbtree_type **sortree, int *buf_canon, char **reason, sldns_pkt_section section, struct module_qstate *qstate)
#define ALGO_NEEDS_MAX
Definition: val_sigcrypt.h:57
sec_status
Definition: packed_rrset.h:176
int ds_digest_match_dnskey(struct module_env *env, struct ub_packed_rrset_key *dnskey_rrset, size_t dnskey_idx, struct ub_packed_rrset_key *ds_rrset, size_t ds_idx)
int canonical_tree_compare(const void *k1, const void *k2)
int ds_get_digest_algo(struct ub_packed_rrset_key *ds_rrset, size_t ds_idx)
const char * buf
Definition: slow_memmem.cpp:74
int rrset_canonical_equal(struct regional *region, struct ub_packed_rrset_key *k1, struct ub_packed_rrset_key *k2)
void algo_needs_reason(struct module_env *env, int alg, char **reason, char *s)
void algo_needs_set_bogus(struct algo_needs *n, uint8_t algo)
uint8_t needs[ALGO_NEEDS_MAX]
Definition: val_sigcrypt.h:69
int ds_key_algo_is_supported(struct ub_packed_rrset_key *ds_rrset, size_t ds_idx)
void algo_needs_init_dnskey_add(struct algo_needs *n, struct ub_packed_rrset_key *dnskey, uint8_t *sigalg)
enum sec_status dnskeyset_verify_rrset_sig(struct module_env *env, struct val_env *ve, time_t now, struct ub_packed_rrset_key *rrset, struct ub_packed_rrset_key *dnskey, size_t sig_idx, struct rbtree_type **sortree, char **reason, sldns_pkt_section section, struct module_qstate *qstate)
size_t num
Definition: val_sigcrypt.h:71
void algo_needs_init_list(struct algo_needs *n, uint8_t *sigalg)
uint16_t dnskey_get_flags(struct ub_packed_rrset_key *k, size_t idx)
enum sldns_enum_pkt_section sldns_pkt_section
Definition: pkthdr.h:126
uint16_t dnskey_calc_keytag(struct ub_packed_rrset_key *dnskey_rrset, size_t dnskey_idx)