UNPKG

gocrypto

Version:

Cryption library based on Go-WebAssembly

79 lines (69 loc) 2.71 kB
'use strict'; const fs = require('fs'); const _ = require('../lib/wasm_exec.js'); const { generateKey, sign, getPublicKey, verify } = require('./key.js'); (generator => { if (typeof exports === 'object') { const crypto = require('crypto') crypto.getRandomValues = crypto.randomFillSync generator(exports, true) } else { const exports = {}; window.gocrypto = generator(exports, false) } })((exports, isNodeJs) => { var _isInitialized = false; exports.isInitialized = () => { return _isInitialized; } exports.init = () => { return new Promise((resolve, reject) => { if (_isInitialized) { console.log("gocrypto already initialized!") resolve(); return; } if (WebAssembly) { // WebAssembly.instantiateStreaming is not currently available in Safari if (WebAssembly && !WebAssembly.instantiateStreaming) { // polyfill WebAssembly.instantiateStreaming = async (resp, importObject) => { var source = resp; if (!isNodeJs) { source = await (await resp).arrayBuffer(); } return await WebAssembly.instantiate(source, importObject); }; } // Initialize g.__gobridge__ as the binded object of wasm const g = global || window || self; if (!g.__gobridge__) { g.__gobridge__ = {}; } const go = new Go(); var wasmInitPromise; if (isNodeJs) { wasmInitPromise = fs.promises.readFile("./bin/DMSGoCrypto.wasm") .then(data => { return WebAssembly.instantiateStreaming(data, go.importObject) }) } else { wasmInitPromise = WebAssembly.instantiateStreaming(fetch("./bin/DMSGoCrypto.wasm"), go.importObject) } wasmInitPromise.then((result) => { go.run(result.instance); _isInitialized = true; resolve() }).catch( error => { return reject(error); }); } else { reject("WebAssembly is not supported in your browser"); } }); } exports.generateKey = generateKey; exports.sign = sign; exports.getPublicKey = getPublicKey; exports.verify = verify; return exports; })