for (let i = 0; i < 32; i++) {
buffer.setUint8(inPtr + i, privateKey[i])
}
- privateKey.fill(0)
exports.derive()
const outPtr = exports.getOutputPointer()
buffer = new DataView(exports.memory.buffer)
for (let i = 0; i < 32; i++) {
out[i] = buffer.getUint8(outPtr + i)
}
- clear(buffer)
if (typeof pub === 'undefined') {
return
} else if (typeof prv === 'string') {
for (let i = 0; i < 64; i++) {
buffer.setUint8(inPtr + i, secretKey[i])
}
- secretKey.fill(0)
const message = normalize('message', 0, 32768, m)
let mPtr = exports.getMessagePointer()
for (let i = 0; i < message.byteLength; i++) {
for (let i = 0; i < 64; i++) {
s[i] = buffer.getUint8(outPtr + i)
}
- clear(buffer)
return typeof k === 'string'
? [...s].map(b => b.toString(16).padStart(2, '0')).join('')
: s
}
function verify (s: unknown, m: unknown, k: unknown): boolean {
- const signature = normalize('signature', 64, 64, s)
- const message = normalize('message', 0, 32768, m)
- const publicKey = normalize('public key', 32, 32, k)
let buffer: DataView | undefined = new DataView(exports.memory.buffer)
- let mPtr = exports.getMessagePointer()
- let inPtr = exports.getInputPointer()
- for (let i = 0; i < message.byteLength; i++) {
- buffer.setUint8(mPtr + i, message[i])
+ try {
+ const signature = normalize('signature', 64, 64, s)
+ const message = normalize('message', 0, 32768, m)
+ const publicKey = normalize('public key', 32, 32, k)
+ let mPtr = exports.getMessagePointer()
+ let inPtr = exports.getInputPointer()
+ for (let i = 0; i < message.byteLength; i++) {
+ buffer.setUint8(mPtr + i, message[i])
+ }
+ for (let i = 0; i < 64; i++) {
+ buffer.setUint8(inPtr + i, signature[i])
+ }
+ inPtr += 64
+ 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
+ } finally {
+ clear(buffer)
}
- for (let i = 0; i < 64; i++) {
- buffer.setUint8(inPtr + i, signature[i])
- }
- inPtr += 64
- 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)
- clear(buffer)
- return v[0] === 0
}
function clear (buffer: DataView): void {