error, when size is 0
* Fix to reserve enough space to convert the largest packets to
presentation format in ldns_pkt2str_fmt. Thanks Peter Kästle
+ * The -O option to calculate (and sign) only the ZONEMD an input
+ zone with ldns-signzone
1.9.0 2025-12-04
* PR #246: Make ldns_calc_keytag() available for CDNSKEY RR
}
-ldns_status
-dnssec_zone_equip_zonemd(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs, ldns_key_list *key_list, int signflags);
ldns_status
dnssec_zone_equip_zonemd(ldns_dnssec_zone *zone,
ldns_rr_list *new_rrs, ldns_key_list *key_list, int signflags)
zonemd_rrset->next = *rrset_ref;
*rrset_ref = zonemd_rrset;
}
+ if (signflags & LDNS_SIGN_ONLY_ZONEMD) {
+ size_t i;
+
+ for (i = 0; i < ldns_key_list_key_count(key_list); i++) {
+ ldns_key_set_use(ldns_key_list_key(key_list, i), true);
+ }
+ }
if ((zonemd_rrsigs = ldns_sign_public(zonemd_rr_list, key_list)))
st = rr_list2dnssec_rrs( zonemd_rrsigs
, &zonemd_rrset->signatures, new_rrs);
fprintf(fp, "\t\t<hash> should be \"sha384\" or \"sha512\" (or 1 or 2)\n");
fprintf(fp, "\t\tthis option can be given more than once\n");
fprintf(fp, " -Z\t\tAllow ZONEMDs to be added without signing\n");
+ fprintf(fp, " -O\t\tOnly calculate (and sign) the ZONEMD for the input zone\n");
fprintf(fp, " -A\t\tsign DNSKEY with all keys instead of minimal\n");
fprintf(fp, " -U\t\tSign with every unique algorithm in the provided keys\n");
#ifndef OPENSSL_NO_ENGINE
keys = ldns_key_list_new();
- while ((c = getopt(argc, argv, "a:bde:f:i:k:no:ps:t:uvz:ZAUE:K:")) != -1) {
+ while ((c = getopt(argc, argv, "a:bde:f:i:k:no:ps:t:uvz:ZOAUE:K:")) != -1) {
switch (c) {
case 'a':
nsec3_algorithm = (uint8_t) atoi(optarg);
case 'Z':
signflags |= LDNS_SIGN_NO_KEYS_NO_NSECS;
break;
+ case 'O':
+ signflags |= LDNS_SIGN_ONLY_ZONEMD;
+ break;
case 'A':
signflags |= LDNS_SIGN_DNSKEY_WITH_ZSK;
break;
result = ldns_dnssec_zone_sign_nsec3_flg_mkmap(signed_zone,
added_rrs,
keys,
- ldns_dnssec_default_replace_signatures,
+ ( signflags & LDNS_SIGN_ONLY_ZONEMD
+ ? ldns_dnssec_default_leave_signatures
+ : ldns_dnssec_default_replace_signatures ),
NULL,
nsec3_algorithm,
nsec3_flags,
result = ldns_dnssec_zone_sign_flg(signed_zone,
added_rrs,
keys,
- ldns_dnssec_default_replace_signatures,
+ ( signflags & LDNS_SIGN_ONLY_ZONEMD
+ ? ldns_dnssec_default_leave_signatures
+ : ldns_dnssec_default_replace_signatures ),
NULL,
signflags);
}