summaryrefslogtreecommitdiffstats
path: root/avahi-core/domain-util.c
diff options
context:
space:
mode:
authorFederico Lucifredi <flucifredi@acm.org>2008-01-20 21:47:50 +0000
committerFederico Lucifredi <flucifredi@acm.org>2008-01-20 21:47:50 +0000
commit456dc751a0c3d48476277c8cbca338715948f2f7 (patch)
treeab48757bbb8992d181725dcad8800ed9de30ae28 /avahi-core/domain-util.c
parent4586d4466ffd0b8913f04b63c5dbfd261fc88017 (diff)
keytag generation (avahi_keytag()) and a few more constants for RRSIG generation.
git-svn-id: file:///home/lennart/svn/public/avahi/branches/federico2@1732 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'avahi-core/domain-util.c')
-rw-r--r--avahi-core/domain-util.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/avahi-core/domain-util.c b/avahi-core/domain-util.c
index 0d6ba14..7f562db 100644
--- a/avahi-core/domain-util.c
+++ b/avahi-core/domain-util.c
@@ -237,4 +237,18 @@ uint8_t avahi_count_canonical_labels(const char* input){
}
return count;
-} \ No newline at end of file
+}
+
+/* reference keytag generator from RFC 4034 */
+/* invoke with avahi_keytag(<rdata>, <rdlength>); */
+uint16_t avahi_keytag(uint8_t key[], uint16_t keysize){
+ uint32_t ac;
+ int i;
+
+ for (ac = 0, i = 0; i < keysize; ++i)
+ ac += (i & 1) ? key[i] : key[i] << 8;
+
+ ac += (ac >> 16) & 0xFFFF;
+
+ return ac & 0xFFFF;
+ }