goto fail;
}
- dnssec_key_set_flags(*key, dnskey_flags(flags & DNSKEY_GENERATE_SEP_ON));
+ dnssec_key_set_flags(*key, dnskey_flags(flags & DNSKEY_GENERATE_SEP_ON, flags & DNSKEY_GENERATE_ADT_ON));
dnssec_key_set_algorithm(*key, alg);
ret = dnssec_keystore_get_private(keystore, *id, *key);
assert(ctx->policy);
normalize_generate_flags(&flags);
+ if (ctx->policy->deleg_aware) {
+ flags |= DNSKEY_GENERATE_ADT_ON;
+ }
for (size_t i = 0; !(flags & DNSKEY_GENERATE_FOR_LATER) && i < ctx->zone->num_keys; i++) {
knot_kasp_key_t *k = &ctx->zone->keys[i];
DNSKEY_FLAGS_REVOKED = KNOT_DNSKEY_FLAG_ZONE | KNOT_DNSKEY_FLAG_SEP | KNOT_DNSKEY_FLAG_REVOKE,
};
-inline static uint16_t dnskey_flags(bool is_ksk)
+inline static uint16_t dnskey_flags(bool is_ksk, bool adt)
{
- return is_ksk ? DNSKEY_FLAGS_KSK : DNSKEY_FLAGS_ZSK;
+ return adt ? (is_ksk ? DNSKEY_FLAGS_KSK_ADT : DNSKEY_FLAGS_ZSK_ADT) : (is_ksk ? DNSKEY_FLAGS_KSK : DNSKEY_FLAGS_ZSK);
}
typedef enum {
DNSKEY_GENERATE_SEP_SPEC = (1 << 2), // not (SEP bit set iff KSK)
DNSKEY_GENERATE_SEP_ON = (1 << 3), // SEP bit set on
DNSKEY_GENERATE_FOR_LATER = (1 << 4), // Pregenerated key for later automatic use.
+ DNSKEY_GENERATE_ADT_ON = (1 << 5), // DELEG-awareness signaling flag
} kdnssec_generate_flags_t;
void normalize_generate_flags(kdnssec_generate_flags_t *flags);
kkey->key = key;
kkey->timing = timing;
kkey->is_pub_only = pub_only;
- kkey->is_ksk = (dnssec_key_get_flags(kkey->key) == DNSKEY_FLAGS_KSK);
+ kkey->is_ksk = (dnssec_key_get_flags(kkey->key) & DNSKEY_FLAGS_KSK) == DNSKEY_FLAGS_KSK;
kkey->is_zsk = !kkey->is_ksk;
// append to zone
if (ret != KNOT_EOK) {
goto fail;
}
- dnssec_key_set_flags(key, dnskey_flags(flags & DNSKEY_GENERATE_SEP_ON));
+ dnssec_key_set_flags(key, dnskey_flags(flags & DNSKEY_GENERATE_SEP_ON, ctx->policy->deleg_aware));
dnssec_key_set_algorithm(key, ctx->policy->algorithm);
// fill key structure from keystore (incl. pubkey from privkey computation)
normalize_generate_flags(&flags);
key->is_ksk = (flags & DNSKEY_GENERATE_KSK);
key->is_zsk = (flags & DNSKEY_GENERATE_ZSK);
- return dnssec_key_set_flags(key->key, dnskey_flags(flags & DNSKEY_GENERATE_SEP_ON));
+ return dnssec_key_set_flags(key->key, dnskey_flags(flags & DNSKEY_GENERATE_SEP_ON,
+ dnssec_key_get_flags(key->key) & KNOT_DNSKEY_FLAG_ADT));
}
return KNOT_EOK;
}