// setup handler for receiving messages from the crypto provider
module.exports = function (jiffClient) {
/**
* Parse crypto provider message and resolve associated promise.
* @method
* @memberof handlers
* @param {object} json_msg - the parsed json message as received by the crypto_provider event, contains 'values' and 'shares' attributes.
*/
jiffClient.handlers.receive_crypto_provider = function (json_msg) {
// Hook
json_msg = jiffClient.hooks.execute_array_hooks('afterOperation', [jiffClient, 'crypto_provider', json_msg], 2);
var op_id = json_msg['op_id'];
if (jiffClient.deferreds[op_id] == null) {
return; // duplicate message: ignore
}
// parse msg
var receivers_list = json_msg['receivers'];
var threshold = json_msg['threshold'];
var Zp = json_msg['Zp'];
// construct secret share objects
var result = {};
if (json_msg['values'] != null) {
result.values = json_msg['values'];
}
if (json_msg['shares'] != null) {
result.shares = [];
for (var i = 0; i < json_msg['shares'].length; i++) {
result.shares.push(new jiffClient.SecretShare(json_msg['shares'][i], receivers_list, threshold, Zp));
}
}
// resolve deferred
jiffClient.deferreds[op_id].resolve(result);
delete jiffClient.deferreds[op_id];
};
};