From 816bdb118ba4b02a987120c8d1f306ed8b32c74a Mon Sep 17 00:00:00 2001 From: SDargarh Date: Mon, 28 Aug 2023 11:36:04 +0530 Subject: [PATCH 01/12] removed unused encryption key parameter in get accounts --- src/lib/keyring.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/lib/keyring.js b/src/lib/keyring.js index d98fc87..29b8b26 100644 --- a/src/lib/keyring.js +++ b/src/lib/keyring.js @@ -114,7 +114,8 @@ class Keyring { return { response: true }; } - async getAccounts(encryptionKey) { + async getAccounts() { + const decryptedVault = this.decryptedVault; let chain = (Chains.evmChains.hasOwnProperty(this.chain) || this.chain === 'ethereum') ? 'eth' : this.chain; @@ -206,7 +207,7 @@ class Keyring { return { error: ERROR_MESSAGE.INCORRECT_PIN }; }; - const acc = await this.getAccounts(encryptionKey); + const acc = await this.getAccounts(); if (Chains.evmChains.hasOwnProperty(this.chain) || this.chain === 'ethereum') { const accounts = await this.keyringInstance.getAccounts(); @@ -303,7 +304,7 @@ class Keyring { } else{ - const accounts = await this.getAccounts(encryptionKey); + const accounts = await this.getAccounts(); if(accounts.response.filter(e => e.address === address).length < 1) { return { error: ERROR_MESSAGE.NONEXISTENT_KEYRING_ACCOUNT }; @@ -502,7 +503,7 @@ class Keyring { let isDuplicateAddress; let numOfAcc; - accounts = await this.getAccounts(encryptionKey); + accounts = await this.getAccounts(); if (accounts.error) { numOfAcc = 0; From 00e9df76914170f6fe6c24e9197dc711c1410290 Mon Sep 17 00:00:00 2001 From: SDargarh Date: Mon, 28 Aug 2023 12:43:49 +0530 Subject: [PATCH 02/12] added validation for pin parameter in export private key --- CHANGELOG.md | 4 +++- src/lib/keyring.js | 12 ++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0744430..9d0f758 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -529,4 +529,6 @@ ### 1.30.04 (2023-08-28) Nightly version : only for experimental use -* Updated the logs for label update & delete account \ No newline at end of file +* Updated the logs for label update & delete account +* Removed unused encryption key parameter in get accounts +* Added validation for pin parameter in export private key \ No newline at end of file diff --git a/src/lib/keyring.js b/src/lib/keyring.js index 29b8b26..6646183 100644 --- a/src/lib/keyring.js +++ b/src/lib/keyring.js @@ -154,6 +154,12 @@ class Keyring { return { error: ERROR_MESSAGE.INCORRECT_PIN_TYPE }; } + const response = await this.validatePin(pin); + + if (response.response == false || response.error) { + return { error: ERROR_MESSAGE.INCORRECT_PIN }; + }; + const chain = (Chains.evmChains.hasOwnProperty(this.chain) || this.chain === 'ethereum') ? 'eth' : this.chain; const importedChain = (chain === 'eth') ? 'evmChains' : chain; @@ -167,12 +173,6 @@ class Keyring { return { error: ERROR_MESSAGE.ADDRESS_NOT_PRESENT }; } - const response = await this.validatePin(pin); - - if (response.response == false || response.error) { - return { error: ERROR_MESSAGE.INCORRECT_PIN }; - }; - if (isImportedAddress) { const privateKey = (chain === 'eth') ? this.decryptedVault.importedWallets.evmChains.data.find(element => element.address === address).privateKey : this.decryptedVault.importedWallets[chain].data.find(element => element.address === address).privateKey; From 987cf2ee3b96c3526d8f124fa4a80955fd2f6244 Mon Sep 17 00:00:00 2001 From: SDargarh Date: Mon, 28 Aug 2023 12:54:21 +0530 Subject: [PATCH 03/12] Added validation for encryption key in add account --- CHANGELOG.md | 3 ++- src/lib/keyring.js | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d0f758..f97e51e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -531,4 +531,5 @@ * Updated the logs for label update & delete account * Removed unused encryption key parameter in get accounts -* Added validation for pin parameter in export private key \ No newline at end of file +* Added validation for pin parameter in export private key +* Added validation for encryption key in add account \ No newline at end of file diff --git a/src/lib/keyring.js b/src/lib/keyring.js index 6646183..896d417 100644 --- a/src/lib/keyring.js +++ b/src/lib/keyring.js @@ -207,6 +207,12 @@ class Keyring { return { error: ERROR_MESSAGE.INCORRECT_PIN }; }; + const { error } = helper.validateEncryptionKey(this.vault, JSON.stringify(encryptionKey)); + + if (error) { + return { error } + } + const acc = await this.getAccounts(); if (Chains.evmChains.hasOwnProperty(this.chain) || this.chain === 'ethereum') { From e07d38b0bc1d3fd7d6eaed6f13e05ae8b7f4b2af Mon Sep 17 00:00:00 2001 From: SDargarh Date: Mon, 28 Aug 2023 13:00:18 +0530 Subject: [PATCH 04/12] Added validation for encryption key in sign message --- CHANGELOG.md | 2 +- src/lib/keyring.js | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f97e51e..4ef82c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -532,4 +532,4 @@ * Updated the logs for label update & delete account * Removed unused encryption key parameter in get accounts * Added validation for pin parameter in export private key -* Added validation for encryption key in add account \ No newline at end of file +* Added validation for encryption key in add account, sign message \ No newline at end of file diff --git a/src/lib/keyring.js b/src/lib/keyring.js index 896d417..b8dd748 100644 --- a/src/lib/keyring.js +++ b/src/lib/keyring.js @@ -279,6 +279,13 @@ class Keyring { if(res.response == false || res.error) { return { error: ERROR_MESSAGE.INCORRECT_PIN }; }; + + const err = helper.validateEncryptionKey(this.vault, JSON.stringify(encryptionKey)); + + if (err.error) { + return { error : err.error } + } + const { error, response } = await this.exportPrivateKey(address, pin); if (error) { From 7c5c334d552a2c4201d7c95608341e1e0fb0b500 Mon Sep 17 00:00:00 2001 From: SDargarh Date: Mon, 28 Aug 2023 13:02:12 +0530 Subject: [PATCH 05/12] added validation for pin parameter in restore keyring state --- CHANGELOG.md | 2 +- src/lib/keyring.js | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ef82c7..505c4b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -531,5 +531,5 @@ * Updated the logs for label update & delete account * Removed unused encryption key parameter in get accounts -* Added validation for pin parameter in export private key +* Added validation for pin parameter in export private key, restore keyring state * Added validation for encryption key in add account, sign message \ No newline at end of file diff --git a/src/lib/keyring.js b/src/lib/keyring.js index b8dd748..5d8e9f6 100644 --- a/src/lib/keyring.js +++ b/src/lib/keyring.js @@ -388,6 +388,12 @@ class Keyring { return { error: ERROR_MESSAGE.INCORRECT_PIN_TYPE }; } + const res = await this.validatePin(pin) + + if(res.response == false || res.error) { + return { error: ERROR_MESSAGE.INCORRECT_PIN }; + }; + const { decryptedVault, error } = helper.validateEncryptionKey(vault, JSON.stringify(encryptionKey)); if (error) { From b8a29ac6481bf3cb5ec1756280e736f31d6e9b8e Mon Sep 17 00:00:00 2001 From: SDargarh Date: Mon, 28 Aug 2023 13:04:00 +0530 Subject: [PATCH 06/12] Added validation for encryption key in delete account --- CHANGELOG.md | 2 +- src/lib/keyring.js | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 505c4b3..0bec660 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -532,4 +532,4 @@ * Updated the logs for label update & delete account * Removed unused encryption key parameter in get accounts * Added validation for pin parameter in export private key, restore keyring state -* Added validation for encryption key in add account, sign message \ No newline at end of file +* Added validation for encryption key in add account, sign message, delete account \ No newline at end of file diff --git a/src/lib/keyring.js b/src/lib/keyring.js index 5d8e9f6..1624c8a 100644 --- a/src/lib/keyring.js +++ b/src/lib/keyring.js @@ -459,6 +459,12 @@ class Keyring { return { error: ERROR_MESSAGE.INCORRECT_PIN }; }; + const { error } = helper.validateEncryptionKey(this.vault, JSON.stringify(encryptionKey)); + + if (error) { + return { error } + } + let chain = (Chains.evmChains.hasOwnProperty(this.chain) || this.chain === 'ethereum') ? 'eth' : this.chain; const importedChain = (chain === 'eth') ? 'evmChains' : chain; From b6e0291785a9f85b15df2ba24b1cf875248d83f0 Mon Sep 17 00:00:00 2001 From: SDargarh Date: Mon, 28 Aug 2023 13:34:46 +0530 Subject: [PATCH 07/12] Import wallet - sync the pin validation steps with other methods --- CHANGELOG.md | 3 ++- src/lib/keyring.js | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bec660..7de9c32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -532,4 +532,5 @@ * Updated the logs for label update & delete account * Removed unused encryption key parameter in get accounts * Added validation for pin parameter in export private key, restore keyring state -* Added validation for encryption key in add account, sign message, delete account \ No newline at end of file +* Added validation for encryption key in add account, sign message, delete account +* Sync the pin validation steps with other methods in import wallet \ No newline at end of file diff --git a/src/lib/keyring.js b/src/lib/keyring.js index 1624c8a..b70a651 100644 --- a/src/lib/keyring.js +++ b/src/lib/keyring.js @@ -507,16 +507,16 @@ class Keyring { const response = await this.validatePin(pin); + if(response.response == false || response.error) { + return { error: ERROR_MESSAGE.INCORRECT_PIN }; + }; + const { error } = helper.validateEncryptionKey(this.vault, JSON.stringify(encryptionKey)); if (error) { return { error } } - if(response.response == false || response.error) { - return { error: ERROR_MESSAGE.INCORRECT_PIN }; - }; - if (privateKey.startsWith('0x')) { privateKey = privateKey.slice(2) } From b5cca7a6fe8307000b13b99b56d0804b77182f43 Mon Sep 17 00:00:00 2001 From: SDargarh Date: Mon, 28 Aug 2023 13:40:08 +0530 Subject: [PATCH 08/12] Added validation for encryption key in get vault details --- CHANGELOG.md | 2 +- src/lib/keyring.js | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7de9c32..fdf2dee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -532,5 +532,5 @@ * Updated the logs for label update & delete account * Removed unused encryption key parameter in get accounts * Added validation for pin parameter in export private key, restore keyring state -* Added validation for encryption key in add account, sign message, delete account +* Added validation for encryption key in add account, sign message, delete account, get vault details * Sync the pin validation steps with other methods in import wallet \ No newline at end of file diff --git a/src/lib/keyring.js b/src/lib/keyring.js index b70a651..3045b5b 100644 --- a/src/lib/keyring.js +++ b/src/lib/keyring.js @@ -653,6 +653,13 @@ class Keyring { } async getVaultDetails(encryptionKey) { + + const { error } = helper.validateEncryptionKey(this.vault, JSON.stringify(encryptionKey)); + + if (error) { + return { error } + } + const decryptedVault = this.decryptedVault; let accounts = { evm: { } }; From 00a675fdc12d94c5b56a12e55f1236e66cb07731 Mon Sep 17 00:00:00 2001 From: SDargarh Date: Mon, 28 Aug 2023 13:45:43 +0530 Subject: [PATCH 09/12] Added validation for encryption key in update label --- CHANGELOG.md | 2 +- src/lib/keyring.js | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fdf2dee..d32e5fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -532,5 +532,5 @@ * Updated the logs for label update & delete account * Removed unused encryption key parameter in get accounts * Added validation for pin parameter in export private key, restore keyring state -* Added validation for encryption key in add account, sign message, delete account, get vault details +* Added validation for encryption key in add account, sign message, delete account, get vault details & update label * Sync the pin validation steps with other methods in import wallet \ No newline at end of file diff --git a/src/lib/keyring.js b/src/lib/keyring.js index 3045b5b..0497ed9 100644 --- a/src/lib/keyring.js +++ b/src/lib/keyring.js @@ -769,6 +769,12 @@ class Keyring { async updateLabel(address, encryptionKey, newLabel, chainName) { + const { error } = helper.validateEncryptionKey(this.vault, JSON.stringify(encryptionKey)); + + if (error) { + return { error } + } + if (newLabel === null || newLabel === undefined) { return { error: ERROR_MESSAGE.INCORRECT_LABEL_TYPE }; } From 5e8fbeae0ca727379b2f6e62ee4c84de2332cedf Mon Sep 17 00:00:00 2001 From: SDargarh Date: Mon, 28 Aug 2023 13:48:44 +0530 Subject: [PATCH 10/12] added validation for current pin parameter in change pin --- CHANGELOG.md | 2 +- src/lib/keyring.js | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d32e5fc..6e6dd97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -531,6 +531,6 @@ * Updated the logs for label update & delete account * Removed unused encryption key parameter in get accounts -* Added validation for pin parameter in export private key, restore keyring state +* Added validation for pin parameter in export private key, restore keyring state & current pin parameter in change pin * Added validation for encryption key in add account, sign message, delete account, get vault details & update label * Sync the pin validation steps with other methods in import wallet \ No newline at end of file diff --git a/src/lib/keyring.js b/src/lib/keyring.js index 0497ed9..44a0167 100644 --- a/src/lib/keyring.js +++ b/src/lib/keyring.js @@ -824,6 +824,7 @@ class Keyring { } async changePin(currentPin, newPin, encryptionKey) { + if (!Number.isInteger(currentPin) || currentPin < 0) { throw ERROR_MESSAGE.INCORRECT_PIN_TYPE } @@ -832,6 +833,18 @@ class Keyring { throw ERROR_MESSAGE.INCORRECT_PIN_TYPE } + const response = await this.validatePin(currentPin); + + if (response.response == false || response.error) { + return { error: ERROR_MESSAGE.INCORRECT_PIN }; + }; + + const err = helper.validateEncryptionKey(this.vault, JSON.stringify(encryptionKey)); + + if (err.error) { + return { error : err.error } + } + const { error, response: mnemonic }= await this.exportMnemonic(currentPin); if (error) { From c84b6dd21b6e297936f3dbb24206d74e039157cf Mon Sep 17 00:00:00 2001 From: SDargarh Date: Mon, 28 Aug 2023 13:52:11 +0530 Subject: [PATCH 11/12] Updated tests wrt changes in vault generation and parameter validations --- src/lib/test/keyring.test.js | 73 +++++++++++++++++++++--------------- src/lib/test/vault.test.js | 14 +++---- 2 files changed, 49 insertions(+), 38 deletions(-) diff --git a/src/lib/test/keyring.test.js b/src/lib/test/keyring.test.js index efa1314..9e1b7d4 100644 --- a/src/lib/test/keyring.test.js +++ b/src/lib/test/keyring.test.js @@ -22,7 +22,7 @@ beforeAll(async() => { result = await vault.generateVault(bufView,pin,phrase) vaultAddress=result.response - await vault.getAccounts(bufView); + await vault.getAccounts(); }); describe('exportMnemonic' , ()=>{ @@ -115,14 +115,14 @@ describe('addAccount' , ()=>{ }) - test('addAccount/empty encryption key' , async()=>{ + test('addAccount/empty encryption key' , async()=>{ try{ let result = await vault.addAccount(null,pin) } catch(e){ - expect(e.message).toBe("Cannot read properties of undefined (reading 'length')") + expect(e.message).toBe("Incorrect Encryption Key or vault string") } - + }) test('addAccount/empty pin' , async()=>{ @@ -892,6 +892,18 @@ describe('changePin',()=>{ }) + test('changePin/wrong currentpin' , async()=>{ + try{ + let result = await vault.changePin(111111,pin,bufView) + + } + catch(e){ + expect(e).toBe('Wrong pin type, format or length') + } + + + }) + test('changePin/invalid currentpin' , async()=>{ try{ let result = await vault.changePin('aefe',pin,bufView) @@ -942,19 +954,23 @@ describe('changePin',()=>{ }) test('changePin/empty encryption key' , async()=>{ - - let result = await vault.changePin(pin,pin,null) - expect(result).toHaveProperty('response') - - - + try{ + let result = await vault.changePin(pin,pin,null) + } + catch(e){ + expect(e.message).toBe("Incorrect Encryption Key or vault string") + } + }) test('changePin/invalid encryption key' , async()=>{ - + try{ let result = await vault.changePin(pin,pin,'efefe') - expect(result).toHaveProperty('response') + } + catch(e){ + expect(e.message).toBe("Incorrect Encryption Key or vault string") + } @@ -996,17 +1012,23 @@ describe('deleteAccount',()=>{ }) test('deleteAccount/empty encryption key' , async()=>{ - + try{ let result = await vault.deleteAccount(null,accAddress,pin) - expect(result.error).toBe('This address is not present in the vault') + } + catch(e){ + expect(e.message).toBe("Incorrect Encryption Key or vault string") + } }) test('deleteAccount/invalid encryption key' , async()=>{ - + try{ let result = await vault.deleteAccount(null,accAddress,pin) - expect(result.error).toBe('This address is not present in the vault') + } + catch(e){ + expect(e.message).toBe("Incorrect Encryption Key or vault string") + } }) @@ -1066,22 +1088,11 @@ describe('deleteAccount',()=>{ describe('getAccounts',()=>{ test('getAccounts/valid' , async()=>{ await vault.restoreKeyringState(vaultAddress,pin,bufView) - let result = await vault.getAccounts(bufView) + let result = await vault.getAccounts() expect(result).toHaveProperty('response') }) - test('getAccounts/empty encryption key ' , async()=>{ - - let result = await vault.getAccounts(null) - expect(result.error).toBe('Incorrect Encryption Key or vault string') - - }) - test('getAccounts/invalid encryption key ' , async()=>{ - - let result = await vault.getAccounts("aefefe") - expect(result.error).toBe('Incorrect Encryption Key or vault string') - - }) + }) @@ -1142,7 +1153,7 @@ describe('signTransaction',()=>{ } catch(e){ - expect(e.message).toBe("No keyring found for the requested account.") + expect(e.message).toBe("Cannot read properties of undefined (reading 'toLowerCase')") } @@ -1173,7 +1184,7 @@ describe('signTransaction',()=>{ } catch(e){ - expect(e.message).toBe("No keyring found for the requested account.") + expect(e.message).toBe("Cannot read properties of undefined (reading 'toLowerCase')") } diff --git a/src/lib/test/vault.test.js b/src/lib/test/vault.test.js index 061ad16..9a89324 100644 --- a/src/lib/test/vault.test.js +++ b/src/lib/test/vault.test.js @@ -12,7 +12,7 @@ describe('getSupportedChains' , ()=>{ test('getSupportedChains' , async()=>{ - let result = await new Vault().getSupportedChains() + let result = await new Vault({}).getSupportedChains() expect({ evmChains: { ethereum: 'ETH', bsc: 'BSC', polygon: 'MATIC', optimism: 'OP', arbitrum: 'ARB', mantle: 'MNT', velas: 'VLX' }, nonEvmChains: { bitcoin: 'BTC' } @@ -28,7 +28,7 @@ describe('generateMnemonic' , ()=>{ test('generateMnemonic' , async()=>{ - let result = await new Vault().generateMnemonic() + let result = await new Vault({}).generateMnemonic() Mnemonic=result expect(typeof(result)).toBe("string") @@ -58,7 +58,7 @@ describe("generateVault",()=>{ const buf = new ArrayBuffer(32); const bufView = new Uint8Array(buf); - let result = await new Vault().generateVault(bufView,null,Mnemonic) + let result = await new Vault({}).generateVault(bufView,null,Mnemonic) expect(result.error).toBe("Wrong pin type, format or length") }) @@ -66,14 +66,14 @@ describe("generateVault",()=>{ test('generateVault/empty encrption key' , async()=>{ const buf = new ArrayBuffer(32); const bufView = new Uint8Array(buf); - let result = await new Vault().generateVault(null,1111,Mnemonic) + let result = await new Vault({}).generateVault(null,1111,Mnemonic) expect(result.error).toBe('Wrong pin type, format or length') }) test('generateVault/empty encrption key' , async()=>{ const buf = new ArrayBuffer(32); const bufView = new Uint8Array(buf); - let result = await new Vault().generateVault(null,111111,Mnemonic) + let result = await new Vault({}).generateVault(null,111111,Mnemonic) expect(result.error).toBe('Please enter both encryptionKey and pin') }) @@ -82,7 +82,7 @@ describe("generateVault",()=>{ const buf = new ArrayBuffer(32); const bufView = new Uint8Array(buf); try{ - let result = await new Vault().generateVault(bufView,1111,null) + let result = await new Vault({}).generateVault(bufView,1111,null) } catch(e){ expect(e.message).toBe('Seed phrase is invalid.') @@ -95,7 +95,7 @@ describe("generateVault",()=>{ const buf = new ArrayBuffer(32); const bufView = new Uint8Array(buf); - let result = await new Vault().generateVault(null,null,null) + let result = await new Vault({}).generateVault(null,null,null) expect(result.error).toBe("Wrong pin type, format or length") From 69b7fab0e3de43c5a7b5d2c30cbc071cbae29be1 Mon Sep 17 00:00:00 2001 From: SDargarh Date: Mon, 28 Aug 2023 14:05:32 +0530 Subject: [PATCH 12/12] updated change log --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e6dd97..f1cf0f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -533,4 +533,5 @@ * Removed unused encryption key parameter in get accounts * Added validation for pin parameter in export private key, restore keyring state & current pin parameter in change pin * Added validation for encryption key in add account, sign message, delete account, get vault details & update label -* Sync the pin validation steps with other methods in import wallet \ No newline at end of file +* Sync the pin validation steps with other methods in import wallet +* Updated tests wrt changes in vault generation and parameter validations \ No newline at end of file