diff --git a/src/core/operations/ChangeExtendedKeyVersion.mjs b/src/core/operations/ChangeExtendedKeyVersion.mjs index 1dffa1ca..05bce91b 100644 --- a/src/core/operations/ChangeExtendedKeyVersion.mjs +++ b/src/core/operations/ChangeExtendedKeyVersion.mjs @@ -7,6 +7,7 @@ */ import Operation from "../Operation.mjs"; +import OperationError from "../errors/OperationError.mjs"; import { deserializeExtendedKeyFunc, serializeExtendedKeyFunc, getExtendedKeyVersion, getVersions } from "../lib/Bitcoin.mjs"; @@ -53,6 +54,9 @@ class ChangeExtendedKeyVersion extends Operation { return ""; } const result = deserializeExtendedKeyFunc(input); + if ("error" in result) { + throw new OperationError("Error in deserializing key. Error is: " + result.error); + } const newVersion = getExtendedKeyVersion(args[0]); return serializeExtendedKeyFunc(newVersion, result.level, result.fingerprint, result.i, result.chaincode, result.masterkey); } diff --git a/src/core/operations/PrivateExtendedKeyToPublic.mjs b/src/core/operations/PrivateExtendedKeyToPublic.mjs index fdb8d707..4b22bfca 100644 --- a/src/core/operations/PrivateExtendedKeyToPublic.mjs +++ b/src/core/operations/PrivateExtendedKeyToPublic.mjs @@ -45,6 +45,9 @@ class PrivateExtendedKeyToPublic extends Operation { input = input.trim(); const result = deserializeExtendedKeyFunc(input); + if ("error" in result) { + throw new OperationError("Error in deserializing key. Error is: " + result.error); + } const versionString = getExtendedKeyString(result.version); const privateVersions = ["xprv", "yprv", "zprv", "Zprv", "Yprv", "Ltpv", "Mtpv", "ttpv", "tprv", "uprv", "vprv", "Uprv", "Vprv"]; if (privateVersions.indexOf(versionString) === -1) { diff --git a/tests/operations/tests/ChangeExtendedKeyVersion.mjs b/tests/operations/tests/ChangeExtendedKeyVersion.mjs index 3a9001de..761b8067 100644 --- a/tests/operations/tests/ChangeExtendedKeyVersion.mjs +++ b/tests/operations/tests/ChangeExtendedKeyVersion.mjs @@ -52,5 +52,16 @@ TestRegister.addTests([ "args": ["xprv"], }, ], + }, + { + name: "Change Extended Key Version (bad cheksums))", + input: "zprvAWgYBBk7JR8GkFBvcbtyjkviqhbXpwsiQwVVHmmePfBQH6MC2gna9L64DcoQZAS2tsGhZkTg9xTbAd7LdaACX5J9kyPM2qTC8kE9XXGNzuz", + expectedOutput: "Error in deserializing key. Error is: Invalid checksum.", + recipeConfig: [ + { + "op": "Change Extended Key Version", + "args": ["xprv"], + }, + ], } ]); diff --git a/tests/operations/tests/PrivateExtendedKeyToPublic.mjs b/tests/operations/tests/PrivateExtendedKeyToPublic.mjs index 671d5bce..203cb669 100644 --- a/tests/operations/tests/PrivateExtendedKeyToPublic.mjs +++ b/tests/operations/tests/PrivateExtendedKeyToPublic.mjs @@ -43,6 +43,17 @@ TestRegister.addTests([ } ] }, + { + name: "Private Extended Key To Public (invalid checksum)", + input: "zprvAdjAKuQajRu4ptst29FzkcB18fyZuHCKJhe51m38ejMcjW5P4frUffXMYfwLiTs4UrFD5m41So3VhAWGyrb4YV4gFRwYuLom8psLoW252Xe", + expectedOutput: "Error in deserializing key. Error is: Invalid checksum.", + recipeConfig: [ + { + "op": "Private Extended Key To Public", + "args": [] + } + ] + }, { name: "Private Extended Key To Public (blank)", input: "",