]> git.codecow.com Git - nano25519.git/commitdiff
Return straightforward 0 or -1 from verify instead of handling buffer output.
authorChris Duncan <chris@zoso.dev>
Sun, 16 Aug 2026 09:22:04 +0000 (02:22 -0700)
committerChris Duncan <chris@zoso.dev>
Sun, 16 Aug 2026 09:22:04 +0000 (02:22 -0700)
src/assembly/index.ts
src/lib/nano25519.ts

index 1af829fa2552bf31e77c222f752dd2b6ca1275ac..cc487902de921b921cf78b76c1ab95764ad490e2 100644 (file)
@@ -188,23 +188,20 @@ export function sign (mlen: i32): void {
 const verify_s = new StaticArray<u8>(SIGNATURE_BYTES)
 const verify_k = new StaticArray<u8>(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<usize>(s), INPUT_BUFFER, SIGNATURE_BYTES)
        memory.copy(changetype<usize>(k), INPUT_BUFFER + SIGNATURE_BYTES, PUBLICKEY_BYTES)
-       const v = crypto_verify(s, m, mlen, k)
-       store<u8>(OUTPUT_BUFFER, v)
        memory.fill(INPUT_BUFFER, 0, SIGNATURE_BYTES)
+       return crypto_verify(s, m, mlen, k)
 }
index 115d90dc89f2105a93b258e0d1bd3fe38f2a09cd..4476bb9b28e9c6a5a43a07f37177c04018fd529b 100644 (file)
@@ -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)
                }