@bitgo/sdk-core 38.11.0 → 38.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +2 -0
  2. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  3. package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
  4. package/dist/src/bitgo/bitgoBase.d.ts +2 -2
  5. package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
  6. package/dist/src/bitgo/bitgoBase.js +1 -1
  7. package/dist/src/bitgo/keychain/iKeychains.d.ts +2 -2
  8. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  9. package/dist/src/bitgo/keychain/iKeychains.js +1 -1
  10. package/dist/src/bitgo/keychain/keychains.d.ts +2 -2
  11. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  12. package/dist/src/bitgo/keychain/keychains.js +15 -8
  13. package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +67 -0
  14. package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -0
  15. package/dist/src/bitgo/safe/derivableEd25519Pub.js +156 -0
  16. package/dist/src/bitgo/safe/index.d.ts +1 -0
  17. package/dist/src/bitgo/safe/index.d.ts.map +1 -1
  18. package/dist/src/bitgo/safe/index.js +2 -1
  19. package/dist/src/bitgo/staking/iStakingWallet.d.ts +1 -1
  20. package/dist/src/bitgo/staking/iStakingWallet.js +1 -1
  21. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
  22. package/dist/src/bitgo/utils/mpcUtils.js +16 -1
  23. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  24. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +2 -1
  25. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +11 -0
  26. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  27. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  28. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
  29. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +1 -5
  30. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +11 -0
  31. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
  32. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +33 -6
  33. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts +1 -1
  34. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -1
  35. package/dist/src/bitgo/utils/tss/recipientUtils.js +4 -3
  36. package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.d.ts.map +1 -1
  37. package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.js +1 -3
  38. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts +2 -5
  39. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts.map +1 -1
  40. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.js +3 -6
  41. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts +0 -1
  42. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts.map +1 -1
  43. package/dist/src/bitgo/wallet/BuildParams.d.ts +1 -0
  44. package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
  45. package/dist/src/bitgo/wallet/BuildParams.js +3 -1
  46. package/dist/src/bitgo/wallet/iWallet.d.ts +22 -0
  47. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  48. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  49. package/dist/src/bitgo/wallet/iWallets.d.ts +1 -1
  50. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  51. package/dist/src/bitgo/wallet/iWallets.js +4 -3
  52. package/dist/src/bitgo/wallet/wallet.d.ts +1 -1
  53. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  54. package/dist/src/bitgo/wallet/wallet.js +25 -7
  55. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  56. package/dist/src/bitgo/wallet/wallets.js +150 -87
  57. package/dist/src/index.d.ts +1 -1
  58. package/dist/src/index.d.ts.map +1 -1
  59. package/dist/src/index.js +3 -2
  60. package/dist/test/unit/bitgo/safe/derivableEd25519Pub.d.ts +2 -0
  61. package/dist/test/unit/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -0
  62. package/dist/test/unit/bitgo/safe/derivableEd25519Pub.js +122 -0
  63. package/dist/test/unit/bitgo/safe/fixtures/derivableEd25519Pub.json +145 -0
  64. package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.d.ts +2 -0
  65. package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.d.ts.map +1 -0
  66. package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.js +106 -0
  67. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +38 -1
  68. package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +14 -1
  69. package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.js +1 -2
  70. package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.js +1 -3
  71. package/dist/test/unit/bitgo/wallet/BuildParams.js +13 -1
  72. package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.js +4 -1
  73. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.js +33 -13
  74. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.js +8 -3
  75. package/dist/tsconfig.tsbuildinfo +1 -1
  76. package/package.json +6 -6
@@ -14,7 +14,7 @@ export { EcdsaMPCv2Utils };
14
14
  import { EddsaMPCv2Utils } from './bitgo/utils/tss/eddsa/eddsaMPCv2';
15
15
  export { EddsaMPCv2Utils };
16
16
  export type { EddsaSigningMaterial } from './bitgo/utils/tss/eddsa/eddsaMPCv2';
17
- export { getEddsaSigningMaterial, signEddsaMpcV2RecoveryTx, isEddsaMpcV1SigningMaterial, getEddsaMpcV2RecoveryKeySharesFromReducedKey, signRecoveryEddsaMPCv2, EddsaMPCv2RecoveryFunctions, } from './bitgo/utils/tss/eddsa/eddsaMPCv2';
17
+ export { getEddsaSigningMaterial, isEddsaSigningMaterial, signEddsaMpcV2RecoveryTx, isEddsaMpcV1SigningMaterial, getEddsaMpcV2RecoveryKeySharesFromReducedKey, signRecoveryEddsaMPCv2, EddsaMPCv2RecoveryFunctions, } from './bitgo/utils/tss/eddsa/eddsaMPCv2';
18
18
  export { verifyEddsaTssWalletAddress, verifyMPCWalletAddress } from './bitgo/utils/tss/addressVerification';
19
19
  export { GShare, SignShare, YShare } from './account-lib/mpc/tss/eddsa/types';
20
20
  export { TssEcdsaStep1ReturnMessage, TssEcdsaStep2ReturnMessage } from './bitgo/tss/types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EACV,yBAAyB,EACzB,kCAAkC,EAClC,8BAA8B,EAC9B,8BAA8B,EAC9B,gCAAgC,EAChC,oBAAoB,EACpB,6BAA6B,EAC7B,2BAA2B,EAC3B,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,kCAAkC,EAClC,8BAA8B,EAC9B,8BAA8B,EAC9B,gCAAgC,GACjC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,YAAY,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,EAC3B,4CAA4C,EAC5C,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC5G,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EACV,yBAAyB,EACzB,kCAAkC,EAClC,8BAA8B,EAC9B,8BAA8B,EAC9B,gCAAgC,EAChC,oBAAoB,EACpB,6BAA6B,EAC7B,2BAA2B,EAC3B,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,kCAAkC,EAClC,8BAA8B,EAC9B,8BAA8B,EAC9B,gCAAgC,GACjC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,YAAY,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,4CAA4C,EAC5C,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC5G,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,CAAC"}
package/dist/src/index.js CHANGED
@@ -36,7 +36,7 @@ var __importStar = (this && this.__importStar) || (function () {
36
36
  };
37
37
  })();
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.common = exports.verifyMPCWalletAddress = exports.verifyEddsaTssWalletAddress = exports.EddsaMPCv2RecoveryFunctions = exports.signRecoveryEddsaMPCv2 = exports.getEddsaMpcV2RecoveryKeySharesFromReducedKey = exports.isEddsaMpcV1SigningMaterial = exports.signEddsaMpcV2RecoveryTx = exports.getEddsaSigningMaterial = exports.EddsaMPCv2Utils = exports.EcdsaMPCv2Utils = exports.EcdsaUtils = exports.EddsaUtils = exports.coins = exports.accountLib = void 0;
39
+ exports.common = exports.verifyMPCWalletAddress = exports.verifyEddsaTssWalletAddress = exports.EddsaMPCv2RecoveryFunctions = exports.signRecoveryEddsaMPCv2 = exports.getEddsaMpcV2RecoveryKeySharesFromReducedKey = exports.isEddsaMpcV1SigningMaterial = exports.signEddsaMpcV2RecoveryTx = exports.isEddsaSigningMaterial = exports.getEddsaSigningMaterial = exports.EddsaMPCv2Utils = exports.EcdsaMPCv2Utils = exports.EcdsaUtils = exports.EddsaUtils = exports.coins = exports.accountLib = void 0;
40
40
  __exportStar(require("./account-lib"), exports);
41
41
  exports.accountLib = __importStar(require("./account-lib"));
42
42
  __exportStar(require("./api"), exports);
@@ -53,6 +53,7 @@ const eddsaMPCv2_1 = require("./bitgo/utils/tss/eddsa/eddsaMPCv2");
53
53
  Object.defineProperty(exports, "EddsaMPCv2Utils", { enumerable: true, get: function () { return eddsaMPCv2_1.EddsaMPCv2Utils; } });
54
54
  var eddsaMPCv2_2 = require("./bitgo/utils/tss/eddsa/eddsaMPCv2");
55
55
  Object.defineProperty(exports, "getEddsaSigningMaterial", { enumerable: true, get: function () { return eddsaMPCv2_2.getEddsaSigningMaterial; } });
56
+ Object.defineProperty(exports, "isEddsaSigningMaterial", { enumerable: true, get: function () { return eddsaMPCv2_2.isEddsaSigningMaterial; } });
56
57
  Object.defineProperty(exports, "signEddsaMpcV2RecoveryTx", { enumerable: true, get: function () { return eddsaMPCv2_2.signEddsaMpcV2RecoveryTx; } });
57
58
  Object.defineProperty(exports, "isEddsaMpcV1SigningMaterial", { enumerable: true, get: function () { return eddsaMPCv2_2.isEddsaMpcV1SigningMaterial; } });
58
59
  Object.defineProperty(exports, "getEddsaMpcV2RecoveryKeySharesFromReducedKey", { enumerable: true, get: function () { return eddsaMPCv2_2.getEddsaMpcV2RecoveryKeySharesFromReducedKey; } });
@@ -65,4 +66,4 @@ const common = __importStar(require("./common"));
65
66
  exports.common = common;
66
67
  __exportStar(require("./units"), exports);
67
68
  __exportStar(require("./lightning"), exports);
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQThCO0FBQzlCLDREQUE0QztBQUM1Qyx3Q0FBc0I7QUFDdEIsMENBQXdCO0FBQ3hCLGlEQUErQjtBQUMvQixpREFBaUM7QUFDakMseURBQTJEO0FBQ2xELDJGQURBLGtCQUFVLE9BQ0E7QUFvQm5CLHlEQUEyRDtBQUNsRCwyRkFEQSxrQkFBVSxPQUNBO0FBQ25CLG1FQUFxRTtBQUM1RCxnR0FEQSw0QkFBZSxPQUNBO0FBQ3hCLG1FQUFxRTtBQUM1RCxnR0FEQSw0QkFBZSxPQUNBO0FBRXhCLGlFQU80QztBQU4xQyxxSEFBQSx1QkFBdUIsT0FBQTtBQUN2QixzSEFBQSx3QkFBd0IsT0FBQTtBQUN4Qix5SEFBQSwyQkFBMkIsT0FBQTtBQUMzQiwwSUFBQSw0Q0FBNEMsT0FBQTtBQUM1QyxvSEFBQSxzQkFBc0IsT0FBQTtBQUN0Qix5SEFBQSwyQkFBMkIsT0FBQTtBQUU3Qiw2RUFBNEc7QUFBbkcsa0lBQUEsMkJBQTJCLE9BQUE7QUFBRSw2SEFBQSxzQkFBc0IsT0FBQTtBQUk1RCxpREFBbUM7QUFHMUIsd0JBQU07QUFGZiwwQ0FBd0I7QUFDeEIsOENBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hY2NvdW50LWxpYic7XG5leHBvcnQgKiBhcyBhY2NvdW50TGliIGZyb20gJy4vYWNjb3VudC1saWInO1xuZXhwb3J0ICogZnJvbSAnLi9hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9iaXRnbyc7XG5leHBvcnQgKiBmcm9tICcuL2JpdGdvanNFcnJvcic7XG5leHBvcnQgKiBhcyBjb2lucyBmcm9tICcuL2NvaW5zJztcbmltcG9ydCB7IEVkZHNhVXRpbHMgfSBmcm9tICcuL2JpdGdvL3V0aWxzL3Rzcy9lZGRzYS9lZGRzYSc7XG5leHBvcnQgeyBFZGRzYVV0aWxzIH07XG5leHBvcnQgdHlwZSB7XG4gIEVjZHNhTVBDdjJLZXlHZW5DYWxsYmFja3MsXG4gIEVjZHNhTVBDdjJLZXlHZW5Jbml0aWFsaXplQ2FsbGJhY2ssXG4gIEVjZHNhTVBDdjJLZXlHZW5Sb3VuZDJDYWxsYmFjayxcbiAgRWNkc2FNUEN2MktleUdlblJvdW5kM0NhbGxiYWNrLFxuICBFY2RzYU1QQ3YyS2V5R2VuRmluYWxpemVDYWxsYmFjayxcbiAgRWRkc2FLZXlHZW5DYWxsYmFja3MsXG4gIEVkZHNhS2V5R2VuSW5pdGlhbGl6ZUNhbGxiYWNrLFxuICBFZGRzYUtleUdlbkluaXRpYWxpemVSZXN1bHQsXG4gIEVkZHNhS2V5R2VuRmluYWxpemVDYWxsYmFjayxcbiAgRWRkc2FLZXlHZW5GaW5hbGl6ZVJlc3VsdCxcbiAgRXh0ZXJuYWxTaWduZXJLZXlTaGFyZSxcbiAgRXh0ZXJuYWxTaWduZXJNcGNTdGF0ZSxcbiAgRWRkc2FNUEN2MktleUdlbkNhbGxiYWNrcyxcbiAgRWRkc2FNUEN2MktleUdlbkluaXRpYWxpemVDYWxsYmFjayxcbiAgRWRkc2FNUEN2MktleUdlblJvdW5kMUNhbGxiYWNrLFxuICBFZGRzYU1QQ3YyS2V5R2VuUm91bmQyQ2FsbGJhY2ssXG4gIEVkZHNhTVBDdjJLZXlHZW5GaW5hbGl6ZUNhbGxiYWNrLFxufSBmcm9tICcuL2JpdGdvL3dhbGxldC9pV2FsbGV0cyc7XG5pbXBvcnQgeyBFY2RzYVV0aWxzIH0gZnJvbSAnLi9iaXRnby91dGlscy90c3MvZWNkc2EvZWNkc2EnO1xuZXhwb3J0IHsgRWNkc2FVdGlscyB9O1xuaW1wb3J0IHsgRWNkc2FNUEN2MlV0aWxzIH0gZnJvbSAnLi9iaXRnby91dGlscy90c3MvZWNkc2EvZWNkc2FNUEN2Mic7XG5leHBvcnQgeyBFY2RzYU1QQ3YyVXRpbHMgfTtcbmltcG9ydCB7IEVkZHNhTVBDdjJVdGlscyB9IGZyb20gJy4vYml0Z28vdXRpbHMvdHNzL2VkZHNhL2VkZHNhTVBDdjInO1xuZXhwb3J0IHsgRWRkc2FNUEN2MlV0aWxzIH07XG5leHBvcnQgdHlwZSB7IEVkZHNhU2lnbmluZ01hdGVyaWFsIH0gZnJvbSAnLi9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FNUEN2Mic7XG5leHBvcnQge1xuICBnZXRFZGRzYVNpZ25pbmdNYXRlcmlhbCxcbiAgc2lnbkVkZHNhTXBjVjJSZWNvdmVyeVR4LFxuICBpc0VkZHNhTXBjVjFTaWduaW5nTWF0ZXJpYWwsXG4gIGdldEVkZHNhTXBjVjJSZWNvdmVyeUtleVNoYXJlc0Zyb21SZWR1Y2VkS2V5LFxuICBzaWduUmVjb3ZlcnlFZGRzYU1QQ3YyLFxuICBFZGRzYU1QQ3YyUmVjb3ZlcnlGdW5jdGlvbnMsXG59IGZyb20gJy4vYml0Z28vdXRpbHMvdHNzL2VkZHNhL2VkZHNhTVBDdjInO1xuZXhwb3J0IHsgdmVyaWZ5RWRkc2FUc3NXYWxsZXRBZGRyZXNzLCB2ZXJpZnlNUENXYWxsZXRBZGRyZXNzIH0gZnJvbSAnLi9iaXRnby91dGlscy90c3MvYWRkcmVzc1ZlcmlmaWNhdGlvbic7XG5leHBvcnQgeyBHU2hhcmUsIFNpZ25TaGFyZSwgWVNoYXJlIH0gZnJvbSAnLi9hY2NvdW50LWxpYi9tcGMvdHNzL2VkZHNhL3R5cGVzJztcbmV4cG9ydCB7IFRzc0VjZHNhU3RlcDFSZXR1cm5NZXNzYWdlLCBUc3NFY2RzYVN0ZXAyUmV0dXJuTWVzc2FnZSB9IGZyb20gJy4vYml0Z28vdHNzL3R5cGVzJztcbmV4cG9ydCB7IFNTaGFyZSB9IGZyb20gJy4vYml0Z28vdHNzL2VjZHNhL3R5cGVzJztcbmltcG9ydCAqIGFzIGNvbW1vbiBmcm9tICcuL2NvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL3VuaXRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGlnaHRuaW5nJztcbmV4cG9ydCB7IGNvbW1vbiB9O1xuIl19
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQThCO0FBQzlCLDREQUE0QztBQUM1Qyx3Q0FBc0I7QUFDdEIsMENBQXdCO0FBQ3hCLGlEQUErQjtBQUMvQixpREFBaUM7QUFDakMseURBQTJEO0FBQ2xELDJGQURBLGtCQUFVLE9BQ0E7QUFvQm5CLHlEQUEyRDtBQUNsRCwyRkFEQSxrQkFBVSxPQUNBO0FBQ25CLG1FQUFxRTtBQUM1RCxnR0FEQSw0QkFBZSxPQUNBO0FBQ3hCLG1FQUFxRTtBQUM1RCxnR0FEQSw0QkFBZSxPQUNBO0FBRXhCLGlFQVE0QztBQVAxQyxxSEFBQSx1QkFBdUIsT0FBQTtBQUN2QixvSEFBQSxzQkFBc0IsT0FBQTtBQUN0QixzSEFBQSx3QkFBd0IsT0FBQTtBQUN4Qix5SEFBQSwyQkFBMkIsT0FBQTtBQUMzQiwwSUFBQSw0Q0FBNEMsT0FBQTtBQUM1QyxvSEFBQSxzQkFBc0IsT0FBQTtBQUN0Qix5SEFBQSwyQkFBMkIsT0FBQTtBQUU3Qiw2RUFBNEc7QUFBbkcsa0lBQUEsMkJBQTJCLE9BQUE7QUFBRSw2SEFBQSxzQkFBc0IsT0FBQTtBQUk1RCxpREFBbUM7QUFHMUIsd0JBQU07QUFGZiwwQ0FBd0I7QUFDeEIsOENBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hY2NvdW50LWxpYic7XG5leHBvcnQgKiBhcyBhY2NvdW50TGliIGZyb20gJy4vYWNjb3VudC1saWInO1xuZXhwb3J0ICogZnJvbSAnLi9hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9iaXRnbyc7XG5leHBvcnQgKiBmcm9tICcuL2JpdGdvanNFcnJvcic7XG5leHBvcnQgKiBhcyBjb2lucyBmcm9tICcuL2NvaW5zJztcbmltcG9ydCB7IEVkZHNhVXRpbHMgfSBmcm9tICcuL2JpdGdvL3V0aWxzL3Rzcy9lZGRzYS9lZGRzYSc7XG5leHBvcnQgeyBFZGRzYVV0aWxzIH07XG5leHBvcnQgdHlwZSB7XG4gIEVjZHNhTVBDdjJLZXlHZW5DYWxsYmFja3MsXG4gIEVjZHNhTVBDdjJLZXlHZW5Jbml0aWFsaXplQ2FsbGJhY2ssXG4gIEVjZHNhTVBDdjJLZXlHZW5Sb3VuZDJDYWxsYmFjayxcbiAgRWNkc2FNUEN2MktleUdlblJvdW5kM0NhbGxiYWNrLFxuICBFY2RzYU1QQ3YyS2V5R2VuRmluYWxpemVDYWxsYmFjayxcbiAgRWRkc2FLZXlHZW5DYWxsYmFja3MsXG4gIEVkZHNhS2V5R2VuSW5pdGlhbGl6ZUNhbGxiYWNrLFxuICBFZGRzYUtleUdlbkluaXRpYWxpemVSZXN1bHQsXG4gIEVkZHNhS2V5R2VuRmluYWxpemVDYWxsYmFjayxcbiAgRWRkc2FLZXlHZW5GaW5hbGl6ZVJlc3VsdCxcbiAgRXh0ZXJuYWxTaWduZXJLZXlTaGFyZSxcbiAgRXh0ZXJuYWxTaWduZXJNcGNTdGF0ZSxcbiAgRWRkc2FNUEN2MktleUdlbkNhbGxiYWNrcyxcbiAgRWRkc2FNUEN2MktleUdlbkluaXRpYWxpemVDYWxsYmFjayxcbiAgRWRkc2FNUEN2MktleUdlblJvdW5kMUNhbGxiYWNrLFxuICBFZGRzYU1QQ3YyS2V5R2VuUm91bmQyQ2FsbGJhY2ssXG4gIEVkZHNhTVBDdjJLZXlHZW5GaW5hbGl6ZUNhbGxiYWNrLFxufSBmcm9tICcuL2JpdGdvL3dhbGxldC9pV2FsbGV0cyc7XG5pbXBvcnQgeyBFY2RzYVV0aWxzIH0gZnJvbSAnLi9iaXRnby91dGlscy90c3MvZWNkc2EvZWNkc2EnO1xuZXhwb3J0IHsgRWNkc2FVdGlscyB9O1xuaW1wb3J0IHsgRWNkc2FNUEN2MlV0aWxzIH0gZnJvbSAnLi9iaXRnby91dGlscy90c3MvZWNkc2EvZWNkc2FNUEN2Mic7XG5leHBvcnQgeyBFY2RzYU1QQ3YyVXRpbHMgfTtcbmltcG9ydCB7IEVkZHNhTVBDdjJVdGlscyB9IGZyb20gJy4vYml0Z28vdXRpbHMvdHNzL2VkZHNhL2VkZHNhTVBDdjInO1xuZXhwb3J0IHsgRWRkc2FNUEN2MlV0aWxzIH07XG5leHBvcnQgdHlwZSB7IEVkZHNhU2lnbmluZ01hdGVyaWFsIH0gZnJvbSAnLi9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FNUEN2Mic7XG5leHBvcnQge1xuICBnZXRFZGRzYVNpZ25pbmdNYXRlcmlhbCxcbiAgaXNFZGRzYVNpZ25pbmdNYXRlcmlhbCxcbiAgc2lnbkVkZHNhTXBjVjJSZWNvdmVyeVR4LFxuICBpc0VkZHNhTXBjVjFTaWduaW5nTWF0ZXJpYWwsXG4gIGdldEVkZHNhTXBjVjJSZWNvdmVyeUtleVNoYXJlc0Zyb21SZWR1Y2VkS2V5LFxuICBzaWduUmVjb3ZlcnlFZGRzYU1QQ3YyLFxuICBFZGRzYU1QQ3YyUmVjb3ZlcnlGdW5jdGlvbnMsXG59IGZyb20gJy4vYml0Z28vdXRpbHMvdHNzL2VkZHNhL2VkZHNhTVBDdjInO1xuZXhwb3J0IHsgdmVyaWZ5RWRkc2FUc3NXYWxsZXRBZGRyZXNzLCB2ZXJpZnlNUENXYWxsZXRBZGRyZXNzIH0gZnJvbSAnLi9iaXRnby91dGlscy90c3MvYWRkcmVzc1ZlcmlmaWNhdGlvbic7XG5leHBvcnQgeyBHU2hhcmUsIFNpZ25TaGFyZSwgWVNoYXJlIH0gZnJvbSAnLi9hY2NvdW50LWxpYi9tcGMvdHNzL2VkZHNhL3R5cGVzJztcbmV4cG9ydCB7IFRzc0VjZHNhU3RlcDFSZXR1cm5NZXNzYWdlLCBUc3NFY2RzYVN0ZXAyUmV0dXJuTWVzc2FnZSB9IGZyb20gJy4vYml0Z28vdHNzL3R5cGVzJztcbmV4cG9ydCB7IFNTaGFyZSB9IGZyb20gJy4vYml0Z28vdHNzL2VjZHNhL3R5cGVzJztcbmltcG9ydCAqIGFzIGNvbW1vbiBmcm9tICcuL2NvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL3VuaXRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGlnaHRuaW5nJztcbmV4cG9ydCB7IGNvbW1vbiB9O1xuIl19
@@ -0,0 +1,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=derivableEd25519Pub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derivableEd25519Pub.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/safe/derivableEd25519Pub.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ require("should");
37
+ const src_1 = require("../../../../src");
38
+ // Cross-repo fixture: byte-identical to
39
+ // packages/wallet-platform/test/unit/base/safes/fixtures/derivableEd25519Pub.json.
40
+ // Four independent implementations of this split will otherwise drift, and the failure mode is an
41
+ // unrecoverable wallet.
42
+ const fixture = __importStar(require("./fixtures/derivableEd25519Pub.json"));
43
+ describe('derivableEd25519Pub', function () {
44
+ describe('format constants', function () {
45
+ it('matches the constants pinned in the shared fixture', function () {
46
+ src_1.DERIVABLE_ED25519_PUB_SPLIT_OFFSET.should.equal(fixture.splitOffset);
47
+ src_1.DERIVABLE_ED25519_CHAIN_CODE_LENGTH.should.equal(fixture.chainCodeLength);
48
+ src_1.DERIVABLE_ED25519_PUB_LENGTH.should.equal(fixture.compositeLength);
49
+ });
50
+ });
51
+ describe('encodeDerivableEd25519Pub', function () {
52
+ for (const v of fixture.valid) {
53
+ it(`composes ${v.name}`, function () {
54
+ (0, src_1.encodeDerivableEd25519Pub)(v.pub, v.chainCode).should.equal(v.composite);
55
+ });
56
+ }
57
+ for (const v of fixture.invalidEncodeInputs) {
58
+ it(`rejects ${v.name}`, function () {
59
+ (() => (0, src_1.encodeDerivableEd25519Pub)(v.pub, v.chainCode)).should.throw(/Invalid derivable ed25519 pub/);
60
+ });
61
+ }
62
+ });
63
+ describe('decodeDerivableEd25519Pub', function () {
64
+ for (const v of fixture.valid) {
65
+ it(`splits ${v.name}`, function () {
66
+ (0, src_1.decodeDerivableEd25519Pub)(v.composite).should.eql({ pub: v.pub, chainCode: v.chainCode });
67
+ });
68
+ }
69
+ for (const v of fixture.invalidComposite) {
70
+ it(`rejects ${v.name}`, function () {
71
+ (() => (0, src_1.decodeDerivableEd25519Pub)(v.composite)).should.throw(/Invalid derivable ed25519 pub/);
72
+ (0, src_1.isDerivableEd25519Pub)(v.composite).should.equal(false);
73
+ });
74
+ }
75
+ });
76
+ describe('round trip', function () {
77
+ for (const v of fixture.valid) {
78
+ it(`round-trips ${v.name}`, function () {
79
+ const composite = (0, src_1.encodeDerivableEd25519Pub)(v.pub, v.chainCode);
80
+ const decoded = (0, src_1.decodeDerivableEd25519Pub)(composite);
81
+ decoded.should.eql({ pub: v.pub, chainCode: v.chainCode });
82
+ (0, src_1.encodeDerivableEd25519Pub)(decoded.pub, decoded.chainCode).should.equal(composite);
83
+ (0, src_1.isDerivableEd25519Pub)(composite).should.equal(true);
84
+ });
85
+ }
86
+ });
87
+ describe('isValidEd25519ChainCode', function () {
88
+ const { chainCode } = fixture.valid[3];
89
+ it('accepts 64 lowercase hex characters', function () {
90
+ (0, src_1.isValidEd25519ChainCode)(chainCode).should.equal(true);
91
+ });
92
+ it('rejects uppercase hex', function () {
93
+ (0, src_1.isValidEd25519ChainCode)(chainCode.toUpperCase()).should.equal(false);
94
+ });
95
+ it('rejects a chain code of the wrong length', function () {
96
+ (0, src_1.isValidEd25519ChainCode)(chainCode.slice(0, 63)).should.equal(false);
97
+ (0, src_1.isValidEd25519ChainCode)(chainCode + '0').should.equal(false);
98
+ });
99
+ });
100
+ describe('isValidEd25519StrKeyPublicKey', function () {
101
+ for (const v of fixture.valid) {
102
+ it(`accepts the pub half of ${v.name}`, function () {
103
+ (0, src_1.isValidEd25519StrKeyPublicKey)(v.pub).should.equal(true);
104
+ });
105
+ }
106
+ it('rejects a bad checksum', function () {
107
+ // last character of a known-good pub flipped
108
+ (0, src_1.isValidEd25519StrKeyPublicKey)('GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYA').should.equal(false);
109
+ });
110
+ it('rejects a secret seed', function () {
111
+ (0, src_1.isValidEd25519StrKeyPublicKey)('SA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH').should.equal(false);
112
+ });
113
+ it('rejects a non-base32 character', function () {
114
+ (0, src_1.isValidEd25519StrKeyPublicKey)('GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKY1').should.equal(false);
115
+ });
116
+ it('rejects the empty string and a composite pub', function () {
117
+ (0, src_1.isValidEd25519StrKeyPublicKey)('').should.equal(false);
118
+ (0, src_1.isValidEd25519StrKeyPublicKey)(fixture.valid[3].composite).should.equal(false);
119
+ });
120
+ });
121
+ });
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZhYmxlRWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIseUNBU3lCO0FBRXpCLHdDQUF3QztBQUN4QyxtRkFBbUY7QUFDbkYsa0dBQWtHO0FBQ2xHLHdCQUF3QjtBQUN4Qiw2RUFBK0Q7QUFFL0QsUUFBUSxDQUFDLHFCQUFxQixFQUFFO0lBQzlCLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtRQUMzQixFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsd0NBQWtDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckUseUNBQW1DLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUUsa0NBQTRCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywyQkFBMkIsRUFBRTtRQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QixFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3ZCLElBQUEsK0JBQXlCLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM1QyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3RCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwrQkFBeUIsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUN0RyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywyQkFBMkIsRUFBRTtRQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QixFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUEsK0JBQXlCLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDNUYsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6QyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3RCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwrQkFBeUIsRUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7Z0JBQzdGLElBQUEsMkJBQXFCLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxFQUFFO1FBQ3JCLEtBQUssTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlCLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDMUIsTUFBTSxTQUFTLEdBQUcsSUFBQSwrQkFBeUIsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxPQUFPLEdBQUcsSUFBQSwrQkFBeUIsRUFBQyxTQUFTLENBQUMsQ0FBQztnQkFDckQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQzNELElBQUEsK0JBQXlCLEVBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbEYsSUFBQSwyQkFBcUIsRUFBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHlCQUF5QixFQUFFO1FBQ2xDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZDLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRTtZQUN4QyxJQUFBLDZCQUF1QixFQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdUJBQXVCLEVBQUU7WUFDMUIsSUFBQSw2QkFBdUIsRUFBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBDQUEwQyxFQUFFO1lBQzdDLElBQUEsNkJBQXVCLEVBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BFLElBQUEsNkJBQXVCLEVBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywrQkFBK0IsRUFBRTtRQUN4QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QixFQUFFLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDdEMsSUFBQSxtQ0FBNkIsRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxFQUFFLENBQUMsd0JBQXdCLEVBQUU7WUFDM0IsNkNBQTZDO1lBQzdDLElBQUEsbUNBQTZCLEVBQUMsMERBQTBELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hILENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVCQUF1QixFQUFFO1lBQzFCLElBQUEsbUNBQTZCLEVBQUMsMERBQTBELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hILENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdDQUFnQyxFQUFFO1lBQ25DLElBQUEsbUNBQTZCLEVBQUMsMERBQTBELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hILENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFO1lBQ2pELElBQUEsbUNBQTZCLEVBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxJQUFBLG1DQUE2QixFQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQge1xuICBERVJJVkFCTEVfRUQyNTUxOV9DSEFJTl9DT0RFX0xFTkdUSCxcbiAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSCxcbiAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX1NQTElUX09GRlNFVCxcbiAgZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgaXNEZXJpdmFibGVFZDI1NTE5UHViLFxuICBpc1ZhbGlkRWQyNTUxOUNoYWluQ29kZSxcbiAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5cbi8vIENyb3NzLXJlcG8gZml4dHVyZTogYnl0ZS1pZGVudGljYWwgdG9cbi8vIHBhY2thZ2VzL3dhbGxldC1wbGF0Zm9ybS90ZXN0L3VuaXQvYmFzZS9zYWZlcy9maXh0dXJlcy9kZXJpdmFibGVFZDI1NTE5UHViLmpzb24uXG4vLyBGb3VyIGluZGVwZW5kZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIHNwbGl0IHdpbGwgb3RoZXJ3aXNlIGRyaWZ0LCBhbmQgdGhlIGZhaWx1cmUgbW9kZSBpcyBhblxuLy8gdW5yZWNvdmVyYWJsZSB3YWxsZXQuXG5pbXBvcnQgKiBhcyBmaXh0dXJlIGZyb20gJy4vZml4dHVyZXMvZGVyaXZhYmxlRWQyNTUxOVB1Yi5qc29uJztcblxuZGVzY3JpYmUoJ2Rlcml2YWJsZUVkMjU1MTlQdWInLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdmb3JtYXQgY29uc3RhbnRzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdtYXRjaGVzIHRoZSBjb25zdGFudHMgcGlubmVkIGluIHRoZSBzaGFyZWQgZml4dHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIERFUklWQUJMRV9FRDI1NTE5X1BVQl9TUExJVF9PRkZTRVQuc2hvdWxkLmVxdWFsKGZpeHR1cmUuc3BsaXRPZmZzZXQpO1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9MRU5HVEguc2hvdWxkLmVxdWFsKGZpeHR1cmUuY2hhaW5Db2RlTGVuZ3RoKTtcbiAgICAgIERFUklWQUJMRV9FRDI1NTE5X1BVQl9MRU5HVEguc2hvdWxkLmVxdWFsKGZpeHR1cmUuY29tcG9zaXRlTGVuZ3RoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VuY29kZURlcml2YWJsZUVkMjU1MTlQdWInLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yIChjb25zdCB2IG9mIGZpeHR1cmUudmFsaWQpIHtcbiAgICAgIGl0KGBjb21wb3NlcyAke3YubmFtZX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIodi5wdWIsIHYuY2hhaW5Db2RlKS5zaG91bGQuZXF1YWwodi5jb21wb3NpdGUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2IG9mIGZpeHR1cmUuaW52YWxpZEVuY29kZUlucHV0cykge1xuICAgICAgaXQoYHJlamVjdHMgJHt2Lm5hbWV9YCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1Yih2LnB1Yiwgdi5jaGFpbkNvZGUpKS5zaG91bGQudGhyb3coL0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViLyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViJywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAoY29uc3QgdiBvZiBmaXh0dXJlLnZhbGlkKSB7XG4gICAgICBpdChgc3BsaXRzICR7di5uYW1lfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1Yih2LmNvbXBvc2l0ZSkuc2hvdWxkLmVxbCh7IHB1Yjogdi5wdWIsIGNoYWluQ29kZTogdi5jaGFpbkNvZGUgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHYgb2YgZml4dHVyZS5pbnZhbGlkQ29tcG9zaXRlKSB7XG4gICAgICBpdChgcmVqZWN0cyAke3YubmFtZX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHYuY29tcG9zaXRlKSkuc2hvdWxkLnRocm93KC9JbnZhbGlkIGRlcml2YWJsZSBlZDI1NTE5IHB1Yi8pO1xuICAgICAgICBpc0Rlcml2YWJsZUVkMjU1MTlQdWIodi5jb21wb3NpdGUpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyb3VuZCB0cmlwJywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAoY29uc3QgdiBvZiBmaXh0dXJlLnZhbGlkKSB7XG4gICAgICBpdChgcm91bmQtdHJpcHMgJHt2Lm5hbWV9YCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBjb21wb3NpdGUgPSBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHYucHViLCB2LmNoYWluQ29kZSk7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKGNvbXBvc2l0ZSk7XG4gICAgICAgIGRlY29kZWQuc2hvdWxkLmVxbCh7IHB1Yjogdi5wdWIsIGNoYWluQ29kZTogdi5jaGFpbkNvZGUgfSk7XG4gICAgICAgIGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIoZGVjb2RlZC5wdWIsIGRlY29kZWQuY2hhaW5Db2RlKS5zaG91bGQuZXF1YWwoY29tcG9zaXRlKTtcbiAgICAgICAgaXNEZXJpdmFibGVFZDI1NTE5UHViKGNvbXBvc2l0ZSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZEVkMjU1MTlDaGFpbkNvZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgeyBjaGFpbkNvZGUgfSA9IGZpeHR1cmUudmFsaWRbM107XG5cbiAgICBpdCgnYWNjZXB0cyA2NCBsb3dlcmNhc2UgaGV4IGNoYXJhY3RlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOUNoYWluQ29kZShjaGFpbkNvZGUpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIHVwcGVyY2FzZSBoZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOUNoYWluQ29kZShjaGFpbkNvZGUudG9VcHBlckNhc2UoKSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgY2hhaW4gY29kZSBvZiB0aGUgd3JvbmcgbGVuZ3RoJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlDaGFpbkNvZGUoY2hhaW5Db2RlLnNsaWNlKDAsIDYzKSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGlzVmFsaWRFZDI1NTE5Q2hhaW5Db2RlKGNoYWluQ29kZSArICcwJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5JywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAoY29uc3QgdiBvZiBmaXh0dXJlLnZhbGlkKSB7XG4gICAgICBpdChgYWNjZXB0cyB0aGUgcHViIGhhbGYgb2YgJHt2Lm5hbWV9YCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSh2LnB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXQoJ3JlamVjdHMgYSBiYWQgY2hlY2tzdW0nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBsYXN0IGNoYXJhY3RlciBvZiBhIGtub3duLWdvb2QgcHViIGZsaXBwZWRcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KCdHQTVXVUo1NFoyM0tJTExDVU9VTkFLVFBCVlpXS01RVk80TzZFUTVHSExBRVJJTUxMSE5DU0tZQScpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHNlY3JldCBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJ1NBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgbm9uLWJhc2UzMiBjaGFyYWN0ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSgnR0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWTEnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgdGhlIGVtcHR5IHN0cmluZyBhbmQgYSBjb21wb3NpdGUgcHViJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJycpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleShmaXh0dXJlLnZhbGlkWzNdLmNvbXBvc2l0ZSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,145 @@
1
+ {
2
+ "$comment": "Shared cross-repo fixture for the derivable slot-4 (ed25519Multisig) root pub format: composite = <56-char Stellar StrKey ed25519 public key> || <64 lowercase hex chain code>. Plain JSON with no repo-specific imports so wallet-platform, BitGoJS sdk-core, BitGoJS modules/key-card and WRW can all consume this identical file. Append new vectors rather than editing existing ones in place.",
3
+ "splitOffset": 56,
4
+ "chainCodeLength": 64,
5
+ "compositeLength": 120,
6
+ "valid": [
7
+ {
8
+ "name": "all-zero pub with all-zero chain code",
9
+ "pub": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF",
10
+ "chainCode": "0000000000000000000000000000000000000000000000000000000000000000",
11
+ "composite": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF0000000000000000000000000000000000000000000000000000000000000000"
12
+ },
13
+ {
14
+ "name": "all-ones pub with all-f chain code",
15
+ "pub": "GD7777777777777777777777777777777777777777777777777773DB",
16
+ "chainCode": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
17
+ "composite": "GD7777777777777777777777777777777777777777777777777773DBffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
18
+ },
19
+ {
20
+ "name": "low-order pub with a leading-zero chain code",
21
+ "pub": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6PV",
22
+ "chainCode": "0000000000000000000000000000000000000000000000000000000000000001",
23
+ "composite": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6PV0000000000000000000000000000000000000000000000000000000000000001"
24
+ },
25
+ {
26
+ "name": "typical pub with a mixed alphanumeric chain code",
27
+ "pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH",
28
+ "chainCode": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
29
+ "composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046"
30
+ },
31
+ {
32
+ "name": "typical pub with an all-digit chain code",
33
+ "pub": "GDD7GGYPJUX3BNVA6OPIXUFXYOY2FVHF6YDRQKJ2JNOG27UPSAJDJCMV",
34
+ "chainCode": "1234567890123456789012345678901234567890123456789012345678901234",
35
+ "composite": "GDD7GGYPJUX3BNVA6OPIXUFXYOY2FVHF6YDRQKJ2JNOG27UPSAJDJCMV1234567890123456789012345678901234567890123456789012345678901234"
36
+ }
37
+ ],
38
+ "invalidComposite": [
39
+ {
40
+ "name": "empty string",
41
+ "composite": "",
42
+ "reason": "length"
43
+ },
44
+ {
45
+ "name": "bare 56-char pub with no chain code",
46
+ "composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH",
47
+ "reason": "length"
48
+ },
49
+ {
50
+ "name": "bare chain code with no pub",
51
+ "composite": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
52
+ "reason": "length"
53
+ },
54
+ {
55
+ "name": "uppercase hex chain code",
56
+ "composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH9A0F3C7D1E5B28460AF3D92C6E81B7053FA4C2E98D17B60543A2FC8E19D7B046",
57
+ "reason": "chainCode"
58
+ },
59
+ {
60
+ "name": "mixed-case hex chain code",
61
+ "composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH9A0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
62
+ "reason": "chainCode"
63
+ },
64
+ {
65
+ "name": "non-hex character in chain code",
66
+ "composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYHga0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
67
+ "reason": "chainCode"
68
+ },
69
+ {
70
+ "name": "chain code one character short",
71
+ "composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b04",
72
+ "reason": "length"
73
+ },
74
+ {
75
+ "name": "chain code one character long",
76
+ "composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b0460",
77
+ "reason": "length"
78
+ },
79
+ {
80
+ "name": "pub half is not a valid StrKey (bad checksum)",
81
+ "composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYA9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
82
+ "reason": "pub"
83
+ },
84
+ {
85
+ "name": "pub half is a secret seed (S...) not a public key",
86
+ "composite": "SA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
87
+ "reason": "pub"
88
+ },
89
+ {
90
+ "name": "halves swapped",
91
+ "composite": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8eGA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH19d7b046",
92
+ "reason": "pub"
93
+ }
94
+ ],
95
+ "invalidEncodeInputs": [
96
+ {
97
+ "name": "empty pub",
98
+ "pub": "",
99
+ "chainCode": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
100
+ "reason": "pub"
101
+ },
102
+ {
103
+ "name": "pub with bad StrKey checksum",
104
+ "pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYA",
105
+ "chainCode": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
106
+ "reason": "pub"
107
+ },
108
+ {
109
+ "name": "composite passed as the pub half",
110
+ "pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
111
+ "chainCode": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
112
+ "reason": "pub"
113
+ },
114
+ {
115
+ "name": "empty chain code",
116
+ "pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH",
117
+ "chainCode": "",
118
+ "reason": "chainCode"
119
+ },
120
+ {
121
+ "name": "uppercase hex chain code",
122
+ "pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH",
123
+ "chainCode": "9A0F3C7D1E5B28460AF3D92C6E81B7053FA4C2E98D17B60543A2FC8E19D7B046",
124
+ "reason": "chainCode"
125
+ },
126
+ {
127
+ "name": "chain code with 0x prefix",
128
+ "pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH",
129
+ "chainCode": "0x0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
130
+ "reason": "chainCode"
131
+ },
132
+ {
133
+ "name": "chain code too short",
134
+ "pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH",
135
+ "chainCode": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b04",
136
+ "reason": "chainCode"
137
+ },
138
+ {
139
+ "name": "chain code too long",
140
+ "pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH",
141
+ "chainCode": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b0460",
142
+ "reason": "chainCode"
143
+ }
144
+ ]
145
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mpcUtils.wrapApprove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mpcUtils.wrapApprove.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/utils/mpcUtils.wrapApprove.ts"],"names":[],"mappings":""}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const assert_1 = __importDefault(require("assert"));
40
+ const sinon = __importStar(require("sinon"));
41
+ const mpcUtils_1 = require("../../../../src/bitgo/utils/mpcUtils");
42
+ const src_1 = require("../../../../src");
43
+ class TestMpcUtils extends mpcUtils_1.MpcUtils {
44
+ createKeychains() {
45
+ return Promise.reject(new Error('unused'));
46
+ }
47
+ }
48
+ describe('populateIntent wrapApprove / wrap', function () {
49
+ const reqId = new src_1.RequestTracer();
50
+ let mpcUtils;
51
+ let coin;
52
+ beforeEach(function () {
53
+ const mockBitgo = { getEnv: sinon.stub().returns('test') };
54
+ coin = {
55
+ getChain: () => 'hteth',
56
+ getFamily: () => 'eth',
57
+ isEVM: () => true,
58
+ supportsTss: () => true,
59
+ };
60
+ mpcUtils = new TestMpcUtils(mockBitgo, coin);
61
+ });
62
+ afterEach(function () {
63
+ sinon.restore();
64
+ });
65
+ it('flattens wrapParams onto wrapApprove intent', function () {
66
+ const wrapParams = { tokenName: 'hteth:cusdt', amount: '1000000' };
67
+ const feeOptions = { maxFeePerGas: 3000000000, maxPriorityFeePerGas: 2000000000 };
68
+ const intent = mpcUtils.populateIntent(coin, {
69
+ reqId,
70
+ intentType: 'wrapApprove',
71
+ wrapParams,
72
+ feeOptions,
73
+ });
74
+ assert_1.default.strictEqual(intent.intentType, 'wrapApprove');
75
+ assert_1.default.strictEqual(intent.tokenName, wrapParams.tokenName);
76
+ assert_1.default.strictEqual(intent.amount, wrapParams.amount);
77
+ assert_1.default.deepStrictEqual(intent.feeOptions, feeOptions);
78
+ assert_1.default.strictEqual(intent.recipients, undefined);
79
+ });
80
+ it('flattens wrapParams onto wrap intent', function () {
81
+ const wrapParams = { tokenName: 'hteth:cusdt', amount: '1000000' };
82
+ const intent = mpcUtils.populateIntent(coin, {
83
+ reqId,
84
+ intentType: 'wrap',
85
+ wrapParams,
86
+ });
87
+ assert_1.default.strictEqual(intent.intentType, 'wrap');
88
+ assert_1.default.strictEqual(intent.tokenName, wrapParams.tokenName);
89
+ assert_1.default.strictEqual(intent.amount, wrapParams.amount);
90
+ assert_1.default.strictEqual(intent.recipients, undefined);
91
+ });
92
+ it('requires wrapParams for wrapApprove', function () {
93
+ assert_1.default.throws(() => mpcUtils.populateIntent(coin, {
94
+ reqId,
95
+ intentType: 'wrapApprove',
96
+ }), /wrapParams/);
97
+ });
98
+ it('rejects non-positive wrapParams.amount', function () {
99
+ assert_1.default.throws(() => mpcUtils.populateIntent(coin, {
100
+ reqId,
101
+ intentType: 'wrapApprove',
102
+ wrapParams: { tokenName: 'hteth:cusdt', amount: '0' },
103
+ }), /wrapParams.amount/);
104
+ });
105
+ });
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXBjVXRpbHMud3JhcEFwcHJvdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdXRpbHMvbXBjVXRpbHMud3JhcEFwcHJvdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsNkNBQStCO0FBRy9CLG1FQUFnRTtBQUNoRSx5Q0FBZ0Q7QUFFaEQsTUFBTSxZQUFhLFNBQVEsbUJBQVE7SUFDakMsZUFBZTtRQUNiLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDRjtBQUVELFFBQVEsQ0FBQyxtQ0FBbUMsRUFBRTtJQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFhLEVBQUUsQ0FBQztJQUNsQyxJQUFJLFFBQXNCLENBQUM7SUFDM0IsSUFBSSxJQUFlLENBQUM7SUFFcEIsVUFBVSxDQUFDO1FBQ1QsTUFBTSxTQUFTLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBMEIsQ0FBQztRQUNuRixJQUFJLEdBQUc7WUFDTCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTztZQUN2QixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztZQUN0QixLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtZQUNqQixXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtTQUNBLENBQUM7UUFDMUIsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQztRQUNSLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRTtRQUNoRCxNQUFNLFVBQVUsR0FBRyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ25FLE1BQU0sVUFBVSxHQUFHLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUVsRixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRTtZQUMzQyxLQUFLO1lBQ0wsVUFBVSxFQUFFLGFBQWE7WUFDekIsVUFBVTtZQUNWLFVBQVU7U0FDWCxDQUFDLENBQUM7UUFFSCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNELGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELGdCQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDdEQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRTtRQUN6QyxNQUFNLFVBQVUsR0FBRyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBRW5FLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO1lBQzNDLEtBQUs7WUFDTCxVQUFVLEVBQUUsTUFBTTtZQUNsQixVQUFVO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5QyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFDQUFxQyxFQUFFO1FBQ3hDLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUNILFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO1lBQzVCLEtBQUs7WUFDTCxVQUFVLEVBQUUsYUFBYTtTQUMxQixDQUFDLEVBQ0osWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRTtRQUMzQyxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FDSCxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRTtZQUM1QixLQUFLO1lBQ0wsVUFBVSxFQUFFLGFBQWE7WUFDekIsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFO1NBQ3RELENBQUMsRUFDSixtQkFBbUIsQ0FDcEIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBJQmFzZUNvaW4sIEtleWNoYWluc1RyaXBsZXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBNcGNVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy9tcGNVdGlscyc7XG5pbXBvcnQgeyBSZXF1ZXN0VHJhY2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjJztcblxuY2xhc3MgVGVzdE1wY1V0aWxzIGV4dGVuZHMgTXBjVXRpbHMge1xuICBjcmVhdGVLZXljaGFpbnMoKTogUHJvbWlzZTxLZXljaGFpbnNUcmlwbGV0PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndW51c2VkJykpO1xuICB9XG59XG5cbmRlc2NyaWJlKCdwb3B1bGF0ZUludGVudCB3cmFwQXBwcm92ZSAvIHdyYXAnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgbGV0IG1wY1V0aWxzOiBUZXN0TXBjVXRpbHM7XG4gIGxldCBjb2luOiBJQmFzZUNvaW47XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbW9ja0JpdGdvID0geyBnZXRFbnY6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0ZXN0JykgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcbiAgICBjb2luID0ge1xuICAgICAgZ2V0Q2hhaW46ICgpID0+ICdodGV0aCcsXG4gICAgICBnZXRGYW1pbHk6ICgpID0+ICdldGgnLFxuICAgICAgaXNFVk06ICgpID0+IHRydWUsXG4gICAgICBzdXBwb3J0c1RzczogKCkgPT4gdHJ1ZSxcbiAgICB9IGFzIHVua25vd24gYXMgSUJhc2VDb2luO1xuICAgIG1wY1V0aWxzID0gbmV3IFRlc3RNcGNVdGlscyhtb2NrQml0Z28sIGNvaW4pO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ2ZsYXR0ZW5zIHdyYXBQYXJhbXMgb250byB3cmFwQXBwcm92ZSBpbnRlbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd3JhcFBhcmFtcyA9IHsgdG9rZW5OYW1lOiAnaHRldGg6Y3VzZHQnLCBhbW91bnQ6ICcxMDAwMDAwJyB9O1xuICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7IG1heEZlZVBlckdhczogMzAwMDAwMDAwMCwgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAgfTtcblxuICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGNvaW4sIHtcbiAgICAgIHJlcUlkLFxuICAgICAgaW50ZW50VHlwZTogJ3dyYXBBcHByb3ZlJyxcbiAgICAgIHdyYXBQYXJhbXMsXG4gICAgICBmZWVPcHRpb25zLFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGludGVudC5pbnRlbnRUeXBlLCAnd3JhcEFwcHJvdmUnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaW50ZW50LnRva2VuTmFtZSwgd3JhcFBhcmFtcy50b2tlbk5hbWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpbnRlbnQuYW1vdW50LCB3cmFwUGFyYW1zLmFtb3VudCk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChpbnRlbnQuZmVlT3B0aW9ucywgZmVlT3B0aW9ucyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGludGVudC5yZWNpcGllbnRzLCB1bmRlZmluZWQpO1xuICB9KTtcblxuICBpdCgnZmxhdHRlbnMgd3JhcFBhcmFtcyBvbnRvIHdyYXAgaW50ZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHdyYXBQYXJhbXMgPSB7IHRva2VuTmFtZTogJ2h0ZXRoOmN1c2R0JywgYW1vdW50OiAnMTAwMDAwMCcgfTtcblxuICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGNvaW4sIHtcbiAgICAgIHJlcUlkLFxuICAgICAgaW50ZW50VHlwZTogJ3dyYXAnLFxuICAgICAgd3JhcFBhcmFtcyxcbiAgICB9KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpbnRlbnQuaW50ZW50VHlwZSwgJ3dyYXAnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaW50ZW50LnRva2VuTmFtZSwgd3JhcFBhcmFtcy50b2tlbk5hbWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpbnRlbnQuYW1vdW50LCB3cmFwUGFyYW1zLmFtb3VudCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGludGVudC5yZWNpcGllbnRzLCB1bmRlZmluZWQpO1xuICB9KTtcblxuICBpdCgncmVxdWlyZXMgd3JhcFBhcmFtcyBmb3Igd3JhcEFwcHJvdmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+XG4gICAgICAgIG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGNvaW4sIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnd3JhcEFwcHJvdmUnLFxuICAgICAgICB9KSxcbiAgICAgIC93cmFwUGFyYW1zL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIG5vbi1wb3NpdGl2ZSB3cmFwUGFyYW1zLmFtb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT5cbiAgICAgICAgbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoY29pbiwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICd3cmFwQXBwcm92ZScsXG4gICAgICAgICAgd3JhcFBhcmFtczogeyB0b2tlbk5hbWU6ICdodGV0aDpjdXNkdCcsIGFtb3VudDogJzAnIH0sXG4gICAgICAgIH0pLFxuICAgICAgL3dyYXBQYXJhbXMuYW1vdW50L1xuICAgICk7XG4gIH0pO1xufSk7XG4iXX0=