/* set the ttl from the priv key on the rrset */
for (i = 0; i < ldns_rr_list_rr_count(rrset); i++) {
ldns_rr_set_ttl(
- ldns_rr_list_rr(rrset_clone, i),
- orig_ttl);
+ ldns_rr_list_rr(rrset_clone, i), orig_ttl);
}
/* fill in what we now of the signature */
-
-
- /* right now, we have: a key, a semi-sig and an rrset */
-
-
+ /* set the orig_ttl */
+ ldns_rr_set_origttl(current_sig, ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, orig_ttl));
+ /* the signers name */
+ ldns_rr_set_signame(current_sig,
+ ldns_key_pubkey_owner(current_key));
+ /* label count - get it from the first rr in the rr_list */
+ ldns_rr_set_labels(current_sig,
+ ldns_native2rdf_int8(LDNS_RDF_TYPE_INT8, ldns_rr_label_count(
+ ldns_rr_list_rr(rrset_clone, 0))));
+ /* inception, expiration */
+ ldns_rr_set_inception(current_sig,
+ ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, ldns_key_inception(current_key)));
+ ldns_rr_set_expiration(current_sig,
+ ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, ldns_key_expiration(current_key)));
+ /* key-tag */
+ ldns_rr_set_keytag(current_sig,
+ ldns_native2rdf_int16(LDNS_RDF_TYPE_INT16, ldns_key_keytag(current_key)));
+
+ /* algorithm - check the key and substitute that */
+ ldns_rr_set_algorithm(current_sig,
+ ldns_native2rdf_int8(LDNS_RDF_TYPE_ALG, ldns_key_algorithm(current_key)));
+ /* type-covered */
+ ldns_rr_set_typecovered(current_sig,
+ ldns_native2rdf_int16(LDNS_RDF_TYPE_TYPE,
+ ldns_rr_get_type(ldns_rr_list_rr(rrset_clone, 0))));
+
+ /* right now, we have: a key, a semi-sig and an rrset. For
+ * which we can create the sig and base64 encode that and
+ * add that to the signature */
}
#define _LDNS_KEYS_H
#include <openssl/ssl.h>
-
#include <util.h>
+#include <ldns/dnssec.h>
+
extern ldns_lookup_table ldns_signing_algorithms[];
enum ldns_enum_signing_algorithm
{
- LDNS_SIGN_ALG_RSAMD5 = 1,
- LDNS_SIGN_ALG_RSASHA1 = 2,
- LDNS_SIGN_ALG_DSAMD5 = 3,
- LDNS_SIGN_ALG_DSASHA1 = 4,
- LDNS_SIGN_ALG_HMACMD5 = 5
+ LDNS_SIGN_ALG_RSAMD5 = LDNS_RSAMD5,
+ LDNS_SIGN_ALG_RSASHA1 = LDNS_RSASHA1,
+ LDNS_SIGN_ALG_DSAMD5 = LDNS_DSA,
+ LDNS_SIGN_ALG_DSASHA1 = 140, /* not official! */
+ LDNS_SIGN_ALG_HMACMD5 = 150 /* not official! */
};
typedef enum ldns_enum_signing_algorithm ldns_signing_algorithm;
uint32_t orig_ttl;
uint32_t inception;
uint32_t expiration;
+ uint16_t keytag;
} dnssec;
struct {
uint16_t fudge;
void ldns_key_set_inception(ldns_key *k, uint32_t i);
void ldns_key_set_expiration(ldns_key *k, uint32_t e);
void ldns_key_set_pubkey_owner(ldns_key *k, ldns_rdf *r);
-
+void ldns_key_set_keytag(ldns_key *k, uint16_t tag);
size_t ldns_key_list_key_count(ldns_key_list *key_list);
ldns_key * ldns_key_list_key(ldns_key_list *key, size_t nr);
uint32_t ldns_key_ttl(ldns_key *k);
uint32_t ldns_key_inception(ldns_key *k);
uint32_t ldns_key_expiration(ldns_key *k);
+uint16_t ldns_key_keytag(ldns_key *k);
void ldns_key_list_set_key_count(ldns_key_list *key, size_t count);
ldns_rdf * ldns_key_pubkey_owner(ldns_key *k);
bool ldns_key_list_push_key(ldns_key_list *key_list, ldns_key *key);
#include "util.h"
+#define _LDNS_RR_FUNCTION(TYPE, RR, POS) \
+ if (!(RR) || (ldns_rr_get_type((RR)) != (TYPE))) { \
+ return false; \
+ } \
+ return ldns_rr_rdf((RR), (POS));
+
+#define _LDNS_RR_SET_FUNCTION(TYPE, RR, RDF, POS) \
+ ldns_rdf *pop; \
+ if (!(RR) || (ldns_rr_get_type((RR)) != (TYPE))) { \
+ return false; \
+ } \
+ pop = ldns_rr_set_rdf((RR), (RDF), (POS)); \
+ if (pop) { \
+ FREE(pop); \
+ return true; \
+ } else { \
+ return false; \
+ }
/* handle A / AAAA records */
ldns_rdf *
ldns_rdf *
ldns_rr_nsdname(ldns_rr *r)
{
- _LDNS_RR_FUNCTION(r, 0, LDNS_RR_TYPE_NS);
+ _LDNS_RR_FUNCTION(LDNS_RR_TYPE_NS, r, 0);
}
/* MX records */
ldns_rdf *
ldns_rr_preference(ldns_rr *r)
{
- _LDNS_RR_FUNCTION(r, 0, LDNS_RR_TYPE_MX);
+ _LDNS_RR_FUNCTION(LDNS_RR_TYPE_MX, r, 0);
}
ldns_rdf *
ldns_rr_exchange(ldns_rr *r)
{
- _LDNS_RR_FUNCTION(r, 1, LDNS_RR_TYPE_MX);
+ _LDNS_RR_FUNCTION(LDNS_RR_TYPE_MX, r, 1);
}
/* RRSIG record */
ldns_rdf *
ldns_rr_typecovered(ldns_rr *r)
{
- _LDNS_RR_FUNCTION(r, 0, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_FUNCTION(LDNS_RR_TYPE_RRSIG, r, 0);
}
bool
ldns_rr_set_typecovered(ldns_rr *r, ldns_rdf *f)
{
- _LDNS_RR_SET_FUNCTION(r, f, 0, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_SET_FUNCTION(LDNS_RR_TYPE_RRSIG, r, f, 0);
}
ldns_rdf *
ldns_rr_algorithm(ldns_rr *r)
{
- _LDNS_RR_FUNCTION(r, 1, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_FUNCTION(LDNS_RR_TYPE_RRSIG, r, 1);
}
bool
ldns_rr_set_algorithm(ldns_rr *r, ldns_rdf *f)
{
- _LDNS_RR_SET_FUNCTION(r, f, 1, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_SET_FUNCTION(LDNS_RR_TYPE_RRSIG, r, f, 1);
}
ldns_rdf *
ldns_rr_labels(ldns_rr *r)
{
- _LDNS_RR_FUNCTION(r, 2, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_FUNCTION(LDNS_RR_TYPE_RRSIG, r, 2);
}
bool
ldns_rr_set_labels(ldns_rr *r, ldns_rdf *f)
{
- _LDNS_RR_SET_FUNCTION(r, f, 2, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_SET_FUNCTION(LDNS_RR_TYPE_RRSIG, r, f, 2);
}
ldns_rdf *
ldns_rr_origttl(ldns_rr *r)
{
- _LDNS_RR_FUNCTION(r, 3, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_FUNCTION(LDNS_RR_TYPE_RRSIG, r, 3);
}
bool
-ldns_rr_set_origtll(ldns_rr *r, ldns_rdf *f)
+ldns_rr_set_origttl(ldns_rr *r, ldns_rdf *f)
{
- _LDNS_RR_SET_FUNCTION(r, f, 3, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_SET_FUNCTION(LDNS_RR_TYPE_RRSIG, r, f, 3);
}
ldns_rdf *
ldns_rr_expiration(ldns_rr *r)
{
- _LDNS_RR_FUNCTION(r, 4, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_FUNCTION(LDNS_RR_TYPE_RRSIG, r, 4);
}
bool
ldns_rr_set_expiration(ldns_rr *r, ldns_rdf *f)
{
- _LDNS_RR_SET_FUNCTION(r, f, 4, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_SET_FUNCTION(LDNS_RR_TYPE_RRSIG, r, f, 4);
}
ldns_rdf *
ldns_rr_inception(ldns_rr *r)
{
- _LDNS_RR_FUNCTION(r, 5, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_FUNCTION(LDNS_RR_TYPE_RRSIG, r, 5);
}
bool
ldns_rr_set_inception(ldns_rr *r, ldns_rdf *f)
{
- _LDNS_RR_SET_FUNCTION(r, f, 5, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_SET_FUNCTION(LDNS_RR_TYPE_RRSIG, r, f, 5);
}
ldns_rdf *
ldns_rr_keytag(ldns_rr *r)
{
- _LDNS_RR_FUNCTION(r, 6, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_FUNCTION(LDNS_RR_TYPE_RRSIG, r, 6);
}
bool
ldns_rr_set_keytag(ldns_rr *r, ldns_rdf *f)
{
- _LDNS_RR_SET_FUNCTION(r, f, 6, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_SET_FUNCTION(LDNS_RR_TYPE_RRSIG, r, f, 6);
}
ldns_rdf *
ldns_rr_signame(ldns_rr *r)
{
- _LDNS_RR_FUNCTION(r, 7, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_FUNCTION(LDNS_RR_TYPE_RRSIG, r, 7);
}
bool
ldns_rr_set_signame(ldns_rr *r, ldns_rdf *f)
{
- _LDNS_RR_SET_FUNCTION(r, f, 7, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_SET_FUNCTION(LDNS_RR_TYPE_RRSIG, r, f, 7);
}
ldns_rdf *
ldns_rr_sig(ldns_rr *r)
{
- _LDNS_RR_FUNCTION(r, 8, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_FUNCTION(LDNS_RR_TYPE_RRSIG, r, 8);
}
bool
ldns_rr_set_sig(ldns_rr *r, ldns_rdf *f)
{
- _LDNS_RR_SET_FUNCTION(r, f, 8, LDNS_RR_TYPE_RRSIG);
+ _LDNS_RR_SET_FUNCTION(LDNS_RR_TYPE_RRSIG, r, f, 8);
}