@bitgo-beta/sdk-core 8.2.1-beta.2030 → 8.2.1-beta.2032
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/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/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +14 -3
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +39 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +344 -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 +17 -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/wallet/iWallet.d.ts +2 -0
- 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/wallet.d.ts +10 -4
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +19 -6
- 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/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/wallet/walletsEncryptionVersion.js +51 -40
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -8
- package/LICENSE +0 -191
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { DklsTypes } from '@bitgo-beta/sdk-lib-mpc';
|
|
2
|
+
import type { KeychainsTriplet } from '../../../baseCoin';
|
|
3
|
+
import type { DecryptedRetrofitPayload } from '../../../keychain/iKeychains';
|
|
4
|
+
import type { EncryptionVersion } from '../../../../api';
|
|
5
|
+
import type { WebauthnKeyEncryptionInfo } from '../../../keychain';
|
|
6
|
+
import { EddsaMPCv2Utils } from './eddsaMPCv2';
|
|
7
|
+
export declare function serializeVrfMessages(messages: DklsTypes.DeserializedMessages): string;
|
|
8
|
+
export declare function deserializeVrfMessages(blob: string, forParty: number): DklsTypes.DeserializedMessages;
|
|
9
|
+
/**
|
|
10
|
+
* Combines the signing keyshare with the VRF keyshare in the CBOR envelope used
|
|
11
|
+
* by safe MPC roots. The reduced envelope is used for reducedEncryptedPrv.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildVrfKeyEnvelopes(privateMaterial: Buffer, reducedPrivateMaterial: Buffer, vrfKeyShare: Buffer): {
|
|
14
|
+
envelope: Buffer;
|
|
15
|
+
reducedEnvelope: Buffer;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* EdDSA MPCv2 key generation for safe roots. The two-round MPS VRF DKG rides
|
|
19
|
+
* the existing MPCv2-R1/R2 payloads and is only selected when safeId is set.
|
|
20
|
+
*/
|
|
21
|
+
export declare class EddsaVrfMPCv2Utils extends EddsaMPCv2Utils {
|
|
22
|
+
/** @inheritdoc */
|
|
23
|
+
createKeychains(params: {
|
|
24
|
+
passphrase: string;
|
|
25
|
+
enterprise: string;
|
|
26
|
+
originalPasscodeEncryptionCode?: string;
|
|
27
|
+
retrofit?: DecryptedRetrofitPayload;
|
|
28
|
+
webauthnInfo?: WebauthnKeyEncryptionInfo;
|
|
29
|
+
encryptionVersion?: EncryptionVersion;
|
|
30
|
+
safeId: string;
|
|
31
|
+
}): Promise<KeychainsTriplet>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=eddsaVrfMPCv2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eddsaVrfMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmC,MAAM,yBAAyB,CAAC;AAYrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAmB/C,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,oBAAoB,GAAG,MAAM,CAarF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,oBAAoB,CAyBrG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,EACvB,sBAAsB,EAAE,MAAM,EAC9B,WAAW,EAAE,MAAM,GAClB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAY/C;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,kBAAkB;IACZ,eAAe,CAAC,MAAM,EAAE;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;QACpC,YAAY,CAAC,EAAE,yBAAyB,CAAC;QACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;QACtC,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAuM9B"}
|
|
@@ -0,0 +1,260 @@
|
|
|
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
|
+
exports.EddsaVrfMPCv2Utils = void 0;
|
|
40
|
+
exports.serializeVrfMessages = serializeVrfMessages;
|
|
41
|
+
exports.deserializeVrfMessages = deserializeVrfMessages;
|
|
42
|
+
exports.buildVrfKeyEnvelopes = buildVrfKeyEnvelopes;
|
|
43
|
+
const sdk_lib_mpc_1 = require("@bitgo-beta/sdk-lib-mpc");
|
|
44
|
+
const public_types_1 = require("@bitgo/public-types");
|
|
45
|
+
const cbor_x_1 = require("cbor-x");
|
|
46
|
+
const assert_1 = __importDefault(require("assert"));
|
|
47
|
+
const t = __importStar(require("io-ts"));
|
|
48
|
+
const pgp = __importStar(require("openpgp"));
|
|
49
|
+
const io_ts_types_1 = require("io-ts-types");
|
|
50
|
+
const opengpgUtils_1 = require("../../opengpgUtils");
|
|
51
|
+
const bitgoPubKeys_1 = require("../../../tss/bitgoPubKeys");
|
|
52
|
+
const codecs_1 = require("../../codecs");
|
|
53
|
+
const eddsaMPCv2_1 = require("./eddsaMPCv2");
|
|
54
|
+
const eddsaMPCv2KeyGenSender_1 = require("./eddsaMPCv2KeyGenSender");
|
|
55
|
+
const typesMPCv2_1 = require("../ecdsa/typesMPCv2");
|
|
56
|
+
const VRF_KEY_ENVELOPE_VERSION = 1;
|
|
57
|
+
const VrfPartyId = (0, codecs_1.boundedInt)(0, 2, 'VrfPartyId');
|
|
58
|
+
const VrfMessageTransferCodec = t.intersection([
|
|
59
|
+
t.type({
|
|
60
|
+
from: VrfPartyId,
|
|
61
|
+
payload: codecs_1.base64String,
|
|
62
|
+
}),
|
|
63
|
+
t.partial({ to: VrfPartyId }),
|
|
64
|
+
]);
|
|
65
|
+
const VrfMessageTransfersCodec = t.array(VrfMessageTransferCodec);
|
|
66
|
+
function serializeVrfMessages(messages) {
|
|
67
|
+
const transfers = [
|
|
68
|
+
...messages.broadcastMessages.map((message) => ({
|
|
69
|
+
from: message.from,
|
|
70
|
+
payload: Buffer.from(message.payload).toString('base64'),
|
|
71
|
+
})),
|
|
72
|
+
...messages.p2pMessages.map((message) => ({
|
|
73
|
+
from: message.from,
|
|
74
|
+
to: message.to,
|
|
75
|
+
payload: Buffer.from(message.payload).toString('base64'),
|
|
76
|
+
})),
|
|
77
|
+
];
|
|
78
|
+
return Buffer.from(JSON.stringify(transfers)).toString('base64');
|
|
79
|
+
}
|
|
80
|
+
function deserializeVrfMessages(blob, forParty) {
|
|
81
|
+
let parsed;
|
|
82
|
+
try {
|
|
83
|
+
parsed = JSON.parse(Buffer.from(blob, 'base64').toString());
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
const reason = error instanceof Error ? error.message : 'malformed JSON';
|
|
87
|
+
throw new Error(`Invalid VRF DKG message blob: ${reason}`);
|
|
88
|
+
}
|
|
89
|
+
const transfers = (0, codecs_1.decodeWithCodec)(VrfMessageTransfersCodec, parsed, 'VRF DKG message blob');
|
|
90
|
+
return {
|
|
91
|
+
broadcastMessages: transfers
|
|
92
|
+
.filter((message) => message.to === undefined)
|
|
93
|
+
.map((message) => ({
|
|
94
|
+
from: message.from,
|
|
95
|
+
payload: new Uint8Array(Buffer.from(message.payload, 'base64')),
|
|
96
|
+
})),
|
|
97
|
+
p2pMessages: transfers
|
|
98
|
+
.filter((message) => message.to === forParty)
|
|
99
|
+
.map((message) => ({
|
|
100
|
+
from: message.from,
|
|
101
|
+
to: message.to,
|
|
102
|
+
payload: new Uint8Array(Buffer.from(message.payload, 'base64')),
|
|
103
|
+
})),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Combines the signing keyshare with the VRF keyshare in the CBOR envelope used
|
|
108
|
+
* by safe MPC roots. The reduced envelope is used for reducedEncryptedPrv.
|
|
109
|
+
*/
|
|
110
|
+
function buildVrfKeyEnvelopes(privateMaterial, reducedPrivateMaterial, vrfKeyShare) {
|
|
111
|
+
const envelope = (0, cbor_x_1.encode)({
|
|
112
|
+
version: VRF_KEY_ENVELOPE_VERSION,
|
|
113
|
+
prvKeyShare: new Uint8Array(privateMaterial),
|
|
114
|
+
vrf: new Uint8Array(vrfKeyShare),
|
|
115
|
+
});
|
|
116
|
+
const reducedEnvelope = (0, cbor_x_1.encode)({
|
|
117
|
+
version: VRF_KEY_ENVELOPE_VERSION,
|
|
118
|
+
prvKeyShare: new Uint8Array(reducedPrivateMaterial),
|
|
119
|
+
vrf: new Uint8Array(vrfKeyShare),
|
|
120
|
+
});
|
|
121
|
+
return { envelope: Buffer.from(envelope), reducedEnvelope: Buffer.from(reducedEnvelope) };
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* EdDSA MPCv2 key generation for safe roots. The two-round MPS VRF DKG rides
|
|
125
|
+
* the existing MPCv2-R1/R2 payloads and is only selected when safeId is set.
|
|
126
|
+
*/
|
|
127
|
+
class EddsaVrfMPCv2Utils extends eddsaMPCv2_1.EddsaMPCv2Utils {
|
|
128
|
+
/** @inheritdoc */
|
|
129
|
+
async createKeychains(params) {
|
|
130
|
+
const { userDkg, backupDkg } = await this.getUserAndBackupSession(params.retrofit);
|
|
131
|
+
const userVrfSession = new sdk_lib_mpc_1.MpsVrf.VrfDkg(3, 2, typesMPCv2_1.MPCv2PartiesEnum.USER);
|
|
132
|
+
const backupVrfSession = new sdk_lib_mpc_1.MpsVrf.VrfDkg(3, 2, typesMPCv2_1.MPCv2PartiesEnum.BACKUP);
|
|
133
|
+
const userKeyPair = await (0, opengpgUtils_1.generateGPGKeyPair)('ed25519');
|
|
134
|
+
const userGpgKey = await pgp.readPrivateKey({ armoredKey: userKeyPair.privateKey });
|
|
135
|
+
const userGpgPublicKey = userKeyPair.publicKey;
|
|
136
|
+
const [userPk, userSk] = await sdk_lib_mpc_1.MPSComms.extractEd25519KeyPair(userGpgKey);
|
|
137
|
+
const backupKeyPair = await (0, opengpgUtils_1.generateGPGKeyPair)('ed25519');
|
|
138
|
+
const backupGpgKey = await pgp.readPrivateKey({ armoredKey: backupKeyPair.privateKey });
|
|
139
|
+
const backupGpgPublicKey = backupKeyPair.publicKey;
|
|
140
|
+
const [backupPk, backupSk] = await sdk_lib_mpc_1.MPSComms.extractEd25519KeyPair(backupGpgKey);
|
|
141
|
+
const { eddsaMpcv2PublicKey } = await this.getBitgoGpgPubkeyBasedOnFeatureFlags(params.enterprise, true);
|
|
142
|
+
const bitgoPublicGpgKey = eddsaMpcv2PublicKey ?? this.bitgoEddsaMpcv2PublicGpgKey;
|
|
143
|
+
(0, assert_1.default)(bitgoPublicGpgKey, 'Failed to get BitGo EdDSA MPCv2 GPG public key');
|
|
144
|
+
const bitgoPublicGpgKeyArmored = bitgoPublicGpgKey.armor();
|
|
145
|
+
if ((0, bitgoPubKeys_1.envRequiresBitgoPubGpgKeyConfig)(this.bitgo.getEnv())) {
|
|
146
|
+
(0, assert_1.default)((0, bitgoPubKeys_1.isBitgoEddsaMpcv2PubKey)(bitgoPublicGpgKeyArmored), 'Invalid BitGo EdDSA MPCv2 GPG public key');
|
|
147
|
+
}
|
|
148
|
+
const bitgoKeyObj = await pgp.readKey({ armoredKey: bitgoPublicGpgKeyArmored });
|
|
149
|
+
const bitgoPk = await sdk_lib_mpc_1.MPSComms.extractEd25519PublicKey(bitgoKeyObj);
|
|
150
|
+
// #region round 1
|
|
151
|
+
await userDkg.initDkg(userSk, [backupPk, bitgoPk]);
|
|
152
|
+
await backupDkg.initDkg(backupSk, [userPk, bitgoPk]);
|
|
153
|
+
const userMsg1 = userDkg.getFirstMessage();
|
|
154
|
+
const backupMsg1 = backupDkg.getFirstMessage();
|
|
155
|
+
const userVrfMsg1 = await userVrfSession.initDkg();
|
|
156
|
+
const backupVrfMsg1 = await backupVrfSession.initDkg();
|
|
157
|
+
const userSignedMsg1 = await sdk_lib_mpc_1.MPSComms.detachSignMpsMessage(Buffer.from(userMsg1.payload), userGpgKey);
|
|
158
|
+
const backupSignedMsg1 = await sdk_lib_mpc_1.MPSComms.detachSignMpsMessage(Buffer.from(backupMsg1.payload), backupGpgKey);
|
|
159
|
+
(0, assert_1.default)(io_ts_types_1.NonEmptyString.is(userGpgPublicKey), 'User GPG public key is required');
|
|
160
|
+
(0, assert_1.default)(io_ts_types_1.NonEmptyString.is(backupGpgPublicKey), 'Backup GPG public key is required');
|
|
161
|
+
const round1Sender = (0, eddsaMPCv2KeyGenSender_1.KeyGenSenderForEnterprise)(this.bitgo, params.enterprise, params.safeId);
|
|
162
|
+
const { sessionId, bitgoMsg1, bitgoVrfMsg1 } = await round1Sender(public_types_1.MPCv2KeyGenStateEnum['MPCv2-R1'], {
|
|
163
|
+
userGpgPublicKey,
|
|
164
|
+
backupGpgPublicKey,
|
|
165
|
+
userMsg1: userSignedMsg1,
|
|
166
|
+
backupMsg1: backupSignedMsg1,
|
|
167
|
+
userVrfMsg1: serializeVrfMessages(userVrfMsg1),
|
|
168
|
+
backupVrfMsg1: serializeVrfMessages(backupVrfMsg1),
|
|
169
|
+
...(params.retrofit?.walletId ? { walletId: params.retrofit.walletId } : {}),
|
|
170
|
+
});
|
|
171
|
+
(0, assert_1.default)(bitgoVrfMsg1, 'BitGo VRF message 1 not found in round 1 response');
|
|
172
|
+
// #endregion
|
|
173
|
+
// #region round 2
|
|
174
|
+
const bitgoRawMsg1Bytes = await sdk_lib_mpc_1.MPSComms.verifyMpsMessage(bitgoMsg1, bitgoKeyObj);
|
|
175
|
+
const bitgoDeserializedMsg1 = {
|
|
176
|
+
from: typesMPCv2_1.MPCv2PartiesEnum.BITGO,
|
|
177
|
+
payload: new Uint8Array(bitgoRawMsg1Bytes),
|
|
178
|
+
};
|
|
179
|
+
const round1Messages = [userMsg1, backupMsg1, bitgoDeserializedMsg1];
|
|
180
|
+
const userRound2Msgs = userDkg.handleIncomingMessages(round1Messages);
|
|
181
|
+
const backupRound2Msgs = backupDkg.handleIncomingMessages(round1Messages);
|
|
182
|
+
(0, assert_1.default)(userRound2Msgs.length === 1, 'User round 1 should produce exactly one round 2 message');
|
|
183
|
+
(0, assert_1.default)(backupRound2Msgs.length === 1, 'Backup round 1 should produce exactly one round 2 message');
|
|
184
|
+
const userMsg2 = userRound2Msgs[0];
|
|
185
|
+
const backupMsg2 = backupRound2Msgs[0];
|
|
186
|
+
const userSignedMsg2 = await sdk_lib_mpc_1.MPSComms.detachSignMpsMessage(Buffer.from(userMsg2.payload), userGpgKey);
|
|
187
|
+
const backupSignedMsg2 = await sdk_lib_mpc_1.MPSComms.detachSignMpsMessage(Buffer.from(backupMsg2.payload), backupGpgKey);
|
|
188
|
+
const userVrfMsg2 = await userVrfSession.handleIncomingMessages({
|
|
189
|
+
broadcastMessages: [
|
|
190
|
+
...backupVrfMsg1.broadcastMessages,
|
|
191
|
+
...deserializeVrfMessages(bitgoVrfMsg1, typesMPCv2_1.MPCv2PartiesEnum.USER).broadcastMessages,
|
|
192
|
+
],
|
|
193
|
+
p2pMessages: [],
|
|
194
|
+
});
|
|
195
|
+
const backupVrfMsg2 = await backupVrfSession.handleIncomingMessages({
|
|
196
|
+
broadcastMessages: [
|
|
197
|
+
...userVrfMsg1.broadcastMessages,
|
|
198
|
+
...deserializeVrfMessages(bitgoVrfMsg1, typesMPCv2_1.MPCv2PartiesEnum.BACKUP).broadcastMessages,
|
|
199
|
+
],
|
|
200
|
+
p2pMessages: [],
|
|
201
|
+
});
|
|
202
|
+
const round2Sender = (0, eddsaMPCv2KeyGenSender_1.KeyGenSenderForEnterprise)(this.bitgo, params.enterprise);
|
|
203
|
+
const { sessionId: sessionIdRound2, commonPublicKeychain, bitgoMsg2, bitgoVrfMsg2, } = await round2Sender(public_types_1.MPCv2KeyGenStateEnum['MPCv2-R2'], {
|
|
204
|
+
sessionId,
|
|
205
|
+
userMsg2: userSignedMsg2,
|
|
206
|
+
backupMsg2: backupSignedMsg2,
|
|
207
|
+
userVrfMsg2: serializeVrfMessages(userVrfMsg2),
|
|
208
|
+
backupVrfMsg2: serializeVrfMessages(backupVrfMsg2),
|
|
209
|
+
});
|
|
210
|
+
assert_1.default.equal(sessionId, sessionIdRound2, 'Round 1 and round 2 session IDs do not match');
|
|
211
|
+
(0, assert_1.default)(bitgoVrfMsg2, 'BitGo VRF message 2 not found in round 2 response');
|
|
212
|
+
// VRF finalizes locally after the second existing MPCv2 round.
|
|
213
|
+
await userVrfSession.handleIncomingMessages({
|
|
214
|
+
broadcastMessages: [],
|
|
215
|
+
p2pMessages: [
|
|
216
|
+
...userVrfMsg2.p2pMessages.filter((message) => message.to === typesMPCv2_1.MPCv2PartiesEnum.USER),
|
|
217
|
+
...backupVrfMsg2.p2pMessages.filter((message) => message.to === typesMPCv2_1.MPCv2PartiesEnum.USER),
|
|
218
|
+
...deserializeVrfMessages(bitgoVrfMsg2, typesMPCv2_1.MPCv2PartiesEnum.USER).p2pMessages,
|
|
219
|
+
],
|
|
220
|
+
});
|
|
221
|
+
await backupVrfSession.handleIncomingMessages({
|
|
222
|
+
broadcastMessages: [],
|
|
223
|
+
p2pMessages: [
|
|
224
|
+
...userVrfMsg2.p2pMessages.filter((message) => message.to === typesMPCv2_1.MPCv2PartiesEnum.BACKUP),
|
|
225
|
+
...backupVrfMsg2.p2pMessages.filter((message) => message.to === typesMPCv2_1.MPCv2PartiesEnum.BACKUP),
|
|
226
|
+
...deserializeVrfMessages(bitgoVrfMsg2, typesMPCv2_1.MPCv2PartiesEnum.BACKUP).p2pMessages,
|
|
227
|
+
],
|
|
228
|
+
});
|
|
229
|
+
// #endregion
|
|
230
|
+
// #region keychain creation
|
|
231
|
+
const bitgoRawMsg2Bytes = await sdk_lib_mpc_1.MPSComms.verifyMpsMessage(bitgoMsg2, bitgoKeyObj);
|
|
232
|
+
const bitgoDeserializedMsg2 = {
|
|
233
|
+
from: typesMPCv2_1.MPCv2PartiesEnum.BITGO,
|
|
234
|
+
payload: new Uint8Array(bitgoRawMsg2Bytes),
|
|
235
|
+
};
|
|
236
|
+
const round2Messages = [userMsg2, backupMsg2, bitgoDeserializedMsg2];
|
|
237
|
+
const userFinalMsgs = userDkg.handleIncomingMessages(round2Messages);
|
|
238
|
+
const backupFinalMsgs = backupDkg.handleIncomingMessages(round2Messages);
|
|
239
|
+
(0, assert_1.default)(userFinalMsgs.length === 0, 'WASM round 2 should produce no output messages for user');
|
|
240
|
+
(0, assert_1.default)(backupFinalMsgs.length === 0, 'WASM round 2 should produce no output messages for backup');
|
|
241
|
+
const userCommonKeychain = userDkg.getCommonKeychain();
|
|
242
|
+
const backupCommonKeychain = backupDkg.getCommonKeychain();
|
|
243
|
+
assert_1.default.equal(userCommonKeychain, commonPublicKeychain, 'User computed keychain does not match BitGo common keychain');
|
|
244
|
+
assert_1.default.equal(backupCommonKeychain, commonPublicKeychain, 'Backup computed keychain does not match BitGo common keychain');
|
|
245
|
+
const { envelope: userEnvelope, reducedEnvelope: userReducedEnvelope } = buildVrfKeyEnvelopes(userDkg.getKeyShare(), userDkg.getReducedKeyShare(), userVrfSession.getKeyShare());
|
|
246
|
+
const { envelope: backupEnvelope, reducedEnvelope: backupReducedEnvelope } = buildVrfKeyEnvelopes(backupDkg.getKeyShare(), backupDkg.getReducedKeyShare(), backupVrfSession.getKeyShare());
|
|
247
|
+
const userKeychainPromise = this.addUserKeychain(userCommonKeychain, userEnvelope, userReducedEnvelope, params.passphrase, params.originalPasscodeEncryptionCode, params.webauthnInfo, params.encryptionVersion, params.enterprise, params.safeId);
|
|
248
|
+
const backupKeychainPromise = this.addBackupKeychain(backupCommonKeychain, backupEnvelope, backupReducedEnvelope, params.passphrase, params.originalPasscodeEncryptionCode, params.encryptionVersion, params.enterprise, params.safeId);
|
|
249
|
+
const bitgoKeychainPromise = this.addBitgoKeychain(commonPublicKeychain, params.safeId);
|
|
250
|
+
const [userKeychain, backupKeychain, bitgoKeychain] = await Promise.all([
|
|
251
|
+
userKeychainPromise,
|
|
252
|
+
backupKeychainPromise,
|
|
253
|
+
bitgoKeychainPromise,
|
|
254
|
+
]);
|
|
255
|
+
// #endregion
|
|
256
|
+
return { userKeychain, backupKeychain, bitgoKeychain };
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
exports.EddsaVrfMPCv2Utils = EddsaVrfMPCv2Utils;
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2FWcmZNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FWcmZNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQ0Esb0RBYUM7QUFFRCx3REF5QkM7QUFNRCxvREFnQkM7QUFwR0QseURBQXFGO0FBQ3JGLHNEQUk2QjtBQUM3QixtQ0FBZ0M7QUFDaEMsb0RBQTRCO0FBQzVCLHlDQUEyQjtBQUMzQiw2Q0FBK0I7QUFDL0IsNkNBQTZDO0FBSzdDLHFEQUF3RDtBQUV4RCw0REFBcUc7QUFDckcseUNBQXlFO0FBQ3pFLDZDQUErQztBQUMvQyxxRUFBcUU7QUFFckUsb0RBQXVEO0FBRXZELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0FBRW5DLE1BQU0sVUFBVSxHQUFHLElBQUEsbUJBQVUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ2xELE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsT0FBTyxFQUFFLHFCQUFZO0tBQ3RCLENBQUM7SUFDRixDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO0NBQzlCLENBQUMsQ0FBQztBQUNILE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBSWxFLFNBQWdCLG9CQUFvQixDQUFDLFFBQXdDO0lBQzNFLE1BQU0sU0FBUyxHQUF5QjtRQUN0QyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUMsSUFBSSxFQUFFLE9BQU8s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QUM7Q0FDRjtBQWpORCxnREFpTkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEa2xzVHlwZXMsIE1QU0NvbW1zLCBNcHNWcmYsIHR5cGUgTVBTVHlwZXMgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstbGliLW1wYyc7XG5pbXBvcnQge1xuICBNUEN2MktleUdlblN0YXRlRW51bSxcbiAgdHlwZSBFZGRzYU1QQ3YyS2V5R2VuUm91bmQxUmVzcG9uc2UsXG4gIHR5cGUgRWRkc2FNUEN2MktleUdlblJvdW5kMlJlc3BvbnNlLFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IGVuY29kZSB9IGZyb20gJ2Nib3IteCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCAqIGFzIHBncCBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IE5vbkVtcHR5U3RyaW5nIH0gZnJvbSAnaW8tdHMtdHlwZXMnO1xuXG5pbXBvcnQgdHlwZSB7IEtleWNoYWluc1RyaXBsZXQgfSBmcm9tICcuLi8uLi8uLi9iYXNlQ29pbic7XG5pbXBvcnQgdHlwZSB7IERlY3J5cHRlZFJldHJvZml0UGF5bG9hZCB9IGZyb20gJy4uLy4uLy4uL2tleWNoYWluL2lLZXljaGFpbnMnO1xuaW1wb3J0IHR5cGUgeyBFbmNyeXB0aW9uVmVyc2lvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2FwaSc7XG5pbXBvcnQgeyBnZW5lcmF0ZUdQR0tleVBhaXIgfSBmcm9tICcuLi8uLi9vcGVuZ3BnVXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBXZWJhdXRobktleUVuY3J5cHRpb25JbmZvIH0gZnJvbSAnLi4vLi4vLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZW52UmVxdWlyZXNCaXRnb1B1YkdwZ0tleUNvbmZpZywgaXNCaXRnb0VkZHNhTXBjdjJQdWJLZXkgfSBmcm9tICcuLi8uLi8uLi90c3MvYml0Z29QdWJLZXlzJztcbmltcG9ydCB7IGJhc2U2NFN0cmluZywgYm91bmRlZEludCwgZGVjb2RlV2l0aENvZGVjIH0gZnJvbSAnLi4vLi4vY29kZWNzJztcbmltcG9ydCB7IEVkZHNhTVBDdjJVdGlscyB9IGZyb20gJy4vZWRkc2FNUEN2Mic7XG5pbXBvcnQgeyBLZXlHZW5TZW5kZXJGb3JFbnRlcnByaXNlIH0gZnJvbSAnLi9lZGRzYU1QQ3YyS2V5R2VuU2VuZGVyJztcbmltcG9ydCB0eXBlIHsgRWRkc2FNUEN2MlZyZktleUdlblJlc3BvbnNlRmllbGRzIH0gZnJvbSAnLi90eXBlc0VkZHNhTVBDdjInO1xuaW1wb3J0IHsgTVBDdjJQYXJ0aWVzRW51bSB9IGZyb20gJy4uL2VjZHNhL3R5cGVzTVBDdjInO1xuXG5jb25zdCBWUkZfS0VZX0VOVkVMT1BFX1ZFUlNJT04gPSAxO1xuXG5jb25zdCBWcmZQYXJ0eUlkID0gYm91bmRlZEludCgwLCAyLCAnVnJmUGFydHlJZCcpO1xuY29uc3QgVnJmTWVzc2FnZVRyYW5zZmVyQ29kZWMgPSB0LmludGVyc2VjdGlvbihbXG4gIHQudHlwZSh7XG4gICAgZnJvbTogVnJmUGFydHlJZCxcbiAgICBwYXlsb2FkOiBiYXNlNjRTdHJpbmcsXG4gIH0pLFxuICB0LnBhcnRpYWwoeyB0bzogVnJmUGFydHlJZCB9KSxcbl0pO1xuY29uc3QgVnJmTWVzc2FnZVRyYW5zZmVyc0NvZGVjID0gdC5hcnJheShWcmZNZXNzYWdlVHJhbnNmZXJDb2RlYyk7XG5cbnR5cGUgVnJmTWVzc2FnZVRyYW5zZmVyID0gdC5UeXBlT2Y8dHlwZW9mIFZyZk1lc3NhZ2VUcmFuc2ZlckNvZGVjPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVZyZk1lc3NhZ2VzKG1lc3NhZ2VzOiBEa2xzVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZXMpOiBzdHJpbmcge1xuICBjb25zdCB0cmFuc2ZlcnM6IFZyZk1lc3NhZ2VUcmFuc2ZlcltdID0gW1xuICAgIC4uLm1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLm1hcCgobWVzc2FnZSkgPT4gKHtcbiAgICAgIGZyb206IG1lc3NhZ2UuZnJvbSxcbiAgICAgIHBheWxvYWQ6IEJ1ZmZlci5mcm9tKG1lc3NhZ2UucGF5bG9hZCkudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgIH0pKSxcbiAgICAuLi5tZXNzYWdlcy5wMnBNZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+ICh7XG4gICAgICBmcm9tOiBtZXNzYWdlLmZyb20sXG4gICAgICB0bzogbWVzc2FnZS50byxcbiAgICAgIHBheWxvYWQ6IEJ1ZmZlci5mcm9tKG1lc3NhZ2UucGF5bG9hZCkudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgIH0pKSxcbiAgXTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHRyYW5zZmVycykpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplVnJmTWVzc2FnZXMoYmxvYjogc3RyaW5nLCBmb3JQYXJ0eTogbnVtYmVyKTogRGtsc1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2VzIHtcbiAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGJsb2IsICdiYXNlNjQnKS50b1N0cmluZygpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCByZWFzb24gPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdtYWxmb3JtZWQgSlNPTic7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFZSRiBES0cgbWVzc2FnZSBibG9iOiAke3JlYXNvbn1gKTtcbiAgfVxuXG4gIGNvbnN0IHRyYW5zZmVycyA9IGRlY29kZVdpdGhDb2RlYyhWcmZNZXNzYWdlVHJhbnNmZXJzQ29kZWMsIHBhcnNlZCwgJ1ZSRiBES0cgbWVzc2FnZSBibG9iJyk7XG4gIHJldHVybiB7XG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IHRyYW5zZmVyc1xuICAgICAgLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS50byA9PT0gdW5kZWZpbmVkKVxuICAgICAgLm1hcCgobWVzc2FnZSkgPT4gKHtcbiAgICAgICAgZnJvbTogbWVzc2FnZS5mcm9tLFxuICAgICAgICBwYXlsb2FkOiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShtZXNzYWdlLnBheWxvYWQsICdiYXNlNjQnKSksXG4gICAgICB9KSksXG4gICAgcDJwTWVzc2FnZXM6IHRyYW5zZmVyc1xuICAgICAgLmZpbHRlcigobWVzc2FnZSk6IG1lc3NhZ2UgaXMgVnJmTWVzc2FnZVRyYW5zZmVyICYgeyB0bzogbnVtYmVyIH0gPT4gbWVzc2FnZS50byA9PT0gZm9yUGFydHkpXG4gICAgICAubWFwKChtZXNzYWdlKSA9PiAoe1xuICAgICAgICBmcm9tOiBtZXNzYWdlLmZyb20sXG4gICAgICAgIHRvOiBtZXNzYWdlLnRvLFxuICAgICAgICBwYXlsb2FkOiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShtZXNzYWdlLnBheWxvYWQsICdiYXNlNjQnKSksXG4gICAgICB9KSksXG4gIH07XG59XG5cbi8qKlxuICogQ29tYmluZXMgdGhlIHNpZ25pbmcga2V5c2hhcmUgd2l0aCB0aGUgVlJGIGtleXNoYXJlIGluIHRoZSBDQk9SIGVudmVsb3BlIHVzZWRcbiAqIGJ5IHNhZmUgTVBDIHJvb3RzLiBUaGUgcmVkdWNlZCBlbnZlbG9wZSBpcyB1c2VkIGZvciByZWR1Y2VkRW5jcnlwdGVkUHJ2LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRWcmZLZXlFbnZlbG9wZXMoXG4gIHByaXZhdGVNYXRlcmlhbDogQnVmZmVyLFxuICByZWR1Y2VkUHJpdmF0ZU1hdGVyaWFsOiBCdWZmZXIsXG4gIHZyZktleVNoYXJlOiBCdWZmZXJcbik6IHsgZW52ZWxvcGU6IEJ1ZmZlcjsgcmVkdWNlZEVudmVsb3BlOiBCdWZmZXIgfSB7XG4gIGNvbnN0IGVudmVsb3BlID0gZW5jb2RlKHtcbiAgICB2ZXJzaW9uOiBWUkZfS0VZX0VOVkVMT1BFX1ZFUlNJT04sXG4gICAgcHJ2S2V5U2hhcmU6IG5ldyBVaW50OEFycmF5KHByaXZhdGVNYXRlcmlhbCksXG4gICAgdnJmOiBuZXcgVWludDhBcnJheSh2cmZLZXlTaGFyZSksXG4gIH0pO1xuICBjb25zdCByZWR1Y2VkRW52ZWxvcGUgPSBlbmNvZGUoe1xuICAgIHZlcnNpb246IFZSRl9LRVlfRU5WRUxPUEVfVkVSU0lPTixcbiAgICBwcnZLZXlTaGFyZTogbmV3IFVpbnQ4QXJyYXkocmVkdWNlZFByaXZhdGVNYXRlcmlhbCksXG4gICAgdnJmOiBuZXcgVWludDhBcnJheSh2cmZLZXlTaGFyZSksXG4gIH0pO1xuICByZXR1cm4geyBlbnZlbG9wZTogQnVmZmVyLmZyb20oZW52ZWxvcGUpLCByZWR1Y2VkRW52ZWxvcGU6IEJ1ZmZlci5mcm9tKHJlZHVjZWRFbnZlbG9wZSkgfTtcbn1cblxuLyoqXG4gKiBFZERTQSBNUEN2MiBrZXkgZ2VuZXJhdGlvbiBmb3Igc2FmZSByb290cy4gVGhlIHR3by1yb3VuZCBNUFMgVlJGIERLRyByaWRlc1xuICogdGhlIGV4aXN0aW5nIE1QQ3YyLVIxL1IyIHBheWxvYWRzIGFuZCBpcyBvbmx5IHNlbGVjdGVkIHdoZW4gc2FmZUlkIGlzIHNldC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVkZHNhVnJmTVBDdjJVdGlscyBleHRlbmRzIEVkZHNhTVBDdjJVdGlscyB7XG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhc3luYyBjcmVhdGVLZXljaGFpbnMocGFyYW1zOiB7XG4gICAgcGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGVudGVycHJpc2U6IHN0cmluZztcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmc7XG4gICAgcmV0cm9maXQ/OiBEZWNyeXB0ZWRSZXRyb2ZpdFBheWxvYWQ7XG4gICAgd2ViYXV0aG5JbmZvPzogV2ViYXV0aG5LZXlFbmNyeXB0aW9uSW5mbztcbiAgICBlbmNyeXB0aW9uVmVyc2lvbj86IEVuY3J5cHRpb25WZXJzaW9uO1xuICAgIHNhZmVJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxLZXljaGFpbnNUcmlwbGV0PiB7XG4gICAgY29uc3QgeyB1c2VyRGtnLCBiYWNrdXBEa2cgfSA9IGF3YWl0IHRoaXMuZ2V0VXNlckFuZEJhY2t1cFNlc3Npb24ocGFyYW1zLnJldHJvZml0KTtcbiAgICBjb25zdCB1c2VyVnJmU2Vzc2lvbiA9IG5ldyBNcHNWcmYuVnJmRGtnKDMsIDIsIE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG4gICAgY29uc3QgYmFja3VwVnJmU2Vzc2lvbiA9IG5ldyBNcHNWcmYuVnJmRGtnKDMsIDIsIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKTtcblxuICAgIGNvbnN0IHVzZXJLZXlQYWlyID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdlZDI1NTE5Jyk7XG4gICAgY29uc3QgdXNlckdwZ0tleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IHVzZXJLZXlQYWlyLnByaXZhdGVLZXkgfSk7XG4gICAgY29uc3QgdXNlckdwZ1B1YmxpY0tleSA9IHVzZXJLZXlQYWlyLnB1YmxpY0tleTtcbiAgICBjb25zdCBbdXNlclBrLCB1c2VyU2tdID0gYXdhaXQgTVBTQ29tbXMuZXh0cmFjdEVkMjU1MTlLZXlQYWlyKHVzZXJHcGdLZXkpO1xuXG4gICAgY29uc3QgYmFja3VwS2V5UGFpciA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignZWQyNTUxOScpO1xuICAgIGNvbnN0IGJhY2t1cEdwZ0tleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IGJhY2t1cEtleVBhaXIucHJpdmF0ZUtleSB9KTtcbiAgICBjb25zdCBiYWNrdXBHcGdQdWJsaWNLZXkgPSBiYWNrdXBLZXlQYWlyLnB1YmxpY0tleTtcbiAgICBjb25zdCBbYmFja3VwUGssIGJhY2t1cFNrXSA9IGF3YWl0IE1QU0NvbW1zLmV4dHJhY3RFZDI1NTE5S2V5UGFpcihiYWNrdXBHcGdLZXkpO1xuXG4gICAgY29uc3QgeyBlZGRzYU1wY3YyUHVibGljS2V5IH0gPSBhd2FpdCB0aGlzLmdldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncyhwYXJhbXMuZW50ZXJwcmlzZSwgdHJ1ZSk7XG4gICAgY29uc3QgYml0Z29QdWJsaWNHcGdLZXkgPSBlZGRzYU1wY3YyUHVibGljS2V5ID8/IHRoaXMuYml0Z29FZGRzYU1wY3YyUHVibGljR3BnS2V5O1xuICAgIGFzc2VydChiaXRnb1B1YmxpY0dwZ0tleSwgJ0ZhaWxlZCB0byBnZXQgQml0R28gRWREU0EgTVBDdjIgR1BHIHB1YmxpYyBrZXknKTtcbiAgICBjb25zdCBiaXRnb1B1YmxpY0dwZ0tleUFybW9yZWQgPSBiaXRnb1B1YmxpY0dwZ0tleS5hcm1vcigpO1xuXG4gICAgaWYgKGVudlJlcXVpcmVzQml0Z29QdWJHcGdLZXlDb25maWcodGhpcy5iaXRnby5nZXRFbnYoKSkpIHtcbiAgICAgIGFzc2VydChpc0JpdGdvRWRkc2FNcGN2MlB1YktleShiaXRnb1B1YmxpY0dwZ0tleUFybW9yZWQpLCAnSW52YWxpZCBCaXRHbyBFZERTQSBNUEN2MiBHUEcgcHVibGljIGtleScpO1xuICAgIH1cblxuICAgIGNvbnN0IGJpdGdvS2V5T2JqID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb1B1YmxpY0dwZ0tleUFybW9yZWQgfSk7XG4gICAgY29uc3QgYml0Z29QayA9IGF3YWl0IE1QU0NvbW1zLmV4dHJhY3RFZDI1NTE5UHVibGljS2V5KGJpdGdvS2V5T2JqKTtcblxuICAgIC8vICNyZWdpb24gcm91bmQgMVxuICAgIGF3YWl0IHVzZXJEa2cuaW5pdERrZyh1c2VyU2ssIFtiYWNrdXBQaywgYml0Z29Qa10pO1xuICAgIGF3YWl0IGJhY2t1cERrZy5pbml0RGtnKGJhY2t1cFNrLCBbdXNlclBrLCBiaXRnb1BrXSk7XG5cbiAgICBjb25zdCB1c2VyTXNnMSA9IHVzZXJEa2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG4gICAgY29uc3QgYmFja3VwTXNnMSA9IGJhY2t1cERrZy5nZXRGaXJzdE1lc3NhZ2UoKTtcbiAgICBjb25zdCB1c2VyVnJmTXNnMSA9IGF3YWl0IHVzZXJWcmZTZXNzaW9uLmluaXREa2coKTtcbiAgICBjb25zdCBiYWNrdXBWcmZNc2cxID0gYXdhaXQgYmFja3VwVnJmU2Vzc2lvbi5pbml0RGtnKCk7XG5cbiAgICBjb25zdCB1c2VyU2lnbmVkTXNnMSA9IGF3YWl0IE1QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKEJ1ZmZlci5mcm9tKHVzZXJNc2cxLnBheWxvYWQpLCB1c2VyR3BnS2V5KTtcbiAgICBjb25zdCBiYWNrdXBTaWduZWRNc2cxID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20oYmFja3VwTXNnMS5wYXlsb2FkKSwgYmFja3VwR3BnS2V5KTtcblxuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyh1c2VyR3BnUHVibGljS2V5KSwgJ1VzZXIgR1BHIHB1YmxpYyBrZXkgaXMgcmVxdWlyZWQnKTtcbiAgICBhc3NlcnQoTm9uRW1wdHlTdHJpbmcuaXMoYmFja3VwR3BnUHVibGljS2V5KSwgJ0JhY2t1cCBHUEcgcHVibGljIGtleSBpcyByZXF1aXJlZCcpO1xuXG4gICAgY29uc3Qgcm91bmQxU2VuZGVyID0gS2V5R2VuU2VuZGVyRm9yRW50ZXJwcmlzZTxFZGRzYU1QQ3YyS2V5R2VuUm91bmQxUmVzcG9uc2UgJiBFZGRzYU1QQ3YyVnJmS2V5R2VuUmVzcG9uc2VGaWVsZHM+KFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHBhcmFtcy5lbnRlcnByaXNlLFxuICAgICAgcGFyYW1zLnNhZmVJZFxuICAgICk7XG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIGJpdGdvTXNnMSwgYml0Z29WcmZNc2cxIH0gPSBhd2FpdCByb3VuZDFTZW5kZXIoTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyLVIxJ10sIHtcbiAgICAgIHVzZXJHcGdQdWJsaWNLZXksXG4gICAgICBiYWNrdXBHcGdQdWJsaWNLZXksXG4gICAgICB1c2VyTXNnMTogdXNlclNpZ25lZE1zZzEsXG4gICAgICBiYWNrdXBNc2cxOiBiYWNrdXBTaWduZWRNc2cxLFxuICAgICAgdXNlclZyZk1zZzE6IHNlcmlhbGl6ZVZyZk1lc3NhZ2VzKHVzZXJWcmZNc2cxKSxcbiAgICAgIGJhY2t1cFZyZk1zZzE6IHNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJhY2t1cFZyZk1zZzEpLFxuICAgICAgLi4uKHBhcmFtcy5yZXRyb2ZpdD8ud2FsbGV0SWQgPyB7IHdhbGxldElkOiBwYXJhbXMucmV0cm9maXQud2FsbGV0SWQgfSA6IHt9KSxcbiAgICB9KTtcbiAgICBhc3NlcnQoYml0Z29WcmZNc2cxLCAnQml0R28gVlJGIG1lc3NhZ2UgMSBub3QgZm91bmQgaW4gcm91bmQgMSByZXNwb25zZScpO1xuICAgIC8vICNlbmRyZWdpb25cblxuICAgIC8vICNyZWdpb24gcm91bmQgMlxuICAgIGNvbnN0IGJpdGdvUmF3TXNnMUJ5dGVzID0gYXdhaXQgTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShiaXRnb01zZzEsIGJpdGdvS2V5T2JqKTtcbiAgICBjb25zdCBiaXRnb0Rlc2VyaWFsaXplZE1zZzE6IE1QU1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2UgPSB7XG4gICAgICBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPLFxuICAgICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoYml0Z29SYXdNc2cxQnl0ZXMpLFxuICAgIH07XG4gICAgY29uc3Qgcm91bmQxTWVzc2FnZXM6IE1QU1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2VzID0gW3VzZXJNc2cxLCBiYWNrdXBNc2cxLCBiaXRnb0Rlc2VyaWFsaXplZE1zZzFdO1xuXG4gICAgY29uc3QgdXNlclJvdW5kMk1zZ3MgPSB1c2VyRGtnLmhhbmRsZUluY29taW5nTWVzc2FnZXMocm91bmQxTWVzc2FnZXMpO1xuICAgIGNvbnN0IGJhY2t1cFJvdW5kMk1zZ3MgPSBiYWNrdXBEa2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyb3VuZDFNZXNzYWdlcyk7XG4gICAgYXNzZXJ0KHVzZXJSb3VuZDJNc2dzLmxlbmd0aCA9PT0gMSwgJ1VzZXIgcm91bmQgMSBzaG91bGQgcHJvZHVjZSBleGFjdGx5IG9uZSByb3VuZCAyIG1lc3NhZ2UnKTtcbiAgICBhc3NlcnQoYmFja3VwUm91bmQyTXNncy5sZW5ndGggPT09IDEsICdCYWNrdXAgcm91bmQgMSBzaG91bGQgcHJvZHVjZSBleGFjdGx5IG9uZSByb3VuZCAyIG1lc3NhZ2UnKTtcblxuICAgIGNvbnN0IHVzZXJNc2cyID0gdXNlclJvdW5kMk1zZ3NbMF07XG4gICAgY29uc3QgYmFja3VwTXNnMiA9IGJhY2t1cFJvdW5kMk1zZ3NbMF07XG4gICAgY29uc3QgdXNlclNpZ25lZE1zZzIgPSBhd2FpdCBNUFNDb21tcy5kZXRhY2hTaWduTXBzTWVzc2FnZShCdWZmZXIuZnJvbSh1c2VyTXNnMi5wYXlsb2FkKSwgdXNlckdwZ0tleSk7XG4gICAgY29uc3QgYmFja3VwU2lnbmVkTXNnMiA9IGF3YWl0IE1QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKEJ1ZmZlci5mcm9tKGJhY2t1cE1zZzIucGF5bG9hZCksIGJhY2t1cEdwZ0tleSk7XG5cbiAgICBjb25zdCB1c2VyVnJmTXNnMiA9IGF3YWl0IHVzZXJWcmZTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtcbiAgICAgICAgLi4uYmFja3VwVnJmTXNnMS5icm9hZGNhc3RNZXNzYWdlcyxcbiAgICAgICAgLi4uZGVzZXJpYWxpemVWcmZNZXNzYWdlcyhiaXRnb1ZyZk1zZzEsIE1QQ3YyUGFydGllc0VudW0uVVNFUikuYnJvYWRjYXN0TWVzc2FnZXMsXG4gICAgICBdLFxuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgIH0pO1xuICAgIGNvbnN0IGJhY2t1cFZyZk1zZzIgPSBhd2FpdCBiYWNrdXBWcmZTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtcbiAgICAgICAgLi4udXNlclZyZk1zZzEuYnJvYWRjYXN0TWVzc2FnZXMsXG4gICAgICAgIC4uLmRlc2VyaWFsaXplVnJmTWVzc2FnZXMoYml0Z29WcmZNc2cxLCBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCkuYnJvYWRjYXN0TWVzc2FnZXMsXG4gICAgICBdLFxuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm91bmQyU2VuZGVyID0gS2V5R2VuU2VuZGVyRm9yRW50ZXJwcmlzZTxFZGRzYU1QQ3YyS2V5R2VuUm91bmQyUmVzcG9uc2UgJiBFZGRzYU1QQ3YyVnJmS2V5R2VuUmVzcG9uc2VGaWVsZHM+KFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHBhcmFtcy5lbnRlcnByaXNlXG4gICAgKTtcbiAgICBjb25zdCB7XG4gICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZFJvdW5kMixcbiAgICAgIGNvbW1vblB1YmxpY0tleWNoYWluLFxuICAgICAgYml0Z29Nc2cyLFxuICAgICAgYml0Z29WcmZNc2cyLFxuICAgIH0gPSBhd2FpdCByb3VuZDJTZW5kZXIoTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyLVIyJ10sIHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHVzZXJNc2cyOiB1c2VyU2lnbmVkTXNnMixcbiAgICAgIGJhY2t1cE1zZzI6IGJhY2t1cFNpZ25lZE1zZzIsXG4gICAgICB1c2VyVnJmTXNnMjogc2VyaWFsaXplVnJmTWVzc2FnZXModXNlclZyZk1zZzIpLFxuICAgICAgYmFja3VwVnJmTXNnMjogc2VyaWFsaXplVnJmTWVzc2FnZXMoYmFja3VwVnJmTXNnMiksXG4gICAgfSk7XG4gICAgYXNzZXJ0LmVxdWFsKHNlc3Npb25JZCwgc2Vzc2lvbklkUm91bmQyLCAnUm91bmQgMSBhbmQgcm91bmQgMiBzZXNzaW9uIElEcyBkbyBub3QgbWF0Y2gnKTtcbiAgICBhc3NlcnQoYml0Z29WcmZNc2cyLCAnQml0R28gVlJGIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gcm91bmQgMiByZXNwb25zZScpO1xuXG4gICAgLy8gVlJGIGZpbmFsaXplcyBsb2NhbGx5IGFmdGVyIHRoZSBzZWNvbmQgZXhpc3RpbmcgTVBDdjIgcm91bmQuXG4gICAgYXdhaXQgdXNlclZyZlNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gICAgICBwMnBNZXNzYWdlczogW1xuICAgICAgICAuLi51c2VyVnJmTXNnMi5wMnBNZXNzYWdlcy5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UudG8gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUiksXG4gICAgICAgIC4uLmJhY2t1cFZyZk1zZzIucDJwTWVzc2FnZXMuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJpdGdvVnJmTXNnMiwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKS5wMnBNZXNzYWdlcyxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgYXdhaXQgYmFja3VwVnJmU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgICAgIHAycE1lc3NhZ2VzOiBbXG4gICAgICAgIC4uLnVzZXJWcmZNc2cyLnAycE1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApLFxuICAgICAgICAuLi5iYWNrdXBWcmZNc2cyLnAycE1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJpdGdvVnJmTXNnMiwgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApLnAycE1lc3NhZ2VzLFxuICAgICAgXSxcbiAgICB9KTtcbiAgICAvLyAjZW5kcmVnaW9uXG5cbiAgICAvLyAjcmVnaW9uIGtleWNoYWluIGNyZWF0aW9uXG4gICAgY29uc3QgYml0Z29SYXdNc2cyQnl0ZXMgPSBhd2FpdCBNUFNDb21tcy52ZXJpZnlNcHNNZXNzYWdlKGJpdGdvTXNnMiwgYml0Z29LZXlPYmopO1xuICAgIGNvbnN0IGJpdGdvRGVzZXJpYWxpemVkTXNnMjogTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9IHtcbiAgICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgICBwYXlsb2FkOiBuZXcgVWludDhBcnJheShiaXRnb1Jhd01zZzJCeXRlcyksXG4gICAgfTtcbiAgICBjb25zdCByb3VuZDJNZXNzYWdlczogTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZXMgPSBbdXNlck1zZzIsIGJhY2t1cE1zZzIsIGJpdGdvRGVzZXJpYWxpemVkTXNnMl07XG5cbiAgICBjb25zdCB1c2VyRmluYWxNc2dzID0gdXNlckRrZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHJvdW5kMk1lc3NhZ2VzKTtcbiAgICBjb25zdCBiYWNrdXBGaW5hbE1zZ3MgPSBiYWNrdXBEa2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyb3VuZDJNZXNzYWdlcyk7XG4gICAgYXNzZXJ0KHVzZXJGaW5hbE1zZ3MubGVuZ3RoID09PSAwLCAnV0FTTSByb3VuZCAyIHNob3VsZCBwcm9kdWNlIG5vIG91dHB1dCBtZXNzYWdlcyBmb3IgdXNlcicpO1xuICAgIGFzc2VydChiYWNrdXBGaW5hbE1zZ3MubGVuZ3RoID09PSAwLCAnV0FTTSByb3VuZCAyIHNob3VsZCBwcm9kdWNlIG5vIG91dHB1dCBtZXNzYWdlcyBmb3IgYmFja3VwJyk7XG5cbiAgICBjb25zdCB1c2VyQ29tbW9uS2V5Y2hhaW4gPSB1c2VyRGtnLmdldENvbW1vbktleWNoYWluKCk7XG4gICAgY29uc3QgYmFja3VwQ29tbW9uS2V5Y2hhaW4gPSBiYWNrdXBEa2cuZ2V0Q29tbW9uS2V5Y2hhaW4oKTtcbiAgICBhc3NlcnQuZXF1YWwoXG4gICAgICB1c2VyQ29tbW9uS2V5Y2hhaW4sXG4gICAgICBjb21tb25QdWJsaWNLZXljaGFpbixcbiAgICAgICdVc2VyIGNvbXB1dGVkIGtleWNoYWluIGRvZXMgbm90IG1hdGNoIEJpdEdvIGNvbW1vbiBrZXljaGFpbidcbiAgICApO1xuICAgIGFzc2VydC5lcXVhbChcbiAgICAgIGJhY2t1cENvbW1vbktleWNoYWluLFxuICAgICAgY29tbW9uUHVibGljS2V5Y2hhaW4sXG4gICAgICAnQmFja3VwIGNvbXB1dGVkIGtleWNoYWluIGRvZXMgbm90IG1hdGNoIEJpdEdvIGNvbW1vbiBrZXljaGFpbidcbiAgICApO1xuXG4gICAgY29uc3QgeyBlbnZlbG9wZTogdXNlckVudmVsb3BlLCByZWR1Y2VkRW52ZWxvcGU6IHVzZXJSZWR1Y2VkRW52ZWxvcGUgfSA9IGJ1aWxkVnJmS2V5RW52ZWxvcGVzKFxuICAgICAgdXNlckRrZy5nZXRLZXlTaGFyZSgpLFxuICAgICAgdXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSxcbiAgICAgIHVzZXJWcmZTZXNzaW9uLmdldEtleVNoYXJlKClcbiAgICApO1xuICAgIGNvbnN0IHsgZW52ZWxvcGU6IGJhY2t1cEVudmVsb3BlLCByZWR1Y2VkRW52ZWxvcGU6IGJhY2t1cFJlZHVjZWRFbnZlbG9wZSB9ID0gYnVpbGRWcmZLZXlFbnZlbG9wZXMoXG4gICAgICBiYWNrdXBEa2cuZ2V0S2V5U2hhcmUoKSxcbiAgICAgIGJhY2t1cERrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSxcbiAgICAgIGJhY2t1cFZyZlNlc3Npb24uZ2V0S2V5U2hhcmUoKVxuICAgICk7XG5cbiAgICBjb25zdCB1c2VyS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5hZGRVc2VyS2V5Y2hhaW4oXG4gICAgICB1c2VyQ29tbW9uS2V5Y2hhaW4sXG4gICAgICB1c2VyRW52ZWxvcGUsXG4gICAgICB1c2VyUmVkdWNlZEVudmVsb3BlLFxuICAgICAgcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgcGFyYW1zLndlYmF1dGhuSW5mbyxcbiAgICAgIHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvbixcbiAgICAgIHBhcmFtcy5lbnRlcnByaXNlLFxuICAgICAgcGFyYW1zLnNhZmVJZFxuICAgICk7XG4gICAgY29uc3QgYmFja3VwS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5hZGRCYWNrdXBLZXljaGFpbihcbiAgICAgIGJhY2t1cENvbW1vbktleWNoYWluLFxuICAgICAgYmFja3VwRW52ZWxvcGUsXG4gICAgICBiYWNrdXBSZWR1Y2VkRW52ZWxvcGUsXG4gICAgICBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgIHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICAgIHBhcmFtcy5zYWZlSWRcbiAgICApO1xuICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5hZGRCaXRnb0tleWNoYWluKGNvbW1vblB1YmxpY0tleWNoYWluLCBwYXJhbXMuc2FmZUlkKTtcblxuICAgIGNvbnN0IFt1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluLCBiaXRnb0tleWNoYWluXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHVzZXJLZXljaGFpblByb21pc2UsXG4gICAgICBiYWNrdXBLZXljaGFpblByb21pc2UsXG4gICAgICBiaXRnb0tleWNoYWluUHJvbWlzZSxcbiAgICBdKTtcbiAgICAvLyAjZW5kcmVnaW9uXG5cbiAgICByZXR1cm4geyB1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluLCBiaXRnb0tleWNoYWluIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -6,6 +6,7 @@ export default EddsaUtils;
|
|
|
6
6
|
export { ITssUtils, IEddsaUtils, EddsaUnsignedTransaction } from './types';
|
|
7
7
|
export { PrebuildTransactionWithIntentOptions, SignatureShareRecord, SignatureShareType, TxRequest, } from '../baseTypes';
|
|
8
8
|
export * from './eddsaMPCv2';
|
|
9
|
+
export * from './eddsaVrfMPCv2';
|
|
9
10
|
export * from './eddsaMPCv2KeyGenSender';
|
|
10
11
|
export * from './typesEddsaMPCv2';
|
|
11
12
|
export * from './SMC/utils';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/eddsa/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,sCAAsC;AACtC,OAAO,KAAK,aAAa,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,eAAe,MAAM,SAAS,CAAC;AAE3C,eAAe,UAAU,CAAC;AAG1B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EACL,oCAAoC,EACpC,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,GACV,MAAM,cAAc,CAAC;AAEtB,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/eddsa/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,sCAAsC;AACtC,OAAO,KAAK,aAAa,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,eAAe,MAAM,SAAS,CAAC;AAE3C,eAAe,UAAU,CAAC;AAG1B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EACL,oCAAoC,EACpC,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,GACV,MAAM,cAAc,CAAC;AAEtB,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
|
|
@@ -45,7 +45,8 @@ exports.default = eddsa_1.EddsaUtils;
|
|
|
45
45
|
var baseTypes_1 = require("../baseTypes");
|
|
46
46
|
Object.defineProperty(exports, "SignatureShareType", { enumerable: true, get: function () { return baseTypes_1.SignatureShareType; } });
|
|
47
47
|
__exportStar(require("./eddsaMPCv2"), exports);
|
|
48
|
+
__exportStar(require("./eddsaVrfMPCv2"), exports);
|
|
48
49
|
__exportStar(require("./eddsaMPCv2KeyGenSender"), exports);
|
|
49
50
|
__exportStar(require("./typesEddsaMPCv2"), exports);
|
|
50
51
|
__exportStar(require("./SMC/utils"), exports);
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2VkZHNhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFxQztBQUNyQyxzQ0FBc0M7QUFDdEMseURBQXlDO0FBQ3pDLDJEQUEyQztBQUUzQyxrQkFBZSxrQkFBVSxDQUFDO0FBSTFCLDBDQUtzQjtBQUZwQiwrR0FBQSxrQkFBa0IsT0FBQTtBQUlwQiwrQ0FBNkI7QUFDN0Isa0RBQWdDO0FBQ2hDLDJEQUF5QztBQUN6QyxvREFBa0M7QUFDbEMsOENBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWRkc2FVdGlscyB9IGZyb20gJy4vZWRkc2EnO1xuLyoqIEBkZXByZWNhdGVkIHVzZSBFZGRzYVV0aWxzVHlwZXMgKi9cbmV4cG9ydCAqIGFzIFRzc1V0aWxzVHlwZXMgZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBhcyBFZGRzYVV0aWxzVHlwZXMgZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IEVkZHNhVXRpbHM7XG5cbi8vIGV4cG9ydGluZyB0aGlzIHR5cGVzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuZXhwb3J0IHsgSVRzc1V0aWxzLCBJRWRkc2FVdGlscywgRWRkc2FVbnNpZ25lZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQge1xuICBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMsXG4gIFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICBTaWduYXR1cmVTaGFyZVR5cGUsXG4gIFR4UmVxdWVzdCxcbn0gZnJvbSAnLi4vYmFzZVR5cGVzJztcblxuZXhwb3J0ICogZnJvbSAnLi9lZGRzYU1QQ3YyJztcbmV4cG9ydCAqIGZyb20gJy4vZWRkc2FWcmZNUEN2Mic7XG5leHBvcnQgKiBmcm9tICcuL2VkZHNhTVBDdjJLZXlHZW5TZW5kZXInO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlc0VkZHNhTVBDdjInO1xuZXhwb3J0ICogZnJvbSAnLi9TTUMvdXRpbHMnO1xuIl19
|
|
@@ -21,7 +21,20 @@ export declare const generateEddsaMPCv2KeyRequestBody: t.UnionC<[t.TypeC<{
|
|
|
21
21
|
signature: t.StringC;
|
|
22
22
|
}>;
|
|
23
23
|
}>]>;
|
|
24
|
-
|
|
24
|
+
/** Opaque VRF DKG blobs carried by the existing MPS key-generation rounds. */
|
|
25
|
+
export declare const eddsaMPCv2VrfKeyGenRequestFields: t.PartialC<{
|
|
26
|
+
userVrfMsg1: t.StringC;
|
|
27
|
+
backupVrfMsg1: t.StringC;
|
|
28
|
+
userVrfMsg2: t.StringC;
|
|
29
|
+
backupVrfMsg2: t.StringC;
|
|
30
|
+
}>;
|
|
31
|
+
export declare const eddsaMPCv2VrfKeyGenResponseFields: t.PartialC<{
|
|
32
|
+
bitgoVrfMsg1: t.StringC;
|
|
33
|
+
bitgoVrfMsg2: t.StringC;
|
|
34
|
+
}>;
|
|
35
|
+
export type EddsaMPCv2VrfKeyGenRequestFields = t.TypeOf<typeof eddsaMPCv2VrfKeyGenRequestFields>;
|
|
36
|
+
export type EddsaMPCv2VrfKeyGenResponseFields = t.TypeOf<typeof eddsaMPCv2VrfKeyGenResponseFields>;
|
|
37
|
+
export type GenerateEddsaMPCv2KeyRequestBody = t.TypeOf<typeof generateEddsaMPCv2KeyRequestBody> & EddsaMPCv2VrfKeyGenRequestFields;
|
|
25
38
|
export declare const generateEddsaMPCv2KeyRequestResponse: t.UnionC<[t.TypeC<{
|
|
26
39
|
sessionId: import("io-ts-types").NonEmptyStringC;
|
|
27
40
|
bitgoMsg1: t.TypeC<{
|
|
@@ -36,5 +49,5 @@ export declare const generateEddsaMPCv2KeyRequestResponse: t.UnionC<[t.TypeC<{
|
|
|
36
49
|
signature: t.StringC;
|
|
37
50
|
}>;
|
|
38
51
|
}>]>;
|
|
39
|
-
export type GenerateEddsaMPCv2KeyRequestResponse = t.TypeOf<typeof generateEddsaMPCv2KeyRequestResponse
|
|
52
|
+
export type GenerateEddsaMPCv2KeyRequestResponse = t.TypeOf<typeof generateEddsaMPCv2KeyRequestResponse> & EddsaMPCv2VrfKeyGenResponseFields;
|
|
40
53
|
//# sourceMappingURL=typesEddsaMPCv2.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typesEddsaMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAQ3B,eAAO,MAAM,gCAAgC;
|
|
1
|
+
{"version":3,"file":"typesEddsaMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAQ3B,eAAO,MAAM,gCAAgC;6BA4BytI,aAAa;+BAAkD,aAAa;cAAgC,EAAG,KAAK;iBAAmB,EAAG,OAAO;mBAAoB,EAAG,OAAO;;gBAAyB,EAAG,KAAK;iBAAmB,EAAG,OAAO;mBAAoB,EAAG,OAAO;;;sBAAgf,aAAa;cAAgC,EAAG,KAAK;iBAAmB,EAAG,OAAO;mBAAoB,EAAG,OAAO;;gBAAyB,EAAG,KAAK;iBAAmB,EAAG,OAAO;mBAAoB,EAAG,OAAO;;IA5BtlK,CAAC;AAExH,8EAA8E;AAC9E,eAAO,MAAM,gCAAgC;;;;;EAK3C,CAAC;AAEH,eAAO,MAAM,iCAAiC;;;EAG5C,CAAC;AAEH,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gCAAgC,CAAC,CAAC;AACjG,MAAM,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAEnG,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gCAAgC,CAAC,GAC9F,gCAAgC,CAAC;AAEnC,eAAO,MAAM,oCAAoC;sBAO+pJ,aAAa;eAAiC,EAAG,KAAK;iBAAmB,EAAG,OAAO;mBAAoB,EAAG,OAAO;;;sBAA2kB,aAAa;iCAAoD,aAAa;eAAiC,EAAG,KAAK;iBAAmB,EAAG,OAAO;mBAAoB,EAAG,OAAO;;IAJ5jL,CAAC;AAEH,MAAM,MAAM,oCAAoC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oCAAoC,CAAC,GACtG,iCAAiC,CAAC"}
|
|
@@ -33,12 +33,23 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.generateEddsaMPCv2KeyRequestResponse = exports.generateEddsaMPCv2KeyRequestBody = void 0;
|
|
36
|
+
exports.generateEddsaMPCv2KeyRequestResponse = exports.eddsaMPCv2VrfKeyGenResponseFields = exports.eddsaMPCv2VrfKeyGenRequestFields = exports.generateEddsaMPCv2KeyRequestBody = void 0;
|
|
37
37
|
const t = __importStar(require("io-ts"));
|
|
38
38
|
const public_types_1 = require("@bitgo/public-types");
|
|
39
39
|
exports.generateEddsaMPCv2KeyRequestBody = t.union([public_types_1.EddsaMPCv2KeyGenRound1Request, public_types_1.EddsaMPCv2KeyGenRound2Request]);
|
|
40
|
+
/** Opaque VRF DKG blobs carried by the existing MPS key-generation rounds. */
|
|
41
|
+
exports.eddsaMPCv2VrfKeyGenRequestFields = t.partial({
|
|
42
|
+
userVrfMsg1: t.string,
|
|
43
|
+
backupVrfMsg1: t.string,
|
|
44
|
+
userVrfMsg2: t.string,
|
|
45
|
+
backupVrfMsg2: t.string,
|
|
46
|
+
});
|
|
47
|
+
exports.eddsaMPCv2VrfKeyGenResponseFields = t.partial({
|
|
48
|
+
bitgoVrfMsg1: t.string,
|
|
49
|
+
bitgoVrfMsg2: t.string,
|
|
50
|
+
});
|
|
40
51
|
exports.generateEddsaMPCv2KeyRequestResponse = t.union([
|
|
41
52
|
public_types_1.EddsaMPCv2KeyGenRound1Response,
|
|
42
53
|
public_types_1.EddsaMPCv2KeyGenRound2Response,
|
|
43
54
|
]);
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNFZGRzYU1QQ3YyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9lZGRzYS90eXBlc0VkZHNhTVBDdjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQTJCO0FBQzNCLHNEQUs2QjtBQUVoQixRQUFBLGdDQUFnQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyw0Q0FBNkIsRUFBRSw0Q0FBNkIsQ0FBQyxDQUFDLENBQUM7QUFFeEgsOEVBQThFO0FBQ2pFLFFBQUEsZ0NBQWdDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUN4RCxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDckIsYUFBYSxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ3ZCLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTTtJQUNyQixhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU07Q0FDeEIsQ0FBQyxDQUFDO0FBRVUsUUFBQSxpQ0FBaUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3pELFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTTtJQUN0QixZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU07Q0FDdkIsQ0FBQyxDQUFDO0FBUVUsUUFBQSxvQ0FBb0MsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzFELDZDQUE4QjtJQUM5Qiw2Q0FBOEI7Q0FDL0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5pbXBvcnQge1xuICBFZGRzYU1QQ3YyS2V5R2VuUm91bmQxUmVxdWVzdCxcbiAgRWRkc2FNUEN2MktleUdlblJvdW5kMVJlc3BvbnNlLFxuICBFZGRzYU1QQ3YyS2V5R2VuUm91bmQyUmVxdWVzdCxcbiAgRWRkc2FNUEN2MktleUdlblJvdW5kMlJlc3BvbnNlLFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlRWRkc2FNUEN2MktleVJlcXVlc3RCb2R5ID0gdC51bmlvbihbRWRkc2FNUEN2MktleUdlblJvdW5kMVJlcXVlc3QsIEVkZHNhTVBDdjJLZXlHZW5Sb3VuZDJSZXF1ZXN0XSk7XG5cbi8qKiBPcGFxdWUgVlJGIERLRyBibG9icyBjYXJyaWVkIGJ5IHRoZSBleGlzdGluZyBNUFMga2V5LWdlbmVyYXRpb24gcm91bmRzLiAqL1xuZXhwb3J0IGNvbnN0IGVkZHNhTVBDdjJWcmZLZXlHZW5SZXF1ZXN0RmllbGRzID0gdC5wYXJ0aWFsKHtcbiAgdXNlclZyZk1zZzE6IHQuc3RyaW5nLFxuICBiYWNrdXBWcmZNc2cxOiB0LnN0cmluZyxcbiAgdXNlclZyZk1zZzI6IHQuc3RyaW5nLFxuICBiYWNrdXBWcmZNc2cyOiB0LnN0cmluZyxcbn0pO1xuXG5leHBvcnQgY29uc3QgZWRkc2FNUEN2MlZyZktleUdlblJlc3BvbnNlRmllbGRzID0gdC5wYXJ0aWFsKHtcbiAgYml0Z29WcmZNc2cxOiB0LnN0cmluZyxcbiAgYml0Z29WcmZNc2cyOiB0LnN0cmluZyxcbn0pO1xuXG5leHBvcnQgdHlwZSBFZGRzYU1QQ3YyVnJmS2V5R2VuUmVxdWVzdEZpZWxkcyA9IHQuVHlwZU9mPHR5cGVvZiBlZGRzYU1QQ3YyVnJmS2V5R2VuUmVxdWVzdEZpZWxkcz47XG5leHBvcnQgdHlwZSBFZGRzYU1QQ3YyVnJmS2V5R2VuUmVzcG9uc2VGaWVsZHMgPSB0LlR5cGVPZjx0eXBlb2YgZWRkc2FNUEN2MlZyZktleUdlblJlc3BvbnNlRmllbGRzPjtcblxuZXhwb3J0IHR5cGUgR2VuZXJhdGVFZGRzYU1QQ3YyS2V5UmVxdWVzdEJvZHkgPSB0LlR5cGVPZjx0eXBlb2YgZ2VuZXJhdGVFZGRzYU1QQ3YyS2V5UmVxdWVzdEJvZHk+ICZcbiAgRWRkc2FNUEN2MlZyZktleUdlblJlcXVlc3RGaWVsZHM7XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUVkZHNhTVBDdjJLZXlSZXF1ZXN0UmVzcG9uc2UgPSB0LnVuaW9uKFtcbiAgRWRkc2FNUEN2MktleUdlblJvdW5kMVJlc3BvbnNlLFxuICBFZGRzYU1QQ3YyS2V5R2VuUm91bmQyUmVzcG9uc2UsXG5dKTtcblxuZXhwb3J0IHR5cGUgR2VuZXJhdGVFZGRzYU1QQ3YyS2V5UmVxdWVzdFJlc3BvbnNlID0gdC5UeXBlT2Y8dHlwZW9mIGdlbmVyYXRlRWRkc2FNUEN2MktleVJlcXVlc3RSZXNwb25zZT4gJlxuICBFZGRzYU1QQ3YyVnJmS2V5R2VuUmVzcG9uc2VGaWVsZHM7XG4iXX0=
|
|
@@ -728,6 +728,7 @@ export interface ShareWalletOptions {
|
|
|
728
728
|
*/
|
|
729
729
|
skipKeychain?: boolean;
|
|
730
730
|
disableEmail?: boolean;
|
|
731
|
+
/** @deprecated Ignored because the shared key is high entropy. */
|
|
731
732
|
encryptionVersion?: EncryptionVersion;
|
|
732
733
|
/**
|
|
733
734
|
* Pre-decrypted wallet keychain. When supplied, shareWallet skips its internal
|
|
@@ -750,6 +751,7 @@ export interface BulkWalletShareOptions {
|
|
|
750
751
|
path: string;
|
|
751
752
|
permissions: string[];
|
|
752
753
|
}>;
|
|
754
|
+
/** @deprecated Ignored because the shared key is high entropy. */
|
|
753
755
|
encryptionVersion?: EncryptionVersion;
|
|
754
756
|
}
|
|
755
757
|
export type WalletShareState = 'active' | 'accepted' | 'canceled' | 'rejected' | 'pendingapproval';
|