gocrypto
v0.0.1
Published
Cryption library based on Go-WebAssembly
Downloads
11
Maintainers
Readme
WebAssembly
Getting Started
Basic Setup
Include
wasm_exec.js
to your web app<Script src="wasm_exec.js"/>
Add following code to check the WebAssembly compatibility:
if (WebAssembly) { // WebAssembly.instantiateStreaming is not currently available in Safari if (WebAssembly && !WebAssembly.instantiateStreaming) { // polyfill WebAssembly.instantiateStreaming = async (resp, importObject) => { const source = await (await resp).arrayBuffer(); return await WebAssembly.instantiate(source, importObject); }; } }
Instantiate and attach a
__gobridge__
object to the global object, DMSCrypto will hook and exports all available function to the__gobridge__
objectconst g = global || window || self; if (!g.__gobridge__) { g.__gobridge__ = {}; }
Use
WebAssembly.instantiateStreaming
to load and instantiate theDMSGoCrypto.wasm
library:const go = new Go(); // Go provided by the wasm_exec.js to run the GoWasm library WebAssembly.instantiateStreaming(fetch("DMSGoCrypto.wasm"), go.importObject).then((result) => { go.run(result.instance); // ** NOTE: Call go.run() before using any WebAssembly function ** __gobridge__.generateSecp256k1Key("", (err, privKey) => { if (err != null) { console.log(err); } else { console.log(privKey); } }); });
API Reference
Overall API Design
Due to restriction of Go-WebAssembly, all DMSCrypto WebAssembly API is designed to provide a Parameters + Callback
function signature pattern.
Take generateSecp256k1Key
as the example:
__gobridge__.generateSecp256k1Key(
// First param would be an object, check each API spec for the definition
"",
// Final param would always be a callback in which the first param is a nullable `error`
(err, privKey) => {
if (err != null) {
console.log(err);
} else {
console.log(privKey);
}
});