keys.h

Go to the documentation of this file.
00001 /*
00002  * 
00003  * keys.h
00004  *
00005  * priv key definitions
00006  *
00007  * a Net::DNS like library for C
00008  *
00009  * (c) NLnet Labs, 2005-2006
00010  *
00011  * See the file LICENSE for the license
00012  */
00013 
00021 #ifndef LDNS_KEYS_H
00022 #define LDNS_KEYS_H
00023 
00024 #ifdef HAVE_SSL
00025 #include <openssl/ssl.h>
00026 #endif /* HAVE_SSL */
00027 #include <ldns/dnssec.h>
00028 #include <ldns/util.h>
00029 
00030 extern ldns_lookup_table ldns_signing_algorithms[];
00031 
00032 #define LDNS_KEY_ZONE_KEY 0x0100
00033 #define LDNS_KEY_SEP_KEY 0x0001
00034 
00038 enum ldns_enum_algorithm
00039 {
00040         LDNS_RSAMD5             = 1,
00041         LDNS_DH                 = 2,
00042         LDNS_DSA                = 3,
00043         LDNS_ECC                = 4,
00044         LDNS_RSASHA1            = 5,
00045         LDNS_INDIRECT           = 252,
00046         LDNS_PRIVATEDNS         = 253,
00047         LDNS_PRIVATEOID         = 254
00048 };
00049 typedef enum ldns_enum_algorithm ldns_algorithm;
00050 
00054 enum ldns_enum_hash
00055 {
00056         LDNS_SHA1               = 1,
00057         LDNS_SHA256             = 2
00058 };
00059 typedef enum ldns_enum_hash ldns_hash;
00060 
00064 enum ldns_enum_signing_algorithm
00065 {
00066         LDNS_SIGN_RSAMD5         = LDNS_RSAMD5,
00067         LDNS_SIGN_RSASHA1        = LDNS_RSASHA1,
00068         LDNS_SIGN_DSA            = LDNS_DSA,
00069         LDNS_SIGN_HMACMD5        = 157  /* not official! */
00070 };
00071 typedef enum ldns_enum_signing_algorithm ldns_signing_algorithm;
00072 
00083 struct ldns_struct_key {
00084         ldns_signing_algorithm _alg;
00086         /* TODO remove unions? */
00087         struct {
00088 #ifdef HAVE_SSL
00089                 RSA     *rsa;
00090                 DSA     *dsa;
00091 #endif /* HAVE_SSL */
00092                 struct {
00093                         unsigned char *key;
00094                         size_t size;
00095                 } hmac;
00096         } _key;
00098         union {
00100                 struct {
00102                         uint32_t orig_ttl;
00104                         uint32_t inception;
00106                         uint32_t expiration;
00108                         uint16_t keytag;
00110                         uint16_t flags;
00111                 }  dnssec;
00112         } _extra;
00114         ldns_rdf *_pubkey_owner;
00115 };
00116 typedef struct ldns_struct_key ldns_key;
00117 
00121 struct ldns_struct_key_list
00122 {
00123         size_t _key_count;
00124         ldns_key **_keys;
00125 };
00126 typedef struct ldns_struct_key_list ldns_key_list;
00127 
00128 
00133 ldns_key_list *ldns_key_list_new();
00134 
00139 ldns_key *ldns_key_new();
00140 
00148 ldns_key *ldns_key_new_frm_algorithm(ldns_signing_algorithm a, uint16_t size);
00149 
00160 ldns_status ldns_key_new_frm_fp(ldns_key **k, FILE *fp);
00161 
00173 ldns_status ldns_key_new_frm_fp_l(ldns_key **k, FILE *fp, int *line_nr);
00174 
00175 #ifdef HAVE_SSL
00176 
00182 RSA *ldns_key_new_frm_fp_rsa(FILE *fp);
00183 #endif /* HAVE_SSL */
00184 
00185 #ifdef HAVE_SSL
00186 
00193 RSA *ldns_key_new_frm_fp_rsa_l(FILE *fp, int *line_nr);
00194 #endif /* HAVE_SSL */
00195 
00196 #ifdef HAVE_SSL
00197 
00203 DSA *ldns_key_new_frm_fp_dsa(FILE *fp);
00204 #endif /* HAVE_SSL */
00205 
00206 #ifdef HAVE_SSL
00207 
00214 DSA *ldns_key_new_frm_fp_dsa_l(FILE *fp, int *line_nr);
00215 #endif /* HAVE_SSL */
00216 
00217 #ifdef HAVE_SSL
00218 
00226 unsigned char *ldns_key_new_frm_fp_hmac(FILE *fp, size_t *hmac_size);
00227 #endif
00228 
00229 #ifdef HAVE_SSL
00230 
00239 unsigned char *ldns_key_new_frm_fp_hmac_l(FILE *fp, int *line_nr, size_t *hmac_size);
00240 #endif /* HAVE_SSL */
00241 
00242 /* acces write functions */
00248 void ldns_key_set_algorithm(ldns_key *k, ldns_signing_algorithm l);
00249 #ifdef HAVE_SSL
00250 
00255 void ldns_key_set_rsa_key(ldns_key *k, RSA *r);
00261 void ldns_key_set_dsa_key(ldns_key *k, DSA *d);
00262 #endif /* HAVE_SSL */
00263 
00268 void ldns_key_set_hmac_key(ldns_key *k, unsigned char *hmac);
00269 /*
00270  * Set the key's hmac size
00271  * \param[in] k the key
00272  * \param[in] hmac the hmac data
00273  */
00274 void ldns_key_set_hmac_size(ldns_key *k, size_t hmac_size);
00275 
00281 void ldns_key_set_origttl(ldns_key *k, uint32_t t);
00287 void ldns_key_set_inception(ldns_key *k, uint32_t i);
00293 void ldns_key_set_expiration(ldns_key *k, uint32_t e);
00299 void ldns_key_set_pubkey_owner(ldns_key *k, ldns_rdf *r);
00305 void ldns_key_set_keytag(ldns_key *k, uint16_t tag);
00311 void ldns_key_set_flags(ldns_key *k, uint16_t flags);
00317 void ldns_key_list_set_key_count(ldns_key_list *key, size_t count);
00318 
00325 bool ldns_key_list_push_key(ldns_key_list *key_list, ldns_key *key);
00326 
00332 size_t ldns_key_list_key_count(const ldns_key_list *key_list);
00333 
00340 ldns_key *ldns_key_list_key(const ldns_key_list *key, size_t nr);
00341 
00342 #ifdef HAVE_SSL
00343 
00348 RSA *ldns_key_rsa_key(const ldns_key *k);
00349 #endif /* HAVE_SSL */
00350 
00354 #ifdef HAVE_SSL
00355 DSA *ldns_key_dsa_key(const ldns_key *k);
00356 #endif /* HAVE_SSL */
00357 
00363 ldns_signing_algorithm ldns_key_algorithm(const ldns_key *k);
00369 unsigned char *ldns_key_hmac_key(const ldns_key *k);
00375 size_t ldns_key_hmac_size(const ldns_key *k);
00381 uint32_t ldns_key_origttl(const ldns_key *k);
00387 uint32_t ldns_key_inception(const ldns_key *k);
00393 uint32_t ldns_key_expiration(const ldns_key *k);
00399 uint16_t ldns_key_keytag(const ldns_key *k);
00405 ldns_rdf *ldns_key_pubkey_owner(const ldns_key *k);
00411 uint16_t ldns_key_flags(const ldns_key *k);
00412 
00418 ldns_key *ldns_key_list_pop_key(ldns_key_list *key_list);
00419 
00426 ldns_rr *ldns_key2rr(const ldns_key *k);
00427 
00434 void ldns_key_print(FILE *output, const ldns_key *k);
00435 
00441 void ldns_key_free(ldns_key *key);
00442 
00448 void ldns_key_deep_free(ldns_key *key);
00449 
00454 void ldns_key_list_free(ldns_key_list *key_list);
00455 
00456 #endif /* LDNS_KEYS_H */

Generated on Wed Feb 20 20:23:44 2008 for ldns by  doxygen 1.5.5