getInputPointer: () => number
getMessagePointer: () => number
getOutputPointer: () => number
+ INPUT_BUFFER_BYTES: WebAssembly.Global
+ MESSAGE_BUFFER_BYTES: WebAssembly.Global
+ OUTPUT_BUFFER_BYTES: WebAssembly.Global
memory: WebAssembly.Memory
}
}
}
}
}) as Exports
+const IN_LEN = exports.INPUT_BUFFER_BYTES.value
+const MSG_LEN = exports.MESSAGE_BUFFER_BYTES.value
+const OUT_LEN = exports.OUTPUT_BUFFER_BYTES.value
+const IN_PTR = exports.getInputPointer()
+const MSG_PTR = exports.getMessagePointer()
+const OUT_PTR = exports.getOutputPointer()
export function derive (k: unknown, out?: unknown): string | Uint8Array<ArrayBuffer> | void {
if (typeof out !== 'undefined' && !(isBytes(out) && out.byteLength === 32)) {
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[inPtr + i] = privateKey[i]
+ buffer[IN_PTR + i] = privateKey[i]
}
exports.derive()
- const outPtr = exports.getOutputPointer()
buffer = new Uint8Array(exports.memory.buffer)
for (let i = 0; i < 32; i++) {
- publicKey[i] = buffer[outPtr + i]
+ publicKey[i] = buffer[OUT_PTR + i]
}
if (typeof k === 'string') {
let hex = ''
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[inPtr + i] = secretKey[i]
+ buffer[IN_PTR + i] = secretKey[i]
}
const message = normalize('message', 0, mLen, m)
- let mPtr = exports.getMessagePointer()
for (let i = 0; i < message.byteLength; i++) {
- buffer[mPtr + i] = message[i]
+ buffer[MSG_PTR + i] = message[i]
}
exports.sign(message.byteLength)
- const outPtr = exports.getOutputPointer()
buffer = new Uint8Array(exports.memory.buffer)
for (let i = 0; i < 64; i++) {
- signature[i] = buffer[outPtr + i]
+ signature[i] = buffer[OUT_PTR + i]
}
if (typeof k === 'string') {
let hex = ''
const signature = normalize('signature', 64, 64, s)
const message = normalize('message', 0, mLen, 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[mPtr + i] = message[i]
+ buffer[MSG_PTR + i] = message[i]
}
for (let i = 0; i < 64; i++) {
- buffer[inPtr + i] = signature[i]
+ buffer[IN_PTR + i] = signature[i]
}
- inPtr += 64
for (let i = 0; i < 32; i++) {
- buffer[inPtr + i] = publicKey[i]
+ buffer[IN_PTR + 64 + i] = publicKey[i]
}
const v = exports.verify(message.byteLength)
return v === 0
}
function clear (memory: Uint8Array): void {
- let inPtr = exports.getInputPointer()
- let msgPtr = exports.getMessagePointer()
- let outPtr = exports.getOutputPointer()
- memory.fill(0, inPtr, inPtr + 96)
- memory.fill(0, msgPtr, msgPtr + mLen)
- memory.fill(0, outPtr, outPtr + 64)
+ memory.fill(0, IN_PTR, IN_LEN)
+ memory.fill(0, MSG_PTR, MSG_LEN)
+ memory.fill(0, OUT_PTR, OUT_LEN)
}
function isBytes (a: unknown): a is Uint8Array<ArrayBuffer> {