]> git.codecow.com Git - nano25519.git/commitdiff
Fix verify function signature in host code. Simplify typed array read from memory.
authorChris Duncan <chris@zoso.dev>
Sun, 15 Feb 2026 22:42:56 +0000 (14:42 -0800)
committerChris Duncan <chris@zoso.dev>
Sun, 15 Feb 2026 22:42:56 +0000 (14:42 -0800)
index.ts

index 0c304bff9045f1a1d8a49e2c7b3895a2ee0da785..735ab3e0f10e10e19bc1183d7b3fdec02ee8ce88 100644 (file)
--- 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<void> => {
                                                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<void> => {
                                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<void> => {
                                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<void> => {
                                                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')
                                        }