@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.
- package/README.md +1 -1
- package/dist/resources/dot/index.js +6 -2
- package/dist/resources/dot/westend.d.ts +1 -1
- package/dist/resources/dot/westend.d.ts.map +1 -1
- package/dist/resources/dot/westend.js +2 -2
- package/dist/resources/dot/westend.ts +1 -1
- package/dist/src/index.d.ts +110 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +259 -17
- package/dist/src/keyPair/index.js +24 -11
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +27 -10
- package/dist/src/utils/messages/index.d.ts +10 -0
- package/dist/src/utils/messages/index.d.ts.map +1 -0
- package/dist/src/utils/messages/index.js +30 -0
- package/dist/test/resources/ed25519Deriver.d.ts +15 -0
- package/dist/test/resources/ed25519Deriver.d.ts.map +1 -0
- package/dist/test/resources/ed25519Deriver.js +18 -0
- package/dist/test/resources/testTransaction.d.ts +11 -0
- package/dist/test/resources/testTransaction.d.ts.map +1 -0
- package/dist/test/resources/testTransaction.js +19 -0
- package/dist/test/resources/testTransactionBuilder.d.ts +26 -0
- package/dist/test/resources/testTransactionBuilder.d.ts.map +1 -0
- package/dist/test/resources/testTransactionBuilder.js +47 -0
- package/dist/test/unit/coin/baseCoin/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/coin/baseCoin/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/coin/baseCoin/transactionBuilder.js +135 -0
- package/dist/test/unit/fixtures.d.ts +16 -0
- package/dist/test/unit/fixtures.d.ts.map +1 -0
- package/dist/test/unit/fixtures.js +43 -0
- package/dist/test/unit/index.d.ts +2 -0
- package/dist/test/unit/index.d.ts.map +1 -0
- package/dist/test/unit/index.js +13 -0
- package/dist/test/unit/keyPair/index.d.ts +2 -0
- package/dist/test/unit/keyPair/index.d.ts.map +1 -0
- package/dist/test/unit/keyPair/index.js +132 -0
- package/dist/test/unit/messageFactory.d.ts +2 -0
- package/dist/test/unit/messageFactory.d.ts.map +1 -0
- package/dist/test/unit/messageFactory.js +78 -0
- package/dist/test/unit/mpc/tss/ecdsa/ecdsa.d.ts +2 -0
- package/dist/test/unit/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -0
- package/dist/test/unit/mpc/tss/ecdsa/ecdsa.js +333 -0
- package/dist/test/unit/mpc/tss/eddsa/eddsa.d.ts +5 -0
- package/dist/test/unit/mpc/tss/eddsa/eddsa.d.ts.map +1 -0
- package/dist/test/unit/mpc/tss/eddsa/eddsa.js +322 -0
- package/dist/test/unit/mpc/tss/fixtures/ecdsa.d.ts +130 -0
- package/dist/test/unit/mpc/tss/fixtures/ecdsa.d.ts.map +1 -0
- package/dist/test/unit/mpc/tss/fixtures/ecdsa.js +283 -0
- package/dist/test/unit/utils/crypto.d.ts +2 -0
- package/dist/test/unit/utils/crypto.d.ts.map +1 -0
- package/dist/test/unit/utils/crypto.js +60 -0
- package/dist/test/unit/utils/ed25519KeyDeriver.d.ts +2 -0
- package/dist/test/unit/utils/ed25519KeyDeriver.d.ts.map +1 -0
- package/dist/test/unit/utils/ed25519KeyDeriver.js +23 -0
- package/dist/test/unit/utils/index.d.ts +2 -0
- package/dist/test/unit/utils/index.d.ts.map +1 -0
- package/dist/test/unit/utils/index.js +61 -0
- package/dist/test/unit/utils/messages/index.d.ts +2 -0
- package/dist/test/unit/utils/messages/index.d.ts.map +1 -0
- package/dist/test/unit/utils/messages/index.js +51 -0
- package/dist/test/unit/verifyMessage.d.ts +2 -0
- package/dist/test/unit/verifyMessage.d.ts.map +1 -0
- package/dist/test/unit/verifyMessage.js +96 -0
- package/dist/tsconfig.tsbuildinfo +1 -43551
- package/package.json +77 -32
- package/.mocharc.js +0 -10
- package/CHANGELOG.md +0 -409
- package/DEVELOPER.md +0 -93
- package/resources/README.md +0 -17
- package/resources/cspr/contract/keys-manager.wasm +0 -0
- package/resources/dot/index.ts +0 -2
- package/resources/dot/mainnet.ts +0 -2
- package/resources/dot/westend.ts +0 -2
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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=
|