export const MESSAGE_BUFFER_BYTELENGTH: i32 = BLOCKHASH_BYTELENGTH << 10
export const PRV_BUFFER_BYTELENGTH: i32 = KEY_BYTELENGTH
export const PUB_BUFFER_BYTELENGTH: i32 = KEY_BYTELENGTH
-export const OUTPUT_BUFFER_BYTELENGTH: i32 = 1 << 10
+export const OUTPUT_BUFFER_BYTELENGTH: i32 = 256
export const SIGNATURE_BUFFER_BYTELENGTH: i32 = SIGNATURE_BYTELENGTH
// Static I/O buffers
const verify_blocks_msg = new StaticArray<u8>(BLOCKHASH_BYTELENGTH)
const verify_blocks_pub = new StaticArray<u8>(KEY_BYTELENGTH)
const verify_blocks_sig = new StaticArray<u8>(SIGNATURE_BYTELENGTH)
-const verify_blocks_out = new StaticArray<u8>(256)
+const verify_blocks_out = new StaticArray<u8>(OUTPUT_BUFFER_BYTELENGTH)
/**
* Verify a 64-byte detached signature for a 32-byte Nano block hash against a
* 32-byte public key. Input parameters are read as bytes from separate buffers.
* @param {i32} count Number of signatures to verify, up to 256
*/
export function verify_blocks (count: i32): void {
- if (count < 0 || count > 256) {
+ if (count < 1 || OUTPUT_BUFFER_BYTELENGTH < count) {
PRV_BUFFER.fill(0)
PUB_BUFFER.fill(0)
MESSAGE_BUFFER.fill(0)
- throw new Error('invalid message length')
+ throw new Error('invalid block count')
}
// Clear local buffers
//! SPDX-FileCopyrightText: 2026 Chris Duncan <chris@codecow.com>
//! SPDX-License-Identifier: GPL-3.0-or-later
-import { BLK_LEN, KEY_LEN, MSG_BUF_LEN, MSG_PTR, OUT_PTR, PUB_PTR, SIG_LEN, SIG_PTR, clear, exports, normalize } from './wasm'
+import { BLK_LEN, KEY_LEN, MSG_BUF_LEN, MSG_PTR, OUT_BUF_LEN, OUT_PTR, PUB_PTR, SIG_LEN, SIG_PTR, clear, exports, normalize } from './wasm'
export function verify (sig: unknown, msg: unknown, pub: unknown): boolean {
let buffer = new Uint8Array(exports.memory.buffer)
if (count < 1) {
throw new RangeError('Must pass at least one block', { cause: data })
}
- if (256 < count) {
+ if (OUT_BUF_LEN < count) {
throw new RangeError('Bulk Nano block verification must be no more than 256 blocks', { cause: data })
}
const verified = new Uint8Array(count)