From 37195d57bd320623ea5423ff6751d9e2e3307d01 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Mon, 25 Sep 2023 09:16:56 +0000 Subject: [PATCH 1/7] deps: @metamask/eth-sig-util@^6.0.0->^7.0.0 --- package.json | 2 +- yarn.lock | 69 +++++++++++++++++++++++++++++++++++----------------- 2 files changed, 48 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index f833521..0ce8671 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@ethereumjs/tx": "^4.1.1", "@ethereumjs/util": "8.0.5", "@metamask/bip39": "^4.0.0", - "@metamask/eth-sig-util": "^6.0.0", + "@metamask/eth-sig-util": "^7.0.0", "@metamask/scure-bip39": "^2.1.0", "@metamask/utils": "^5.0.2", "ethereum-cryptography": "^1.2.0" diff --git a/yarn.lock b/yarn.lock index 6debed3..0511709 100644 --- a/yarn.lock +++ b/yarn.lock @@ -542,7 +542,7 @@ __metadata: languageName: node linkType: hard -"@ethereumjs/util@npm:^8.0.6, @ethereumjs/util@npm:^8.1.0": +"@ethereumjs/util@npm:^8.1.0": version: 8.1.0 resolution: "@ethereumjs/util@npm:8.1.0" dependencies: @@ -937,6 +937,16 @@ __metadata: languageName: node linkType: hard +"@metamask/abi-utils@npm:^2.0.2": + version: 2.0.2 + resolution: "@metamask/abi-utils@npm:2.0.2" + dependencies: + "@metamask/utils": ^8.0.0 + superstruct: ^1.0.3 + checksum: 5ec153e7691a4e1dc8738a0ba1a99a354ddb13851fa88a40a19f002f6308310e71c2cee28c3a25d9f7f67e839c7dffe4760e93e308dd17fa725b08d0dc73a3d4 + languageName: node + linkType: hard + "@metamask/auto-changelog@npm:^2.5.0": version: 2.6.1 resolution: "@metamask/auto-changelog@npm:2.6.1" @@ -1039,7 +1049,7 @@ __metadata: "@metamask/eslint-config-nodejs": ^8.0.0 "@metamask/eslint-config-typescript": ^11.1.0 "@metamask/eth-hd-keyring": 4.0.1 - "@metamask/eth-sig-util": ^6.0.0 + "@metamask/eth-sig-util": ^7.0.0 "@metamask/scure-bip39": ^2.1.0 "@metamask/utils": ^5.0.2 "@types/jest": ^29.4.0 @@ -1077,17 +1087,18 @@ __metadata: languageName: node linkType: hard -"@metamask/eth-sig-util@npm:^6.0.0": - version: 6.0.0 - resolution: "@metamask/eth-sig-util@npm:6.0.0" +"@metamask/eth-sig-util@npm:^7.0.0": + version: 7.0.0 + resolution: "@metamask/eth-sig-util@npm:7.0.0" dependencies: - "@ethereumjs/util": ^8.0.6 - bn.js: ^4.12.0 - ethereum-cryptography: ^2.0.0 + "@ethereumjs/util": ^8.1.0 + "@metamask/abi-utils": ^2.0.2 + "@metamask/utils": ^8.1.0 + ethereum-cryptography: ^2.1.2 ethjs-util: ^0.1.6 tweetnacl: ^1.0.3 tweetnacl-util: ^0.15.1 - checksum: 76c173faed20d0d896561dbf3eb4ec3173e33288bf8844919643fd3e9fb6bc78f1ba8bd8a82252f4d13526ded4cc1aee27ae78f5b32642d9f97ef15fa230a12e + checksum: bcb6bd23333e0b4dcb49f8772483dcb4c27e75405a2b111f1eafe0b341b221cf86ba4843e91c567d8836e80b6049d8e2f89c6766c62bbd256533e0f256f6d846 languageName: node linkType: hard @@ -1114,6 +1125,20 @@ __metadata: languageName: node linkType: hard +"@metamask/utils@npm:^8.0.0, @metamask/utils@npm:^8.1.0": + version: 8.1.0 + resolution: "@metamask/utils@npm:8.1.0" + dependencies: + "@ethereumjs/tx": ^4.1.2 + "@noble/hashes": ^1.3.1 + "@types/debug": ^4.1.7 + debug: ^4.3.4 + semver: ^7.5.4 + superstruct: ^1.0.3 + checksum: 4cbee36d0c227f3e528930e83f75a0c6b71b55b332c3e162f0e87f3dd86ae017d0b20405d76ea054ab99e4d924d3d9b8b896ed12a12aae57b090350e5a625999 + languageName: node + linkType: hard + "@noble/curves@npm:1.1.0, @noble/curves@npm:~1.1.0": version: 1.1.0 resolution: "@noble/curves@npm:1.1.0" @@ -1137,6 +1162,13 @@ __metadata: languageName: node linkType: hard +"@noble/hashes@npm:^1.3.1, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 + languageName: node + linkType: hard + "@noble/hashes@npm:~1.1.1": version: 1.1.2 resolution: "@noble/hashes@npm:1.1.2" @@ -1144,13 +1176,6 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1": - version: 1.3.2 - resolution: "@noble/hashes@npm:1.3.2" - checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 - languageName: node - linkType: hard - "@noble/secp256k1@npm:1.7.1, @noble/secp256k1@npm:~1.7.0": version: 1.7.1 resolution: "@noble/secp256k1@npm:1.7.1" @@ -2169,7 +2194,7 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:^4.11.0, bn.js@npm:^4.11.8, bn.js@npm:^4.11.9, bn.js@npm:^4.12.0": +"bn.js@npm:^4.11.0, bn.js@npm:^4.11.8, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 @@ -3288,7 +3313,7 @@ __metadata: languageName: node linkType: hard -"ethereum-cryptography@npm:^2.0.0": +"ethereum-cryptography@npm:^2.0.0, ethereum-cryptography@npm:^2.1.2": version: 2.1.2 resolution: "ethereum-cryptography@npm:2.1.2" dependencies: @@ -5963,14 +5988,14 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8": - version: 7.3.8 - resolution: "semver@npm:7.3.8" +"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" dependencies: lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1 + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 languageName: node linkType: hard From a41fa897ee746ceff6d2a2631e68035aa81760dd Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Mon, 25 Sep 2023 09:23:34 +0000 Subject: [PATCH 2/7] deps: ethereum-cryptography@^1.2.0->^2.1.2 --- package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 0ce8671..57cea99 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "@metamask/eth-sig-util": "^7.0.0", "@metamask/scure-bip39": "^2.1.0", "@metamask/utils": "^5.0.2", - "ethereum-cryptography": "^1.2.0" + "ethereum-cryptography": "^2.1.2" }, "devDependencies": { "@lavamoat/allow-scripts": "^2.3.1", diff --git a/yarn.lock b/yarn.lock index 0511709..3945438 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1063,7 +1063,7 @@ __metadata: eslint-plugin-jsdoc: latest eslint-plugin-node: ^11.1.0 eslint-plugin-prettier: ^3.3.1 - ethereum-cryptography: ^1.2.0 + ethereum-cryptography: ^2.1.2 jest: ^29.4.3 prettier: ^2.4.1 prettier-plugin-packagejson: ^2.2.12 @@ -3301,7 +3301,7 @@ __metadata: languageName: node linkType: hard -"ethereum-cryptography@npm:^1.1.2, ethereum-cryptography@npm:^1.2.0": +"ethereum-cryptography@npm:^1.1.2": version: 1.2.0 resolution: "ethereum-cryptography@npm:1.2.0" dependencies: From 72f759261b281e278207b3acf4265bca386a56ac Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Mon, 25 Sep 2023 09:24:12 +0000 Subject: [PATCH 3/7] deps: @metamask/utils@^5.0.2->^8.1.0 --- package.json | 2 +- yarn.lock | 15 +-------------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 57cea99..49700a7 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "@metamask/bip39": "^4.0.0", "@metamask/eth-sig-util": "^7.0.0", "@metamask/scure-bip39": "^2.1.0", - "@metamask/utils": "^5.0.2", + "@metamask/utils": "^8.1.0", "ethereum-cryptography": "^2.1.2" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 3945438..85a4c57 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1051,7 +1051,7 @@ __metadata: "@metamask/eth-hd-keyring": 4.0.1 "@metamask/eth-sig-util": ^7.0.0 "@metamask/scure-bip39": ^2.1.0 - "@metamask/utils": ^5.0.2 + "@metamask/utils": ^8.1.0 "@types/jest": ^29.4.0 "@types/node": ^18.14.6 "@typescript-eslint/eslint-plugin": latest @@ -1112,19 +1112,6 @@ __metadata: languageName: node linkType: hard -"@metamask/utils@npm:^5.0.2": - version: 5.0.2 - resolution: "@metamask/utils@npm:5.0.2" - dependencies: - "@ethereumjs/tx": ^4.1.2 - "@types/debug": ^4.1.7 - debug: ^4.3.4 - semver: ^7.3.8 - superstruct: ^1.0.3 - checksum: eca82e42911b2840deb4f32f0f215c5ffd14d22d68afbbe92d3180e920e509e310777b15eab29def3448f3535b66596ceb4c23666ec846adacc8e1bb093ff882 - languageName: node - linkType: hard - "@metamask/utils@npm:^8.0.0, @metamask/utils@npm:^8.1.0": version: 8.1.0 resolution: "@metamask/utils@npm:8.1.0" From 0ffb71ce6bbbaa83579e91cd4eea71ac66278a87 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Mon, 25 Sep 2023 09:25:21 +0000 Subject: [PATCH 4/7] deps: @ethereumjs/tx@^4.1.1->^4.2.0 --- package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 49700a7..17cb3d6 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "test": "jest" }, "dependencies": { - "@ethereumjs/tx": "^4.1.1", + "@ethereumjs/tx": "^4.2.0", "@ethereumjs/util": "8.0.5", "@metamask/bip39": "^4.0.0", "@metamask/eth-sig-util": "^7.0.0", diff --git a/yarn.lock b/yarn.lock index 85a4c57..3a81a3b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -519,7 +519,7 @@ __metadata: languageName: node linkType: hard -"@ethereumjs/tx@npm:^4.1.1, @ethereumjs/tx@npm:^4.1.2": +"@ethereumjs/tx@npm:^4.1.2, @ethereumjs/tx@npm:^4.2.0": version: 4.2.0 resolution: "@ethereumjs/tx@npm:4.2.0" dependencies: @@ -1038,7 +1038,7 @@ __metadata: version: 0.0.0-use.local resolution: "@metamask/eth-hd-keyring@workspace:." dependencies: - "@ethereumjs/tx": ^4.1.1 + "@ethereumjs/tx": ^4.2.0 "@ethereumjs/util": 8.0.5 "@lavamoat/allow-scripts": ^2.3.1 "@lavamoat/preinstall-always-fail": ^1.0.0 From 2834ea6cdca946ee94ba917ec1889719f23f8fee Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Mon, 25 Sep 2023 09:26:06 +0000 Subject: [PATCH 5/7] deps: @ethereumjs/util@8.0.5->^8.1.0 --- package.json | 2 +- yarn.lock | 94 +--------------------------------------------------- 2 files changed, 2 insertions(+), 94 deletions(-) diff --git a/package.json b/package.json index 17cb3d6..deb0e42 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ }, "dependencies": { "@ethereumjs/tx": "^4.2.0", - "@ethereumjs/util": "8.0.5", + "@ethereumjs/util": "^8.1.0", "@metamask/bip39": "^4.0.0", "@metamask/eth-sig-util": "^7.0.0", "@metamask/scure-bip39": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index 3a81a3b..b4ec00a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -418,33 +418,6 @@ __metadata: languageName: node linkType: hard -"@chainsafe/as-sha256@npm:^0.3.1": - version: 0.3.1 - resolution: "@chainsafe/as-sha256@npm:0.3.1" - checksum: 58ea733be1657b0e31dbf48b0dba862da0833df34a81c1460c7352f04ce90874f70003cbf34d0afb9e5e53a33ee2d63a261a8b12462be85b2ba0a6f7f13d6150 - languageName: node - linkType: hard - -"@chainsafe/persistent-merkle-tree@npm:^0.4.2": - version: 0.4.2 - resolution: "@chainsafe/persistent-merkle-tree@npm:0.4.2" - dependencies: - "@chainsafe/as-sha256": ^0.3.1 - checksum: f9cfcb2132a243992709715dbd28186ab48c7c0c696f29d30857693cca5526bf753974a505ef68ffd5623bbdbcaa10f9083f4dd40bf99eb6408e451cc26a1a9e - languageName: node - linkType: hard - -"@chainsafe/ssz@npm:0.9.4": - version: 0.9.4 - resolution: "@chainsafe/ssz@npm:0.9.4" - dependencies: - "@chainsafe/as-sha256": ^0.3.1 - "@chainsafe/persistent-merkle-tree": ^0.4.2 - case: ^1.6.3 - checksum: c6eaedeae9e5618b3c666ff4507a27647f665a8dcf17d5ca86da4ed4788c5a93868f256d0005467d184fdf35ec03f323517ec2e55ec42492d769540a2ec396bc - languageName: node - linkType: hard - "@cspotcode/source-map-support@npm:^0.8.0": version: 0.8.1 resolution: "@cspotcode/source-map-support@npm:0.8.1" @@ -531,17 +504,6 @@ __metadata: languageName: node linkType: hard -"@ethereumjs/util@npm:8.0.5": - version: 8.0.5 - resolution: "@ethereumjs/util@npm:8.0.5" - dependencies: - "@chainsafe/ssz": 0.9.4 - "@ethereumjs/rlp": ^4.0.1 - ethereum-cryptography: ^1.1.2 - checksum: 318386785295b4584289b1aa576d2621392b3a918d127890db62d3f74184f3377694dd9e951e19bfb9ab80e8dc9e38e180236cac2651dead26097d10963731f9 - languageName: node - linkType: hard - "@ethereumjs/util@npm:^8.1.0": version: 8.1.0 resolution: "@ethereumjs/util@npm:8.1.0" @@ -1039,7 +1001,7 @@ __metadata: resolution: "@metamask/eth-hd-keyring@workspace:." dependencies: "@ethereumjs/tx": ^4.2.0 - "@ethereumjs/util": 8.0.5 + "@ethereumjs/util": ^8.1.0 "@lavamoat/allow-scripts": ^2.3.1 "@lavamoat/preinstall-always-fail": ^1.0.0 "@metamask/auto-changelog": ^2.5.0 @@ -1135,13 +1097,6 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.2.0, @noble/hashes@npm:~1.2.0": - version: 1.2.0 - resolution: "@noble/hashes@npm:1.2.0" - checksum: 8ca080ce557b8f40fb2f78d3aedffd95825a415ac8e13d7ffe3643f8626a8c2d99a3e5975b555027ac24316d8b3c02a35b8358567c0c23af681e6573602aa434 - languageName: node - linkType: hard - "@noble/hashes@npm:1.3.1": version: 1.3.1 resolution: "@noble/hashes@npm:1.3.1" @@ -1163,13 +1118,6 @@ __metadata: languageName: node linkType: hard -"@noble/secp256k1@npm:1.7.1, @noble/secp256k1@npm:~1.7.0": - version: 1.7.1 - resolution: "@noble/secp256k1@npm:1.7.1" - checksum: d2301f1f7690368d8409a3152450458f27e54df47e3f917292de3de82c298770890c2de7c967d237eff9c95b70af485389a9695f73eb05a43e2bd562d18b18cb - languageName: node - linkType: hard - "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -1269,17 +1217,6 @@ __metadata: languageName: node linkType: hard -"@scure/bip32@npm:1.1.5": - version: 1.1.5 - resolution: "@scure/bip32@npm:1.1.5" - dependencies: - "@noble/hashes": ~1.2.0 - "@noble/secp256k1": ~1.7.0 - "@scure/base": ~1.1.0 - checksum: b08494ab0d2b1efee7226d1b5100db5157ebea22a78bb87126982a76a186cb3048413e8be0ba2622d00d048a20acbba527af730de86c132a77de616eb9907a3b - languageName: node - linkType: hard - "@scure/bip32@npm:1.3.1": version: 1.3.1 resolution: "@scure/bip32@npm:1.3.1" @@ -1291,16 +1228,6 @@ __metadata: languageName: node linkType: hard -"@scure/bip39@npm:1.1.1": - version: 1.1.1 - resolution: "@scure/bip39@npm:1.1.1" - dependencies: - "@noble/hashes": ~1.2.0 - "@scure/base": ~1.1.0 - checksum: fbb594c50696fa9c14e891d872f382e50a3f919b6c96c55ef2fb10c7102c546dafb8f099a62bd114c12a00525b595dcf7381846f383f0ddcedeaa6e210747d2f - languageName: node - linkType: hard - "@scure/bip39@npm:1.2.1": version: 1.2.1 resolution: "@scure/bip39@npm:1.2.1" @@ -2394,13 +2321,6 @@ __metadata: languageName: node linkType: hard -"case@npm:^1.6.3": - version: 1.6.3 - resolution: "case@npm:1.6.3" - checksum: febe73278f910b0d28aab7efd6f51c235f9aa9e296148edb56dfb83fd58faa88308c30ce9a0122b6e53e0362c44f4407105bd5ef89c46860fc2b184e540fd68d - languageName: node - linkType: hard - "chalk@npm:^2.0.0": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -3288,18 +3208,6 @@ __metadata: languageName: node linkType: hard -"ethereum-cryptography@npm:^1.1.2": - version: 1.2.0 - resolution: "ethereum-cryptography@npm:1.2.0" - dependencies: - "@noble/hashes": 1.2.0 - "@noble/secp256k1": 1.7.1 - "@scure/bip32": 1.1.5 - "@scure/bip39": 1.1.1 - checksum: 97e8e8253cb9f5a9271bd0201c37609c451c890eb85883b9c564f14743c3d7c673287406c93bf5604307593ee298ad9a03983388b85c11ca61461b9fc1a4f2c7 - languageName: node - linkType: hard - "ethereum-cryptography@npm:^2.0.0, ethereum-cryptography@npm:^2.1.2": version: 2.1.2 resolution: "ethereum-cryptography@npm:2.1.2" From 4d2c17e846ff429f9e66922a1fc7cd28b8e1a5be Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Mon, 25 Sep 2023 09:46:04 +0000 Subject: [PATCH 6/7] signMessage: add explicit input validation handling The library previously rejected non-hex-string data but relied on an underlying library to throw the error. This makes the validation explicit, and changes the type of the `data` parameter of `signMessage` from `string` to `Hex` to reflect that. --- src/HDKeyring.test.ts | 6 +++--- src/HDKeyring.ts | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/HDKeyring.test.ts b/src/HDKeyring.test.ts index 7ee98dc..4d0e2ae 100644 --- a/src/HDKeyring.test.ts +++ b/src/HDKeyring.test.ts @@ -605,7 +605,7 @@ describe('hd-keyring', () => { const localMessage = 'hello there!'; const msgHashHex = bufferToHex( Buffer.from(keccak256(Buffer.from(localMessage))), - ); + ) as Hex; await keyring.addAccounts(9); const addresses = await keyring.getAccounts(); const signatures = await Promise.all( @@ -634,8 +634,8 @@ describe('hd-keyring', () => { numberOfAccounts: 1, }); - await expect(keyring.signMessage(firstAcct, '')).rejects.toThrow( - 'Cannot convert 0x to a BigInt', + await expect(keyring.signMessage(firstAcct, '' as Hex)).rejects.toThrow( + 'Invalid input: data is not a hex string', ); }); diff --git a/src/HDKeyring.ts b/src/HDKeyring.ts index fe9bd87..73cf5fb 100644 --- a/src/HDKeyring.ts +++ b/src/HDKeyring.ts @@ -23,7 +23,8 @@ import { TypedDataV1, TypedMessage, } from '@metamask/eth-sig-util'; -import { Hex, Keyring, Eip1024EncryptedData } from '@metamask/utils'; +import type { Hex, Keyring, Eip1024EncryptedData } from '@metamask/utils'; +import { isStrictHexString } from '@metamask/utils'; import { TxData, TypedTransaction } from '@ethereumjs/tx'; import { HDKeyringErrors } from './errors'; @@ -261,9 +262,12 @@ export class HDKeyring implements Keyring { // For eth_sign, we need to sign arbitrary data: async signMessage( address: Hex, - data: string, + data: Hex, opts: KeyringOpt = {}, ): Promise { + if (!isStrictHexString(data)) { + throw new Error('Invalid input: data is not a hex string'); + } const message: string = stripHexPrefix(data); const privKey: Uint8Array = this.#getPrivateKeyFor(address, opts); const msgSig: ECDSASignature = ecsign( From 538bd223b651a4a564917f1a1fdeb253ada30b53 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Mon, 25 Sep 2023 10:37:17 +0000 Subject: [PATCH 7/7] signMessage data is optionally 0x-prefixed --- src/HDKeyring.test.ts | 4 ++-- src/HDKeyring.ts | 11 ++++------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/HDKeyring.test.ts b/src/HDKeyring.test.ts index 4d0e2ae..7483ce5 100644 --- a/src/HDKeyring.test.ts +++ b/src/HDKeyring.test.ts @@ -634,8 +634,8 @@ describe('hd-keyring', () => { numberOfAccounts: 1, }); - await expect(keyring.signMessage(firstAcct, '' as Hex)).rejects.toThrow( - 'Invalid input: data is not a hex string', + await expect(keyring.signMessage(firstAcct, '')).rejects.toThrow( + 'Value must be a hexadecimal string', ); }); diff --git a/src/HDKeyring.ts b/src/HDKeyring.ts index 73cf5fb..a0fc8c1 100644 --- a/src/HDKeyring.ts +++ b/src/HDKeyring.ts @@ -2,7 +2,6 @@ import { HDKey } from 'ethereum-cryptography/hdkey'; import { keccak256 } from 'ethereum-cryptography/keccak'; import { bytesToHex } from 'ethereum-cryptography/utils'; import { - stripHexPrefix, privateToPublic, publicToAddress, ecsign, @@ -24,7 +23,7 @@ import { TypedMessage, } from '@metamask/eth-sig-util'; import type { Hex, Keyring, Eip1024EncryptedData } from '@metamask/utils'; -import { isStrictHexString } from '@metamask/utils'; +import { assertIsHexString, remove0x } from '@metamask/utils'; import { TxData, TypedTransaction } from '@ethereumjs/tx'; import { HDKeyringErrors } from './errors'; @@ -262,13 +261,11 @@ export class HDKeyring implements Keyring { // For eth_sign, we need to sign arbitrary data: async signMessage( address: Hex, - data: Hex, + data: string, opts: KeyringOpt = {}, ): Promise { - if (!isStrictHexString(data)) { - throw new Error('Invalid input: data is not a hex string'); - } - const message: string = stripHexPrefix(data); + assertIsHexString(data); + const message: string = remove0x(data); const privKey: Uint8Array = this.#getPrivateKeyFor(address, opts); const msgSig: ECDSASignature = ecsign( Buffer.from(message, 'hex'),