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) {
69 ods_log_error(
"[%s] invalid salt %s", nsec3_str, salt_str);
71 return ODS_STATUS_ERR;
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,
79 return ODS_STATUS_MALLOC_ERR;
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]);
86 ods_log_error(
"[%s] invalid salt %s", nsec3_str, salt_str);
87 free((
void*)salt_tmp);
89 return ODS_STATUS_ERR;
92 *salt_len = *salt_len / 2;
115 ods_log_error(
"[%s] unable to create: allocator_alloc() failed",
119 nsec3params->
sc = sc;
121 nsec3params->
flags = flags;
125 ods_log_error(
"[%s] unable to create: create salt failed", nsec3_str);
131 nsec3params->
rr = NULL;
142 uint16_t iter,
const char* salt, ldns_rr* rr,
const char* version)
147 fprintf(fd,
";;Nsec3parameters: salt %s algorithm %u optout %u "
148 "iterations %u\n", ((salt&&strlen(salt))?salt:
"-"), (
unsigned) algo,
149 (
unsigned) flags, (
unsigned) iter);
150 if (strcmp(version, ODS_SE_FILE_MAGIC_V2) == 0) {
152 (void)util_rr_print(fd, rr);
154 fprintf(fd,
";;Nsec3done\n");
ods_status nsec3params_create_salt(const char *salt_str, uint8_t *salt_len, uint8_t **salt)
void nsec3params_backup(FILE *fd, uint8_t algo, uint8_t flags, uint16_t iter, const char *salt, ldns_rr *rr, const char *version)
void nsec3params_cleanup(nsec3params_type *nsec3params)
nsec3params_type * nsec3params_create(void *sc, uint8_t algo, uint8_t flags, uint16_t iter, const char *salt)