@bitgo/sdk-core 38.13.0 → 38.16.0
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/dist/src/api/types.d.ts +6 -0
- package/dist/src/api/types.d.ts.map +1 -1
- package/dist/src/api/types.js +8 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +17 -7
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/defi/defiVault.d.ts +42 -8
- package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -1
- package/dist/src/bitgo/defi/defiVault.js +76 -10
- package/dist/src/bitgo/defi/iDefiVault.d.ts +22 -2
- package/dist/src/bitgo/defi/iDefiVault.d.ts.map +1 -1
- package/dist/src/bitgo/defi/iDefiVault.js +1 -1
- package/dist/src/bitgo/environments.js +3 -3
- package/dist/src/bitgo/internal/keycard.d.ts +2 -1
- package/dist/src/bitgo/internal/keycard.d.ts.map +1 -1
- package/dist/src/bitgo/internal/keycard.js +6 -3
- package/dist/src/bitgo/keychain/iKeychains.d.ts +6 -2
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +1 -1
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +24 -10
- package/dist/src/bitgo/safe/iSafe.d.ts +5 -2
- package/dist/src/bitgo/safe/iSafe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/iSafe.js +1 -1
- package/dist/src/bitgo/safe/safe.d.ts +14 -7
- package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/safe.js +105 -29
- package/dist/src/bitgo/staking/iStakingWallet.d.ts +13 -5
- package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/iStakingWallet.js +1 -1
- package/dist/src/bitgo/staking/stakingWallet.d.ts +2 -2
- package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/stakingWallet.js +14 -1
- package/dist/src/bitgo/tss/common.d.ts.map +1 -1
- package/dist/src/bitgo/tss/common.js +4 -1
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts +50 -0
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.js +112 -0
- package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/mpcUtils.js +15 -1
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +4 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +18 -6
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +9 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +24 -3
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +88 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +494 -0
- package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/index.js +2 -1
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts +20 -2
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.js +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +8 -5
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +33 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +260 -0
- package/dist/src/bitgo/utils/tss/eddsa/index.d.ts +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/index.js +2 -1
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts +15 -2
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.js +13 -2
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/recipientUtils.js +13 -1
- package/dist/src/bitgo/wallet/BuildParams.d.ts +8 -0
- package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/BuildParams.js +6 -1
- package/dist/src/bitgo/wallet/iWallet.d.ts +7 -1
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.d.ts +25 -2
- package/dist/src/bitgo/wallet/safeKeychain.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.js +72 -18
- package/dist/src/bitgo/wallet/wallet.d.ts +12 -4
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +82 -17
- package/dist/src/bitgo/wallet/wallets.d.ts +6 -0
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +35 -36
- package/dist/test/unit/bitgo/defi/defiVault.js +264 -1
- package/dist/test/unit/bitgo/keychain/keychains.js +43 -1
- package/dist/test/unit/bitgo/safe/safe.js +53 -22
- package/dist/test/unit/bitgo/tss/common.d.ts +2 -0
- package/dist/test/unit/bitgo/tss/common.d.ts.map +1 -0
- package/dist/test/unit/bitgo/tss/common.js +77 -0
- package/dist/test/unit/bitgo/tss/redpallas/redpallasMPCv2.d.ts +2 -0
- package/dist/test/unit/bitgo/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
- package/dist/test/unit/bitgo/tss/redpallas/redpallasMPCv2.js +181 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +70 -1
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +173 -0
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +33 -1
- package/dist/test/unit/bitgo/wallet/safeGetUserPrv.js +10 -10
- package/dist/test/unit/bitgo/wallet/safeShareWallet.d.ts +9 -0
- package/dist/test/unit/bitgo/wallet/safeShareWallet.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/safeShareWallet.js +303 -0
- package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.js +51 -40
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1,181 @@
|
|
|
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
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const pgp = __importStar(require("openpgp"));
|
|
38
|
+
const sdk_lib_mpc_1 = require("@bitgo/sdk-lib-mpc");
|
|
39
|
+
const public_types_1 = require("@bitgo/public-types");
|
|
40
|
+
const src_1 = require("../../../../../src");
|
|
41
|
+
const redpallasMPCv2_1 = require("../../../../../src/bitgo/tss/redpallas/redpallasMPCv2");
|
|
42
|
+
const codecs_1 = require("../../../../../src/bitgo/utils/codecs");
|
|
43
|
+
const opengpgUtils_1 = require("../../../../../src/bitgo/utils/opengpgUtils");
|
|
44
|
+
const typesMPCv2_1 = require("../../../../../src/bitgo/utils/tss/ecdsa/typesMPCv2");
|
|
45
|
+
describe('RedPallas MPS DSG helper functions', function () {
|
|
46
|
+
let userGpgPrivKey;
|
|
47
|
+
let backupGpgPrivKey;
|
|
48
|
+
let bitgoGpgPrivKey;
|
|
49
|
+
let bitgoGpgPubKey;
|
|
50
|
+
const userPayload = (round) => ({
|
|
51
|
+
from: typesMPCv2_1.MPCv2PartiesEnum.USER,
|
|
52
|
+
payload: new Uint8Array(Buffer.from(`user-round-${round}-payload`)),
|
|
53
|
+
});
|
|
54
|
+
const backupPayload = (round) => ({
|
|
55
|
+
from: typesMPCv2_1.MPCv2PartiesEnum.BACKUP,
|
|
56
|
+
payload: new Uint8Array(Buffer.from(`backup-round-${round}-payload`)),
|
|
57
|
+
});
|
|
58
|
+
const bitgoPayload = (round) => ({
|
|
59
|
+
from: typesMPCv2_1.MPCv2PartiesEnum.BITGO,
|
|
60
|
+
payload: new Uint8Array(Buffer.from(`bitgo-round-${round}-payload`)),
|
|
61
|
+
});
|
|
62
|
+
before('generate GPG key pairs', async function () {
|
|
63
|
+
const userGpgKeyPair = await (0, opengpgUtils_1.generateGPGKeyPair)('ed25519');
|
|
64
|
+
const backupGpgKeyPair = await (0, opengpgUtils_1.generateGPGKeyPair)('ed25519');
|
|
65
|
+
const bitgoGpgKeyPair = await (0, opengpgUtils_1.generateGPGKeyPair)('ed25519');
|
|
66
|
+
userGpgPrivKey = await pgp.readPrivateKey({ armoredKey: userGpgKeyPair.privateKey });
|
|
67
|
+
backupGpgPrivKey = await pgp.readPrivateKey({ armoredKey: backupGpgKeyPair.privateKey });
|
|
68
|
+
bitgoGpgPrivKey = await pgp.readPrivateKey({ armoredKey: bitgoGpgKeyPair.privateKey });
|
|
69
|
+
bitgoGpgPubKey = await pgp.readKey({ armoredKey: bitgoGpgKeyPair.publicKey });
|
|
70
|
+
});
|
|
71
|
+
// ── Round 1 ─────────────────────────────────────────────────────────────────
|
|
72
|
+
it('getSignatureShareRoundOne should build a valid round-1 share for the user', async function () {
|
|
73
|
+
const share = await (0, redpallasMPCv2_1.getSignatureShareRoundOne)(userPayload(1), userGpgPrivKey);
|
|
74
|
+
assert.strictEqual(share.from, src_1.SignatureShareType.USER);
|
|
75
|
+
assert.strictEqual(share.to, src_1.SignatureShareType.BITGO);
|
|
76
|
+
const parsed = (0, codecs_1.decodeWithCodec)(public_types_1.RedpallasMPCv2SignatureShareRound1Input, JSON.parse(share.share), 'RedpallasMPCv2SignatureShareRound1Input');
|
|
77
|
+
assert.strictEqual(parsed.type, 'round1Input');
|
|
78
|
+
assert.ok(parsed.data.msg1.message, 'msg1.message should be set');
|
|
79
|
+
assert.ok(parsed.data.msg1.signature, 'msg1.signature should be set');
|
|
80
|
+
});
|
|
81
|
+
it('getSignatureShareRoundOne should build a valid round-1 share for the backup', async function () {
|
|
82
|
+
const share = await (0, redpallasMPCv2_1.getSignatureShareRoundOne)(backupPayload(1), backupGpgPrivKey, typesMPCv2_1.MPCv2PartiesEnum.BACKUP);
|
|
83
|
+
assert.strictEqual(share.from, src_1.SignatureShareType.BACKUP);
|
|
84
|
+
assert.strictEqual(share.to, src_1.SignatureShareType.BITGO);
|
|
85
|
+
});
|
|
86
|
+
it('verifyPeerMessageRoundOne should verify a valid BitGo round-1 message', async function () {
|
|
87
|
+
const bitgoSignedMsg1 = await sdk_lib_mpc_1.RedPallasMPSComms.detachSignMpsMessage(Buffer.from(bitgoPayload(1).payload), bitgoGpgPrivKey);
|
|
88
|
+
const round1Output = {
|
|
89
|
+
type: 'round1Output',
|
|
90
|
+
data: { msg1: bitgoSignedMsg1 },
|
|
91
|
+
};
|
|
92
|
+
const result = await (0, redpallasMPCv2_1.verifyPeerMessageRoundOne)(round1Output, bitgoGpgPubKey);
|
|
93
|
+
assert.strictEqual(result.from, typesMPCv2_1.MPCv2PartiesEnum.BITGO);
|
|
94
|
+
assert.deepStrictEqual(Buffer.from(result.payload), Buffer.from(bitgoPayload(1).payload));
|
|
95
|
+
});
|
|
96
|
+
it('verifyPeerMessageRoundOne should throw on a tampered round-1 message', async function () {
|
|
97
|
+
const round1Output = {
|
|
98
|
+
type: 'round1Output',
|
|
99
|
+
data: {
|
|
100
|
+
msg1: {
|
|
101
|
+
message: Buffer.from('tampered').toString('base64'),
|
|
102
|
+
signature: '-----BEGIN PGP SIGNATURE-----\n\nINVALID\n-----END PGP SIGNATURE-----\n',
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
await assert.rejects((0, redpallasMPCv2_1.verifyPeerMessageRoundOne)(round1Output, bitgoGpgPubKey));
|
|
107
|
+
});
|
|
108
|
+
// ── Round 2 ─────────────────────────────────────────────────────────────────
|
|
109
|
+
it('getSignatureShareRoundTwo should build a valid round-2 share for the user', async function () {
|
|
110
|
+
const share = await (0, redpallasMPCv2_1.getSignatureShareRoundTwo)(userPayload(2), userGpgPrivKey);
|
|
111
|
+
assert.strictEqual(share.from, src_1.SignatureShareType.USER);
|
|
112
|
+
assert.strictEqual(share.to, src_1.SignatureShareType.BITGO);
|
|
113
|
+
const parsed = (0, codecs_1.decodeWithCodec)(public_types_1.RedpallasMPCv2SignatureShareRound2Input, JSON.parse(share.share), 'RedpallasMPCv2SignatureShareRound2Input');
|
|
114
|
+
assert.strictEqual(parsed.type, 'round2Input');
|
|
115
|
+
assert.ok(parsed.data.msg2.message, 'msg2.message should be set');
|
|
116
|
+
assert.ok(parsed.data.msg2.signature, 'msg2.signature should be set');
|
|
117
|
+
});
|
|
118
|
+
it('verifyPeerMessageRoundTwo should verify a valid BitGo round-2 message', async function () {
|
|
119
|
+
const bitgoSignedMsg2 = await sdk_lib_mpc_1.RedPallasMPSComms.detachSignMpsMessage(Buffer.from(bitgoPayload(2).payload), bitgoGpgPrivKey);
|
|
120
|
+
const round2Output = {
|
|
121
|
+
type: 'round2Output',
|
|
122
|
+
data: { msg2: bitgoSignedMsg2 },
|
|
123
|
+
};
|
|
124
|
+
const result = await (0, redpallasMPCv2_1.verifyPeerMessageRoundTwo)(round2Output, bitgoGpgPubKey);
|
|
125
|
+
assert.strictEqual(result.from, typesMPCv2_1.MPCv2PartiesEnum.BITGO);
|
|
126
|
+
assert.deepStrictEqual(Buffer.from(result.payload), Buffer.from(bitgoPayload(2).payload));
|
|
127
|
+
});
|
|
128
|
+
it('verifyPeerMessageRoundTwo should throw on a tampered round-2 message', async function () {
|
|
129
|
+
const round2Output = {
|
|
130
|
+
type: 'round2Output',
|
|
131
|
+
data: {
|
|
132
|
+
msg2: {
|
|
133
|
+
message: Buffer.from('tampered').toString('base64'),
|
|
134
|
+
signature: '-----BEGIN PGP SIGNATURE-----\n\nINVALID\n-----END PGP SIGNATURE-----\n',
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
await assert.rejects((0, redpallasMPCv2_1.verifyPeerMessageRoundTwo)(round2Output, bitgoGpgPubKey));
|
|
139
|
+
});
|
|
140
|
+
// ── Round 3 ─────────────────────────────────────────────────────────────────
|
|
141
|
+
it('getSignatureShareRoundThree should build a valid round-3 share for the backup', async function () {
|
|
142
|
+
const share = await (0, redpallasMPCv2_1.getSignatureShareRoundThree)(backupPayload(3), backupGpgPrivKey, typesMPCv2_1.MPCv2PartiesEnum.BACKUP);
|
|
143
|
+
assert.strictEqual(share.from, src_1.SignatureShareType.BACKUP);
|
|
144
|
+
assert.strictEqual(share.to, src_1.SignatureShareType.BITGO);
|
|
145
|
+
const parsed = (0, codecs_1.decodeWithCodec)(public_types_1.RedpallasMPCv2SignatureShareRound3Input, JSON.parse(share.share), 'RedpallasMPCv2SignatureShareRound3Input');
|
|
146
|
+
assert.strictEqual(parsed.type, 'round3Input');
|
|
147
|
+
assert.ok(parsed.data.msg3.message, 'msg3.message should be set');
|
|
148
|
+
assert.ok(parsed.data.msg3.signature, 'msg3.signature should be set');
|
|
149
|
+
});
|
|
150
|
+
it('verifyPeerMessageRoundThree should verify a valid BitGo round-3 message', async function () {
|
|
151
|
+
const bitgoSignedMsg3 = await sdk_lib_mpc_1.RedPallasMPSComms.detachSignMpsMessage(Buffer.from(bitgoPayload(3).payload), bitgoGpgPrivKey);
|
|
152
|
+
const round3Output = {
|
|
153
|
+
type: 'round3Output',
|
|
154
|
+
data: { msg3: bitgoSignedMsg3 },
|
|
155
|
+
};
|
|
156
|
+
const result = await (0, redpallasMPCv2_1.verifyPeerMessageRoundThree)(round3Output, bitgoGpgPubKey);
|
|
157
|
+
assert.strictEqual(result.from, typesMPCv2_1.MPCv2PartiesEnum.BITGO);
|
|
158
|
+
assert.deepStrictEqual(Buffer.from(result.payload), Buffer.from(bitgoPayload(3).payload));
|
|
159
|
+
});
|
|
160
|
+
it('verifyPeerMessageRoundThree should throw on a tampered round-3 message', async function () {
|
|
161
|
+
const round3Output = {
|
|
162
|
+
type: 'round3Output',
|
|
163
|
+
data: {
|
|
164
|
+
msg3: {
|
|
165
|
+
message: Buffer.from('tampered').toString('base64'),
|
|
166
|
+
signature: '-----BEGIN PGP SIGNATURE-----\n\nINVALID\n-----END PGP SIGNATURE-----\n',
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
await assert.rejects((0, redpallasMPCv2_1.verifyPeerMessageRoundThree)(round3Output, bitgoGpgPubKey));
|
|
171
|
+
});
|
|
172
|
+
// ── Envelope round-trip via the independent RedPallas MPS comms layer ───────
|
|
173
|
+
it('a share built by getSignatureShareRoundOne verifies against RedPallasMPSComms directly', async function () {
|
|
174
|
+
const share = await (0, redpallasMPCv2_1.getSignatureShareRoundOne)(userPayload(1), userGpgPrivKey);
|
|
175
|
+
const parsed = (0, codecs_1.decodeWithCodec)(public_types_1.RedpallasMPCv2SignatureShareRound1Input, JSON.parse(share.share), 'RedpallasMPCv2SignatureShareRound1Input');
|
|
176
|
+
const userGpgPubKey = userGpgPrivKey.toPublic();
|
|
177
|
+
const rawBytes = await sdk_lib_mpc_1.RedPallasMPSComms.verifyMpsMessage(parsed.data.msg1, userGpgPubKey);
|
|
178
|
+
assert.deepStrictEqual(rawBytes, Buffer.from(userPayload(1).payload));
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkcGFsbGFzTVBDdjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdHNzL3JlZHBhbGxhcy9yZWRwYWxsYXNNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isb0RBQTBFO0FBQzFFLHNEQU82QjtBQUM3Qiw0Q0FBOEU7QUFDOUUsMEZBTytEO0FBQy9ELGtFQUF3RTtBQUN4RSw4RUFBaUY7QUFDakYsb0ZBQXVGO0FBRXZGLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtJQUM3QyxJQUFJLGNBQThCLENBQUM7SUFDbkMsSUFBSSxnQkFBZ0MsQ0FBQztJQUNyQyxJQUFJLGVBQStCLENBQUM7SUFDcEMsSUFBSSxjQUF1QixDQUFDO0lBRTVCLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYSxFQUF5QyxFQUFFLENBQUMsQ0FBQztRQUM3RSxJQUFJLEVBQUUsNkJBQWdCLENBQUMsSUFBSTtRQUMzQixPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssVUFBVSxDQUFDLENBQUM7S0FDcEUsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFhLEVBQXlDLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLElBQUksRUFBRSw2QkFBZ0IsQ0FBQyxNQUFNO1FBQzdCLE9BQU8sRUFBRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLFVBQVUsQ0FBQyxDQUFDO0tBQ3RFLENBQUMsQ0FBQztJQUNILE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBYSxFQUF5QyxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLEVBQUUsNkJBQWdCLENBQUMsS0FBSztRQUM1QixPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFB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QUFDO1FBRUYsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUEsNENBQTJCLEVBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQyxDQUFDLENBQUM7SUFFSCwrRUFBK0U7SUFFL0UsRUFBRSxDQUFDLHdGQUF3RixFQUFFLEtBQUs7UUFDaEcsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFBLDBDQUF5QixFQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM5RSxNQUFNLE1BQU0sR0FBRyxJQUFBLHdCQUFlLEVBQzVCLHNEQUF1QyxFQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFDdkIseUNBQXlDLENBQzFDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEQsTUFBTSxRQUFRLEdBQUcsTUFBTSwrQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUUzRixNQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHBncCBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IFJlZFBhbGxhc01QU0NvbW1zLCBSZWRQYWxsYXNNUFNUeXBlcyB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5pbXBvcnQge1xuICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQsXG4gIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQsXG4gIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJJbnB1dCxcbiAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCxcbiAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM0lucHV0LFxuICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzT3V0cHV0LFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHtcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSxcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFR3byxcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFRocmVlLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby90c3MvcmVkcGFsbGFzL3JlZHBhbGxhc01QQ3YyJztcbmltcG9ydCB7IGRlY29kZVdpdGhDb2RlYyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy9jb2RlY3MnO1xuaW1wb3J0IHsgZ2VuZXJhdGVHUEdLZXlQYWlyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL29wZW5ncGdVdGlscyc7XG5pbXBvcnQgeyBNUEN2MlBhcnRpZXNFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9lY2RzYS90eXBlc01QQ3YyJztcblxuZGVzY3JpYmUoJ1JlZFBhbGxhcyBNUFMgRFNHIGhlbHBlciBmdW5jdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB1c2VyR3BnUHJpdktleTogcGdwLlByaXZhdGVLZXk7XG4gIGxldCBiYWNrdXBHcGdQcml2S2V5OiBwZ3AuUHJpdmF0ZUtleTtcbiAgbGV0IGJpdGdvR3BnUHJpdktleTogcGdwLlByaXZhdGVLZXk7XG4gIGxldCBiaXRnb0dwZ1B1YktleTogcGdwLktleTtcblxuICBjb25zdCB1c2VyUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICBwYXlsb2FkOiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShgdXNlci1yb3VuZC0ke3JvdW5kfS1wYXlsb2FkYCkpLFxuICB9KTtcbiAgY29uc3QgYmFja3VwUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLFxuICAgIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGBiYWNrdXAtcm91bmQtJHtyb3VuZH0tcGF5bG9hZGApKSxcbiAgfSk7XG4gIGNvbnN0IGJpdGdvUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oYGJpdGdvLXJvdW5kLSR7cm91bmR9LXBheWxvYWRgKSksXG4gIH0pO1xuXG4gIGJlZm9yZSgnZ2VuZXJhdGUgR1BHIGtleSBwYWlycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB1c2VyR3BnS2V5UGFpciA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignZWQyNTUxOScpO1xuICAgIGNvbnN0IGJhY2t1cEdwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcbiAgICBjb25zdCBiaXRnb0dwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcblxuICAgIHVzZXJHcGdQcml2S2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogdXNlckdwZ0tleVBhaXIucHJpdmF0ZUtleSB9KTtcbiAgICBiYWNrdXBHcGdQcml2S2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogYmFja3VwR3BnS2V5UGFpci5wcml2YXRlS2V5IH0pO1xuICAgIGJpdGdvR3BnUHJpdktleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IGJpdGdvR3BnS2V5UGFpci5wcml2YXRlS2V5IH0pO1xuICAgIGJpdGdvR3BnUHViS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5IH0pO1xuICB9KTtcblxuICAvLyDilIDilIAgUm91bmQgMSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSBzaG91bGQgYnVpbGQgYSB2YWxpZCByb3VuZC0xIHNoYXJlIGZvciB0aGUgdXNlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSBhd2FpdCBnZXRTaWduYXR1cmVTaGFyZVJvdW5kT25lKHVzZXJQYXlsb2FkKDEpLCB1c2VyR3BnUHJpdktleSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUuZnJvbSwgU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS50bywgU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPKTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZVdpdGhDb2RlYyhcbiAgICAgIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgICAgIEpTT04ucGFyc2Uoc2hhcmUuc2hhcmUpLFxuICAgICAgJ1JlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQudHlwZSwgJ3JvdW5kMUlucHV0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEubWVzc2FnZSwgJ21zZzEubWVzc2FnZSBzaG91bGQgYmUgc2V0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEuc2lnbmF0dXJlLCAnbXNnMS5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuICB9KTtcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSBzaG91bGQgYnVpbGQgYSB2YWxpZCByb3VuZC0xIHNoYXJlIGZvciB0aGUgYmFja3VwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRPbmUoXG4gICAgICBiYWNrdXBQYXlsb2FkKDEpLFxuICAgICAgYmFja3VwR3BnUHJpdktleSxcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUudG8sIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lIHNob3VsZCB2ZXJpZnkgYSB2YWxpZCBCaXRHbyByb3VuZC0xIG1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cxID0gYXdhaXQgUmVkUGFsbGFzTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoXG4gICAgICBCdWZmZXIuZnJvbShiaXRnb1BheWxvYWQoMSkucGF5bG9hZCksXG4gICAgICBiaXRnb0dwZ1ByaXZLZXlcbiAgICApO1xuICAgIGNvbnN0IHJvdW5kMU91dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMU91dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDFPdXRwdXQnLFxuICAgICAgZGF0YTogeyBtc2cxOiBiaXRnb1NpZ25lZE1zZzEgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5UGVlck1lc3NhZ2VSb3VuZE9uZShyb3VuZDFPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgxKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lIHNob3VsZCB0aHJvdyBvbiBhIHRhbXBlcmVkIHJvdW5kLTEgbWVzc2FnZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByb3VuZDFPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQxT3V0cHV0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbXNnMToge1xuICAgICAgICAgIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKCd0YW1wZXJlZCcpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICBzaWduYXR1cmU6ICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLVxcblxcbklOVkFMSURcXG4tLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS1cXG4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHModmVyaWZ5UGVlck1lc3NhZ2VSb3VuZE9uZShyb3VuZDFPdXRwdXQsIGJpdGdvR3BnUHViS2V5KSk7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCBSb3VuZCAyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGl0KCdnZXRTaWduYXR1cmVTaGFyZVJvdW5kVHdvIHNob3VsZCBidWlsZCBhIHZhbGlkIHJvdW5kLTIgc2hhcmUgZm9yIHRoZSB1c2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRUd28odXNlclBheWxvYWQoMiksIHVzZXJHcGdQcml2S2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0LFxuICAgICAgSlNPTi5wYXJzZShzaGFyZS5zaGFyZSksXG4gICAgICAnUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC50eXBlLCAncm91bmQySW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMi5tZXNzYWdlLCAnbXNnMi5tZXNzYWdlIHNob3VsZCBiZSBzZXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMi5zaWduYXR1cmUsICdtc2cyLnNpZ25hdHVyZSBzaG91bGQgYmUgc2V0Jyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvIHNob3VsZCB2ZXJpZnkgYSB2YWxpZCBCaXRHbyByb3VuZC0yIG1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cyID0gYXdhaXQgUmVkUGFsbGFzTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoXG4gICAgICBCdWZmZXIuZnJvbShiaXRnb1BheWxvYWQoMikucGF5bG9hZCksXG4gICAgICBiaXRnb0dwZ1ByaXZLZXlcbiAgICApO1xuICAgIGNvbnN0IHJvdW5kMk91dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDJPdXRwdXQnLFxuICAgICAgZGF0YTogeyBtc2cyOiBiaXRnb1NpZ25lZE1zZzIgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFR3byhyb3VuZDJPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgyKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvIHNob3VsZCB0aHJvdyBvbiBhIHRhbXBlcmVkIHJvdW5kLTIgbWVzc2FnZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByb3VuZDJPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQyT3V0cHV0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbXNnMjoge1xuICAgICAgICAgIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKCd0YW1wZXJlZCcpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICBzaWduYXR1cmU6ICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLVxcblxcbklOVkFMSURcXG4tLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS1cXG4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHModmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFR3byhyb3VuZDJPdXRwdXQsIGJpdGdvR3BnUHViS2V5KSk7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCBSb3VuZCAzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGl0KCdnZXRTaWduYXR1cmVTaGFyZVJvdW5kVGhyZWUgc2hvdWxkIGJ1aWxkIGEgdmFsaWQgcm91bmQtMyBzaGFyZSBmb3IgdGhlIGJhY2t1cCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSBhd2FpdCBnZXRTaWduYXR1cmVTaGFyZVJvdW5kVGhyZWUoXG4gICAgICBiYWNrdXBQYXlsb2FkKDMpLFxuICAgICAgYmFja3VwR3BnUHJpdktleSxcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUudG8sIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyk7XG5cbiAgICBjb25zdCBwYXJzZWQgPSBkZWNvZGVXaXRoQ29kZWMoXG4gICAgICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHNoYXJlLnNoYXJlKSxcbiAgICAgICdSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLnR5cGUsICdyb3VuZDNJbnB1dCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2czLm1lc3NhZ2UsICdtc2czLm1lc3NhZ2Ugc2hvdWxkIGJlIHNldCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2czLnNpZ25hdHVyZSwgJ21zZzMuc2lnbmF0dXJlIHNob3VsZCBiZSBzZXQnKTtcbiAgfSk7XG5cbiAgaXQoJ3ZlcmlmeVBlZXJNZXNzYWdlUm91bmRUaHJlZSBzaG91bGQgdmVyaWZ5IGEgdmFsaWQgQml0R28gcm91bmQtMyBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJpdGdvU2lnbmVkTXNnMyA9IGF3YWl0IFJlZFBhbGxhc01QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKFxuICAgICAgQnVmZmVyLmZyb20oYml0Z29QYXlsb2FkKDMpLnBheWxvYWQpLFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcbiAgICBjb25zdCByb3VuZDNPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQzT3V0cHV0JyxcbiAgICAgIGRhdGE6IHsgbXNnMzogYml0Z29TaWduZWRNc2czIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeVBlZXJNZXNzYWdlUm91bmRUaHJlZShyb3VuZDNPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgzKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUgc2hvdWxkIHRocm93IG9uIGEgdGFtcGVyZWQgcm91bmQtMyBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJvdW5kM091dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM091dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDNPdXRwdXQnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtc2czOiB7XG4gICAgICAgICAgbWVzc2FnZTogQnVmZmVyLmZyb20oJ3RhbXBlcmVkJykudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAgIHNpZ25hdHVyZTogJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXFxuXFxuSU5WQUxJRFxcbi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLVxcbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyh2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUocm91bmQzT3V0cHV0LCBiaXRnb0dwZ1B1YktleSkpO1xuICB9KTtcblxuICAvLyDilIDilIAgRW52ZWxvcGUgcm91bmQtdHJpcCB2aWEgdGhlIGluZGVwZW5kZW50IFJlZFBhbGxhcyBNUFMgY29tbXMgbGF5ZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgaXQoJ2Egc2hhcmUgYnVpbHQgYnkgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSB2ZXJpZmllcyBhZ2FpbnN0IFJlZFBhbGxhc01QU0NvbW1zIGRpcmVjdGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlID0gYXdhaXQgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSh1c2VyUGF5bG9hZCgxKSwgdXNlckdwZ1ByaXZLZXkpO1xuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZVdpdGhDb2RlYyhcbiAgICAgIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgICAgIEpTT04ucGFyc2Uoc2hhcmUuc2hhcmUpLFxuICAgICAgJ1JlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCdcbiAgICApO1xuXG4gICAgY29uc3QgdXNlckdwZ1B1YktleSA9IHVzZXJHcGdQcml2S2V5LnRvUHVibGljKCk7XG4gICAgY29uc3QgcmF3Qnl0ZXMgPSBhd2FpdCBSZWRQYWxsYXNNUFNDb21tcy52ZXJpZnlNcHNNZXNzYWdlKHBhcnNlZC5kYXRhLm1zZzEsIHVzZXJHcGdQdWJLZXkpO1xuXG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyYXdCeXRlcywgQnVmZmVyLmZyb20odXNlclBheWxvYWQoMSkucGF5bG9hZCkpO1xuICB9KTtcbn0pO1xuIl19
|