UNPKG

supercop.wasm

Version:

orlp/ed25519 compiled to WebAssembly using Emscripten and optimized for small size

118 lines (117 loc) 3.23 kB
// Generated by LiveScript 1.5.0 /** * @package lib.wasm * @author Nazar Mokrynskyi <nazar@mokrynskyi.com> * @license 0BSD */ (function(){ var random_bytes; if (typeof crypto !== 'undefined') { /** * @param {number} size * * @return {!Uint8Array} */ random_bytes = function(size){ var array; array = new Uint8Array(size); crypto.getRandomValues(array); return array; }; } else { /** * @param {string} size * * @return {!Uint8Array} */ random_bytes = require('crypto').randomBytes; } function Wrapper(lib){ var allocate, free; lib = lib(); allocate = lib['allocateBytes']; free = lib['freeBytes']; /** * @return {!Uint8Array} */ function createSeed(){ return random_bytes(32); } /** * @param {!Uint8Array} seed * * @return {!Object} */ function createKeyPair(seed){ var publicKey, secretKey; if (!(seed instanceof Uint8Array)) { throw new Error('not Uint8Array!'); } seed = allocate(0, seed); publicKey = allocate(32); secretKey = allocate(64); lib['_ed25519_create_keypair'](publicKey, secretKey, seed); publicKey = publicKey['get'](); secretKey = secretKey['get'](); free(); return { publicKey: publicKey, secretKey: secretKey }; } /** * @param {!Uint8Array} message * @param {!Uint8Array} publicKey * @param {!Uint8Array} secretKey * * @return {!Uint8Array} */ function sign(message, publicKey, secretKey){ var signature; if (!(message instanceof Uint8Array && publicKey instanceof Uint8Array && secretKey instanceof Uint8Array)) { throw new Error('not Uint8Arrays!'); } message = allocate(0, message); publicKey = allocate(0, publicKey); secretKey = allocate(0, secretKey); signature = allocate(64); lib['_ed25519_sign'](signature, message, message.length, publicKey, secretKey); signature = signature['get'](); free(); return signature; } /** * @param {!Uint8Array} signature * @param {!Uint8Array} message * @param {!Uint8Array} publicKey * * @return {boolean} */ function verify(signature, message, publicKey){ var result; if (!(signature instanceof Uint8Array && message instanceof Uint8Array && publicKey instanceof Uint8Array)) { throw new Error('not Uint8Arrays!'); } message = allocate(0, message); publicKey = allocate(0, publicKey); signature = allocate(0, signature); result = lib['_ed25519_verify'](signature, message, message.length, publicKey) === 1; free(); return result; } return { 'ready': lib['then'], 'createSeed': createSeed, 'createKeyPair': createKeyPair, 'sign': sign, 'verify': verify }; } if (typeof define === 'function' && define['amd']) { define(['./supercop'], Wrapper); } else if (typeof exports === 'object') { module.exports = Wrapper(require('./supercop')); } else { this['supercop_wasm'] = Wrapper(this['__supercopwasm']); } }).call(this);