This commit is contained in:
Ali Mohammad Pur 2025-03-09 15:24:53 +01:00
commit 1933b68b41
3 changed files with 34 additions and 6 deletions

View file

@ -1141,6 +1141,19 @@ ErrorOr<Records::DS> Records::DS::from_raw(ParseContext& ctx)
return Records::DS { key_tag, algorithm, digest_type, move(digest) };
}
ErrorOr<void> Records::DS::to_raw(ByteBuffer& buffer) const
{
auto const output_size = 2 + 1 + 1 + digest.size();
FixedMemoryStream stream { TRY(buffer.get_bytes_for_writing(output_size)) };
TRY(stream.write_value(static_cast<NetworkOrdered<u16>>(key_tag)));
TRY(stream.write_value(static_cast<u8>(algorithm)));
TRY(stream.write_value(static_cast<u8>(digest_type)));
TRY(stream.write_until_depleted(digest.bytes()));
return {};
}
ErrorOr<Records::SIG> Records::SIG::from_raw(ParseContext& ctx)
{
// RFC 4034, 2.2. The SIG Resource Record.

View file

@ -484,7 +484,7 @@ struct DNSKEY {
ErrorOr<void> to_raw(ByteBuffer&) const;
ErrorOr<String> to_string() const
{
return String::formatted("DNSKEY Flags: {}{}{}{}({}), Protocol: {}, Algorithm: {}, Public Key: {}",
return String::formatted("DNSKEY Flags: {}{}{}{}({}), Protocol: {}, Algorithm: {}, Public Key: {}, Tag: {}",
is_secure_entry_point() ? "sep "sv : ""sv,
is_zone_key() ? "zone "sv : ""sv,
is_revoked() ? "revoked "sv : ""sv,
@ -492,7 +492,8 @@ struct DNSKEY {
flags,
protocol,
DNSSEC::to_string(algorithm),
TRY(encode_base64(public_key)));
TRY(encode_base64(public_key)),
calculated_key_tag);
}
};
struct CDNSKEY : public DNSKEY {
@ -513,8 +514,15 @@ struct DS {
static constexpr ResourceType type = ResourceType::DS;
static ErrorOr<DS> from_raw(ParseContext&);
ErrorOr<void> to_raw(ByteBuffer&) const { return Error::from_string_literal("Not implemented: DS::to_raw"); }
ErrorOr<String> to_string() const { return "DS"_string; }
ErrorOr<void> to_raw(ByteBuffer&) const;
ErrorOr<String> to_string() const
{
return String::formatted("DS Key Tag: {}, Algorithm: {}, Digest Type: {}, Digest: {}",
key_tag,
DNSSEC::to_string(algorithm),
DNSSEC::to_string(digest_type),
TRY(encode_base64(digest)));
}
};
struct CDS : public DS {
template<typename... Ts>

View file

@ -707,8 +707,15 @@ private:
lookup.promise = move(promise);
};
if (is_root_zone)
return resolve_using_keys(move(parent_zone_keys));
if (is_root_zone) {
return resolve_using_keys(Vector { Messages::Records::DNSKEY {
.flags = 256,
.protocol = 3,
.algorithm = Messages::DNSSEC::Algorithm::RSASHA256,
.public_key = MUST(decode_base64("AwEAAa96jeuknZlaeSrvyAJj6ZHv28hhOKkx3rLGXVaC6rXTsDc449/cidltpkyGwCJNnOAlFNKF2jBosZBU5eeHspaQWOmOElZsjICMQMC3aeHbGiShvZsx4wMYSjH8e7Vrhbu6irwCzVBApESjbUdpWWmEnhathWu1jo+siFUiRAAxm9qyJNg/wOZqqzL/dL/q8PkcRU5oUKEpUge71M3ej2/7CPqpdVwuMoTvoB+ZOT4YeGyxMvHmbrxlFzGOHOijtzN+u1TQNatX2XBuzZNQ1K+s2CXkPIZo7s6JgZyvaBevYtxPvYLw4z9mR7K2vaF18UYH9Z9GNUUeayffKC73PYc="sv)),
.calculated_key_tag = 38696,
} });
}
dbgln_if(DNS_DEBUG, "DNS: Starting DNSKEY lookup for {}", lookup.name);
this->lookup(lookup.name, Messages::Class::IN, { Messages::ResourceType::DNSKEY }, { .validate_dnssec_locally = false })