40 #include <ldns/ldns.h>
44 static const char* nsec3_str =
"nsec3";
63 *salt_len = (uint8_t) strlen(salt_str);
64 if (*salt_len == 1 && salt_str[0] ==
'-') {
68 }
else if (*salt_len % 2 != 0) {
74 salt_tmp = (uint8_t*) calloc(*salt_len / 2,
sizeof(uint8_t));
76 ods_log_error(
"[%s] construct salt data for %s failed", nsec3_str,
81 for (c = 0; c < *salt_len; c += 2) {
82 if (isxdigit((
int) salt_str[c]) && isxdigit((
int) salt_str[c+1])) {
83 salt_tmp[c/2] = (uint8_t) ldns_hexdigit_to_int(salt_str[c]) * 16 +
84 ldns_hexdigit_to_int(salt_str[c+1]);
87 free((
void*)salt_tmp);
92 *salt_len = *salt_len / 2;
117 ods_log_error(
"[%s] unable to create: allocator_alloc() failed",
121 nsec3params->
sc = sc;
123 nsec3params->
flags = flags;
127 ods_log_error(
"[%s] unable to create: create salt failed", nsec3_str);
133 nsec3params->
rr = NULL;
144 uint16_t iter,
const char* salt, ldns_rr* rr,
const char* version)
149 fprintf(fd,
";;Nsec3parameters: salt %s algorithm %u optout %u "
150 "iterations %u\n", salt?salt:
"-", (
unsigned) algo,
151 (
unsigned) flags, (
unsigned) iter);
152 if (strcmp(version, ODS_SE_FILE_MAGIC_V2) == 0) {
156 fprintf(fd,
";;Nsec3done\n");
171 uint8_t salt_length = 0;
172 uint8_t salt_pos = 0;
175 ldns_buffer* buffer = NULL;
177 salt_length = nsec3params->
salt_len;
180 if (salt_length == 0) {
181 buffer = ldns_buffer_new(2);
182 written = ldns_buffer_printf(buffer,
"-");
184 buffer = ldns_buffer_new(salt_pos+1);
185 for (salt_pos = 0; salt_pos < salt_length; salt_pos++) {
186 written = ldns_buffer_printf(buffer,
"%02x", data[salt_pos]);
189 if (ldns_buffer_status(buffer) == LDNS_STATUS_OK) {
190 str = ldns_buffer2str(buffer);
191 }
else if (written) {
192 ods_log_error(
"[%s] unable to convert nsec3 salt to string: %s",
193 nsec3_str, ldns_get_errorstr_by_id(ldns_buffer_status(buffer)));
195 ods_log_error(
"[%s] unable to convert nsec3 salt to string: zero "
196 "bytes written", nsec3_str);
198 ldns_buffer_free(buffer);
199 return (
const char*) str;