sha3-wasm
Version:
WebAssembly implementation of Keccak hash functions
62 lines (46 loc) • 5.74 kB
JavaScript
module.exports = loadWebAssembly
loadWebAssembly.supported = typeof WebAssembly !== 'undefined'
function loadWebAssembly (opts) {
if (!loadWebAssembly.supported) return null
var imp = opts && opts.imports
var wasm = toUint8Array('AGFzbQEAAAABHQVgA39/fwBgBH9/f38Bf2ADf39/AX9gAABgAX8AAwcGAAECAAMEBQYBAQqAgAQGrQI8fgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALfgFCAAt+AUIAC34BQgALBzYGBm1lbW9yeQIABGluaXQAAANwYWQAAQZhYnNvcmIAAgdzcXVlZXplAAMJZl9wZXJtdXRlAAUKgBYGwwEAIABCADcDACAAQgA3AwggAEIANwMQIABCADcDICAAQgA3AyggAEIANwMwIABCADcDOCAAQgA3A0AgAEIANwNIIABCADcDUCAAQgA3A1ggAEIANwPEByAAQgA3A2ggAEIANwNwIABCADcDeCAAQgA3A4ABIABCADcDiAEgAEIANwOQASAAQgA3A5gBIABCADcDoAEgAEIANwOoASAAQgA3A7ABIABCADcDuAEgAEIANwPAASAAQgA3A8gBIAAgATYCAAuAAQEBfyACIQQCQAJAAkACQAJAIAMOAgMCAQsLIAFCHzwAAAwCCyABQgE8AAAMAQsgAUIGPAAADAALAkADQCACQQFqQQhsIABwQQBGDQEgAkEBaiECIAFBAWohASABQgA8AAAMAAsLIAEgASkDAEKAAYQ3AwAgAkEBaiECIAIgBGsLvwEDA38BfgF/IAEhBSAAKAIAIQcgACgCBCAHQQhucCIEIARBCHBrIQMCQANAIANBCGwgB0YEQCAAEAVBACEDCyABIAJGDQECQCACIAFrQQhJDQAgACADaiAAIANqKQMIIAEpAwCFNwMIIAFBCGohASADQQhqIQMMAQsgACADaiAAIANqMQAIIAExAACFPAAIIAFBAWohASAD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')
var ready = null
var mod = {
buffer: wasm,
memory: null,
exports: null,
realloc: realloc,
onload: onload
}
onload(function () {})
return mod
function realloc (size) {
mod.exports.memory.grow(Math.max(0, Math.ceil(Math.abs(size - mod.memory.length) / 65536)))
mod.memory = new Uint8Array(mod.exports.memory.buffer)
}
function onload (cb) {
if (mod.exports) return cb()
if (ready) {
ready.then(cb.bind(null, null)).catch(cb)
return
}
try {
if (opts && opts.async) throw new Error('async')
setup({instance: new WebAssembly.Instance(new WebAssembly.Module(wasm), imp)})
} catch (err) {
ready = WebAssembly.instantiate(wasm, imp).then(setup)
}
onload(cb)
}
function setup (w) {
mod.exports = w.instance.exports
mod.memory = mod.exports.memory && mod.exports.memory.buffer && new Uint8Array(mod.exports.memory.buffer)
}
}
function toUint8Array (s) {
if (typeof atob === 'function') return new Uint8Array(atob(s).split('').map(charCodeAt))
return (require('buf' + 'fer').Buffer).from(s, 'base64')
}
function charCodeAt (c) {
return c.charCodeAt(0)
}