42 #include <ldns/ldns.h>
46 static const char* nsec3_str =
"nsec3";
65 *salt_len = (uint8_t) strlen(salt_str);
66 if (*salt_len == 1 && salt_str[0] ==
'-') {
70 }
else if (*salt_len % 2 != 0) {
76 salt_tmp = (uint8_t*) calloc(*salt_len / 2,
sizeof(uint8_t));
78 ods_log_error(
"[%s] construct salt data for %s failed", nsec3_str,
83 for (c = 0; c < *salt_len; c += 2) {
84 if (isxdigit((
int) salt_str[c]) && isxdigit((
int) salt_str[c+1])) {
85 salt_tmp[c/2] = (uint8_t) ldns_hexdigit_to_int(salt_str[c]) * 16 +
86 ldns_hexdigit_to_int(salt_str[c+1]);
89 free((
void*)salt_tmp);
94 *salt_len = *salt_len / 2;
119 ods_log_error(
"[%s] unable to create: allocator_alloc() failed",
123 nsec3params->
sc = sc;
125 nsec3params->
flags = flags;
129 ods_log_error(
"[%s] unable to create: create salt failed", nsec3_str);
135 nsec3params->
rr = NULL;
146 uint16_t iter,
const char* salt, ldns_rr* rr,
const char* version)
151 fprintf(fd,
";;Nsec3parameters: salt %s algorithm %u optout %u "
152 "iterations %u\n", salt?salt:
"-", (
unsigned) algo,
153 (
unsigned) flags, (
unsigned) iter);
154 if (strcmp(version, ODS_SE_FILE_MAGIC_V2) == 0) {
158 fprintf(fd,
";;Nsec3done\n");
173 uint8_t salt_length = 0;
174 uint8_t salt_pos = 0;
177 ldns_buffer* buffer = NULL;
179 salt_length = nsec3params->
salt_len;
182 if (salt_length == 0) {
183 buffer = ldns_buffer_new(2);
184 written = ldns_buffer_printf(buffer,
"-");
186 buffer = ldns_buffer_new(salt_pos+1);
187 for (salt_pos = 0; salt_pos < salt_length; salt_pos++) {
188 written = ldns_buffer_printf(buffer,
"%02x", data[salt_pos]);
191 if (ldns_buffer_status(buffer) == LDNS_STATUS_OK) {
192 str = ldns_buffer2str(buffer);
193 }
else if (written) {
194 ods_log_error(
"[%s] unable to convert nsec3 salt to string: %s",
195 nsec3_str, ldns_get_errorstr_by_id(ldns_buffer_status(buffer)));
197 ods_log_error(
"[%s] unable to convert nsec3 salt to string: zero "
198 "bytes written", nsec3_str);
200 ldns_buffer_free(buffer);
201 return (
const char*) str;