Update keys.js
This commit is contained in:
parent
1faaa60843
commit
3c0bb7bdd4
54
src/keys.js
54
src/keys.js
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user