Skip to content

Conversation

@0xERR0R
Copy link
Owner

@0xERR0R 0xERR0R commented Nov 4, 2025

closes #1287

@0xERR0R 0xERR0R added this to the v0.28 milestone Nov 4, 2025
@0xERR0R 0xERR0R added the 🔨 enhancement New feature or request label Nov 4, 2025
@codecov
Copy link

codecov bot commented Nov 4, 2025

Codecov Report

❌ Patch coverage is 83.22546% with 311 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.54%. Comparing base (ac8ca7d) to head (77eb056).
⚠️ Report is 6 commits behind head on main.

Files with missing lines Patch % Lines
resolver/dnssec_validator.go 78.64% 142 Missing and 35 partials ⚠️
resolver/dnssec/chain.go 80.09% 39 Missing and 5 partials ⚠️
resolver/dnssec/nsec3.go 80.58% 34 Missing and 6 partials ⚠️
resolver/dnssec/validator.go 88.19% 15 Missing and 4 partials ⚠️
resolver/dnssec/wildcard.go 81.53% 8 Missing and 4 partials ⚠️
resolver/dnssec_trust_anchors.go 85.18% 4 Missing and 4 partials ⚠️
resolver/dnssec/denial.go 68.42% 6 Missing ⚠️
resolver/dnssec_resolver.go 94.36% 4 Missing ⚠️
resolver/dnssec/rrset.go 98.71% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1914      +/-   ##
==========================================
- Coverage   93.13%   90.54%   -2.60%     
==========================================
  Files          79       92      +13     
  Lines        5156     7010    +1854     
==========================================
+ Hits         4802     6347    +1545     
- Misses        248      499     +251     
- Partials      106      164      +58     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@0xERR0R 0xERR0R requested a review from Copilot November 7, 2025 16:12
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR introduces comprehensive DNSSEC validation support for DNS responses. The implementation adds a new DNSSEC resolver that validates signatures, walks the chain of trust from root to target domains, and handles both NSEC and NSEC3 denial of existence proofs.

Key changes:

  • DNSSEC validation with configurable trust anchors
  • Support for NSEC and NSEC3 denial of existence
  • DoS protection via query budgets and iteration limits
  • Comprehensive test coverage with 5000+ lines of tests

Reviewed Changes

Copilot reviewed 41 out of 44 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
server/server.go Integrates DNSSEC resolver into resolver chain before caching
resolver/dnssec_validator.go Core DNSSEC validation logic (1930 lines)
resolver/dnssec_validator_test.go Comprehensive test suite (5045 lines)
resolver/dnssec_trust_anchors.go Trust anchor store with default root KSKs
resolver/dnssec_resolver.go Resolver wrapper that performs validation
resolver/dnssec_validator_enum.go Generated enum for validation results
resolver/dnssec/validator_enum.go Generated enum in dnssec package
log/mock_entry.go Added thread-safety to mock logger

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Contributor

Copilot AI commented Nov 7, 2025

@0xERR0R I've opened a new pull request, #1920, to work on those changes. Once the pull request is ready, I'll request review from you.

0xERR0R and others added 2 commits November 7, 2025 17:19
* Initial plan

* Add comprehensive package-level documentation for DNSSEC validator

Co-authored-by: 0xERR0R <[email protected]>

* Refine documentation to be file-level rather than package-level

Co-authored-by: 0xERR0R <[email protected]>

---------

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: 0xERR0R <[email protected]>
@0xERR0R 0xERR0R merged commit 77578da into main Nov 7, 2025
17 checks passed
@0xERR0R 0xERR0R deleted the dnssec-validation branch November 7, 2025 20:12
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Nov 24, 2025
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/0xerr0r/blocky](https://github.com/0xERR0R/blocky) | minor | `v0.27.0` -> `v0.28.2` |

---

### Release Notes

<details>
<summary>0xERR0R/blocky (ghcr.io/0xerr0r/blocky)</summary>

### [`v0.28.2`](https://github.com/0xERR0R/blocky/releases/tag/v0.28.2)

[Compare Source](0xERR0R/blocky@v0.28.1...v0.28.2)

##### Changelog

##### Features

- [`26ac90c`](0xERR0R/blocky@26ac90c): feat: add MIPS architecture builds ([#&#8203;1929](0xERR0R/blocky#1929)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))

##### Bug fixes

- [`605a361`](0xERR0R/blocky@605a361): fix: handle DNSSEC validation for large RSA exponents and improve DNSKEY matching ([#&#8203;1935](0xERR0R/blocky#1935)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))

##### Misc

- [`b776ae5`](0xERR0R/blocky@b776ae5): refactor: remove duplicated code patterns in resolver and cmd packages ([#&#8203;1932](0xERR0R/blocky#1932)) ([@&#8203;Copilot](https://github.com/Copilot))

### [`v0.28.1`](https://github.com/0xERR0R/blocky/releases/tag/v0.28.1)

[Compare Source](0xERR0R/blocky@v0.28.0...v0.28.1)

##### Changelog

##### Bug fixes

- [`5657ce8`](0xERR0R/blocky@5657ce8): fix: resolve DNSSEC validation issue for CNAMEs in unsigned zones ([#&#8203;1930](0xERR0R/blocky#1930)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))

##### Build and dependencies

- [`f4b6b75`](0xERR0R/blocky@f4b6b75): build: Update regex for bug fixes in goreleaser config ([@&#8203;0xERR0R](https://github.com/0xERR0R))

##### Misc

- [`0a3c724`](0xERR0R/blocky@0a3c724): refactor: remove unused code ([#&#8203;1928](0xERR0R/blocky#1928)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))

### [`v0.28.0`](https://github.com/0xERR0R/blocky/releases/tag/v0.28.0)

[Compare Source](0xERR0R/blocky@v0.27.0...v0.28.0)

##### Changelog

##### Features

- [`77578da`](0xERR0R/blocky@77578da): feat: add DNSSEC validation ([#&#8203;1914](0xERR0R/blocky#1914)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`b29eab4`](0xERR0R/blocky@b29eab4): feat: add SOA records to NXDOMAIN responses for RFC 2308 compliance ([#&#8203;1895](0xERR0R/blocky#1895)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`d0681ae`](0xERR0R/blocky@d0681ae): feat: enhance error messages with more context ([#&#8203;1894](0xERR0R/blocky#1894)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`ac8ca7d`](0xERR0R/blocky@ac8ca7d): feat: respect NO\_COLOR environment variable ([#&#8203;1911](0xERR0R/blocky#1911)) ([@&#8203;aanderse](https://github.com/aanderse))
- [`629b4f0`](0xERR0R/blocky@629b4f0): feat: support DNS Stamp upstream format ([#&#8203;1922](0xERR0R/blocky#1922)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))

##### Bugfixes

- [`8aad53e`](0xERR0R/blocky@8aad53e): fix: TCP response truncation ([#&#8203;1904](0xERR0R/blocky#1904)) ([@&#8203;TimQuelch](https://github.com/TimQuelch))
- [`9d4a58c`](0xERR0R/blocky@9d4a58c): fix: allow list group initialization with partial source failures ([#&#8203;1889](0xERR0R/blocky#1889)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`0993a17`](0xERR0R/blocky@0993a17): fix: ensure HTTP response bodies are drained before closing for connection reuse ([#&#8203;1924](0xERR0R/blocky#1924)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`1a98cda`](0xERR0R/blocky@1a98cda): fix: ensure conditional upstreams initialize independently of default upstreams ([#&#8203;1890](0xERR0R/blocky#1890)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`0804760`](0xERR0R/blocky@0804760): fix: resolve panic when CNAME points to external domain ([#&#8203;1867](0xERR0R/blocky#1867)) ([#&#8203;1884](0xERR0R/blocky#1884)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))

##### Build and dependencies

- [`0cd5be8`](0xERR0R/blocky@0cd5be8): build(deps): bump actions/download-artifact from 5 to 6 ([#&#8203;1907](0xERR0R/blocky#1907)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`5db30c4`](0xERR0R/blocky@5db30c4): build(deps): bump actions/upload-artifact from 4 to 5 ([#&#8203;1908](0xERR0R/blocky#1908)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`fc7ebe3`](0xERR0R/blocky@fc7ebe3): build(deps): bump amannn/action-semantic-pull-request from 5 to 6 ([#&#8203;1897](0xERR0R/blocky#1897)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`6a4d411`](0xERR0R/blocky@6a4d411): build(deps): bump github.com/avast/retry-go/v4 from 4.6.1 to 4.7.0 ([#&#8203;1888](0xERR0R/blocky#1888)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`9e293c0`](0xERR0R/blocky@9e293c0): build(deps): bump github.com/breml/rootcerts from 0.3.1 to 0.3.2 ([#&#8203;1886](0xERR0R/blocky#1886)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`e81bf41`](0xERR0R/blocky@e81bf41): build(deps): bump github.com/breml/rootcerts from 0.3.2 to 0.3.3 ([#&#8203;1912](0xERR0R/blocky#1912)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`073c8bf`](0xERR0R/blocky@073c8bf): build(deps): bump github.com/docker/docker from 28.5.1+incompatible to 28.5.2+incompatible ([#&#8203;1915](0xERR0R/blocky#1915)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`2dac748`](0xERR0R/blocky@2dac748): build(deps): bump github.com/onsi/ginkgo/v2 from 2.26.0 to 2.27.1 ([#&#8203;1906](0xERR0R/blocky#1906)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`8f534e6`](0xERR0R/blocky@8f534e6): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.1 to 2.27.2 ([#&#8203;1909](0xERR0R/blocky#1909)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`7fa1c78`](0xERR0R/blocky@7fa1c78): build(deps): bump github.com/testcontainers/testcontainers-go from 0.39.0 to 0.40.0 ([#&#8203;1916](0xERR0R/blocky#1916)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`5b147cc`](0xERR0R/blocky@5b147cc): build(deps): bump github.com/testcontainers/testcontainers-go/modules/mariadb from 0.39.0 to 0.40.0 ([#&#8203;1918](0xERR0R/blocky#1918)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`80aeaa9`](0xERR0R/blocky@80aeaa9): build(deps): bump github.com/testcontainers/testcontainers-go/modules/postgres from 0.39.0 to 0.40.0 ([#&#8203;1917](0xERR0R/blocky#1917)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`1cdaf72`](0xERR0R/blocky@1cdaf72): build(deps): bump github.com/testcontainers/testcontainers-go/modules/redis from 0.39.0 to 0.40.0 ([#&#8203;1919](0xERR0R/blocky#1919)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`7663b7d`](0xERR0R/blocky@7663b7d): build(deps): bump golang.org/x/net from 0.46.0 to 0.47.0 ([#&#8203;1925](0xERR0R/blocky#1925)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`8a212de`](0xERR0R/blocky@8a212de): build(deps): bump gorm.io/gorm from 1.31.0 to 1.31.1 ([#&#8203;1913](0xERR0R/blocky#1913)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`157f91f`](0xERR0R/blocky@157f91f): build(release): Add changelog groups for features and fixes ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`d3e8b3b`](0xERR0R/blocky@d3e8b3b): build: add pr title validation workflow ([#&#8203;1893](0xERR0R/blocky#1893)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`44074e4`](0xERR0R/blocky@44074e4): build: cache Go dependencies in Docker builds ([#&#8203;1899](0xERR0R/blocky#1899)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`21a65de`](0xERR0R/blocky@21a65de): build: enable dependabot automerge ([#&#8203;1891](0xERR0R/blocky#1891)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`8bf91c4`](0xERR0R/blocky@8bf91c4): build: remove unused tools ([#&#8203;1900](0xERR0R/blocky#1900)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`4656429`](0xERR0R/blocky@4656429): build: simplify build ([#&#8203;1892](0xERR0R/blocky#1892)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`ab77fd5`](0xERR0R/blocky@ab77fd5): build: update tool dependencies ([#&#8203;1898](0xERR0R/blocky#1898)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`824ca3e`](0xERR0R/blocky@824ca3e): build: use Docker for mkdocs-material documentation server ([@&#8203;0xERR0R](https://github.com/0xERR0R))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi41LjAiLCJ1cGRhdGVkSW5WZXIiOiI0Mi41LjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbImltYWdlIl19-->

Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/2100
Co-authored-by: Renovate Bot <[email protected]>
Co-committed-by: Renovate Bot <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🔨 enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

DNSSEC is not validated

2 participants