From: Chris Duncan Date: Mon, 17 Aug 2026 15:46:03 +0000 (-0700) Subject: Change WASM buffer view to Uint8Array since we don't need endianness features of... X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=8c0f97b8e842578c000470f4a5190d3b9e121e34;p=nano25519.git Change WASM buffer view to Uint8Array since we don't need endianness features of DataView. Reduce input buffer size to maximum needed and minimum required for verify() signature and public key. --- diff --git a/src/lib/nano25519.ts b/src/lib/nano25519.ts index 4476bb9..f2f7324 100644 --- a/src/lib/nano25519.ts +++ b/src/lib/nano25519.ts @@ -72,18 +72,18 @@ export const nano25519_init = (bytes: number[]): { derive: typeof derive, sign: } const privateKey = new Uint8Array(32) const publicKey = new Uint8Array(32) - let buffer = new DataView(exports.memory.buffer) + let buffer = new Uint8Array(exports.memory.buffer) try { privateKey.set(normalize('private key', 32, 32, k)) let inPtr = exports.getInputPointer() for (let i = 0; i < 32; i++) { - buffer.setUint8(inPtr + i, privateKey[i]) + buffer[inPtr + i] = privateKey[i] } exports.derive() const outPtr = exports.getOutputPointer() - buffer = new DataView(exports.memory.buffer) + buffer = new Uint8Array(exports.memory.buffer) for (let i = 0; i < 32; i++) { - publicKey[i] = buffer.getUint8(outPtr + i) + publicKey[i] = buffer[outPtr + i] } if (typeof k === 'string') { let hex = '' @@ -110,23 +110,23 @@ export const nano25519_init = (bytes: number[]): { derive: typeof derive, sign: } const secretKey = new Uint8Array(64) const signature = new Uint8Array(64) - let buffer: DataView | undefined = new DataView(exports.memory.buffer) + let buffer = new Uint8Array(exports.memory.buffer) try { secretKey.set(normalize('secret key', 64, 64, k)) let inPtr = exports.getInputPointer() for (let i = 0; i < 64; i++) { - buffer.setUint8(inPtr + i, secretKey[i]) + buffer[inPtr + i] = secretKey[i] } const message = normalize('message', 0, 32768, m) let mPtr = exports.getMessagePointer() for (let i = 0; i < message.byteLength; i++) { - buffer.setUint8(mPtr + i, message[i]) + buffer[mPtr + i] = message[i] } exports.sign(message.byteLength) const outPtr = exports.getOutputPointer() - buffer = new DataView(exports.memory.buffer) + buffer = new Uint8Array(exports.memory.buffer) for (let i = 0; i < 64; i++) { - signature[i] = buffer.getUint8(outPtr + i) + signature[i] = buffer[outPtr + i] } if (typeof k === 'string') { let hex = '' @@ -148,7 +148,7 @@ export const nano25519_init = (bytes: number[]): { derive: typeof derive, sign: } function verify (s: unknown, m: unknown, k: unknown): boolean { - let buffer: DataView | undefined = new DataView(exports.memory.buffer) + let buffer = new Uint8Array(exports.memory.buffer) try { const signature = normalize('signature', 64, 64, s) const message = normalize('message', 0, 32768, m) @@ -156,14 +156,14 @@ export const nano25519_init = (bytes: number[]): { derive: typeof derive, sign: let mPtr = exports.getMessagePointer() let inPtr = exports.getInputPointer() for (let i = 0; i < message.byteLength; i++) { - buffer.setUint8(mPtr + i, message[i]) + buffer[mPtr + i] = message[i] } for (let i = 0; i < 64; i++) { - buffer.setUint8(inPtr + i, signature[i]) + buffer[inPtr + i] = signature[i] } inPtr += 64 for (let i = 0; i < 32; i++) { - buffer.setUint8(inPtr + i, publicKey[i]) + buffer[inPtr + i] = publicKey[i] } const v = exports.verify(message.byteLength) return v === 0 @@ -172,13 +172,11 @@ export const nano25519_init = (bytes: number[]): { derive: typeof derive, sign: } } - function clear (buffer: DataView): void { + function clear (buffer: Uint8Array): void { let inPtr = exports.getInputPointer() let outPtr = exports.getOutputPointer() - for (let i = 0; i < 64; i++) { - buffer.setUint16(inPtr + (i << 1), 0) - buffer.setUint8(outPtr + i, 0) - } + buffer.fill(0, inPtr, inPtr + 96) + buffer.fill(0, outPtr, outPtr + 64) } function isBytes (a: unknown): a is Uint8Array {