From: Chris Duncan Date: Sun, 15 Feb 2026 22:42:56 +0000 (-0800) Subject: Fix verify function signature in host code. Simplify typed array read from memory. X-Git-Tag: v1.0.0~25 X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=3bf8097761188eb3557b270e2a11dbb91d602648;p=nano25519.git Fix verify function signature in host code. Simplify typed array read from memory. --- diff --git a/index.ts b/index.ts index 0c304bf..735ab3e 100644 --- a/index.ts +++ b/index.ts @@ -4,7 +4,7 @@ import nacl from './build/nano-nacl.wasm' type Derive = (k0: bigint, k1: bigint, k2: bigint, k3: bigint) => Uint8Array type Sign = (h0: bigint, h1: bigint, h2: bigint, h3: bigint, k0: bigint, k1: bigint, k2: bigint, k3: bigint) => Uint8Array -type Verify = (h0: bigint, h1: bigint, h2: bigint, h3: bigint, s0: bigint, s1: bigint, s2: bigint, s3: bigint, k0: bigint, k1: bigint, k2: bigint, k3: bigint) => boolean +type Verify = (h0: bigint, h1: bigint, h2: bigint, h3: bigint, s0: bigint, s1: bigint, s2: bigint, s3: bigint, s4: bigint, s5: bigint, s6: bigint, s7: bigint, k0: bigint, k1: bigint, k2: bigint, k3: bigint) => boolean type Data = { action: string hash?: string @@ -33,7 +33,7 @@ const NanoNaCl = async (bytes: number[]): Promise => { console.error('Wasm abort:', `msg ${msg}`, `file ${file}`, `row ${row}`, `col ${col}`) throw new Error(`Wasm abort: ${msg}`) }, - trace: (message: any, n: any, a0: any, a1: any, a2: any, a3: any, a4: any) => { + trace: (message: any, n?: number, a0?: number, a1?: number, a2?: number, a3?: number, a4?: number) => { // ~lib/builtins/trace(~lib/string/String, i32?, f64?, f64?, f64?, f64?, f64?) => void message = __liftString(message >>> 0); (() => { @@ -62,26 +62,23 @@ const NanoNaCl = async (bytes: number[]): Promise => { return string + String.fromCharCode(...memoryU16.subarray(start, end)) } - //@ts-ignore - let __dataview = new DataView(memory.buffer) - function __getU32 (pointer: number) { - try { - return __dataview.getUint32(pointer, true) - } catch { - //@ts-ignore - __dataview = new DataView(memory.buffer) - return __dataview.getUint32(pointer, true) - } - } function __liftTypedArray (pointer: number) { if (!pointer) throw new Error('bad pointer') - return new Uint8Array( - //@ts-ignore - memory.buffer, - __getU32(pointer + 4), - __dataview.getUint32(pointer + 8, true) / Uint8Array.BYTES_PER_ELEMENT - ).slice() + const membuf = new DataView(memory.buffer) + const offset = membuf.getUint32(pointer + 4, true) + const length = membuf.getUint32(pointer + 8, true) + return new Uint8Array(memory.buffer, offset, length).slice() } + + derive = function (k0, k1, k2, k3) { + // assembly/nano-nacl/derive(u64, u64, u64, u64) => ~lib/typedarray/Uint8Array + k0 = k0 || 0n + k1 = k1 || 0n + k2 = k2 || 0n + k3 = k3 || 0n + return __liftTypedArray(exports.derive(k0, k1, k2, k3) >>> 0) + } + sign = function (h0, h1, h2, h3, k0, k1, k2, k3) { // assembly/nano-nacl/sign(u64, u64, u64, u64, u64, u64, u64, u64) => ~lib/typedarray/Uint8Array h0 = h0 || 0n @@ -93,8 +90,9 @@ const NanoNaCl = async (bytes: number[]): Promise => { k2 = k2 || 0n k3 = k3 || 0n return __liftTypedArray(exports.sign(h0, h1, h2, h3, k0, k1, k2, k3) >>> 0) - }, - isReady = true + } + + isReady = true } catch (err) { throw new Error('Error instantiating WebAssembly', { cause: err }) } @@ -180,7 +178,7 @@ const NanoNaCl = async (bytes: number[]): Promise => { const u64 = signature.slice(i, i + 16) signatureView.setBigUint64(i / 2, BigInt(`0x${u64}`)) } - const isVerified = verify(hashArray[0], hashArray[1], hashArray[2], hashArray[3], privateKeyArray[0], privateKeyArray[1], privateKeyArray[2], privateKeyArray[3], signatureArray[0], signatureArray[1], signatureArray[2], signatureArray[3]) + const isVerified = verify(hashArray[0], hashArray[1], hashArray[2], hashArray[3], signatureArray[0], signatureArray[1], signatureArray[2], signatureArray[3], signatureArray[4], signatureArray[5], signatureArray[6], signatureArray[7], publicKeyArray[0], publicKeyArray[1], publicKeyArray[2], publicKeyArray[3]) if (isVerified == null) { throw new TypeError('Invalid verification response from WASM') }