supercop.wasm
Version:
orlp/ed25519 compiled to WebAssembly using Emscripten and optimized for small size
118 lines (117 loc) • 3.23 kB
JavaScript
// 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);