Update keys.js

This commit is contained in:
sairajzero 2022-12-28 03:41:05 +05:30
parent 1faaa60843
commit 3c0bb7bdd4

View File

@ -35,7 +35,7 @@ const PRIV_EKEY_MIN = 32,
LOCK_RETRY_MAX_TIME = 2 * 1000; LOCK_RETRY_MAX_TIME = 2 * 1000;
var node_priv, e_key, node_id, node_pub; //containers for node-key wrapper var node_priv, e_key, node_id, node_pub; //containers for node-key wrapper
const _ = { const _x = {
get node_priv() { get node_priv() {
if (!node_priv || !e_key) if (!node_priv || !e_key)
throw Error("keys not set"); throw Error("keys not set");
@ -71,10 +71,10 @@ const _ = {
function initialize() { function initialize() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
fs.readFile(_.prime_file, PRIME_FILE_TYPE, (err, res) => { fs.readFile(_x.prime_file, PRIME_FILE_TYPE, (err, res) => {
var data, cur_filename, new_filename, priv_key; var data, cur_filename, new_filename, priv_key;
try { try {
priv_key = _.node_priv; priv_key = _x.node_priv;
} catch (error) { } catch (error) {
return reject(error); return reject(error);
} }
@ -86,7 +86,7 @@ function initialize() {
console.debug(error); console.debug(error);
return reject("Prime file corrupted"); return reject("Prime file corrupted");
} try { //read data from index file } try { //read data from index file
let tmp = fs.readFileSync(path.join(_.index_dir, cur_filename + INDEX_FILE_EXT), INDEX_FILE_TYPE); let tmp = fs.readFileSync(path.join(_x.index_dir, cur_filename + INDEX_FILE_EXT), INDEX_FILE_TYPE);
tmp = Crypto.AES.decrypt(tmp, priv_key); tmp = Crypto.AES.decrypt(tmp, priv_key);
JSON.parse(tmp); //check if data is JSON parse-able JSON.parse(tmp); //check if data is JSON parse-able
data = tmp; data = tmp;
@ -97,18 +97,18 @@ function initialize() {
} }
} }
try { try {
if (!fs.existsSync(_.index_dir)) { if (!fs.existsSync(_x.index_dir)) {
fs.mkdirSync(_.index_dir); fs.mkdirSync(_x.index_dir);
} }
} catch (error) { } catch (error) {
console.debug(error); console.debug(error);
return reject("Index directory creation failed"); return reject("Index directory creation failed");
} }
try { //delete all old dummy files try { //delete all old dummy files
let files = fs.readdirSync(_.index_dir); let files = fs.readdirSync(_x.index_dir);
for (const file of files) for (const file of files)
if (!cur_filename || file !== cur_filename + INDEX_FILE_EXT) //check if file is current file if (!cur_filename || file !== cur_filename + INDEX_FILE_EXT) //check if file is current file
fs.unlinkSync(path.join(_.index_dir, file)); fs.unlinkSync(path.join(_x.index_dir, file));
} catch (error) { } catch (error) {
console.debug(error); console.debug(error);
return reject("Clear index directory failed"); return reject("Clear index directory failed");
@ -128,20 +128,20 @@ function initialize() {
f_data = floCrypto.randString(d_size, false); f_data = floCrypto.randString(d_size, false);
} }
f_data = Crypto.AES.encrypt(f_data, priv_key); f_data = Crypto.AES.encrypt(f_data, priv_key);
fs.writeFileSync(path.join(_.index_dir, f_name + INDEX_FILE_EXT), f_data, INDEX_FILE_TYPE); fs.writeFileSync(path.join(_x.index_dir, f_name + INDEX_FILE_EXT), f_data, INDEX_FILE_TYPE);
} }
} catch (error) { } catch (error) {
console.debug(error); console.debug(error);
return reject("Index file creation failed"); return reject("Index file creation failed");
} try { //update prime file } try { //update prime file
let en_filename = Crypto.AES.encrypt(new_filename, priv_key); let en_filename = Crypto.AES.encrypt(new_filename, priv_key);
fs.writeFileSync(_.prime_file, en_filename, PRIME_FILE_TYPE); fs.writeFileSync(_x.prime_file, en_filename, PRIME_FILE_TYPE);
} catch (error) { } catch (error) {
console.debug(error); console.debug(error);
return reject("Update prime file failed"); return reject("Update prime file failed");
} }
if (cur_filename) if (cur_filename)
fs.unlink(path.join(_.index_dir, cur_filename + INDEX_FILE_EXT), err => err ? console.debug(err) : null); fs.unlink(path.join(_x.index_dir, cur_filename + INDEX_FILE_EXT), err => err ? console.debug(err) : null);
shuffle.interval = setInterval(shuffle, SHUFFLE_INTERVAL); shuffle.interval = setInterval(shuffle, SHUFFLE_INTERVAL);
resolve("Key management initiated"); resolve("Key management initiated");
}) })
@ -150,8 +150,8 @@ function initialize() {
function shuffle() { function shuffle() {
readIndexFile().then(data => { readIndexFile().then(data => {
let new_filename, cur_filename = Crypto.AES.decrypt(fs.readFileSync(_.prime_file, PRIME_FILE_TYPE), _.node_priv); let new_filename, cur_filename = Crypto.AES.decrypt(fs.readFileSync(_x.prime_file, PRIME_FILE_TYPE), _x.node_priv);
fs.readdir(_.index_dir, (err, files) => { fs.readdir(_x.index_dir, (err, files) => {
if (err) if (err)
return console.error(err); return console.error(err);
data = JSON.stringify(data); data = JSON.stringify(data);
@ -165,11 +165,11 @@ function shuffle() {
let d_size = data_size * (floCrypto.randInt(MIN_DUMMY_SIZE_MUL * SIZE_FACTOR, MAX_DUMMY_SIZE_MUL * SIZE_FACTOR) / SIZE_FACTOR); let d_size = data_size * (floCrypto.randInt(MIN_DUMMY_SIZE_MUL * SIZE_FACTOR, MAX_DUMMY_SIZE_MUL * SIZE_FACTOR) / SIZE_FACTOR);
f_data = floCrypto.randString(d_size, false); f_data = floCrypto.randString(d_size, false);
} }
f_data = Crypto.AES.encrypt(f_data, _.node_priv); f_data = Crypto.AES.encrypt(f_data, _x.node_priv);
//rename and rewrite the file //rename and rewrite the file
try { try {
fs.renameSync(path.join(_.index_dir, file), path.join(_.index_dir, f_name + INDEX_FILE_EXT)); fs.renameSync(path.join(_x.index_dir, file), path.join(_x.index_dir, f_name + INDEX_FILE_EXT));
fs.writeFileSync(path.join(_.index_dir, f_name + INDEX_FILE_EXT), f_data, INDEX_FILE_TYPE); fs.writeFileSync(path.join(_x.index_dir, f_name + INDEX_FILE_EXT), f_data, INDEX_FILE_TYPE);
} catch (error) { } catch (error) {
console.error(error) console.error(error)
} }
@ -177,9 +177,9 @@ function shuffle() {
//update prime file //update prime file
if (!new_filename) if (!new_filename)
return console.error("Index file has not been renamed"); return console.error("Index file has not been renamed");
let en_filename = Crypto.AES.encrypt(new_filename, _.node_priv); let en_filename = Crypto.AES.encrypt(new_filename, _x.node_priv);
try { try {
fs.writeFileSync(_.prime_file, en_filename, PRIME_FILE_TYPE); fs.writeFileSync(_x.prime_file, en_filename, PRIME_FILE_TYPE);
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }
@ -189,13 +189,13 @@ function shuffle() {
function readIndexFile() { function readIndexFile() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
fs.readFile(_.index_file, INDEX_FILE_TYPE, (err, data) => { fs.readFile(_x.index_file, INDEX_FILE_TYPE, (err, data) => {
if (err) { if (err) {
console.debug(err); console.debug(err);
return reject('Unable to read Index file'); return reject('Unable to read Index file');
} }
try { try {
data = JSON.parse(Crypto.AES.decrypt(data, _.node_priv)); data = JSON.parse(Crypto.AES.decrypt(data, _x.node_priv));
resolve(data); resolve(data);
} catch { } catch {
reject("Index file corrupted"); reject("Index file corrupted");
@ -206,8 +206,8 @@ function readIndexFile() {
function writeIndexFile(data) { function writeIndexFile(data) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let en_data = Crypto.AES.encrypt(JSON.stringify(data), _.node_priv); let en_data = Crypto.AES.encrypt(JSON.stringify(data), _x.node_priv);
fs.writeFile(_.index_file, en_data, INDEX_FILE_TYPE, (err) => { fs.writeFile(_x.index_file, en_data, INDEX_FILE_TYPE, (err) => {
if (err) { if (err) {
console.debug(err); console.debug(err);
return reject('Unable to write Index file'); return reject('Unable to write Index file');
@ -229,7 +229,7 @@ function getShares(group, id, ignoreDiscarded = true) {
else { else {
let ref = data[group][id].shift(); let ref = data[group][id].shift();
DB.query("SELECT share FROM sinkShares WHERE num IN (?)", [data[group][id]]) DB.query("SELECT share FROM sinkShares WHERE num IN (?)", [data[group][id]])
.then(result => resolve({ ref, shares: result.map(r => Crypto.AES.decrypt(r.share, _.node_priv)) })) .then(result => resolve({ ref, shares: result.map(r => Crypto.AES.decrypt(r.share, _x.node_priv)) }))
.catch(error => reject(error)) .catch(error => reject(error))
} }
}).catch(error => reject(error)) }).catch(error => reject(error))
@ -257,7 +257,7 @@ function addShare(group, id, ref, share) {
checkIfDiscarded(id).then(result => { checkIfDiscarded(id).then(result => {
if (result != false) if (result != false)
return reject("Trying to store share for discarded ID"); return reject("Trying to store share for discarded ID");
lockfile.lock(_.index_file, { retries: { forever: true, minTimeout: LOCK_RETRY_MIN_TIME, maxTimeout: LOCK_RETRY_MAX_TIME } }).then(release => { lockfile.lock(_x.index_file, { retries: { forever: true, minTimeout: LOCK_RETRY_MIN_TIME, maxTimeout: LOCK_RETRY_MAX_TIME } }).then(release => {
const releaseAndReject = err => { const releaseAndReject = err => {
release().then(_ => null).catch(error => console.error(error)); release().then(_ => null).catch(error => console.error(error));
reject(err); reject(err);
@ -276,7 +276,7 @@ function addShare(group, id, ref, share) {
DB.query("DELETE FROM sinkShares WHERE num in (?)", [old_shares])//delete old shares DB.query("DELETE FROM sinkShares WHERE num in (?)", [old_shares])//delete old shares
.then(_ => null).catch(error => console.error(error)); .then(_ => null).catch(error => console.error(error));
} }
let encrypted_share = Crypto.AES.encrypt(share, _.node_priv); let encrypted_share = Crypto.AES.encrypt(share, _x.node_priv);
console.debug(ref, '|sinkID:', id, '|EnShare:', encrypted_share); console.debug(ref, '|sinkID:', id, '|EnShare:', encrypted_share);
storeShareAtRandom(encrypted_share).then(i => { storeShareAtRandom(encrypted_share).then(i => {
data[group][id].push(i); data[group][id].push(i);
@ -422,10 +422,10 @@ module.exports = {
checkIfDiscarded, checkIfDiscarded,
discardSink, discardSink,
set node_priv(key) { set node_priv(key) {
_.node_priv = key; _x.node_priv = key;
}, },
get node_priv() { get node_priv() {
return _.node_priv; return _x.node_priv;
}, },
get node_id() { get node_id() {
return node_id; return node_id;