From daf15da70d1f58fa146b9e5aefac9915353726bb Mon Sep 17 00:00:00 2001 From: Federico Lucifredi Date: Thu, 27 Dec 2007 10:00:06 +0000 Subject: completed fleshing out of MAC routine. git-svn-id: file:///home/lennart/svn/public/avahi/branches/federico@1662 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- avahi-core/domain-util.c | 12 ++++++++++++ avahi-core/domain-util.h | 3 +++ avahi-core/wide-area.c | 23 ++++++++++++++++++----- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/avahi-core/domain-util.c b/avahi-core/domain-util.c index fc2877b..23d693b 100644 --- a/avahi-core/domain-util.c +++ b/avahi-core/domain-util.c @@ -243,3 +243,15 @@ char * uint32_to_canonical_string(uint32_t v) { return c; } +char * time_t_to_canonical_string(time_t v) { + uint8_t *c = avahi_malloc(6); + + c[0] = (uint8_t) (v >> 40); + c[1] = (uint8_t) (v >> 32); + c[2] = (uint8_t) (v >> 24); + c[3] = (uint8_t) (v >> 16) + c[4] = (uint8_t) (v >> 8); + c[5] = (uint8_t) v; + + return c; +} diff --git a/avahi-core/domain-util.h b/avahi-core/domain-util.h index 59cbd3a..0b13957 100644 --- a/avahi-core/domain-util.h +++ b/avahi-core/domain-util.h @@ -51,6 +51,9 @@ char * uint16_to_canonical_string(uint16_t v); /** returns canonical wire representation of uint32 */ char * uint32_to_canonical_string(uint32_t v); +/** returns canonical wire representation of time_t as an uint48 */ +char * time_t_to_canonical_string(time_t v); + AVAHI_C_DECL_END #endif diff --git a/avahi-core/wide-area.c b/avahi-core/wide-area.c index de40021..fbe25b4 100644 --- a/avahi-core/wide-area.c +++ b/avahi-core/wide-area.c @@ -808,12 +808,25 @@ AvahiRecord* tsig_sign_packet(const char* keyname, const char* key, unsigned key /*HMAC_Update(&ctx, , );*/ HMAC_Update(&ctx, (unsigned char *)p->data, (unsigned int)p->size); /*packet in wire format*/ - canonic = c_to_canonical_string(keyname); - HMAC_Update(&ctx, canonic, strlen(canonic) +1); /* key name in canonical wire format */ + canonic = c_to_canonical_string(keyname); /* key name in canonical wire format (DNS labels) */ + HMAC_Update(&ctx, canonic, strlen(canonic) +1); - HMAC_Update(&ctx, uint16_to_canonical_string(AVAHI_DNS_CLASS_ANY), 2); /* class */ -/* HMAC_Update(&ctx, - HMAC_Update(&ctx, */ + HMAC_Update(&ctx, uint16_to_canonical_string(AVAHI_DNS_CLASS_ANY), 2); /* class - always ANY for TSIG*/ + + HMAC_Update(&ctx, uint32_to_canonical_string(0), 4); /* TTL - always 0 for TSIG */ + + canonic = c_to_canonical_string(r->data.tsig.algorithm_name); /* IANA algorithm name in canonical wire format (DNS labels)*/ + HMAC_Update(&ctx, canonic, strlen(canonic) +1); + + HMAC_Update(&ctx, time_t_to_canonical_string(time_t v), 6); /*uint48 representation of unix time */ + + HMAC_Update(&ctx, uint16_to_canonical_string(r->data.tsig.fudge), 2); + + HMAC_Update(&ctx, uint16_to_canonical_string(r->data.tsig.error), 2); + + HMAC_Update(&ctx, uint16_to_canonical_string(r->data.tsig.other_len), 2); + + HMAC_Update(&ctx, r->data.tsig.other_data, other_len); /* should work if other_len =0 can be passed to the HMAC */ HMAC_Final(&ctx, keyed_hash, &hash_length); HMAC_cleanup(&ctx); -- cgit