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)
}
exports: {
derive: () => void,
sign: (mlen: number) => void,
- verify: (mlen: number) => void,
+ verify: (mlen: number) => number,
getOutputPointer: () => number,
getInputPointer: () => number,
getMessagePointer: () => number,
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)
}