blocktrail-sdk
Version:
BlockTrail's Developer Friendly API binding for NodeJS
87 lines (70 loc) • 2.97 kB
JavaScript
/* globals importScripts */
var bip39 = require("bip39");
var Encryption = require('./encryption');
module.exports = function(self) {
self.addEventListener('message', function(e) {
var data = e.data || {};
switch (data.method) {
case 'importScripts':
importScripts(data.script);
break;
case 'mnemonicToSeedHex':
(function() {
try {
var mnemonic = data.mnemonic;
var passphrase = data.passphrase;
if (!bip39.validateMnemonic(mnemonic)) {
e = new Error('Invalid passphrase');
e.id = data.id;
throw e;
}
var seed = bip39.mnemonicToSeedHex(mnemonic, passphrase);
self.postMessage({id: data.id, seed: seed, mnemonic: mnemonic});
} catch (e) {
e.id = data.id;
throw e;
}
})();
break;
case 'Encryption.encryptWithSaltAndIV':
(function() {
try {
if (!data.pt || !data.pw || !data.saltBuf || !data.iv || !data.iterations) {
throw new Error("Invalid input");
}
var pt = Buffer.from(data.pt.buffer);
var pw = Buffer.from(data.pw.buffer);
var saltBuf = Buffer.from(data.saltBuf.buffer);
var iv = Buffer.from(data.iv.buffer);
var iterations = data.iterations;
var cipherText = Encryption.encryptWithSaltAndIV(pt, pw, saltBuf, iv, iterations);
self.postMessage({id: data.id, cipherText: cipherText});
} catch (e) {
e.id = data.id;
throw e;
}
})();
break;
case 'Encryption.decrypt':
(function() {
try {
if (!data.ct || !data.pw) {
throw new Error("Invalid input");
}
var ct = Buffer.from(data.ct.buffer);
var pw = Buffer.from(data.pw.buffer);
var plainText = Encryption.decrypt(ct, pw);
self.postMessage({id: data.id, plainText: plainText});
} catch (e) {
e.id = data.id;
throw e;
}
})();
break;
default:
e = new Error('Invalid method [' + e.method + ']');
e.id = data.id;
throw e;
}
}, false);
};