diff --git a/standard_Operations.html b/standard_Operations.html index f482803..3754c60 100644 --- a/standard_Operations.html +++ b/standard_Operations.html @@ -8781,16 +8781,6 @@ Bitcoin.Util = { }) }, - privKeyInput: function () { - return new Promise((resolve, reject) => { - var privKey = prompt("Enter Private Key: ") - if (privKey === null) - reject(null) - else - resolve(privKey) - }) - }, - startUpFunctions: { readSupernodeListFromAPI: function () { @@ -8876,7 +8866,19 @@ Bitcoin.Util = { getCredentials: function () { - var readSharesFromIDB = function (indexArr) { + const defaultInput = function (type) { + return new Promise((resolve, reject) => { + let inputVal = prompt(`Enter ${type}: `) + if (inputVal === null) + reject(null) + else + resolve(inputVal) + }) + } + + const inputFn = this.getCredentials.privKeyInput || defaultInput; + + const readSharesFromIDB = function (indexArr) { return new Promise((resolve, reject) => { var promises = [] for (var i = 0; i < indexArr.length; i++) @@ -8891,7 +8893,7 @@ Bitcoin.Util = { }) } - var writeSharesToIDB = function (shares, i = 0, resultIndexes = []) { + const writeSharesToIDB = function (shares, i = 0, resultIndexes = []) { return new Promise((resolve, reject) => { if (i >= shares.length) return resolve(resultIndexes) @@ -8907,7 +8909,7 @@ Bitcoin.Util = { }) } - var getPrivateKeyCredentials = function () { + const getPrivateKeyCredentials = function () { return new Promise((resolve, reject) => { var indexArr = localStorage.getItem(`${floGlobals.application}#privKey`) if (indexArr) { @@ -8916,7 +8918,7 @@ Bitcoin.Util = { .catch(error => reject(error)) } else { var privKey; - floDapps.util.privKeyInput().then(result => { + inputFn("PRIVATE_KEY").then(result => { try { if (!result) return reject("Empty Private Key") @@ -8956,16 +8958,38 @@ Bitcoin.Util = { }) } + const checkIfPinRequired = function(key){ + return new Promise((resolve, reject) => { + if(key.length == 52) + resolve(key) + else { + inputFn("PIN/Password").then(pwd => { + try{ + let privKey = Crypto.AES.decrypt(key, pwd); + resolve(privKey) + }catch(error){ + reject("Access Denied: Incorrect PIN/Password") + } + }).catch(error => reject("Access Denied: PIN/Password required")) + } + }) + } + return new Promise((resolve, reject) => { - getPrivateKeyCredentials().then(privKey => { - myPrivKey = privKey - myPubKey = floCrypto.getPubKeyHex(myPrivKey) - myFloID = floCrypto.getFloIDfromPubkeyHex(myPubKey) - resolve('Login Credentials loaded successful') + getPrivateKeyCredentials().then(key => { + checkIfPinRequired(key).then(privKey => { + try{ + myPrivKey = privKey + myPubKey = floCrypto.getPubKeyHex(myPrivKey) + myFloID = floCrypto.getFloIDfromPubkeyHex(myPubKey) + resolve('Login Credentials loaded successful') + }catch(error){ + reject("Corrupted Private Key") + } + }).catch(error => reject(error)) }).catch(error => reject(error)) }) } - }, callStartUpFunction: function (fname) { @@ -9021,7 +9045,7 @@ Bitcoin.Util = { }, setCustomPrivKeyInput: function (customFn) { - this.util.privKeyInput = customFn + this.util.startUpFunctions.getCredentials.privKeyInput = customFn }, setAppObjectStores: function (appObs) { @@ -9049,13 +9073,30 @@ Bitcoin.Util = { }, clearCredentials: function () { - var indexArr = localStorage.getItem(`${floGlobals.application}#privKey`) - if (!indexArr) - return `privKey credentials not found!` - indexArr = JSON.parse(indexArr) - indexArr.forEach(i => compactIDB.removeData('credentials', i)) - localStorage.removeItem(`${floGlobals.application}#privKey`) - return `privKey credentials deleted!` + return new Promise((resolve, reject) => { + compactIDB.clearData('credentials').then(result => { + localStorage.removeItem(`${floGlobals.application}#privKey`) + resolve("privKey credentials deleted!") + }).catch(error => reject(error)) + }) + }, + + securePrivKey: function(pwd){ + return new Promise((resolve, reject) => { + let indexArr = localStorage.getItem(`${floGlobals.application}#privKey`) + if(!indexArr) + return reject("PrivKey not found"); + indexArr = JSON.parse(indexArr) + let encryptedKey = Crypto.AES.encrypt(myPrivKey, pwd); + let threshold = indexArr.length; + let shares = floCrypto.createShamirsSecretShares(encryptedKey, threshold, threshold) + let promises = []; + for(var i=0; i resolve("Private Key Secured")) + .catch(error => reject(error)) + }) }, objectDataMapper: function (object, path, data) {