keys.h
Go to the documentation of this file.
1 /*
2  *
3  * keys.h
4  *
5  * priv key definitions
6  *
7  * a Net::DNS like library for C
8  *
9  * (c) NLnet Labs, 2005-2006
10  *
11  * See the file LICENSE for the license
12  */
13 
21 #ifndef LDNS_KEYS_H
22 #define LDNS_KEYS_H
23 
24 #include <ldns/common.h>
25 #if LDNS_BUILD_CONFIG_HAVE_SSL
26 #include <openssl/ssl.h>
27 #endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
28 #include <ldns/util.h>
29 #include <errno.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
36 
37 #define LDNS_KEY_ZONE_KEY 0x0100 /* rfc 4034 */
38 #define LDNS_KEY_SEP_KEY 0x0001 /* rfc 4034 */
39 #define LDNS_KEY_REVOKE_KEY 0x0080 /* rfc 5011 */
40 
45 {
46  LDNS_RSAMD5 = 1, /* RFC 4034,4035 */
47  LDNS_DH = 2,
48  LDNS_DSA = 3,
49  LDNS_ECC = 4,
53  LDNS_RSASHA256 = 8, /* RFC 5702 */
54  LDNS_RSASHA512 = 10, /* RFC 5702 */
55  LDNS_ECC_GOST = 12, /* RFC 5933 */
56  LDNS_ECDSAP256SHA256 = 13, /* RFC 6605 */
57  LDNS_ECDSAP384SHA384 = 14, /* RFC 6605 */
61 };
63 
68 {
69  LDNS_SHA1 = 1, /* RFC 4034 */
70  LDNS_SHA256 = 2, /* RFC 4509 */
71  LDNS_HASH_GOST = 3, /* RFC 5933 */
72  LDNS_SHA384 = 4 /* RFC 6605 */
73 };
75 
80 {
91  LDNS_SIGN_HMACMD5 = 157, /* not official! This type is for TSIG, not DNSSEC */
92  LDNS_SIGN_HMACSHA1 = 158, /* not official! This type is for TSIG, not DNSSEC */
93  LDNS_SIGN_HMACSHA256 = 159 /* ditto */
94 };
96 
108  ldns_signing_algorithm _alg;
110  bool _use;
112  /* TODO remove unions? */
113  struct {
114 #if LDNS_BUILD_CONFIG_HAVE_SSL
115 #ifndef S_SPLINT_S
116  /* The key can be an OpenSSL EVP Key
117  */
118  EVP_PKEY *key;
119 #endif
120 #endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
121 
124  struct {
125  unsigned char *key;
126  size_t size;
127  } hmac;
132  } _key;
134  union {
136  struct {
138  uint32_t orig_ttl;
140  uint32_t inception;
142  uint32_t expiration;
144  uint16_t keytag;
146  uint16_t flags;
147  } dnssec;
148  } _extra;
151 };
152 typedef struct ldns_struct_key ldns_key;
153 
158 {
159  size_t _key_count;
161 };
163 
164 
170 
176 
184 ldns_key *ldns_key_new_frm_algorithm(ldns_signing_algorithm a, uint16_t size);
185 
197 
209 ldns_status ldns_key_new_frm_fp_l(ldns_key **k, FILE *fp, int *line_nr);
210 
211 #if LDNS_BUILD_CONFIG_HAVE_SSL
212 
216 ldns_status ldns_key_new_frm_engine(ldns_key **key, ENGINE *e, char *key_id, ldns_algorithm);
217 
218 
225 RSA *ldns_key_new_frm_fp_rsa(FILE *fp);
226 #endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
227 
228 #if LDNS_BUILD_CONFIG_HAVE_SSL
229 
236 RSA *ldns_key_new_frm_fp_rsa_l(FILE *fp, int *line_nr);
237 #endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
238 
239 #if LDNS_BUILD_CONFIG_HAVE_SSL
240 
246 DSA *ldns_key_new_frm_fp_dsa(FILE *fp);
247 #endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
248 
249 #if LDNS_BUILD_CONFIG_HAVE_SSL
250 
257 DSA *ldns_key_new_frm_fp_dsa_l(FILE *fp, int *line_nr);
258 #endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
259 
260 #if LDNS_BUILD_CONFIG_HAVE_SSL
261 
269 unsigned char *ldns_key_new_frm_fp_hmac(FILE *fp, size_t *hmac_size);
270 #endif
271 
272 #if LDNS_BUILD_CONFIG_HAVE_SSL
273 
282 unsigned char *ldns_key_new_frm_fp_hmac_l(FILE *fp, int *line_nr, size_t *hmac_size);
283 #endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
284 
285 /* acces write functions */
291 void ldns_key_set_algorithm(ldns_key *k, ldns_signing_algorithm l);
292 #if LDNS_BUILD_CONFIG_HAVE_SSL
293 
298 void ldns_key_set_evp_key(ldns_key *k, EVP_PKEY *e);
299 
306 void ldns_key_set_rsa_key(ldns_key *k, RSA *r);
307 
314 void ldns_key_set_dsa_key(ldns_key *k, DSA *d);
315 
322 void ldns_key_assign_rsa_key(ldns_key *k, RSA *r);
323 
330 void ldns_key_assign_dsa_key(ldns_key *k, DSA *d);
331 
337 int ldns_key_EVP_load_gost_id(void);
338 
340 void ldns_key_EVP_unload_gost(void);
341 #endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
342 
348 void ldns_key_set_hmac_key(ldns_key *k, unsigned char *hmac);
349 
360 void ldns_key_set_external_key(ldns_key *key, void *external_key);
361 
367 void ldns_key_set_hmac_size(ldns_key *k, size_t hmac_size);
373 void ldns_key_set_origttl(ldns_key *k, uint32_t t);
379 void ldns_key_set_inception(ldns_key *k, uint32_t i);
385 void ldns_key_set_expiration(ldns_key *k, uint32_t e);
397 void ldns_key_set_keytag(ldns_key *k, uint16_t tag);
403 void ldns_key_set_flags(ldns_key *k, uint16_t flags);
409 void ldns_key_list_set_key_count(ldns_key_list *key, size_t count);
410 
417 bool ldns_key_list_push_key(ldns_key_list *key_list, ldns_key *key);
418 
424 size_t ldns_key_list_key_count(const ldns_key_list *key_list);
425 
432 ldns_key *ldns_key_list_key(const ldns_key_list *key, size_t nr);
433 
434 #if LDNS_BUILD_CONFIG_HAVE_SSL
435 
440 RSA *ldns_key_rsa_key(const ldns_key *k);
446 EVP_PKEY *ldns_key_evp_key(const ldns_key *k);
447 #endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
448 
452 #if LDNS_BUILD_CONFIG_HAVE_SSL
453 DSA *ldns_key_dsa_key(const ldns_key *k);
454 #endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
455 
461 ldns_signing_algorithm ldns_key_algorithm(const ldns_key *k);
467 void ldns_key_set_use(ldns_key *k, bool v);
473 bool ldns_key_use(const ldns_key *k);
479 unsigned char *ldns_key_hmac_key(const ldns_key *k);
485 void *ldns_key_external_key(const ldns_key *k);
491 size_t ldns_key_hmac_size(const ldns_key *k);
497 uint32_t ldns_key_origttl(const ldns_key *k);
503 uint32_t ldns_key_inception(const ldns_key *k);
509 uint32_t ldns_key_expiration(const ldns_key *k);
515 uint16_t ldns_key_keytag(const ldns_key *k);
527 void
528 ldns_key_list_set_use(ldns_key_list *keys, bool v);
529 
535 uint16_t ldns_key_flags(const ldns_key *k);
536 
543 
553 ldns_rr *ldns_key2rr(const ldns_key *k);
554 
561 void ldns_key_print(FILE *output, const ldns_key *k);
562 
568 void ldns_key_free(ldns_key *key);
569 
576 void ldns_key_deep_free(ldns_key *key);
577 
582 void ldns_key_list_free(ldns_key_list *key_list);
583 
589 ldns_rr * ldns_read_anchor_file(const char *filename);
590 
602 
608 int ldns_key_algo_supported(int algo);
609 
615 ldns_signing_algorithm ldns_get_signing_algorithm_by_name(const char* name);
616 
617 #ifdef __cplusplus
618 }
619 #endif
620 
621 #endif /* LDNS_KEYS_H */