@bitgo-beta/account-lib 2.24.1-alpha.48 → 2.24.1-alpha.481

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 (74) hide show
  1. package/README.md +1 -1
  2. package/dist/resources/dot/index.js +6 -2
  3. package/dist/resources/dot/westend.d.ts +1 -1
  4. package/dist/resources/dot/westend.d.ts.map +1 -1
  5. package/dist/resources/dot/westend.js +2 -2
  6. package/dist/resources/dot/westend.ts +1 -1
  7. package/dist/src/index.d.ts +110 -4
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +259 -17
  10. package/dist/src/keyPair/index.js +24 -11
  11. package/dist/src/utils/index.d.ts +1 -0
  12. package/dist/src/utils/index.d.ts.map +1 -1
  13. package/dist/src/utils/index.js +27 -10
  14. package/dist/src/utils/messages/index.d.ts +10 -0
  15. package/dist/src/utils/messages/index.d.ts.map +1 -0
  16. package/dist/src/utils/messages/index.js +30 -0
  17. package/dist/test/resources/ed25519Deriver.d.ts +15 -0
  18. package/dist/test/resources/ed25519Deriver.d.ts.map +1 -0
  19. package/dist/test/resources/ed25519Deriver.js +18 -0
  20. package/dist/test/resources/testTransaction.d.ts +11 -0
  21. package/dist/test/resources/testTransaction.d.ts.map +1 -0
  22. package/dist/test/resources/testTransaction.js +19 -0
  23. package/dist/test/resources/testTransactionBuilder.d.ts +26 -0
  24. package/dist/test/resources/testTransactionBuilder.d.ts.map +1 -0
  25. package/dist/test/resources/testTransactionBuilder.js +47 -0
  26. package/dist/test/unit/coin/baseCoin/transactionBuilder.d.ts +2 -0
  27. package/dist/test/unit/coin/baseCoin/transactionBuilder.d.ts.map +1 -0
  28. package/dist/test/unit/coin/baseCoin/transactionBuilder.js +135 -0
  29. package/dist/test/unit/fixtures.d.ts +16 -0
  30. package/dist/test/unit/fixtures.d.ts.map +1 -0
  31. package/dist/test/unit/fixtures.js +43 -0
  32. package/dist/test/unit/index.d.ts +2 -0
  33. package/dist/test/unit/index.d.ts.map +1 -0
  34. package/dist/test/unit/index.js +13 -0
  35. package/dist/test/unit/keyPair/index.d.ts +2 -0
  36. package/dist/test/unit/keyPair/index.d.ts.map +1 -0
  37. package/dist/test/unit/keyPair/index.js +132 -0
  38. package/dist/test/unit/messageFactory.d.ts +2 -0
  39. package/dist/test/unit/messageFactory.d.ts.map +1 -0
  40. package/dist/test/unit/messageFactory.js +78 -0
  41. package/dist/test/unit/mpc/tss/ecdsa/ecdsa.d.ts +2 -0
  42. package/dist/test/unit/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -0
  43. package/dist/test/unit/mpc/tss/ecdsa/ecdsa.js +333 -0
  44. package/dist/test/unit/mpc/tss/eddsa/eddsa.d.ts +5 -0
  45. package/dist/test/unit/mpc/tss/eddsa/eddsa.d.ts.map +1 -0
  46. package/dist/test/unit/mpc/tss/eddsa/eddsa.js +322 -0
  47. package/dist/test/unit/mpc/tss/fixtures/ecdsa.d.ts +130 -0
  48. package/dist/test/unit/mpc/tss/fixtures/ecdsa.d.ts.map +1 -0
  49. package/dist/test/unit/mpc/tss/fixtures/ecdsa.js +283 -0
  50. package/dist/test/unit/utils/crypto.d.ts +2 -0
  51. package/dist/test/unit/utils/crypto.d.ts.map +1 -0
  52. package/dist/test/unit/utils/crypto.js +60 -0
  53. package/dist/test/unit/utils/ed25519KeyDeriver.d.ts +2 -0
  54. package/dist/test/unit/utils/ed25519KeyDeriver.d.ts.map +1 -0
  55. package/dist/test/unit/utils/ed25519KeyDeriver.js +23 -0
  56. package/dist/test/unit/utils/index.d.ts +2 -0
  57. package/dist/test/unit/utils/index.d.ts.map +1 -0
  58. package/dist/test/unit/utils/index.js +61 -0
  59. package/dist/test/unit/utils/messages/index.d.ts +2 -0
  60. package/dist/test/unit/utils/messages/index.d.ts.map +1 -0
  61. package/dist/test/unit/utils/messages/index.js +51 -0
  62. package/dist/test/unit/verifyMessage.d.ts +2 -0
  63. package/dist/test/unit/verifyMessage.d.ts.map +1 -0
  64. package/dist/test/unit/verifyMessage.js +96 -0
  65. package/dist/tsconfig.tsbuildinfo +1 -43551
  66. package/package.json +77 -32
  67. package/.mocharc.js +0 -10
  68. package/CHANGELOG.md +0 -409
  69. package/DEVELOPER.md +0 -93
  70. package/resources/README.md +0 -17
  71. package/resources/cspr/contract/keys-manager.wasm +0 -0
  72. package/resources/dot/index.ts +0 -2
  73. package/resources/dot/mainnet.ts +0 -2
  74. package/resources/dot/westend.ts +0 -2
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../../test/unit/utils/crypto.ts"],"names":[],"mappings":""}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const should_1 = __importDefault(require("should"));
9
+ describe('Crypto utils', function () {
10
+ describe('should succeed', function () {
11
+ it('to get a valid uncompressed public key from an xpub', () => {
12
+ const pub = (0, sdk_core_1.xpubToUncompressedPub)('xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6S598UeKT2DjCgZD5oxriwVyS4t5pz7Ga5xJVNyBPcvJVxaRq5q');
13
+ should_1.default.exist(pub);
14
+ pub.should.equal('040706358b2bf2917d7be11a692681d9e7266e431b2dc124cb15ba6d98501ecab091e6e25ce84278c56e1e264b69df67b3f37e2a7ffe41f3f56a07fb393095d5b1');
15
+ });
16
+ it('to get a valid raw private key from an xprv', () => {
17
+ const prv = (0, sdk_core_1.xprvToRawPrv)('xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzF9HJ1Z6954LhpFkdHzUXfqoE7GH6eyJvQSfYuAdK2gXGjM6mvd2');
18
+ should_1.default.exist(prv);
19
+ prv.should.equal('1f3cd7a858a11eef3e3f591cb5532241ce12c26b588197c88ebb42c6b6cbb5ba');
20
+ });
21
+ it('to get a valid extended keys from a raw private key', () => {
22
+ const pub = (0, sdk_core_1.rawPrvToExtendedKeys)('1F3CD7A858A11EEF3E3F591CB5532241CE12C26B588197C88EBB42C6B6CBB5BA');
23
+ should_1.default.exist(pub.xprv);
24
+ should_1.default.exist(pub.xpub);
25
+ pub.xprv.should.equal('xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzF9HJ1Z6954LhpFkdHzUXfqoE7GH6eyJvQSfYuAdK2gXGjM6mvd2');
26
+ pub.xpub.should.equal('xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6S598UeKT2DjCgZD5oxriwVyS4t5pz7Ga5xJVNyBPcvJVxaRq5q');
27
+ });
28
+ });
29
+ describe('should fail', function () {
30
+ it('to get a valid uncompressed public key from an invalid xpub', () => {
31
+ assert_1.default.throws(() => (0, sdk_core_1.xpubToUncompressedPub)('xpub'));
32
+ });
33
+ it('to get a valid raw private key from an invalid xprv', () => {
34
+ assert_1.default.throws(() => (0, sdk_core_1.xprvToRawPrv)('xprv'));
35
+ });
36
+ it('to get a valid extended keys from an invalid raw private key', () => {
37
+ assert_1.default.throws(() => (0, sdk_core_1.rawPrvToExtendedKeys)('ABCD'));
38
+ });
39
+ });
40
+ describe('hexToBigInt utility', () => {
41
+ const hex = '36119d';
42
+ const number = 3543453;
43
+ it('should convert hex to BigInt', function () {
44
+ (0, sdk_core_1.hexToBigInt)(hex).should.equal(BigInt(number));
45
+ (0, sdk_core_1.hexToBigInt)('0x' + hex).should.equal(BigInt(number));
46
+ });
47
+ it('should throw error converting hex to BigInt', function () {
48
+ assert_1.default.throws(() => (0, sdk_core_1.hexToBigInt)('op'));
49
+ });
50
+ });
51
+ describe('convertHexToBigIntArr and convertBigIntArrToHexArr', function () {
52
+ it('able to serialize/deserialize between the two methods', function () {
53
+ const fakeHexArr = ['8abc528e671324135d709395a4cf2552e842f648b8245df65f144311d4482082117355440ae565faf21d7587'];
54
+ const fakeBigIntArr = (0, sdk_core_1.convertHexArrToBigIntArr)(fakeHexArr);
55
+ const hexArrAgain = (0, sdk_core_1.convertBigIntArrToHexArr)(fakeBigIntArr);
56
+ hexArrAgain.should.deepEqual(fakeHexArr);
57
+ });
58
+ });
59
+ });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3V0aWxzL2NyeXB0by50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixtREFPOEI7QUFDOUIsb0RBQTRCO0FBRTVCLFFBQVEsQ0FBQyxjQUFjLEVBQUU7SUFDdkIsUUFBUSxDQUFDLGdCQUFnQixFQUFFO1FBQ3pCLEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7WUFDN0QsTUFBTSxHQUFHLEdBQUcsSUFBQSxnQ0FBcUIsRUFDL0IsaUhBQWlILENBQ2xILENBQUM7WUFFRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZCxvSUFBb0ksQ0FDckksQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtZQUNyRCxNQUFNLEdBQUcsR0FBRyxJQUFBLHVCQUFZLEVBQ3RCLGlIQUFpSCxDQUNsSCxDQUFDO1lBRUYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztRQUN2RixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7WUFDN0QsTUFBTSxHQUFHLEdBQUcsSUFBQSwrQkFBb0IsRUFBQyxrRUFBa0UsQ0FBQyxDQUFDO1lBRXJHLGdCQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsR0FBRyxDQUFDLElBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNwQixpSEFBaUgsQ0FDbEgsQ0FBQztZQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDbkIsaUhBQWlILENBQ2xILENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGFBQWEsRUFBRTtRQUN0QixFQUFFLENBQUMsNkRBQTZELEVBQUUsR0FBRyxFQUFFO1lBQ3JFLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsZ0NBQXFCLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7WUFDN0QsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSx1QkFBWSxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsR0FBRyxFQUFFO1lBQ3RFLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsK0JBQW9CLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUM7UUFDckIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRTtZQUNqQyxJQUFBLHNCQUFXLEVBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUM5QyxJQUFBLHNCQUFXLEVBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsNkNBQTZDLEVBQUU7WUFDaEQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSxzQkFBVyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvREFBb0QsRUFBRTtRQUM3RCxFQUFFLENBQUMsdURBQXVELEVBQUU7WUFDMUQsTUFBTSxVQUFVLEdBQUcsQ0FBQywwRkFBMEYsQ0FBQyxDQUFDO1lBQ2hILE1BQU0sYUFBYSxHQUFHLElBQUEsbUNBQXdCLEVBQUMsVUFBVSxDQUFDLENBQUM7WUFDM0QsTUFBTSxXQUFXLEdBQUcsSUFBQSxtQ0FBd0IsRUFBQyxhQUFhLENBQUMsQ0FBQztZQUM1RCxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICB4cHViVG9VbmNvbXByZXNzZWRQdWIsXG4gIHhwcnZUb1Jhd1BydixcbiAgcmF3UHJ2VG9FeHRlbmRlZEtleXMsXG4gIGhleFRvQmlnSW50LFxuICBjb252ZXJ0SGV4QXJyVG9CaWdJbnRBcnIsXG4gIGNvbnZlcnRCaWdJbnRBcnJUb0hleEFycixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuXG5kZXNjcmliZSgnQ3J5cHRvIHV0aWxzJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnc2hvdWxkIHN1Y2NlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3RvIGdldCBhIHZhbGlkIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5IGZyb20gYW4geHB1YicsICgpID0+IHtcbiAgICAgIGNvbnN0IHB1YiA9IHhwdWJUb1VuY29tcHJlc3NlZFB1YihcbiAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNFWVM4dzdYTFNWZUVzQlh5Nzl6U3pIMUo4dkNkeEFabmluZ1dMZE4zemd0VTZTNTk4VWVLVDJEakNnWkQ1b3hyaXdWeVM0dDVwejdHYTV4SlZOeUJQY3ZKVnhhUnE1cScsXG4gICAgICApO1xuXG4gICAgICBzaG91bGQuZXhpc3QocHViKTtcbiAgICAgIHB1Yi5zaG91bGQuZXF1YWwoXG4gICAgICAgICcwNDA3MDYzNThiMmJmMjkxN2Q3YmUxMWE2OTI2ODFkOWU3MjY2ZTQzMWIyZGMxMjRjYjE1YmE2ZDk4NTAxZWNhYjA5MWU2ZTI1Y2U4NDI3OGM1NmUxZTI2NGI2OWRmNjdiM2YzN2UyYTdmZmU0MWYzZjU2YTA3ZmIzOTMwOTVkNWIxJyxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgndG8gZ2V0IGEgdmFsaWQgcmF3IHByaXZhdGUga2V5IGZyb20gYW4geHBydicsICgpID0+IHtcbiAgICAgIGNvbnN0IHBydiA9IHhwcnZUb1Jhd1BydihcbiAgICAgICAgJ3hwcnY5czIxWnJRSDE0M0syNE1mcTV6TDVNaFdLOWhVaGhHYmQ0NWhMWG8yUHEyb3F6TU1vNjNvU3RaekY5SEoxWjY5NTRMaHBGa2RIelVYZnFvRTdHSDZleUp2UVNmWXVBZEsyZ1hHak02bXZkMicsXG4gICAgICApO1xuXG4gICAgICBzaG91bGQuZXhpc3QocHJ2KTtcbiAgICAgIHBydi5zaG91bGQuZXF1YWwoJzFmM2NkN2E4NThhMTFlZWYzZTNmNTkxY2I1NTMyMjQxY2UxMmMyNmI1ODgxOTdjODhlYmI0MmM2YjZjYmI1YmEnKTtcbiAgICB9KTtcblxuICAgIGl0KCd0byBnZXQgYSB2YWxpZCBleHRlbmRlZCBrZXlzIGZyb20gYSByYXcgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBwdWIgPSByYXdQcnZUb0V4dGVuZGVkS2V5cygnMUYzQ0Q3QTg1OEExMUVFRjNFM0Y1OTFDQjU1MzIyNDFDRTEyQzI2QjU4ODE5N0M4OEVCQjQyQzZCNkNCQjVCQScpO1xuXG4gICAgICBzaG91bGQuZXhpc3QocHViLnhwcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0KHB1Yi54cHViKTtcbiAgICAgIHB1Yi54cHJ2IS5zaG91bGQuZXF1YWwoXG4gICAgICAgICd4cHJ2OXMyMVpyUUgxNDNLMjRNZnE1ekw1TWhXSzloVWhoR2JkNDVoTFhvMlBxMm9xek1NbzYzb1N0WnpGOUhKMVo2OTU0TGhwRmtkSHpVWGZxb0U3R0g2ZXlKdlFTZll1QWRLMmdYR2pNNm12ZDInLFxuICAgICAgKTtcbiAgICAgIHB1Yi54cHViLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNFWVM4dzdYTFNWZUVzQlh5Nzl6U3pIMUo4dkNkeEFabmluZ1dMZE4zemd0VTZTNTk4VWVLVDJEakNnWkQ1b3hyaXdWeVM0dDVwejdHYTV4SlZOeUJQY3ZKVnhhUnE1cScsXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGZhaWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3RvIGdldCBhIHZhbGlkIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5IGZyb20gYW4gaW52YWxpZCB4cHViJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB4cHViVG9VbmNvbXByZXNzZWRQdWIoJ3hwdWInKSk7XG4gICAgfSk7XG5cbiAgICBpdCgndG8gZ2V0IGEgdmFsaWQgcmF3IHByaXZhdGUga2V5IGZyb20gYW4gaW52YWxpZCB4cHJ2JywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB4cHJ2VG9SYXdQcnYoJ3hwcnYnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgndG8gZ2V0IGEgdmFsaWQgZXh0ZW5kZWQga2V5cyBmcm9tIGFuIGludmFsaWQgcmF3IHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiByYXdQcnZUb0V4dGVuZGVkS2V5cygnQUJDRCcpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2hleFRvQmlnSW50IHV0aWxpdHknLCAoKSA9PiB7XG4gICAgY29uc3QgaGV4ID0gJzM2MTE5ZCc7XG4gICAgY29uc3QgbnVtYmVyID0gMzU0MzQ1MztcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgaGV4IHRvIEJpZ0ludCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGhleFRvQmlnSW50KGhleCkuc2hvdWxkLmVxdWFsKEJpZ0ludChudW1iZXIpKTtcbiAgICAgIGhleFRvQmlnSW50KCcweCcgKyBoZXgpLnNob3VsZC5lcXVhbChCaWdJbnQobnVtYmVyKSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBjb252ZXJ0aW5nIGhleCB0byBCaWdJbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGhleFRvQmlnSW50KCdvcCcpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvbnZlcnRIZXhUb0JpZ0ludEFyciBhbmQgY29udmVydEJpZ0ludEFyclRvSGV4QXJyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdhYmxlIHRvIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSBiZXR3ZWVuIHRoZSB0d28gbWV0aG9kcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZha2VIZXhBcnIgPSBbJzhhYmM1MjhlNjcxMzI0MTM1ZDcwOTM5NWE0Y2YyNTUyZTg0MmY2NDhiODI0NWRmNjVmMTQ0MzExZDQ0ODIwODIxMTczNTU0NDBhZTU2NWZhZjIxZDc1ODcnXTtcbiAgICAgIGNvbnN0IGZha2VCaWdJbnRBcnIgPSBjb252ZXJ0SGV4QXJyVG9CaWdJbnRBcnIoZmFrZUhleEFycik7XG4gICAgICBjb25zdCBoZXhBcnJBZ2FpbiA9IGNvbnZlcnRCaWdJbnRBcnJUb0hleEFycihmYWtlQmlnSW50QXJyKTtcbiAgICAgIGhleEFyckFnYWluLnNob3VsZC5kZWVwRXF1YWwoZmFrZUhleEFycik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=ed25519KeyDeriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ed25519KeyDeriver.d.ts","sourceRoot":"","sources":["../../../../test/unit/utils/ed25519KeyDeriver.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("should");
4
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
+ const ed25519Deriver_1 = require("../../resources/ed25519Deriver");
6
+ describe('Key Derivation:', () => {
7
+ const verifyTestVector = ({ path, seed, prv, chainCode }) => {
8
+ const derivedKey = sdk_core_1.Ed25519KeyDeriver.derivePath(path, seed);
9
+ derivedKey.should.have.properties({
10
+ key: Buffer.from(prv, 'hex'),
11
+ chainCode: Buffer.from(chainCode, 'hex'),
12
+ });
13
+ };
14
+ // https://github.com/satoshilabs/slips/blob/master/slip-0010.md#test-vector-1-for-ed25519
15
+ it('should derive SLIP-0010 ed25519 test vector 1', () => {
16
+ verifyTestVector(ed25519Deriver_1.keys.testVec1);
17
+ });
18
+ // https://github.com/satoshilabs/slips/blob/master/slip-0010.md#test-vector-2-for-ed25519
19
+ it('should derive SLIP-0010 ed25519 test vector 2', () => {
20
+ verifyTestVector(ed25519Deriver_1.keys.testVec2);
21
+ });
22
+ });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOUtleURlcml2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMvZWQyNTUxOUtleURlcml2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZ0I7QUFDaEIsbURBQXlEO0FBQ3pELG1FQUFzRDtBQUV0RCxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7UUFDMUQsTUFBTSxVQUFVLEdBQUcsNEJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDaEMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztZQUM1QixTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGLDBGQUEwRjtJQUMxRixFQUFFLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO1FBQ3ZELGdCQUFnQixDQUFDLHFCQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFFSCwwRkFBMEY7SUFDMUYsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtRQUN2RCxnQkFBZ0IsQ0FBQyxxQkFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBFZDI1NTE5S2V5RGVyaXZlciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGtleXMgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZWQyNTUxOURlcml2ZXInO1xuXG5kZXNjcmliZSgnS2V5IERlcml2YXRpb246JywgKCkgPT4ge1xuICBjb25zdCB2ZXJpZnlUZXN0VmVjdG9yID0gKHsgcGF0aCwgc2VlZCwgcHJ2LCBjaGFpbkNvZGUgfSkgPT4ge1xuICAgIGNvbnN0IGRlcml2ZWRLZXkgPSBFZDI1NTE5S2V5RGVyaXZlci5kZXJpdmVQYXRoKHBhdGgsIHNlZWQpO1xuICAgIGRlcml2ZWRLZXkuc2hvdWxkLmhhdmUucHJvcGVydGllcyh7XG4gICAgICBrZXk6IEJ1ZmZlci5mcm9tKHBydiwgJ2hleCcpLFxuICAgICAgY2hhaW5Db2RlOiBCdWZmZXIuZnJvbShjaGFpbkNvZGUsICdoZXgnKSxcbiAgICB9KTtcbiAgfTtcblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vc2F0b3NoaWxhYnMvc2xpcHMvYmxvYi9tYXN0ZXIvc2xpcC0wMDEwLm1kI3Rlc3QtdmVjdG9yLTEtZm9yLWVkMjU1MTlcbiAgaXQoJ3Nob3VsZCBkZXJpdmUgU0xJUC0wMDEwIGVkMjU1MTkgdGVzdCB2ZWN0b3IgMScsICgpID0+IHtcbiAgICB2ZXJpZnlUZXN0VmVjdG9yKGtleXMudGVzdFZlYzEpO1xuICB9KTtcblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vc2F0b3NoaWxhYnMvc2xpcHMvYmxvYi9tYXN0ZXIvc2xpcC0wMDEwLm1kI3Rlc3QtdmVjdG9yLTItZm9yLWVkMjU1MTlcbiAgaXQoJ3Nob3VsZCBkZXJpdmUgU0xJUC0wMDEwIGVkMjU1MTkgdGVzdCB2ZWN0b3IgMicsICgpID0+IHtcbiAgICB2ZXJpZnlUZXN0VmVjdG9yKGtleXMudGVzdFZlYzIpO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../test/unit/utils/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
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
+ /**
37
+ * @prettier
38
+ */
39
+ const utils_1 = require("../../../src/utils");
40
+ const coinModules = __importStar(require("../../../src"));
41
+ const should_1 = require("should");
42
+ describe('Utils Factory', () => {
43
+ describe('should initialize base util methods for all coin supported', function () {
44
+ const supportedCoinsExceptTestnet = Object.keys(coinModules).filter((k) => coinModules[k].Util);
45
+ supportedCoinsExceptTestnet.forEach((coinName) => {
46
+ it(`should initialize a ${coinName} keyPair map`, function () {
47
+ const utils = (0, utils_1.register)(coinName);
48
+ (typeof utils.isValidAddress).should.eql('function');
49
+ (typeof utils.isValidTransactionId).should.eql('function');
50
+ (typeof utils.isValidPublicKey).should.eql('function');
51
+ (typeof utils.isValidPrivateKey).should.eql('function');
52
+ (typeof utils.isValidSignature).should.eql('function');
53
+ (typeof utils.isValidBlockId).should.eql('function');
54
+ });
55
+ });
56
+ });
57
+ it('should raise error if coin not supported', () => {
58
+ (0, should_1.throws)(() => (0, utils_1.register)('fakeUnsupported'));
59
+ });
60
+ });
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7R0FFRztBQUNILDhDQUE4QztBQUM5QywwREFBNEM7QUFDNUMsbUNBQWdDO0FBRWhDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO0lBQzdCLFFBQVEsQ0FBQyw0REFBNEQsRUFBRTtRQUNyRSxNQUFNLDJCQUEyQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEcsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDL0MsRUFBRSxDQUFDLHVCQUF1QixRQUFRLGNBQWMsRUFBRTtnQkFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBQSxnQkFBUSxFQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDLE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3JELENBQUMsT0FBTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDLE9BQU8sS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdkQsQ0FBQyxPQUFPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3hELENBQUMsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDLE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtRQUNsRCxJQUFBLGVBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLGdCQUFRLEVBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gJy4uLy4uLy4uL3NyYy91dGlscyc7XG5pbXBvcnQgKiBhcyBjb2luTW9kdWxlcyBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgdGhyb3dzIH0gZnJvbSAnc2hvdWxkJztcblxuZGVzY3JpYmUoJ1V0aWxzIEZhY3RvcnknLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdzaG91bGQgaW5pdGlhbGl6ZSBiYXNlIHV0aWwgbWV0aG9kcyBmb3IgYWxsIGNvaW4gc3VwcG9ydGVkJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHN1cHBvcnRlZENvaW5zRXhjZXB0VGVzdG5ldCA9IE9iamVjdC5rZXlzKGNvaW5Nb2R1bGVzKS5maWx0ZXIoKGspID0+IGNvaW5Nb2R1bGVzW2tdLlV0aWwpO1xuXG4gICAgc3VwcG9ydGVkQ29pbnNFeGNlcHRUZXN0bmV0LmZvckVhY2goKGNvaW5OYW1lKSA9PiB7XG4gICAgICBpdChgc2hvdWxkIGluaXRpYWxpemUgYSAke2NvaW5OYW1lfSBrZXlQYWlyIG1hcGAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdXRpbHMgPSByZWdpc3Rlcihjb2luTmFtZSk7XG4gICAgICAgICh0eXBlb2YgdXRpbHMuaXNWYWxpZEFkZHJlc3MpLnNob3VsZC5lcWwoJ2Z1bmN0aW9uJyk7XG4gICAgICAgICh0eXBlb2YgdXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQpLnNob3VsZC5lcWwoJ2Z1bmN0aW9uJyk7XG4gICAgICAgICh0eXBlb2YgdXRpbHMuaXNWYWxpZFB1YmxpY0tleSkuc2hvdWxkLmVxbCgnZnVuY3Rpb24nKTtcbiAgICAgICAgKHR5cGVvZiB1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleSkuc2hvdWxkLmVxbCgnZnVuY3Rpb24nKTtcbiAgICAgICAgKHR5cGVvZiB1dGlscy5pc1ZhbGlkU2lnbmF0dXJlKS5zaG91bGQuZXFsKCdmdW5jdGlvbicpO1xuICAgICAgICAodHlwZW9mIHV0aWxzLmlzVmFsaWRCbG9ja0lkKS5zaG91bGQuZXFsKCdmdW5jdGlvbicpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmFpc2UgZXJyb3IgaWYgY29pbiBub3Qgc3VwcG9ydGVkJywgKCkgPT4ge1xuICAgIHRocm93cygoKSA9PiByZWdpc3RlcignZmFrZVVuc3VwcG9ydGVkJykpO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../test/unit/utils/messages/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const should_1 = __importDefault(require("should"));
7
+ const utils_1 = require("../../../../src/utils");
8
+ describe('Message validation', () => {
9
+ describe('validateAgainstMessageTemplates', () => {
10
+ const adaTestnetDestinationAddress = 'addr_test1vz7xs7ceu4xx9n5xn57lfe86vrwddqpp77vjwq5ptlkh49cqy3wur';
11
+ const adaMainnetDestinationAddress = 'addr1q9k6u7lhf467y2f8skr2dafldx2npsd8fymq0mslnj0t44nd4ealwnt4ug5j0pvx5m6n76v4xrq6wjfkqlhpl8y7httq2m9cmu';
12
+ it('should validate testnet message matching the Midnight glacier drop claim template', () => {
13
+ const messageRaw = `STAR 100 to ${adaTestnetDestinationAddress} ${utils_1.MIDNIGHT_TNC_HASH}`;
14
+ const result = (0, utils_1.validateAgainstMessageTemplates)(messageRaw);
15
+ should_1.default.equal(result, true);
16
+ });
17
+ it('should validate mainnet message matching the Midnight glacier drop claim template', () => {
18
+ const messageRaw = `STAR 100 to ${adaMainnetDestinationAddress} ${utils_1.MIDNIGHT_TNC_HASH}`;
19
+ const result = (0, utils_1.validateAgainstMessageTemplates)(messageRaw);
20
+ should_1.default.equal(result, true);
21
+ });
22
+ it('should not validate message with incorrect format', () => {
23
+ const messageRaw = `INCORRECT 100 to ${adaTestnetDestinationAddress} ${utils_1.MIDNIGHT_TNC_HASH}`;
24
+ const result = (0, utils_1.validateAgainstMessageTemplates)(messageRaw);
25
+ should_1.default.equal(result, false);
26
+ });
27
+ it('should not validate message with missing parts', () => {
28
+ // Missing "to addr" part
29
+ const messageRaw = `STAR 100 ${utils_1.MIDNIGHT_TNC_HASH}`;
30
+ const result = (0, utils_1.validateAgainstMessageTemplates)(messageRaw);
31
+ should_1.default.equal(result, false);
32
+ });
33
+ it('should not validate message with incorrect hash', () => {
34
+ // Different hash
35
+ const incorrectHash = '5af1adf825baa496729e2eac1e895ebc77973744bce67f44276bf6006f5c21de863ed121e11828d8fc0241773191e26dc1134803a681a9a98ba0ae812553db24';
36
+ const messageRaw = `STAR 100 to ${adaTestnetDestinationAddress} ${incorrectHash}`;
37
+ const result = (0, utils_1.validateAgainstMessageTemplates)(messageRaw);
38
+ should_1.default.equal(result, false);
39
+ });
40
+ it('should handle empty message', () => {
41
+ const result = (0, utils_1.validateAgainstMessageTemplates)('');
42
+ should_1.default.equal(result, false);
43
+ });
44
+ it('should not validate message with special regex characters', () => {
45
+ const messageRaw = `STAR shade.with+special*chars to addr.with[special]chars ${utils_1.MIDNIGHT_TNC_HASH}`;
46
+ const result = (0, utils_1.validateAgainstMessageTemplates)(messageRaw);
47
+ should_1.default.equal(result, false);
48
+ });
49
+ });
50
+ });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMvbWVzc2FnZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsaURBQTJGO0FBRTNGLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7SUFDbEMsUUFBUSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtRQUMvQyxNQUFNLDRCQUE0QixHQUFHLGlFQUFpRSxDQUFDO1FBQ3ZHLE1BQU0sNEJBQTRCLEdBQ2hDLHlHQUF5RyxDQUFDO1FBRTVHLEVBQUUsQ0FBQyxtRkFBbUYsRUFBRSxHQUFHLEVBQUU7WUFDM0YsTUFBTSxVQUFVLEdBQUcsZUFBZSw0QkFBNEIsSUFBSSx5QkFBaUIsRUFBRSxDQUFDO1lBRXRGLE1BQU0sTUFBTSxHQUFHLElBQUEsdUNBQStCLEVBQUMsVUFBVSxDQUFDLENBQUM7WUFFM0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEdBQUcsRUFBRTtZQUMzRixNQUFNLFVBQVUsR0FBRyxlQUFlLDRCQUE0QixJQUFJLHlCQUFpQixFQUFFLENBQUM7WUFFdEYsTUFBTSxNQUFNLEdBQUcsSUFBQSx1Q0FBK0IsRUFBQyxVQUFVLENBQUMsQ0FBQztZQUUzRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO1lBQzNELE1BQU0sVUFBVSxHQUFHLG9CQUFvQiw0QkFBNEIsSUFBSSx5QkFBaUIsRUFBRSxDQUFDO1lBRTNGLE1BQU0sTUFBTSxHQUFHLElBQUEsdUNBQStCLEVBQUMsVUFBVSxDQUFDLENBQUM7WUFFM0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtZQUN4RCx5QkFBeUI7WUFDekIsTUFBTSxVQUFVLEdBQUcsWUFBWSx5QkFBaUIsRUFBRSxDQUFDO1lBRW5ELE1BQU0sTUFBTSxHQUFHLElBQUEsdUNBQStCLEVBQUMsVUFBVSxDQUFDLENBQUM7WUFFM0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtZQUN6RCxpQkFBaUI7WUFDakIsTUFBTSxhQUFhLEdBQ2pCLGtJQUFrSSxDQUFDO1lBQ3JJLE1BQU0sVUFBVSxHQUFHLGVBQWUsNEJBQTRCLElBQUksYUFBYSxFQUFFLENBQUM7WUFFbEYsTUFBTSxNQUFNLEdBQUcsSUFBQSx1Q0FBK0IsRUFBQyxVQUFVLENBQUMsQ0FBQztZQUUzRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUEsdUNBQStCLEVBQUMsRUFBRSxDQUFDLENBQUM7WUFFbkQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJEQUEyRCxFQUFFLEdBQUcsRUFBRTtZQUNuRSxNQUFNLFVBQVUsR0FBRyw0REFBNEQseUJBQWlCLEVBQUUsQ0FBQztZQUVuRyxNQUFNLE1BQU0sR0FBRyxJQUFBLHVDQUErQixFQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRTNELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBNSUROSUdIVF9UTkNfSEFTSCwgdmFsaWRhdGVBZ2FpbnN0TWVzc2FnZVRlbXBsYXRlcyB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy91dGlscyc7XG5cbmRlc2NyaWJlKCdNZXNzYWdlIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCd2YWxpZGF0ZUFnYWluc3RNZXNzYWdlVGVtcGxhdGVzJywgKCkgPT4ge1xuICAgIGNvbnN0IGFkYVRlc3RuZXREZXN0aW5hdGlvbkFkZHJlc3MgPSAnYWRkcl90ZXN0MXZ6N3hzN2NldTR4eDluNXhuNTdsZmU4NnZyd2RkcXBwNzd2andxNXB0bGtoNDljcXkzd3VyJztcbiAgICBjb25zdCBhZGFNYWlubmV0RGVzdGluYXRpb25BZGRyZXNzID1cbiAgICAgICdhZGRyMXE5azZ1N2xoZjQ2N3kyZjhza3IyZGFmbGR4Mm5wc2Q4ZnltcTBtc2xuajB0NDRuZDRlYWx3bnQ0dWc1ajBwdng1bTZuNzZ2NHhycTZ3amZrcWxocGw4eTdodHRxMm05Y211JztcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdGVzdG5ldCBtZXNzYWdlIG1hdGNoaW5nIHRoZSBNaWRuaWdodCBnbGFjaWVyIGRyb3AgY2xhaW0gdGVtcGxhdGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlUmF3ID0gYFNUQVIgMTAwIHRvICR7YWRhVGVzdG5ldERlc3RpbmF0aW9uQWRkcmVzc30gJHtNSUROSUdIVF9UTkNfSEFTSH1gO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZUFnYWluc3RNZXNzYWdlVGVtcGxhdGVzKG1lc3NhZ2VSYXcpO1xuXG4gICAgICBzaG91bGQuZXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWFpbm5ldCBtZXNzYWdlIG1hdGNoaW5nIHRoZSBNaWRuaWdodCBnbGFjaWVyIGRyb3AgY2xhaW0gdGVtcGxhdGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlUmF3ID0gYFNUQVIgMTAwIHRvICR7YWRhTWFpbm5ldERlc3RpbmF0aW9uQWRkcmVzc30gJHtNSUROSUdIVF9UTkNfSEFTSH1gO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZUFnYWluc3RNZXNzYWdlVGVtcGxhdGVzKG1lc3NhZ2VSYXcpO1xuXG4gICAgICBzaG91bGQuZXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHZhbGlkYXRlIG1lc3NhZ2Ugd2l0aCBpbmNvcnJlY3QgZm9ybWF0JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZVJhdyA9IGBJTkNPUlJFQ1QgMTAwIHRvICR7YWRhVGVzdG5ldERlc3RpbmF0aW9uQWRkcmVzc30gJHtNSUROSUdIVF9UTkNfSEFTSH1gO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZUFnYWluc3RNZXNzYWdlVGVtcGxhdGVzKG1lc3NhZ2VSYXcpO1xuXG4gICAgICBzaG91bGQuZXF1YWwocmVzdWx0LCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCB2YWxpZGF0ZSBtZXNzYWdlIHdpdGggbWlzc2luZyBwYXJ0cycsICgpID0+IHtcbiAgICAgIC8vIE1pc3NpbmcgXCJ0byBhZGRyXCIgcGFydFxuICAgICAgY29uc3QgbWVzc2FnZVJhdyA9IGBTVEFSIDEwMCAke01JRE5JR0hUX1ROQ19IQVNIfWA7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlQWdhaW5zdE1lc3NhZ2VUZW1wbGF0ZXMobWVzc2FnZVJhdyk7XG5cbiAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHZhbGlkYXRlIG1lc3NhZ2Ugd2l0aCBpbmNvcnJlY3QgaGFzaCcsICgpID0+IHtcbiAgICAgIC8vIERpZmZlcmVudCBoYXNoXG4gICAgICBjb25zdCBpbmNvcnJlY3RIYXNoID1cbiAgICAgICAgJzVhZjFhZGY4MjViYWE0OTY3MjllMmVhYzFlODk1ZWJjNzc5NzM3NDRiY2U2N2Y0NDI3NmJmNjAwNmY1YzIxZGU4NjNlZDEyMWUxMTgyOGQ4ZmMwMjQxNzczMTkxZTI2ZGMxMTM0ODAzYTY4MWE5YTk4YmEwYWU4MTI1NTNkYjI0JztcbiAgICAgIGNvbnN0IG1lc3NhZ2VSYXcgPSBgU1RBUiAxMDAgdG8gJHthZGFUZXN0bmV0RGVzdGluYXRpb25BZGRyZXNzfSAke2luY29ycmVjdEhhc2h9YDtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVBZ2FpbnN0TWVzc2FnZVRlbXBsYXRlcyhtZXNzYWdlUmF3KTtcblxuICAgICAgc2hvdWxkLmVxdWFsKHJlc3VsdCwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgbWVzc2FnZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlQWdhaW5zdE1lc3NhZ2VUZW1wbGF0ZXMoJycpO1xuXG4gICAgICBzaG91bGQuZXF1YWwocmVzdWx0LCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCB2YWxpZGF0ZSBtZXNzYWdlIHdpdGggc3BlY2lhbCByZWdleCBjaGFyYWN0ZXJzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZVJhdyA9IGBTVEFSIHNoYWRlLndpdGgrc3BlY2lhbCpjaGFycyB0byBhZGRyLndpdGhbc3BlY2lhbF1jaGFycyAke01JRE5JR0hUX1ROQ19IQVNIfWA7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlQWdhaW5zdE1lc3NhZ2VUZW1wbGF0ZXMobWVzc2FnZVJhdyk7XG5cbiAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQsIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=verifyMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifyMessage.d.ts","sourceRoot":"","sources":["../../../test/unit/verifyMessage.ts"],"names":[],"mappings":""}
@@ -0,0 +1,96 @@
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 should_1 = __importDefault(require("should"));
40
+ const accountLib = __importStar(require("../../src"));
41
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
42
+ const utils_1 = require("../../src/utils");
43
+ describe('verifyMessage', () => {
44
+ const adaTestnetOriginAddress = 'addr_test1wz4h6068hs93n8j5ar88fgzz6sfnw8krng09xx0mmf36m8c7j9yap';
45
+ const adaTestnetDestinationAddress = 'addr_test1vz7xs7ceu4xx9n5xn57lfe86vrwddqpp77vjwq5ptlkh49cqy3wur';
46
+ const testnetMessageRaw = `STAR 100 to ${adaTestnetDestinationAddress} ${utils_1.MIDNIGHT_TNC_HASH}`;
47
+ describe('EIP191 Message', function () {
48
+ const eip191MessageBuilder = accountLib
49
+ .getMessageBuilderFactory('eth')
50
+ .getMessageBuilder(sdk_core_1.MessageStandardType.EIP191);
51
+ it('should throw error if coin is not supported', async () => {
52
+ const coinName = 'unsupportedCoin';
53
+ const messageRaw = 'test message';
54
+ const messageEncoded = 'encoded message';
55
+ const messageStandardType = sdk_core_1.MessageStandardType.EIP191;
56
+ const result = await accountLib.verifyMessage(coinName, messageRaw, messageEncoded, messageStandardType);
57
+ should_1.default.equal(result, false);
58
+ });
59
+ it('should verify EIP191 message successfully when both checks pass', async () => {
60
+ const coinName = 'eth';
61
+ eip191MessageBuilder.setPayload(testnetMessageRaw);
62
+ const message = await eip191MessageBuilder.build();
63
+ const messageEncodedHex = (await message.getSignablePayload()).toString('hex');
64
+ const result = await accountLib.verifyMessage(coinName, testnetMessageRaw, messageEncodedHex, sdk_core_1.MessageStandardType.EIP191);
65
+ should_1.default.equal(result, true);
66
+ });
67
+ it('should return false if template validation fails', async () => {
68
+ const coinName = 'eth';
69
+ const messageRaw = 'Invalid message format'; // Doesn't match the template
70
+ eip191MessageBuilder.setPayload(messageRaw);
71
+ const message = await eip191MessageBuilder.build();
72
+ const messageEncodedHex = (await message.getSignablePayload()).toString('hex');
73
+ const result = await accountLib.verifyMessage(coinName, testnetMessageRaw, messageEncodedHex, sdk_core_1.MessageStandardType.EIP191);
74
+ should_1.default.equal(result, false);
75
+ });
76
+ });
77
+ describe('CIP8 Message', function () {
78
+ const cip8MessageBuilder = accountLib.getMessageBuilderFactory('ada').getMessageBuilder(sdk_core_1.MessageStandardType.CIP8);
79
+ it('should check metadata for verifying CIP8 message', async () => {
80
+ const coinName = 'ada';
81
+ cip8MessageBuilder.setPayload(testnetMessageRaw);
82
+ cip8MessageBuilder.addSigner(adaTestnetOriginAddress);
83
+ const message = await cip8MessageBuilder.build();
84
+ const messageEncodedHex = (await message.getSignablePayload()).toString('hex');
85
+ // metadata is required for CIP8 message verification
86
+ let result = await accountLib.verifyMessage(coinName, testnetMessageRaw, messageEncodedHex, sdk_core_1.MessageStandardType.CIP8);
87
+ should_1.default.equal(result, false);
88
+ const metadata = {
89
+ signers: [adaTestnetOriginAddress],
90
+ };
91
+ result = await accountLib.verifyMessage(coinName, testnetMessageRaw, messageEncodedHex, sdk_core_1.MessageStandardType.CIP8, metadata);
92
+ should_1.default.equal(result, true);
93
+ });
94
+ });
95
+ });
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5TWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC92ZXJpZnlNZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHNEQUF3QztBQUN4QyxtREFBMkQ7QUFDM0QsMkNBQW9EO0FBRXBELFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO0lBQzdCLE1BQU0sdUJBQXVCLEdBQUcsaUVBQWlFLENBQUM7SUFDbEcsTUFBTSw0QkFBNEIsR0FBRyxpRUFBaUUsQ0FBQztJQUN2RyxNQUFNLGlCQUFpQixHQUFHLGVBQWUsNEJBQTRCLElBQUkseUJBQWlCLEVBQUUsQ0FBQztJQUU3RixRQUFRLENBQUMsZ0JBQWdCLEVBQUU7UUFDekIsTUFBTSxvQkFBb0IsR0FBRyxVQUFVO2FBQ3BDLHdCQUF3QixDQUFDLEtBQUssQ0FBQzthQUMvQixpQkFBaUIsQ0FBQyw4QkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqRCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDM0QsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUM7WUFDbkMsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDO1lBQ2xDLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDO1lBQ3pDLE1BQU0sbUJBQW1CLEdBQUcsOEJBQW1CLENBQUMsTUFBTSxDQUFDO1lBRXZELE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3pHLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxLQUFLLElBQUksRUFB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QUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgKiBhcyBhY2NvdW50TGliIGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBNZXNzYWdlU3RhbmRhcmRUeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgTUlETklHSFRfVE5DX0hBU0ggfSBmcm9tICcuLi8uLi9zcmMvdXRpbHMnO1xuXG5kZXNjcmliZSgndmVyaWZ5TWVzc2FnZScsICgpID0+IHtcbiAgY29uc3QgYWRhVGVzdG5ldE9yaWdpbkFkZHJlc3MgPSAnYWRkcl90ZXN0MXd6NGg2MDY4aHM5M244ajVhcjg4Zmd6ejZzZm53OGtybmcwOXh4MG1tZjM2bThjN2o5eWFwJztcbiAgY29uc3QgYWRhVGVzdG5ldERlc3RpbmF0aW9uQWRkcmVzcyA9ICdhZGRyX3Rlc3Qxdno3eHM3Y2V1NHh4OW41eG41N2xmZTg2dnJ3ZGRxcHA3N3Zqd3E1cHRsa2g0OWNxeTN3dXInO1xuICBjb25zdCB0ZXN0bmV0TWVzc2FnZVJhdyA9IGBTVEFSIDEwMCB0byAke2FkYVRlc3RuZXREZXN0aW5hdGlvbkFkZHJlc3N9ICR7TUlETklHSFRfVE5DX0hBU0h9YDtcblxuICBkZXNjcmliZSgnRUlQMTkxIE1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZWlwMTkxTWVzc2FnZUJ1aWxkZXIgPSBhY2NvdW50TGliXG4gICAgICAuZ2V0TWVzc2FnZUJ1aWxkZXJGYWN0b3J5KCdldGgnKVxuICAgICAgLmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxKTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgaWYgY29pbiBpcyBub3Qgc3VwcG9ydGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29pbk5hbWUgPSAndW5zdXBwb3J0ZWRDb2luJztcbiAgICAgIGNvbnN0IG1lc3NhZ2VSYXcgPSAndGVzdCBtZXNzYWdlJztcbiAgICAgIGNvbnN0IG1lc3NhZ2VFbmNvZGVkID0gJ2VuY29kZWQgbWVzc2FnZSc7XG4gICAgICBjb25zdCBtZXNzYWdlU3RhbmRhcmRUeXBlID0gTWVzc2FnZVN0YW5kYXJkVHlwZS5FSVAxOTE7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFjY291bnRMaWIudmVyaWZ5TWVzc2FnZShjb2luTmFtZSwgbWVzc2FnZVJhdywgbWVzc2FnZUVuY29kZWQsIG1lc3NhZ2VTdGFuZGFyZFR5cGUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJlc3VsdCwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgRUlQMTkxIG1lc3NhZ2Ugc3VjY2Vzc2Z1bGx5IHdoZW4gYm90aCBjaGVja3MgcGFzcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGNvaW5OYW1lID0gJ2V0aCc7XG4gICAgICBlaXAxOTFNZXNzYWdlQnVpbGRlci5zZXRQYXlsb2FkKHRlc3RuZXRNZXNzYWdlUmF3KTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBlaXAxOTFNZXNzYWdlQnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgbWVzc2FnZUVuY29kZWRIZXggPSAoYXdhaXQgbWVzc2FnZS5nZXRTaWduYWJsZVBheWxvYWQoKSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhY2NvdW50TGliLnZlcmlmeU1lc3NhZ2UoXG4gICAgICAgIGNvaW5OYW1lLFxuICAgICAgICB0ZXN0bmV0TWVzc2FnZVJhdyxcbiAgICAgICAgbWVzc2FnZUVuY29kZWRIZXgsXG4gICAgICAgIE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxLFxuICAgICAgKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgaWYgdGVtcGxhdGUgdmFsaWRhdGlvbiBmYWlscycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGNvaW5OYW1lID0gJ2V0aCc7XG4gICAgICBjb25zdCBtZXNzYWdlUmF3ID0gJ0ludmFsaWQgbWVzc2FnZSBmb3JtYXQnOyAvLyBEb2Vzbid0IG1hdGNoIHRoZSB0ZW1wbGF0ZVxuICAgICAgZWlwMTkxTWVzc2FnZUJ1aWxkZXIuc2V0UGF5bG9hZChtZXNzYWdlUmF3KTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBlaXAxOTFNZXNzYWdlQnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgbWVzc2FnZUVuY29kZWRIZXggPSAoYXdhaXQgbWVzc2FnZS5nZXRTaWduYWJsZVBheWxvYWQoKSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhY2NvdW50TGliLnZlcmlmeU1lc3NhZ2UoXG4gICAgICAgIGNvaW5OYW1lLFxuICAgICAgICB0ZXN0bmV0TWVzc2FnZVJhdyxcbiAgICAgICAgbWVzc2FnZUVuY29kZWRIZXgsXG4gICAgICAgIE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxLFxuICAgICAgKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQsIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NJUDggTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjaXA4TWVzc2FnZUJ1aWxkZXIgPSBhY2NvdW50TGliLmdldE1lc3NhZ2VCdWlsZGVyRmFjdG9yeSgnYWRhJykuZ2V0TWVzc2FnZUJ1aWxkZXIoTWVzc2FnZVN0YW5kYXJkVHlwZS5DSVA4KTtcblxuICAgIGl0KCdzaG91bGQgY2hlY2sgbWV0YWRhdGEgZm9yIHZlcmlmeWluZyBDSVA4IG1lc3NhZ2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjb2luTmFtZSA9ICdhZGEnO1xuICAgICAgY2lwOE1lc3NhZ2VCdWlsZGVyLnNldFBheWxvYWQodGVzdG5ldE1lc3NhZ2VSYXcpO1xuICAgICAgY2lwOE1lc3NhZ2VCdWlsZGVyLmFkZFNpZ25lcihhZGFUZXN0bmV0T3JpZ2luQWRkcmVzcyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgY2lwOE1lc3NhZ2VCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBtZXNzYWdlRW5jb2RlZEhleCA9IChhd2FpdCBtZXNzYWdlLmdldFNpZ25hYmxlUGF5bG9hZCgpKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICAgIC8vIG1ldGFkYXRhIGlzIHJlcXVpcmVkIGZvciBDSVA4IG1lc3NhZ2UgdmVyaWZpY2F0aW9uXG4gICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYWNjb3VudExpYi52ZXJpZnlNZXNzYWdlKFxuICAgICAgICBjb2luTmFtZSxcbiAgICAgICAgdGVzdG5ldE1lc3NhZ2VSYXcsXG4gICAgICAgIG1lc3NhZ2VFbmNvZGVkSGV4LFxuICAgICAgICBNZXNzYWdlU3RhbmRhcmRUeXBlLkNJUDgsXG4gICAgICApO1xuICAgICAgc2hvdWxkLmVxdWFsKHJlc3VsdCwgZmFsc2UpO1xuXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICAgICAgc2lnbmVyczogW2FkYVRlc3RuZXRPcmlnaW5BZGRyZXNzXSxcbiAgICAgIH07XG4gICAgICByZXN1bHQgPSBhd2FpdCBhY2NvdW50TGliLnZlcmlmeU1lc3NhZ2UoXG4gICAgICAgIGNvaW5OYW1lLFxuICAgICAgICB0ZXN0bmV0TWVzc2FnZVJhdyxcbiAgICAgICAgbWVzc2FnZUVuY29kZWRIZXgsXG4gICAgICAgIE1lc3NhZ2VTdGFuZGFyZFR5cGUuQ0lQOCxcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICApO1xuICAgICAgc2hvdWxkLmVxdWFsKHJlc3VsdCwgdHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=