gocrypto
Version:
Cryption library based on Go-WebAssembly
79 lines (69 loc) • 2.71 kB
JavaScript
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;
})
;