summaryrefslogtreecommitdiff
path: root/lib/dns/rdata/generic/dlv_32769.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dns/rdata/generic/dlv_32769.c')
-rw-r--r--lib/dns/rdata/generic/dlv_32769.c36
1 files changed, 28 insertions, 8 deletions
diff --git a/lib/dns/rdata/generic/dlv_32769.c b/lib/dns/rdata/generic/dlv_32769.c
index 21d7abbb4532c..0f87433c01635 100644
--- a/lib/dns/rdata/generic/dlv_32769.c
+++ b/lib/dns/rdata/generic/dlv_32769.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2006, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2006, 2007, 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dlv_32769.c,v 1.6 2007-06-18 23:47:43 tbox Exp $ */
+/* $Id: dlv_32769.c,v 1.10 2010-12-23 23:47:08 tbox Exp $ */
/* draft-ietf-dnsext-delegation-signer-05.txt */
@@ -74,12 +74,20 @@ fromtext_dlv(ARGS_FROMTEXT) {
/*
* Digest.
*/
- if (c == DNS_DSDIGEST_SHA1)
+ switch (c) {
+ case DNS_DSDIGEST_SHA1:
length = ISC_SHA1_DIGESTLENGTH;
- else if (c == DNS_DSDIGEST_SHA256)
+ break;
+ case DNS_DSDIGEST_SHA256:
length = ISC_SHA256_DIGESTLENGTH;
- else
+ break;
+ case DNS_DSDIGEST_GOST:
+ length = ISC_GOST_DIGESTLENGTH;
+ break;
+ default:
length = -1;
+ break;
+ }
return (isc_hex_tobuffer(lexer, target, -1));
}
@@ -144,7 +152,7 @@ fromwire_dlv(ARGS_FROMWIRE) {
UNUSED(options);
isc_buffer_activeregion(source, &sr);
-
+
/*
* Check digest lengths if we know them.
*/
@@ -152,7 +160,9 @@ fromwire_dlv(ARGS_FROMWIRE) {
(sr.base[3] == DNS_DSDIGEST_SHA1 &&
sr.length < 4 + ISC_SHA1_DIGESTLENGTH) ||
(sr.base[3] == DNS_DSDIGEST_SHA256 &&
- sr.length < 4 + ISC_SHA256_DIGESTLENGTH))
+ sr.length < 4 + ISC_SHA256_DIGESTLENGTH) ||
+ (sr.base[3] == DNS_DSDIGEST_GOST &&
+ sr.length < 4 + ISC_GOST_DIGESTLENGTH))
return (ISC_R_UNEXPECTEDEND);
/*
@@ -164,7 +174,9 @@ fromwire_dlv(ARGS_FROMWIRE) {
sr.length = 4 + ISC_SHA1_DIGESTLENGTH;
else if (sr.base[3] == DNS_DSDIGEST_SHA256)
sr.length = 4 + ISC_SHA256_DIGESTLENGTH;
-
+ else if (sr.base[3] == DNS_DSDIGEST_GOST)
+ sr.length = 4 + ISC_GOST_DIGESTLENGTH;
+
isc_buffer_forward(source, sr.length);
return (mem_tobuffer(target, sr.base, sr.length));
}
@@ -213,6 +225,9 @@ fromstruct_dlv(ARGS_FROMSTRUCT) {
case DNS_DSDIGEST_SHA256:
REQUIRE(dlv->length == ISC_SHA256_DIGESTLENGTH);
break;
+ case DNS_DSDIGEST_GOST:
+ REQUIRE(dlv->length == ISC_GOST_DIGESTLENGTH);
+ break;
}
UNUSED(type);
@@ -318,4 +333,9 @@ checknames_dlv(ARGS_CHECKNAMES) {
return (ISC_TRUE);
}
+static inline int
+casecompare_dlv(ARGS_COMPARE) {
+ return (compare_dlv(rdata1, rdata2));
+}
+
#endif /* RDATA_GENERIC_DLV_32769_C */