@bitgo/account-lib 27.11.2 → 27.11.3

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 (58) hide show
  1. package/dist/test/resources/ed25519Deriver.d.ts +15 -0
  2. package/dist/test/resources/ed25519Deriver.d.ts.map +1 -0
  3. package/dist/test/resources/ed25519Deriver.js +18 -0
  4. package/dist/test/resources/testTransaction.d.ts +11 -0
  5. package/dist/test/resources/testTransaction.d.ts.map +1 -0
  6. package/dist/test/resources/testTransaction.js +19 -0
  7. package/dist/test/resources/testTransactionBuilder.d.ts +26 -0
  8. package/dist/test/resources/testTransactionBuilder.d.ts.map +1 -0
  9. package/dist/test/resources/testTransactionBuilder.js +47 -0
  10. package/dist/test/unit/coin/baseCoin/transactionBuilder.d.ts +2 -0
  11. package/dist/test/unit/coin/baseCoin/transactionBuilder.d.ts.map +1 -0
  12. package/dist/test/unit/coin/baseCoin/transactionBuilder.js +135 -0
  13. package/dist/test/unit/fixtures.d.ts +16 -0
  14. package/dist/test/unit/fixtures.d.ts.map +1 -0
  15. package/dist/test/unit/fixtures.js +43 -0
  16. package/dist/test/unit/index.d.ts +2 -0
  17. package/dist/test/unit/index.d.ts.map +1 -0
  18. package/dist/test/unit/index.js +13 -0
  19. package/dist/test/unit/keyPair/index.d.ts +2 -0
  20. package/dist/test/unit/keyPair/index.d.ts.map +1 -0
  21. package/dist/test/unit/keyPair/index.js +132 -0
  22. package/dist/test/unit/messageFactory.d.ts +2 -0
  23. package/dist/test/unit/messageFactory.d.ts.map +1 -0
  24. package/dist/test/unit/messageFactory.js +52 -0
  25. package/dist/test/unit/mpc/tss/ecdsa/ecdsa.d.ts +2 -0
  26. package/dist/test/unit/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -0
  27. package/dist/test/unit/mpc/tss/ecdsa/ecdsa.js +333 -0
  28. package/dist/test/unit/mpc/tss/eddsa/eddsa.d.ts +5 -0
  29. package/dist/test/unit/mpc/tss/eddsa/eddsa.d.ts.map +1 -0
  30. package/dist/test/unit/mpc/tss/eddsa/eddsa.js +322 -0
  31. package/dist/test/unit/mpc/tss/fixtures/ecdsa.d.ts +130 -0
  32. package/dist/test/unit/mpc/tss/fixtures/ecdsa.d.ts.map +1 -0
  33. package/dist/test/unit/mpc/tss/fixtures/ecdsa.js +283 -0
  34. package/dist/test/unit/utils/crypto.d.ts +2 -0
  35. package/dist/test/unit/utils/crypto.d.ts.map +1 -0
  36. package/dist/test/unit/utils/crypto.js +60 -0
  37. package/dist/test/unit/utils/ed25519KeyDeriver.d.ts +2 -0
  38. package/dist/test/unit/utils/ed25519KeyDeriver.d.ts.map +1 -0
  39. package/dist/test/unit/utils/ed25519KeyDeriver.js +23 -0
  40. package/dist/test/unit/utils/index.d.ts +2 -0
  41. package/dist/test/unit/utils/index.d.ts.map +1 -0
  42. package/dist/test/unit/utils/index.js +61 -0
  43. package/dist/test/unit/utils/messages/index.d.ts +2 -0
  44. package/dist/test/unit/utils/messages/index.d.ts.map +1 -0
  45. package/dist/test/unit/utils/messages/index.js +51 -0
  46. package/dist/test/unit/verifyMessage.d.ts +2 -0
  47. package/dist/test/unit/verifyMessage.d.ts.map +1 -0
  48. package/dist/test/unit/verifyMessage.js +96 -0
  49. package/dist/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +66 -63
  51. package/.mocharc.js +0 -10
  52. package/CHANGELOG.md +0 -1691
  53. package/DEVELOPER.md +0 -93
  54. package/resources/README.md +0 -17
  55. package/resources/cspr/contract/keys-manager.wasm +0 -0
  56. package/resources/dot/index.ts +0 -2
  57. package/resources/dot/mainnet.ts +0 -2
  58. 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/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3V0aWxzL2NyeXB0by50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1Qiw4Q0FPeUI7QUFDekIsb0RBQTRCO0FBRTVCLFFBQVEsQ0FBQyxjQUFjLEVBQUU7SUFDdkIsUUFBUSxDQUFDLGdCQUFnQixFQUFFO1FBQ3pCLEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7WUFDN0QsTUFBTSxHQUFHLEdBQUcsSUFBQSxnQ0FBcUIsRUFDL0IsaUhBQWlILENBQ2xILENBQUM7WUFFRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZCxvSUFBb0ksQ0FDckksQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtZQUNyRCxNQUFNLEdBQUcsR0FBRyxJQUFBLHVCQUFZLEVBQ3RCLGlIQUFpSCxDQUNsSCxDQUFDO1lBRUYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztRQUN2RixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7WUFDN0QsTUFBTSxHQUFHLEdBQUcsSUFBQSwrQkFBb0IsRUFBQyxrRUFBa0UsQ0FBQyxDQUFDO1lBRXJHLGdCQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsR0FBRyxDQUFDLElBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNwQixpSEFBaUgsQ0FDbEgsQ0FBQztZQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDbkIsaUhBQWlILENBQ2xILENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGFBQWEsRUFBRTtRQUN0QixFQUFFLENBQUMsNkRBQTZELEVBQUUsR0FBRyxFQUFFO1lBQ3JFLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsZ0NBQXFCLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7WUFDN0QsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSx1QkFBWSxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsR0FBRyxFQUFFO1lBQ3RFLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsK0JBQW9CLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUM7UUFDckIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRTtZQUNqQyxJQUFBLHNCQUFXLEVBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUM5QyxJQUFBLHNCQUFXLEVBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsNkNBQTZDLEVBQUU7WUFDaEQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSxzQkFBVyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvREFBb0QsRUFBRTtRQUM3RCxFQUFFLENBQUMsdURBQXVELEVBQUU7WUFDMUQsTUFBTSxVQUFVLEdBQUcsQ0FBQywwRkFBMEYsQ0FBQyxDQUFDO1lBQ2hILE1BQU0sYUFBYSxHQUFHLElBQUEsbUNBQXdCLEVBQUMsVUFBVSxDQUFDLENBQUM7WUFDM0QsTUFBTSxXQUFXLEdBQUcsSUFBQSxtQ0FBd0IsRUFBQyxhQUFhLENBQUMsQ0FBQztZQUM1RCxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICB4cHViVG9VbmNvbXByZXNzZWRQdWIsXG4gIHhwcnZUb1Jhd1BydixcbiAgcmF3UHJ2VG9FeHRlbmRlZEtleXMsXG4gIGhleFRvQmlnSW50LFxuICBjb252ZXJ0SGV4QXJyVG9CaWdJbnRBcnIsXG4gIGNvbnZlcnRCaWdJbnRBcnJUb0hleEFycixcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcblxuZGVzY3JpYmUoJ0NyeXB0byB1dGlscycsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ3Nob3VsZCBzdWNjZWVkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCd0byBnZXQgYSB2YWxpZCB1bmNvbXByZXNzZWQgcHVibGljIGtleSBmcm9tIGFuIHhwdWInLCAoKSA9PiB7XG4gICAgICBjb25zdCBwdWIgPSB4cHViVG9VbmNvbXByZXNzZWRQdWIoXG4gICAgICAgICd4cHViNjYxTXlNd0FxUmJjRVlTOHc3WExTVmVFc0JYeTc5elN6SDFKOHZDZHhBWm5pbmdXTGROM3pndFU2UzU5OFVlS1QyRGpDZ1pENW94cml3VnlTNHQ1cHo3R2E1eEpWTnlCUGN2SlZ4YVJxNXEnLFxuICAgICAgKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KHB1Yik7XG4gICAgICBwdWIuc2hvdWxkLmVxdWFsKFxuICAgICAgICAnMDQwNzA2MzU4YjJiZjI5MTdkN2JlMTFhNjkyNjgxZDllNzI2NmU0MzFiMmRjMTI0Y2IxNWJhNmQ5ODUwMWVjYWIwOTFlNmUyNWNlODQyNzhjNTZlMWUyNjRiNjlkZjY3YjNmMzdlMmE3ZmZlNDFmM2Y1NmEwN2ZiMzkzMDk1ZDViMScsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RvIGdldCBhIHZhbGlkIHJhdyBwcml2YXRlIGtleSBmcm9tIGFuIHhwcnYnLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcnYgPSB4cHJ2VG9SYXdQcnYoXG4gICAgICAgICd4cHJ2OXMyMVpyUUgxNDNLMjRNZnE1ekw1TWhXSzloVWhoR2JkNDVoTFhvMlBxMm9xek1NbzYzb1N0WnpGOUhKMVo2OTU0TGhwRmtkSHpVWGZxb0U3R0g2ZXlKdlFTZll1QWRLMmdYR2pNNm12ZDInLFxuICAgICAgKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KHBydik7XG4gICAgICBwcnYuc2hvdWxkLmVxdWFsKCcxZjNjZDdhODU4YTExZWVmM2UzZjU5MWNiNTUzMjI0MWNlMTJjMjZiNTg4MTk3Yzg4ZWJiNDJjNmI2Y2JiNWJhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgndG8gZ2V0IGEgdmFsaWQgZXh0ZW5kZWQga2V5cyBmcm9tIGEgcmF3IHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgcHViID0gcmF3UHJ2VG9FeHRlbmRlZEtleXMoJzFGM0NEN0E4NThBMTFFRUYzRTNGNTkxQ0I1NTMyMjQxQ0UxMkMyNkI1ODgxOTdDODhFQkI0MkM2QjZDQkI1QkEnKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KHB1Yi54cHJ2KTtcbiAgICAgIHNob3VsZC5leGlzdChwdWIueHB1Yik7XG4gICAgICBwdWIueHBydiEuc2hvdWxkLmVxdWFsKFxuICAgICAgICAneHBydjlzMjFaclFIMTQzSzI0TWZxNXpMNU1oV0s5aFVoaEdiZDQ1aExYbzJQcTJvcXpNTW82M29TdFp6RjlISjFaNjk1NExocEZrZEh6VVhmcW9FN0dINmV5SnZRU2ZZdUFkSzJnWEdqTTZtdmQyJyxcbiAgICAgICk7XG4gICAgICBwdWIueHB1Yi5zaG91bGQuZXF1YWwoXG4gICAgICAgICd4cHViNjYxTXlNd0FxUmJjRVlTOHc3WExTVmVFc0JYeTc5elN6SDFKOHZDZHhBWm5pbmdXTGROM3pndFU2UzU5OFVlS1QyRGpDZ1pENW94cml3VnlTNHQ1cHo3R2E1eEpWTnlCUGN2SlZ4YVJxNXEnLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBmYWlsJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCd0byBnZXQgYSB2YWxpZCB1bmNvbXByZXNzZWQgcHVibGljIGtleSBmcm9tIGFuIGludmFsaWQgeHB1YicsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4geHB1YlRvVW5jb21wcmVzc2VkUHViKCd4cHViJykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RvIGdldCBhIHZhbGlkIHJhdyBwcml2YXRlIGtleSBmcm9tIGFuIGludmFsaWQgeHBydicsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4geHBydlRvUmF3UHJ2KCd4cHJ2JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RvIGdldCBhIHZhbGlkIGV4dGVuZGVkIGtleXMgZnJvbSBhbiBpbnZhbGlkIHJhdyBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcmF3UHJ2VG9FeHRlbmRlZEtleXMoJ0FCQ0QnKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdoZXhUb0JpZ0ludCB1dGlsaXR5JywgKCkgPT4ge1xuICAgIGNvbnN0IGhleCA9ICczNjExOWQnO1xuICAgIGNvbnN0IG51bWJlciA9IDM1NDM0NTM7XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGhleCB0byBCaWdJbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBoZXhUb0JpZ0ludChoZXgpLnNob3VsZC5lcXVhbChCaWdJbnQobnVtYmVyKSk7XG4gICAgICBoZXhUb0JpZ0ludCgnMHgnICsgaGV4KS5zaG91bGQuZXF1YWwoQmlnSW50KG51bWJlcikpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgY29udmVydGluZyBoZXggdG8gQmlnSW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBoZXhUb0JpZ0ludCgnb3AnKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb252ZXJ0SGV4VG9CaWdJbnRBcnIgYW5kIGNvbnZlcnRCaWdJbnRBcnJUb0hleEFycicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnYWJsZSB0byBzZXJpYWxpemUvZGVzZXJpYWxpemUgYmV0d2VlbiB0aGUgdHdvIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmYWtlSGV4QXJyID0gWyc4YWJjNTI4ZTY3MTMyNDEzNWQ3MDkzOTVhNGNmMjU1MmU4NDJmNjQ4YjgyNDVkZjY1ZjE0NDMxMWQ0NDgyMDgyMTE3MzU1NDQwYWU1NjVmYWYyMWQ3NTg3J107XG4gICAgICBjb25zdCBmYWtlQmlnSW50QXJyID0gY29udmVydEhleEFyclRvQmlnSW50QXJyKGZha2VIZXhBcnIpO1xuICAgICAgY29uc3QgaGV4QXJyQWdhaW4gPSBjb252ZXJ0QmlnSW50QXJyVG9IZXhBcnIoZmFrZUJpZ0ludEFycik7XG4gICAgICBoZXhBcnJBZ2Fpbi5zaG91bGQuZGVlcEVxdWFsKGZha2VIZXhBcnIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -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/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOUtleURlcml2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMvZWQyNTUxOUtleURlcml2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZ0I7QUFDaEIsOENBQW9EO0FBQ3BELG1FQUFzRDtBQUV0RCxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7UUFDMUQsTUFBTSxVQUFVLEdBQUcsNEJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDaEMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztZQUM1QixTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGLDBGQUEwRjtJQUMxRixFQUFFLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO1FBQ3ZELGdCQUFnQixDQUFDLHFCQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFFSCwwRkFBMEY7SUFDMUYsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtRQUN2RCxnQkFBZ0IsQ0FBQyxxQkFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBFZDI1NTE5S2V5RGVyaXZlciB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2VkMjU1MTlEZXJpdmVyJztcblxuZGVzY3JpYmUoJ0tleSBEZXJpdmF0aW9uOicsICgpID0+IHtcbiAgY29uc3QgdmVyaWZ5VGVzdFZlY3RvciA9ICh7IHBhdGgsIHNlZWQsIHBydiwgY2hhaW5Db2RlIH0pID0+IHtcbiAgICBjb25zdCBkZXJpdmVkS2V5ID0gRWQyNTUxOUtleURlcml2ZXIuZGVyaXZlUGF0aChwYXRoLCBzZWVkKTtcbiAgICBkZXJpdmVkS2V5LnNob3VsZC5oYXZlLnByb3BlcnRpZXMoe1xuICAgICAga2V5OiBCdWZmZXIuZnJvbShwcnYsICdoZXgnKSxcbiAgICAgIGNoYWluQ29kZTogQnVmZmVyLmZyb20oY2hhaW5Db2RlLCAnaGV4JyksXG4gICAgfSk7XG4gIH07XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3NhdG9zaGlsYWJzL3NsaXBzL2Jsb2IvbWFzdGVyL3NsaXAtMDAxMC5tZCN0ZXN0LXZlY3Rvci0xLWZvci1lZDI1NTE5XG4gIGl0KCdzaG91bGQgZGVyaXZlIFNMSVAtMDAxMCBlZDI1NTE5IHRlc3QgdmVjdG9yIDEnLCAoKSA9PiB7XG4gICAgdmVyaWZ5VGVzdFZlY3RvcihrZXlzLnRlc3RWZWMxKTtcbiAgfSk7XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3NhdG9zaGlsYWJzL3NsaXBzL2Jsb2IvbWFzdGVyL3NsaXAtMDAxMC5tZCN0ZXN0LXZlY3Rvci0yLWZvci1lZDI1NTE5XG4gIGl0KCdzaG91bGQgZGVyaXZlIFNMSVAtMDAxMCBlZDI1NTE5IHRlc3QgdmVjdG9yIDInLCAoKSA9PiB7XG4gICAgdmVyaWZ5VGVzdFZlY3RvcihrZXlzLnRlc3RWZWMyKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -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/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5TWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC92ZXJpZnlNZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHNEQUF3QztBQUN4Qyw4Q0FBc0Q7QUFDdEQsMkNBQW9EO0FBRXBELFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO0lBQzdCLE1BQU0sdUJBQXVCLEdBQUcsaUVBQWlFLENBQUM7SUFDbEcsTUFBTSw0QkFBNEIsR0FBRyxpRUFBaUUsQ0FBQztJQUN2RyxNQUFNLGlCQUFpQixHQUFHLGVBQWUsNEJBQTRCLElBQUkseUJBQWlCLEVBQUUsQ0FBQztJQUU3RixRQUFRLENBQUMsZ0JBQWdCLEVBQUU7UUFDekIsTUFBTSxvQkFBb0IsR0FBRyxVQUFVO2FBQ3BDLHdCQUF3QixDQUFDLEtBQUssQ0FBQzthQUMvQixpQkFBaUIsQ0FBQyw4QkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqRCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDM0QsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUM7WUFDbkMsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDO1lBQ2xDLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDO1lBQ3pDLE1BQU0sbUJBQW1CLEdBQUcsOEJBQW1CLENBQUMsTUFBTSxDQUFDO1lBRXZELE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3pHLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxLQUFLLElBQUksRUFB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QUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgKiBhcyBhY2NvdW50TGliIGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBNZXNzYWdlU3RhbmRhcmRUeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IE1JRE5JR0hUX1ROQ19IQVNIIH0gZnJvbSAnLi4vLi4vc3JjL3V0aWxzJztcblxuZGVzY3JpYmUoJ3ZlcmlmeU1lc3NhZ2UnLCAoKSA9PiB7XG4gIGNvbnN0IGFkYVRlc3RuZXRPcmlnaW5BZGRyZXNzID0gJ2FkZHJfdGVzdDF3ejRoNjA2OGhzOTNuOGo1YXI4OGZneno2c2Zudzhrcm5nMDl4eDBtbWYzNm04YzdqOXlhcCc7XG4gIGNvbnN0IGFkYVRlc3RuZXREZXN0aW5hdGlvbkFkZHJlc3MgPSAnYWRkcl90ZXN0MXZ6N3hzN2NldTR4eDluNXhuNTdsZmU4NnZyd2RkcXBwNzd2andxNXB0bGtoNDljcXkzd3VyJztcbiAgY29uc3QgdGVzdG5ldE1lc3NhZ2VSYXcgPSBgU1RBUiAxMDAgdG8gJHthZGFUZXN0bmV0RGVzdGluYXRpb25BZGRyZXNzfSAke01JRE5JR0hUX1ROQ19IQVNIfWA7XG5cbiAgZGVzY3JpYmUoJ0VJUDE5MSBNZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGVpcDE5MU1lc3NhZ2VCdWlsZGVyID0gYWNjb3VudExpYlxuICAgICAgLmdldE1lc3NhZ2VCdWlsZGVyRmFjdG9yeSgnZXRoJylcbiAgICAgIC5nZXRNZXNzYWdlQnVpbGRlcihNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIGNvaW4gaXMgbm90IHN1cHBvcnRlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGNvaW5OYW1lID0gJ3Vuc3VwcG9ydGVkQ29pbic7XG4gICAgICBjb25zdCBtZXNzYWdlUmF3ID0gJ3Rlc3QgbWVzc2FnZSc7XG4gICAgICBjb25zdCBtZXNzYWdlRW5jb2RlZCA9ICdlbmNvZGVkIG1lc3NhZ2UnO1xuICAgICAgY29uc3QgbWVzc2FnZVN0YW5kYXJkVHlwZSA9IE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhY2NvdW50TGliLnZlcmlmeU1lc3NhZ2UoY29pbk5hbWUsIG1lc3NhZ2VSYXcsIG1lc3NhZ2VFbmNvZGVkLCBtZXNzYWdlU3RhbmRhcmRUeXBlKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IEVJUDE5MSBtZXNzYWdlIHN1Y2Nlc3NmdWxseSB3aGVuIGJvdGggY2hlY2tzIHBhc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjb2luTmFtZSA9ICdldGgnO1xuICAgICAgZWlwMTkxTWVzc2FnZUJ1aWxkZXIuc2V0UGF5bG9hZCh0ZXN0bmV0TWVzc2FnZVJhdyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgZWlwMTkxTWVzc2FnZUJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VFbmNvZGVkSGV4ID0gKGF3YWl0IG1lc3NhZ2UuZ2V0U2lnbmFibGVQYXlsb2FkKCkpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWNjb3VudExpYi52ZXJpZnlNZXNzYWdlKFxuICAgICAgICBjb2luTmFtZSxcbiAgICAgICAgdGVzdG5ldE1lc3NhZ2VSYXcsXG4gICAgICAgIG1lc3NhZ2VFbmNvZGVkSGV4LFxuICAgICAgICBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSxcbiAgICAgICk7XG4gICAgICBzaG91bGQuZXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGlmIHRlbXBsYXRlIHZhbGlkYXRpb24gZmFpbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjb2luTmFtZSA9ICdldGgnO1xuICAgICAgY29uc3QgbWVzc2FnZVJhdyA9ICdJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0JzsgLy8gRG9lc24ndCBtYXRjaCB0aGUgdGVtcGxhdGVcbiAgICAgIGVpcDE5MU1lc3NhZ2VCdWlsZGVyLnNldFBheWxvYWQobWVzc2FnZVJhdyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgZWlwMTkxTWVzc2FnZUJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VFbmNvZGVkSGV4ID0gKGF3YWl0IG1lc3NhZ2UuZ2V0U2lnbmFibGVQYXlsb2FkKCkpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWNjb3VudExpYi52ZXJpZnlNZXNzYWdlKFxuICAgICAgICBjb2luTmFtZSxcbiAgICAgICAgdGVzdG5ldE1lc3NhZ2VSYXcsXG4gICAgICAgIG1lc3NhZ2VFbmNvZGVkSGV4LFxuICAgICAgICBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSxcbiAgICAgICk7XG4gICAgICBzaG91bGQuZXF1YWwocmVzdWx0LCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDSVA4IE1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY2lwOE1lc3NhZ2VCdWlsZGVyID0gYWNjb3VudExpYi5nZXRNZXNzYWdlQnVpbGRlckZhY3RvcnkoJ2FkYScpLmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuQ0lQOCk7XG5cbiAgICBpdCgnc2hvdWxkIGNoZWNrIG1ldGFkYXRhIGZvciB2ZXJpZnlpbmcgQ0lQOCBtZXNzYWdlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29pbk5hbWUgPSAnYWRhJztcbiAgICAgIGNpcDhNZXNzYWdlQnVpbGRlci5zZXRQYXlsb2FkKHRlc3RuZXRNZXNzYWdlUmF3KTtcbiAgICAgIGNpcDhNZXNzYWdlQnVpbGRlci5hZGRTaWduZXIoYWRhVGVzdG5ldE9yaWdpbkFkZHJlc3MpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGNpcDhNZXNzYWdlQnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgbWVzc2FnZUVuY29kZWRIZXggPSAoYXdhaXQgbWVzc2FnZS5nZXRTaWduYWJsZVBheWxvYWQoKSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgICAvLyBtZXRhZGF0YSBpcyByZXF1aXJlZCBmb3IgQ0lQOCBtZXNzYWdlIHZlcmlmaWNhdGlvblxuICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFjY291bnRMaWIudmVyaWZ5TWVzc2FnZShcbiAgICAgICAgY29pbk5hbWUsXG4gICAgICAgIHRlc3RuZXRNZXNzYWdlUmF3LFxuICAgICAgICBtZXNzYWdlRW5jb2RlZEhleCxcbiAgICAgICAgTWVzc2FnZVN0YW5kYXJkVHlwZS5DSVA4LFxuICAgICAgKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQsIGZhbHNlKTtcblxuICAgICAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAgICAgIHNpZ25lcnM6IFthZGFUZXN0bmV0T3JpZ2luQWRkcmVzc10sXG4gICAgICB9O1xuICAgICAgcmVzdWx0ID0gYXdhaXQgYWNjb3VudExpYi52ZXJpZnlNZXNzYWdlKFxuICAgICAgICBjb2luTmFtZSxcbiAgICAgICAgdGVzdG5ldE1lc3NhZ2VSYXcsXG4gICAgICAgIG1lc3NhZ2VFbmNvZGVkSGV4LFxuICAgICAgICBNZXNzYWdlU3RhbmRhcmRUeXBlLkNJUDgsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQsIHRydWUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19