From 44f5496be8c0a584bdba371135bc9a7d4bd2ef52 Mon Sep 17 00:00:00 2001 From: Federico Lucifredi Date: Thu, 17 Jan 2008 07:16:44 +0000 Subject: adding avahi_get_local_zsk_pubkey(uint32_t ttl). git-svn-id: file:///home/lennart/svn/public/avahi/branches/federico2@1718 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- avahi-core/dns.c | 31 +++++++++++++++++++++++++++++++ avahi-core/dns.h | 5 +++++ 2 files changed, 36 insertions(+) diff --git a/avahi-core/dns.c b/avahi-core/dns.c index 0206ec7..29fe515 100644 --- a/avahi-core/dns.c +++ b/avahi-core/dns.c @@ -858,3 +858,34 @@ size_t avahi_rdata_serialize(AvahiRecord *record, void *rdata, size_t max_size) return p.size; } + +/* TODO: should this be located in this file? */ +/* r = avahi_get_local_zsk_pubkey() */ +AvahiRecord* avahi_get_local_zsk_pubkey(uint32_t ttl){ + + AvahiRecord *r; + + r = avahi_record_new_full(keyname, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_DNSKEY, 0); + + if (!r) { + avahi_log_error("avahi_record_new_full() failed."); + return NULL; + } + + r->ttl = ttl; /* TTL of records associated with a signature MUST match the record's */ + + r->flags = AVAHI_DNSSEC_DNSKEY_ZK_FLAG; /* bit 7 MUST be set to indicate DNSSEC key */ + + r->protocol = AVAHI_DNSSEC_PROTO; /* used for "compatibility" with KEY record */ + + /* TODO: in merged version into upstream, key needs to be an external configurable pulled from /etc */ + /* in the prototype, we just statically configure */ + + r->algorithm = AVAHI_DNSSEC_KEY_SHA1; /* SHA1 is mandatory in the spec, but others do exist */ + + /* statically using key 62051 which has 512b length */ + /* 512b ZSK pubkey in base64 encoding */ + r->public_key = avahi_strndup("AQO/7WDOTMzPbRAEVbwYttMZztSn+exNoeNTsPqNXb6dtNqpRIdzwgfS3kBtaBtqiOGyJjts7qjXbQRX/QvvFuFF", strlen("AQO/7WDOTMzPbRAEVbwYttMZztSn+exNoeNTsPqNXb6dtNqpRIdzwgfS3kBtaBtqiOGyJjts7qjXbQRX/QvvFuFF")); + + return r; +} diff --git a/avahi-core/dns.h b/avahi-core/dns.h index d485510..3084720 100644 --- a/avahi-core/dns.h +++ b/avahi-core/dns.h @@ -79,6 +79,8 @@ int avahi_dns_packet_skip(AvahiDnsPacket *p, size_t length); int avahi_dns_packet_is_empty(AvahiDnsPacket *p); size_t avahi_dns_packet_space(AvahiDnsPacket *p); +AvahiRecord* avahi_get_local_zsk_pubkey(uint32_t ttl); + #define AVAHI_DNS_FIELD_ID 0 #define AVAHI_DNS_FIELD_FLAGS 1 #define AVAHI_DNS_FIELD_QDCOUNT 2 @@ -92,6 +94,9 @@ size_t avahi_dns_packet_space(AvahiDnsPacket *p); #define AVAHI_DNS_FLAG_TC (1 << 9) #define AVAHI_DNS_FLAG_AA (1 << 10) +#define AVAHI_DNSSEC_DNSKEY_ZK_FLAG = (1 << 7) +#define AVAHI_DNSSEC_DNSKEY_SEP_FLAG = (1 << 15) + #define AVAHI_DNS_FLAGS(qr, opcode, aa, tc, rd, ra, z, ad, cd, rcode) \ (((uint16_t) !!qr << 15) | \ ((uint16_t) (opcode & 15) << 11) | \ -- cgit