From 00677e948563d00b2e63625134f653dc175cad25 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Sun, 16 Aug 2026 02:22:04 -0700 Subject: [PATCH] Return straightforward 0 or -1 from verify instead of handling buffer output. --- src/assembly/index.ts | 9 +++------ src/lib/nano25519.ts | 10 +++------- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/assembly/index.ts b/src/assembly/index.ts index 1af829f..cc48790 100644 --- a/src/assembly/index.ts +++ b/src/assembly/index.ts @@ -188,23 +188,20 @@ export function sign (mlen: i32): void { const verify_s = new StaticArray(SIGNATURE_BYTES) const verify_k = new StaticArray(PUBLICKEY_BYTES) /** - * Verify a signature on a message against a public key. This mirrors the - * functionality of `nacl.sign.detached.verify()`. + * Verify a detached signature for a message against a public key. * * @param {u64} s - 64-byte signature * @param {u64} m - Message that was signed (variable byte-length up to 32 KiB) * @param {u64} k - 32-byte public key */ -export function verify (mlen: i32): void { +export function verify (mlen: i32): i32 { if (mlen < 0 || mlen > 32768) throw new Error('invalid message length') const s = verify_s const m = MESSAGE_BUFFER const k = verify_k - memory.fill(OUTPUT_BUFFER, 0, SIGNATURE_BYTES) memory.copy(changetype(s), INPUT_BUFFER, SIGNATURE_BYTES) memory.copy(changetype(k), INPUT_BUFFER + SIGNATURE_BYTES, PUBLICKEY_BYTES) - const v = crypto_verify(s, m, mlen, k) - store(OUTPUT_BUFFER, v) memory.fill(INPUT_BUFFER, 0, SIGNATURE_BYTES) + return crypto_verify(s, m, mlen, k) } diff --git a/src/lib/nano25519.ts b/src/lib/nano25519.ts index 115d90d..4476bb9 100644 --- a/src/lib/nano25519.ts +++ b/src/lib/nano25519.ts @@ -8,7 +8,7 @@ type Exports = { exports: { derive: () => void, sign: (mlen: number) => void, - verify: (mlen: number) => void, + verify: (mlen: number) => number, getOutputPointer: () => number, getInputPointer: () => number, getMessagePointer: () => number, @@ -165,12 +165,8 @@ export const nano25519_init = (bytes: number[]): { derive: typeof derive, sign: for (let i = 0; i < 32; i++) { buffer.setUint8(inPtr + i, publicKey[i]) } - exports.verify(message.byteLength) - const outPtr = exports.getOutputPointer() - const v = new Uint8Array(1) - buffer = new DataView(exports.memory.buffer) - v[0] = buffer.getUint8(outPtr) - return v[0] === 0 + const v = exports.verify(message.byteLength) + return v === 0 } finally { clear(buffer) } -- 2.52.0