Skip to content

Commit 4fc452d

Browse files
Add dnsprovejs@0.5.1 patch for RFC-compliant DoH queries
This patch fixes DNS-over-HTTPS queries to properly comply with RFC 8484 and RFC 4648 §5: - Adds base64ToBase64Url function to convert standard base64 to base64url encoding - Updates dohQuery to use base64url encoding for DNS parameters - Sets correct Accept: application/dns-message header Ported from ensjs-v3 repository. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 0162813 commit 4fc452d

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,8 @@
294294
"node-forge@1.3.1": "patches/node-forge@1.3.1.patch",
295295
"react-confetti@6.1.0": "patches/react-confetti@6.1.0.patch",
296296
"hardhat-deploy@0.12.4": "patches/hardhat-deploy@0.12.4.patch",
297-
"@nomicfoundation/hardhat-viem@2.0.3": "patches/@nomicfoundation%2Fhardhat-viem@2.0.3.patch"
297+
"@nomicfoundation/hardhat-viem@2.0.3": "patches/@nomicfoundation%2Fhardhat-viem@2.0.3.patch",
298+
"@ensdomains/dnsprovejs@0.5.1": "patches/@ensdomains__dnsprovejs@0.5.1.patch"
298299
}
299300
},
300301
"packageManager": "pnpm@9.3.0"
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
diff --git a/dist/prove.js b/dist/prove.js
2+
index 66315faaac8dc0640bf0cc7760e315da7f67d570..4b32e7d883d4129039173430cb7d924e8d50f41a 100644
3+
--- a/dist/prove.js
4+
+++ b/dist/prove.js
5+
@@ -43,6 +43,13 @@ function encodeURLParams(p) {
6+
.map((kv) => kv.map(encodeURIComponent).join('='))
7+
.join('&');
8+
}
9+
+// Convert standard base64 to base64url (RFC 4648 §5)
10+
+function base64ToBase64Url(base64) {
11+
+ return base64
12+
+ .replace(/\+/g, '-')
13+
+ .replace(/\//g, '_')
14+
+ .replace(/=/g, '');
15+
+}
16+
function getKeyTag(key) {
17+
const data = packet.dnskey.encode(key.data).slice(2);
18+
let keytag = 0;
19+
@@ -87,11 +94,13 @@ function dohQuery(url) {
20+
return function getDNS(q) {
21+
return __awaiter(this, void 0, void 0, function* () {
22+
const buf = packet.encode(q);
23+
- const response = yield fetch(`${url}?${encodeURLParams({
24+
- ct: 'application/dns-udpwireformat',
25+
- dns: buf.toString('base64'),
26+
- ts: Date.now().toString(),
27+
- })}`);
28+
+ // RFC 8484: Use base64url encoding and Accept header
29+
+ const dnsParam = base64ToBase64Url(buf.toString('base64'));
30+
+ const response = yield fetch(`${url}?dns=${encodeURIComponent(dnsParam)}`, {
31+
+ headers: {
32+
+ 'accept': 'application/dns-message'
33+
+ }
34+
+ });
35+
return packet.decode(Buffer.from(yield response.arrayBuffer()));
36+
});
37+
};

pnpm-lock.yaml

Lines changed: 5 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)