From 88f26a280310502413a556a3eab24306819b638b Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Fri, 12 Jul 2024 12:58:58 +0000 Subject: [PATCH 1/1] Initial checkin --- dnssec_prover_wasm.js | 364 +++++++++++++++++++++++++++++++++++++ dnssec_prover_wasm_bg.wasm | Bin 0 -> 203155 bytes doh_lookup.js | 61 +++++++ index.html | 182 +++++++++++++++++++ 4 files changed, 607 insertions(+) create mode 100644 dnssec_prover_wasm.js create mode 100644 dnssec_prover_wasm_bg.wasm create mode 100644 doh_lookup.js create mode 100644 index.html diff --git a/dnssec_prover_wasm.js b/dnssec_prover_wasm.js new file mode 100644 index 0000000..6470494 --- /dev/null +++ b/dnssec_prover_wasm.js @@ -0,0 +1,364 @@ +let wasm; + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +let cachedUint8Memory0 = null; + +function getUint8Memory0() { + if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { + cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8Memory0; +} + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +} + +const heap = new Array(128).fill(undefined); + +heap.push(undefined, null, true, false); + +let heap_next = heap.length; + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + +let WASM_VECTOR_LEN = 0; + +const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + +const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' + ? function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +} + : function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; +}); + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8Memory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} +/** +* Builds a proof builder which can generate a proof for records of the given `ty`pe at the given +* `name`. +* +* After calling this [`get_next_query`] should be called to fetch the initial query. +* @param {string} name +* @param {number} ty +* @returns {WASMProofBuilder | undefined} +*/ +export function init_proof_builder(name, ty) { + const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.init_proof_builder(ptr0, len0, ty); + return ret === 0 ? undefined : WASMProofBuilder.__wrap(ret); +} + +function _assertClass(instance, klass) { + if (!(instance instanceof klass)) { + throw new Error(`expected instance of ${klass.name}`); + } + return instance.ptr; +} + +function passArray8ToWasm0(arg, malloc) { + const ptr = malloc(arg.length * 1, 1) >>> 0; + getUint8Memory0().set(arg, ptr / 1); + WASM_VECTOR_LEN = arg.length; + return ptr; +} +/** +* Processes a response to a query previously fetched from [`get_next_query`]. +* +* After calling this, [`get_next_query`] should be called until pending queries are exhausted and +* no more pending queries exist, at which point [`get_unverified_proof`] should be called. +* @param {WASMProofBuilder} proof_builder +* @param {Uint8Array} response +*/ +export function process_query_response(proof_builder, response) { + _assertClass(proof_builder, WASMProofBuilder); + const ptr0 = passArray8ToWasm0(response, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + wasm.process_query_response(proof_builder.__wbg_ptr, ptr0, len0); +} + +let cachedInt32Memory0 = null; + +function getInt32Memory0() { + if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { + cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachedInt32Memory0; +} + +function getArrayU8FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); +} +/** +* Gets the next query (if any) that should be sent to the resolver for the given proof builder. +* +* Once the resolver responds [`process_query_response`] should be called with the response. +* @param {WASMProofBuilder} proof_builder +* @returns {Uint8Array | undefined} +*/ +export function get_next_query(proof_builder) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + _assertClass(proof_builder, WASMProofBuilder); + wasm.get_next_query(retptr, proof_builder.__wbg_ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + let v1; + if (r0 !== 0) { + v1 = getArrayU8FromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1, 1); + } + return v1; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } +} + +function getObject(idx) { return heap[idx]; } + +function dropObject(idx) { + if (idx < 132) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} +/** +* Gets the final, unverified, proof once all queries fetched via [`get_next_query`] have +* completed and their responses passed to [`process_query_response`]. +* @param {WASMProofBuilder} proof_builder +* @returns {Uint8Array} +*/ +export function get_unverified_proof(proof_builder) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + _assertClass(proof_builder, WASMProofBuilder); + var ptr0 = proof_builder.__destroy_into_raw(); + wasm.get_unverified_proof(retptr, ptr0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + var r3 = getInt32Memory0()[retptr / 4 + 3]; + if (r3) { + throw takeObject(r2); + } + var v2 = getArrayU8FromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1, 1); + return v2; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } +} + +/** +* Verifies an RFC 9102-formatted proof and returns verified records matching the given name +* (resolving any C/DNAMEs as required). +* @param {Uint8Array} stream +* @param {string} name_to_resolve +* @returns {string} +*/ +export function verify_byte_stream(stream, name_to_resolve) { + let deferred3_0; + let deferred3_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passArray8ToWasm0(stream, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passStringToWasm0(name_to_resolve, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + wasm.verify_byte_stream(retptr, ptr0, len0, ptr1, len1); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred3_0 = r0; + deferred3_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred3_0, deferred3_1, 1); + } +} + +const WASMProofBuilderFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_wasmproofbuilder_free(ptr >>> 0)); +/** +*/ +export class WASMProofBuilder { + + static __wrap(ptr) { + ptr = ptr >>> 0; + const obj = Object.create(WASMProofBuilder.prototype); + obj.__wbg_ptr = ptr; + WASMProofBuilderFinalization.register(obj, obj.__wbg_ptr, obj); + return obj; + } + + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + WASMProofBuilderFinalization.unregister(this); + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_wasmproofbuilder_free(ptr); + } +} + +async function __wbg_load(module, imports) { + if (typeof Response === 'function' && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === 'function') { + try { + return await WebAssembly.instantiateStreaming(module, imports); + + } catch (e) { + if (module.headers.get('Content-Type') != 'application/wasm') { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + + } else { + throw e; + } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + + } else { + return instance; + } + } +} + +function __wbg_get_imports() { + const imports = {}; + imports.wbg = {}; + imports.wbg.__wbindgen_string_new = function(arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }; + + return imports; +} + +function __wbg_init_memory(imports, maybe_memory) { + +} + +function __wbg_finalize_init(instance, module) { + wasm = instance.exports; + __wbg_init.__wbindgen_wasm_module = module; + cachedInt32Memory0 = null; + cachedUint8Memory0 = null; + + + return wasm; +} + +function initSync(module) { + if (wasm !== undefined) return wasm; + + const imports = __wbg_get_imports(); + + __wbg_init_memory(imports); + + if (!(module instanceof WebAssembly.Module)) { + module = new WebAssembly.Module(module); + } + + const instance = new WebAssembly.Instance(module, imports); + + return __wbg_finalize_init(instance, module); +} + +async function __wbg_init(input) { + if (wasm !== undefined) return wasm; + + if (typeof input === 'undefined') { + input = new URL('dnssec_prover_wasm_bg.wasm', import.meta.url); + } + const imports = __wbg_get_imports(); + + if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { + input = fetch(input); + } + + __wbg_init_memory(imports); + + const { instance, module } = await __wbg_load(await input, imports); + + return __wbg_finalize_init(instance, module); +} + +export { initSync } +export default __wbg_init; diff --git a/dnssec_prover_wasm_bg.wasm b/dnssec_prover_wasm_bg.wasm new file mode 100644 index 0000000000000000000000000000000000000000..9cd4df33f742a8ba9c2fabeac14a4e0f69fd7fca GIT binary patch literal 203155 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

(c^8Pp1_^`6W9D2VNuQ~sQbji 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 cjYH%<1>>FBLD zKJEAHdcWo=YxmjLk6y85 z|Aoswc>T*cx5oRMHWch6^k;$>1jkm7YQOd@kLn#(*Bm&GbM83~9K|{P?xr-4CCiqtTz>kJ^tlTc@W17Ym!%ghS$59CixwD#5{ia0god)Abb_3QfT0%Q zM9^(-2q1h>+RT3E6x2Qdx+VeFKGci}4xpwTdJQ%GzIRb`j{dtC#G#Gmg0gYoFF-5t z3=o3_M?f?z6Is-Ve$Kc3<$xacQIY`ictBq$T zYVLx^!DC#Z_74$TuBdck-Wmekx@Kw_4KZ6oKq+>LOXUtWZwUa`Tfj+w=X2DQ+lYyl z+{U9G0eC8E^6khWUm+J2@DRCVjUjYkpf*zx!)6Pes$pWGhBUO~eH6*Sy$(}01ELT8B)sfy4hJ1~@ewWxHcMIjW#!<|+j+hB#cLgeUQC}q@c zhBlF77=mv2|h9J)?M!pSdsZrhoIxDUsSD=e&5i@2e zMU!m?sA*#(Ua<+nxHo_XuD5Nd=^QWd7wGI8aE*?Qmx}A0Z z%{C5f0gMNMi+dTP17RO+_)Ngmxz$R^DSqix;Gs9a2*rWt<9wzIrVfgn zjBIZu5MUjg{=CY)3aKR-hO4KLMQ%iqA@*(!$|Luxaz^AxN}7rMNLJMiQz>O#y$Yo) zOfXX_*bJFevhpydQoO=iAiBD`jIvlOPRWt1SwX((UPOuEWtY??BP-l;X~YA2QwQj^SLVJ)kDO&P3F)o3bc zjqzM4kqw7CI+Rc>7!2i{Jd)T7RHHH26pA(lt%PP?2?=|2*9^a;fClD?NZ0@Bkl|RI zgHArhFJ&-R&Hu%iu~3*}-e8Z(9OwkRRPY3%w%w!a0dYn-yA3D|iC}IK@}M#Gvh! zXv>+n9vaHk=%%k3Fg1pnMS2;9xnX)K5tJwjcMi6Rp)eXtpzr_*A`K$as5s{?Z(oc_>5uifj!E7fj zsHrOqz`DAND)XL}Ty+(GB3x3MK4E?(?u0x@D|gCc$IEpw33@-qqFnnSD;YH{B>V8V z#IdsH31_v^%F69au<_VdmR?y}^s@T5;#{mOY&$0By#r5yvPO&86qsl)7*GY=;wE7= z#1+s`gI9>q7r&#z) z!qIRn91kbL$uJ&yL_(2pBoc{6Vv%?x!N(xcU^EmBM_a3Ye3CSr+rB9TZYQb{~ZNrsb= zWHcE|#*>L;GMP$w{40d)%9Qn+*s)7Ik_EW%8lKA9x_Fks1cJ^1FjaNwWeoNG!~ zN}X_wOhspe5349UlV{!G7ABB#J~4-#W?nu3ob+;H4=H`kb1% ztFZ%<)Tx$E!nLMUSgs8#Q6-v+#KUz`!->$5PStG7sUko%s_IYdDw|42QElujY8^_^ Ns2|DjwGmO>e*tHR`mF!} literal 0 HcmV?d00001 diff --git a/doh_lookup.js b/doh_lookup.js new file mode 100644 index 0000000..f35a059 --- /dev/null +++ b/doh_lookup.js @@ -0,0 +1,61 @@ +import init from './dnssec_prover_wasm.js'; +import * as wasm from './dnssec_prover_wasm.js'; + +/** +* Asynchronously resolves a given domain and type using the provided DoH endpoint, then verifies +* the returned DNSSEC data and ultimately returns a JSON-encoded list of validated records. +*/ +export async function lookup_doh(domain, ty, doh_endpoint) { + await init(); + + if (!domain.endsWith(".")) domain += "."; + if (ty.toLowerCase() == "txt") { + ty = 16; + } else if (ty.toLowerCase() == "tlsa") { + ty = 52; + } else if (ty.toLowerCase() == "a") { + ty = 1; + } else if (ty.toLowerCase() == "aaaa") { + ty = 28; + } + if (typeof(ty) == "number") { + var builder = wasm.init_proof_builder(domain, ty); + if (builder == null) { + return "{\"error\":\"Bad domain\"}"; + } else { + var queries_pending = 0; + var send_next_query; + send_next_query = async function() { + var query = wasm.get_next_query(builder); + if (query != null) { + queries_pending += 1; + var b64 = btoa(String.fromCodePoint(...query)); + var b64url = b64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ''); + try { + var resp = await fetch(doh_endpoint + "?dns=" + b64url, + {headers: {"accept": "application/dns-message"}}); + if (!resp.ok) { throw "Query returned HTTP " + resp.status; } + var array = await resp.arrayBuffer(); + var buf = new Uint8Array(array); + wasm.process_query_response(builder, buf); + queries_pending -= 1; + } catch (e) { + return "{\"error\":\"DoH Query failed: " + e + "\"}"; + } + return await send_next_query(); + } else if (queries_pending == 0) { + var proof = wasm.get_unverified_proof(builder); + if (proof != null) { + var result = wasm.verify_byte_stream(proof, domain); + return JSON.parse(result); + } else { + return "{\"error\":\"Failed to build proof\"}"; + } + } + } + return await send_next_query(); + } + } else { + return "{\"error\":\"Unsupported Type\"}"; + } +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..9674a71 --- /dev/null +++ b/index.html @@ -0,0 +1,182 @@ + + + + + + + Provable DNS Querying + + +

+ BIP 353 Human Readable Names Resolver +

+

+ BIP 353 defines the way to encode simple human-readable names and map them to Bitcoin payment intructions. +

+ If your wallet doesn't yet resolve BIP 353 names natively, this site will resolve them for you, letting you pay human readable names seamlessly. +

+

+

+
+ ₿ + +
+
+
+ Resolve name using  +
+
+ +

+

+

Note that most BIP 353 addresses rely on at least BOLT 12 or Silent Payments and as both are relatively new, wallet support isn't yet universal. Check that your wallet supports at least one of the two if you are unable to pay.

+

While you're absolutely trusting this site to not provide you with bad code, the code we promise we served you fully validates the name using DNSSEC. Thus, no matter what server you use to resolve the name, the worst they can do is log who you're paying or tell you they're not payable. They can never lie and give you the wrong address!

+ + + + + + + + + -- 2.39.5