3 changed files with 122 additions and 212 deletions
Split View
Diff Options
@ -1,113 +0,0 @@ |
|||
/* jshint esversion: 6 */ |
|||
/* global process */ |
|||
const Nacl = require('tweetnacl/nacl-fast'); |
|||
|
|||
const COMMANDS = {}; |
|||
|
|||
COMMANDS.INLINE = function (data, cb) { |
|||
var signedMsg; |
|||
try { |
|||
signedMsg = Nacl.util.decodeBase64(data.msg); |
|||
} catch (e) { |
|||
return void cb('E_BAD_MESSAGE'); |
|||
} |
|||
|
|||
var validateKey; |
|||
try { |
|||
validateKey = Nacl.util.decodeBase64(data.key); |
|||
} catch (e) { |
|||
return void cb("E_BADKEY"); |
|||
} |
|||
// validate the message
|
|||
const validated = Nacl.sign.open(signedMsg, validateKey); |
|||
if (!validated) { |
|||
return void cb("FAILED"); |
|||
} |
|||
cb(); |
|||
}; |
|||
|
|||
const checkDetachedSignature = function (signedMsg, signature, publicKey) { |
|||
if (!(signedMsg && publicKey)) { return false; } |
|||
|
|||
var signedBuffer; |
|||
var pubBuffer; |
|||
var signatureBuffer; |
|||
|
|||
try { |
|||
signedBuffer = Nacl.util.decodeUTF8(signedMsg); |
|||
} catch (e) { |
|||
throw new Error("INVALID_SIGNED_BUFFER"); |
|||
} |
|||
|
|||
try { |
|||
pubBuffer = Nacl.util.decodeBase64(publicKey); |
|||
} catch (e) { |
|||
throw new Error("INVALID_PUBLIC_KEY"); |
|||
} |
|||
|
|||
try { |
|||
signatureBuffer = Nacl.util.decodeBase64(signature); |
|||
} catch (e) { |
|||
throw new Error("INVALID_SIGNATURE"); |
|||
} |
|||
|
|||
if (pubBuffer.length !== 32) { |
|||
throw new Error("INVALID_PUBLIC_KEY_LENGTH"); |
|||
} |
|||
|
|||
if (signatureBuffer.length !== 64) { |
|||
throw new Error("INVALID_SIGNATURE_LENGTH"); |
|||
} |
|||
|
|||
if (Nacl.sign.detached.verify(signedBuffer, signatureBuffer, pubBuffer) !== true) { |
|||
throw new Error("FAILED"); |
|||
} |
|||
}; |
|||
|
|||
COMMANDS.DETACHED = function (data, cb) { |
|||
try { |
|||
checkDetachedSignature(data.msg, data.sig, data.key); |
|||
} catch (err) { |
|||
return void cb(err && err.message); |
|||
} |
|||
cb(); |
|||
}; |
|||
|
|||
COMMANDS.HASH_CHANNEL_LIST = function (data, cb) { |
|||
var channels = data.channels; |
|||
if (!Array.isArray(channels)) { return void cb('INVALID_CHANNEL_LIST'); } |
|||
var uniques = []; |
|||
|
|||
channels.forEach(function (a) { |
|||
if (uniques.indexOf(a) === -1) { uniques.push(a); } |
|||
}); |
|||
uniques.sort(); |
|||
|
|||
var hash = Nacl.util.encodeBase64(Nacl.hash(Nacl |
|||
.util.decodeUTF8(JSON.stringify(uniques)))); |
|||
|
|||
cb(void 0, hash); |
|||
}; |
|||
|
|||
process.on('message', function (data) { |
|||
if (!data || !data.txid) { |
|||
return void process.send({ |
|||
error:'E_INVAL' |
|||
}); |
|||
} |
|||
|
|||
const cb = function (err, value) { |
|||
process.send({ |
|||
txid: data.txid, |
|||
error: err, |
|||
value: value, |
|||
}); |
|||
}; |
|||
|
|||
const command = COMMANDS[data.command]; |
|||
if (typeof(command) !== 'function') { |
|||
return void cb("E_BAD_COMMAND"); |
|||
} |
|||
|
|||
command(data, cb); |
|||
}); |
|||
Write
Preview
Loading…
Cancel
Save