/** * @description MeshCentral accelerator * @author Ylian Saint-Hilaire * @copyright Intel Corporation 2018-2022 * @license Apache-2.0 * @version v0.0.1 */ /*xjslint node: true */ /*xjslint plusplus: true */ /*xjslint maxlen: 256 */ /*jshint node: true */ /*jshint strict: false */ /*jshint esversion: 6 */ "use strict"; const crypto = require('crypto'); var certStore = null; // When the parent process terminates, we exit also. process.on('disconnect', function () { process.exit(); }); // Handle parent messages process.on('message', function (message) { module.exports.processMessage(message); }); // Process an incoming message module.exports.processMessage = function(message) { switch (message.action) { case 'sign': { if (typeof message.key == 'number') { message.key = certStore[message.key].key; } try { const sign = crypto.createSign('SHA384'); sign.end(Buffer.from(message.data, 'binary')); process.send(sign.sign(message.key).toString('binary')); } catch (ex) { // If this exception happens, try again. if (ex.code == 'ERR_OSSL_DSO_COULD_NOT_LOAD_THE_SHARED_LIBRARY') { try { const sign = crypto.createSign('SHA384'); sign.end(Buffer.from(message.data, 'binary')); process.send(sign.sign(message.key).toString('binary')); } catch (ex) { process.send(null); } } else { process.send(null); } } break; } case 'setState': { certStore = message.certs; break; } case 'indexMcRec': { //console.log('indexMcRec', message.data); // Hold 5 seconds before starting to index setTimeout(function () { require(require('path').join(__dirname, 'mcrec.js')).indexFile(message.data); }, 5000); break; } default: { console.log('Unknown accelerator action: ' + message.action + '.'); break; } } }