@bitgo-beta/sdk-core 8.2.1-beta.834 → 8.2.1-beta.836
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/account-lib/baseCoin/iface.d.ts +1 -28
- package/dist/src/account-lib/baseCoin/iface.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/iface.js +1 -18
- package/dist/src/account-lib/baseCoin/index.d.ts +0 -1
- package/dist/src/account-lib/baseCoin/index.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/index.js +2 -4
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +2 -2
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/keychain/iKeychains.d.ts +1 -1
- 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 +1 -7
- package/dist/src/bitgo/utils/index.d.ts +0 -2
- package/dist/src/bitgo/utils/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/index.js +1 -3
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +2 -1
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +2 -1
- 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/iWallets.d.ts +1 -1
- package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallets.js +1 -1
- package/dist/src/bitgo/wallet/wallet.d.ts +1 -1
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +27 -5
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +1 -16
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -9
- package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts +0 -76
- package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts.map +0 -1
- package/dist/src/account-lib/baseCoin/blsKeyPair.js +0 -223
- package/dist/src/bitgo/utils/blsUtils.d.ts +0 -52
- package/dist/src/bitgo/utils/blsUtils.d.ts.map +0 -1
- package/dist/src/bitgo/utils/blsUtils.js +0 -237
- package/dist/src/bitgo/utils/iBlsUtils.d.ts +0 -14
- package/dist/src/bitgo/utils/iBlsUtils.d.ts.map +0 -1
- package/dist/src/bitgo/utils/iBlsUtils.js +0 -3
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BlsUtils = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* @prettier
|
|
6
|
-
*/
|
|
7
|
-
const crypto_1 = require("crypto");
|
|
8
|
-
const openpgp_1 = require("openpgp");
|
|
9
|
-
const baseCoin_1 = require("../../account-lib/baseCoin");
|
|
10
|
-
const mpcUtils_1 = require("./mpcUtils");
|
|
11
|
-
/**
|
|
12
|
-
* Utility functions for BLS-DKG work flows.
|
|
13
|
-
*/
|
|
14
|
-
class BlsUtils extends mpcUtils_1.MpcUtils {
|
|
15
|
-
constructor(bitgo, baseCoin) {
|
|
16
|
-
super(bitgo, baseCoin);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Creates a Keychain containing the User's BLS-DKG signing materials.
|
|
20
|
-
*
|
|
21
|
-
* @param userGpgKey - ephemeral GPG key to encrypt / decrypt sensitve data exchanged between user and server
|
|
22
|
-
* @param userKeyShare - user's BLS-DKG key share
|
|
23
|
-
* @param backupKeyShare - backup's BLS-DKG key share
|
|
24
|
-
* @param bitgoKeychain - previously created BitGo keychain; must be compatible with user and backup key shares
|
|
25
|
-
* @param passphrase - wallet passphrase used to encrypt user's signing materials
|
|
26
|
-
*/
|
|
27
|
-
async createUserKeychain(userGpgKey, userKeyShare, backupKeyShare, bitgoKeychain, passphrase, originalPasscodeEncryptionCode) {
|
|
28
|
-
const bitgoKeyShares = bitgoKeychain.keyShares;
|
|
29
|
-
if (!bitgoKeyShares) {
|
|
30
|
-
throw new Error('Missing BitGo key shares');
|
|
31
|
-
}
|
|
32
|
-
const bitGoToUserShare = bitgoKeyShares.find((keyShare) => keyShare.from === 'bitgo' && keyShare.to === 'user');
|
|
33
|
-
if (!bitGoToUserShare) {
|
|
34
|
-
throw new Error('Missing BitGo to User key share');
|
|
35
|
-
}
|
|
36
|
-
if (!userKeyShare.secretShares || !userKeyShare.pub) {
|
|
37
|
-
throw new Error('Invalid user key shares');
|
|
38
|
-
}
|
|
39
|
-
if (!backupKeyShare.secretShares || !backupKeyShare.pub) {
|
|
40
|
-
throw new Error('Invalid backup key shares');
|
|
41
|
-
}
|
|
42
|
-
const bitGoToUserPublicShare = bitGoToUserShare.publicShare.slice(0, 96);
|
|
43
|
-
const bitGoToUserChaincode = bitGoToUserShare.publicShare.slice(96);
|
|
44
|
-
const commonPub = baseCoin_1.BlsKeyPair.aggregatePubkeys([userKeyShare.pub, backupKeyShare.pub, bitGoToUserPublicShare]);
|
|
45
|
-
const commonChaincode = baseCoin_1.BlsKeyPair.aggregateChaincodes([
|
|
46
|
-
userKeyShare.chaincode,
|
|
47
|
-
backupKeyShare.chaincode,
|
|
48
|
-
bitGoToUserChaincode,
|
|
49
|
-
]);
|
|
50
|
-
const commonKeychain = commonPub + commonChaincode;
|
|
51
|
-
if (commonKeychain !== bitgoKeychain.commonKeychain) {
|
|
52
|
-
throw new Error('Failed to create user keychain - commonKeychains do not match.');
|
|
53
|
-
}
|
|
54
|
-
const bitGoToUserPrivateShare = await this.decryptPrivateShare(bitGoToUserShare.privateShare, userGpgKey);
|
|
55
|
-
if (bitGoToUserPrivateShare.slice(64) !== bitGoToUserChaincode) {
|
|
56
|
-
throw new Error('Failed to create user keychain - bitgo to user chaincode do not match.');
|
|
57
|
-
}
|
|
58
|
-
const userSigningMaterial = {
|
|
59
|
-
userShare: {
|
|
60
|
-
pub: userKeyShare.pub,
|
|
61
|
-
priv: userKeyShare.secretShares[0],
|
|
62
|
-
seed: userKeyShare.seed,
|
|
63
|
-
chaincode: userKeyShare.chaincode,
|
|
64
|
-
},
|
|
65
|
-
backupShare: {
|
|
66
|
-
pub: backupKeyShare.pub,
|
|
67
|
-
priv: backupKeyShare.secretShares[0],
|
|
68
|
-
chaincode: backupKeyShare.chaincode,
|
|
69
|
-
},
|
|
70
|
-
bitgoShare: {
|
|
71
|
-
pub: bitGoToUserPublicShare,
|
|
72
|
-
priv: bitGoToUserPrivateShare.slice(0, 64),
|
|
73
|
-
chaincode: bitGoToUserChaincode,
|
|
74
|
-
},
|
|
75
|
-
};
|
|
76
|
-
const userKeychainParams = {
|
|
77
|
-
source: 'user',
|
|
78
|
-
keyType: 'blsdkg',
|
|
79
|
-
commonKeychain: commonKeychain,
|
|
80
|
-
encryptedPrv: this.bitgo.encrypt({ input: JSON.stringify(userSigningMaterial), password: passphrase }),
|
|
81
|
-
originalPasscodeEncryptionCode,
|
|
82
|
-
};
|
|
83
|
-
return await this.baseCoin.keychains().add(userKeychainParams);
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Creates a Keychain containing the Backup party's BLS-DKG signing materials.
|
|
87
|
-
*
|
|
88
|
-
* @param backupGpgKey - ephemeral GPG key to encrypt / decrypt sensitive data exchanged between backup and server
|
|
89
|
-
* @param userKeyShare - User's BLS-DKG Keyshare
|
|
90
|
-
* @param backupKeyShare - Backup's BLS-DKG Keyshare
|
|
91
|
-
* @param bitgoKeychain - previously created BitGo keychain; must be compatible with user and backup key shares
|
|
92
|
-
* @param passphrase - wallet passphrase used to encrypt user's signing materials
|
|
93
|
-
*/
|
|
94
|
-
async createBackupKeychain(backupGpgKey, userKeyShare, backupKeyShare, bitgoKeychain, passphrase) {
|
|
95
|
-
const bitgoKeyShares = bitgoKeychain.keyShares;
|
|
96
|
-
if (!bitgoKeyShares) {
|
|
97
|
-
throw new Error('Invalid bitgo keyshares');
|
|
98
|
-
}
|
|
99
|
-
const bitGoToBackupShare = bitgoKeyShares.find((keyShare) => keyShare.from === 'bitgo' && keyShare.to === 'backup');
|
|
100
|
-
if (!bitGoToBackupShare) {
|
|
101
|
-
throw new Error('Missing BitGo to backup key share');
|
|
102
|
-
}
|
|
103
|
-
if (!userKeyShare.secretShares || !userKeyShare.pub) {
|
|
104
|
-
throw new Error('Invalid user key shares');
|
|
105
|
-
}
|
|
106
|
-
if (!backupKeyShare.secretShares || !backupKeyShare.pub) {
|
|
107
|
-
throw new Error('Invalid backup key shares');
|
|
108
|
-
}
|
|
109
|
-
const bitGoToBackupPublicShare = bitGoToBackupShare.publicShare.slice(0, 96);
|
|
110
|
-
const bitGoToBackupChaincode = bitGoToBackupShare.publicShare.slice(96);
|
|
111
|
-
const commonPub = baseCoin_1.BlsKeyPair.aggregatePubkeys([
|
|
112
|
-
userKeyShare.pub,
|
|
113
|
-
backupKeyShare.pub,
|
|
114
|
-
bitGoToBackupPublicShare,
|
|
115
|
-
]);
|
|
116
|
-
const commonChaincode = baseCoin_1.BlsKeyPair.aggregateChaincodes([
|
|
117
|
-
userKeyShare.chaincode,
|
|
118
|
-
backupKeyShare.chaincode,
|
|
119
|
-
bitGoToBackupChaincode,
|
|
120
|
-
]);
|
|
121
|
-
const commonKeychain = commonPub + commonChaincode;
|
|
122
|
-
if (commonKeychain !== bitgoKeychain.commonKeychain) {
|
|
123
|
-
throw new Error('Failed to create backup keychain - commonKeychains do not match.');
|
|
124
|
-
}
|
|
125
|
-
const bitGoToBackupPrivateShare = await this.decryptPrivateShare(bitGoToBackupShare.privateShare, backupGpgKey);
|
|
126
|
-
if (bitGoToBackupPrivateShare.slice(64) !== bitGoToBackupChaincode) {
|
|
127
|
-
throw new Error('Failed to create user keychain - bitgo to user chaincode do not match.');
|
|
128
|
-
}
|
|
129
|
-
const backupSigningMaterial = {
|
|
130
|
-
userShare: {
|
|
131
|
-
pub: userKeyShare.pub,
|
|
132
|
-
priv: userKeyShare.secretShares[1],
|
|
133
|
-
chaincode: userKeyShare.chaincode,
|
|
134
|
-
},
|
|
135
|
-
backupShare: {
|
|
136
|
-
pub: backupKeyShare.pub,
|
|
137
|
-
priv: backupKeyShare.secretShares[1],
|
|
138
|
-
chaincode: backupKeyShare.chaincode,
|
|
139
|
-
seed: backupKeyShare.seed,
|
|
140
|
-
},
|
|
141
|
-
bitgoShare: {
|
|
142
|
-
pub: bitGoToBackupPublicShare,
|
|
143
|
-
priv: bitGoToBackupPrivateShare.slice(0, 64),
|
|
144
|
-
chaincode: bitGoToBackupChaincode,
|
|
145
|
-
},
|
|
146
|
-
};
|
|
147
|
-
const prv = JSON.stringify(backupSigningMaterial);
|
|
148
|
-
return await this.baseCoin.keychains().createBackup({
|
|
149
|
-
source: 'backup',
|
|
150
|
-
keyType: 'blsdkg',
|
|
151
|
-
commonKeychain: commonKeychain,
|
|
152
|
-
prv,
|
|
153
|
-
encryptedPrv: this.bitgo.encrypt({ input: prv, password: passphrase }),
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Creates a Keychain containing BitGo's BLS-DKG signing materials.
|
|
158
|
-
*
|
|
159
|
-
* @param userGpgKey - ephemeral GPG key to encrypt / decrypt sensitve data exchanged between user and server
|
|
160
|
-
* @param backupGpgKey - ephemeral GPG key to encrypt / decrypt sensitve data exchanged between backup and server
|
|
161
|
-
* @param userKeyShare - user's BLS-DKG key share
|
|
162
|
-
* @param backupKeyShare - backup's BLS-DKG key share
|
|
163
|
-
*/
|
|
164
|
-
async createBitgoKeychain(userGpgKey, backupGpgKey, userKeyShare, backupKeyShare, enterprise) {
|
|
165
|
-
if (!userKeyShare.secretShares || !userKeyShare.pub) {
|
|
166
|
-
throw new Error('Invalid user key shares');
|
|
167
|
-
}
|
|
168
|
-
if (!backupKeyShare.secretShares || !backupKeyShare.pub) {
|
|
169
|
-
throw new Error('Invalid backup key shares');
|
|
170
|
-
}
|
|
171
|
-
const userToBitgoPublicShare = Buffer.concat([
|
|
172
|
-
Buffer.from(userKeyShare.pub, 'hex'),
|
|
173
|
-
Buffer.from(userKeyShare.chaincode, 'hex'),
|
|
174
|
-
]).toString('hex');
|
|
175
|
-
const userToBitgoPrivateShare = Buffer.concat([
|
|
176
|
-
Buffer.from(userKeyShare.secretShares[2], 'hex'),
|
|
177
|
-
Buffer.from(userKeyShare.chaincode, 'hex'),
|
|
178
|
-
]).toString('hex');
|
|
179
|
-
const userToBitgoKeyShare = {
|
|
180
|
-
publicShare: userToBitgoPublicShare,
|
|
181
|
-
privateShare: userToBitgoPrivateShare,
|
|
182
|
-
};
|
|
183
|
-
const backupToBitgoPublicShare = Buffer.concat([
|
|
184
|
-
Buffer.from(backupKeyShare.pub, 'hex'),
|
|
185
|
-
Buffer.from(backupKeyShare.chaincode, 'hex'),
|
|
186
|
-
]).toString('hex');
|
|
187
|
-
const backupToBitgoPrivateShare = Buffer.concat([
|
|
188
|
-
Buffer.from(backupKeyShare.secretShares[2], 'hex'),
|
|
189
|
-
Buffer.from(backupKeyShare.chaincode, 'hex'),
|
|
190
|
-
]).toString('hex');
|
|
191
|
-
const backupToBitgoKeyShare = {
|
|
192
|
-
publicShare: backupToBitgoPublicShare,
|
|
193
|
-
privateShare: backupToBitgoPrivateShare,
|
|
194
|
-
};
|
|
195
|
-
return await this.createBitgoKeychainInWP(userGpgKey, backupGpgKey, userToBitgoKeyShare, backupToBitgoKeyShare, 'blsdkg', enterprise);
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Creates User, Backup, and BitGo BLS-DKG Keychains.
|
|
199
|
-
*
|
|
200
|
-
* @param params.passphrase - passphrase used to encrypt signing materials created for User and Backup
|
|
201
|
-
*/
|
|
202
|
-
async createKeychains(params) {
|
|
203
|
-
const userKeyShare = this.baseCoin.generateKeyPair();
|
|
204
|
-
const backupKeyShare = this.baseCoin.generateKeyPair();
|
|
205
|
-
const randomHexString = (0, crypto_1.randomBytes)(12).toString('hex');
|
|
206
|
-
const randomHexString2 = (0, crypto_1.randomBytes)(12).toString('hex');
|
|
207
|
-
const userGpgKey = await (0, openpgp_1.generateKey)({
|
|
208
|
-
userIDs: [
|
|
209
|
-
{
|
|
210
|
-
name: randomHexString,
|
|
211
|
-
email: `${randomHexString}@${randomHexString}.com`,
|
|
212
|
-
},
|
|
213
|
-
],
|
|
214
|
-
});
|
|
215
|
-
const backupGpgKey = await (0, openpgp_1.generateKey)({
|
|
216
|
-
userIDs: [
|
|
217
|
-
{
|
|
218
|
-
name: randomHexString2,
|
|
219
|
-
email: `${randomHexString2}@${randomHexString2}.com`,
|
|
220
|
-
},
|
|
221
|
-
],
|
|
222
|
-
});
|
|
223
|
-
const bitgoKeychain = await this.createBitgoKeychain(userGpgKey, backupGpgKey, userKeyShare, backupKeyShare, params.enterprise);
|
|
224
|
-
const userKeychainPromise = this.createUserKeychain(userGpgKey, userKeyShare, backupKeyShare, bitgoKeychain, params.passphrase, params.originalPasscodeEncryptionCode);
|
|
225
|
-
const backupKeychainPromise = this.createBackupKeychain(backupGpgKey, userKeyShare, backupKeyShare, bitgoKeychain, params.passphrase);
|
|
226
|
-
const [userKeychain, backupKeychain] = await Promise.all([userKeychainPromise, backupKeychainPromise]);
|
|
227
|
-
// create wallet
|
|
228
|
-
const keychains = {
|
|
229
|
-
userKeychain,
|
|
230
|
-
backupKeychain,
|
|
231
|
-
bitgoKeychain,
|
|
232
|
-
};
|
|
233
|
-
return keychains;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
exports.BlsUtils = BlsUtils;
|
|
237
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxzVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvYmxzVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxtQ0FBcUM7QUFDckMscUNBQXlEO0FBQ3pELHlEQUEyRTtBQU0zRSx5Q0FBc0M7QUFldEM7O0dBRUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxtQkFBUTtJQUNwQyxZQUFZLEtBQWdCLEVBQUUsUUFBbUI7UUFDL0MsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsa0JBQWtCLENBQ3RCLFVBQXFDLEVBQ3JDLFlBQXlCLEVBQ3pCLGNBQTJCLEVBQzNCLGFBQXVCLEVBQ3ZCLFVBQWtCLEVBQ2xCLDhCQUF1QztRQUV2QyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQy9DLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQztRQUNoSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3BELE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsSUFBSSxDQUFD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Z0I7UUFDaEIsTUFBTSxTQUFTLEdBQUc7WUFDaEIsWUFBWTtZQUNaLGNBQWM7WUFDZCxhQUFhO1NBQ2QsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQXZTRCw0QkF1U0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBnZW5lcmF0ZUtleSwgU2VyaWFsaXplZEtleVBhaXIgfSBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IEJsc0tleVBhaXIgYXMgQmxzS2V5UGFpckNsYXNzIH0gZnJvbSAnLi4vLi4vYWNjb3VudC1saWIvYmFzZUNvaW4nO1xuaW1wb3J0IHsgSUJhc2VDb2luLCBJQmxzS2V5UGFpciwgS2V5Y2hhaW5zVHJpcGxldCB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBLZXljaGFpbiB9IGZyb20gJy4uL2tleWNoYWluJztcbmltcG9ydCB7IEFkZEtleWNoYWluT3B0aW9ucyB9IGZyb20gJy4uL2tleWNoYWluL2lLZXljaGFpbnMnO1xuaW1wb3J0IHsgSUJsc1V0aWxzIH0gZnJvbSAnLi9pQmxzVXRpbHMnO1xuaW1wb3J0IHsgTXBjVXRpbHMgfSBmcm9tICcuL21wY1V0aWxzJztcblxudHlwZSBTaWduaW5nU2hhcmUgPSB7XG4gIHNlZWQ/OiBzdHJpbmc7XG4gIHB1Yjogc3RyaW5nO1xuICBwcml2OiBzdHJpbmc7XG4gIGNoYWluY29kZTogc3RyaW5nO1xufTtcblxudHlwZSBTaWduaW5nTWF0ZXJpYWwgPSB7XG4gIHVzZXJTaGFyZTogU2lnbmluZ1NoYXJlO1xuICBiYWNrdXBTaGFyZTogU2lnbmluZ1NoYXJlO1xuICBiaXRnb1NoYXJlOiBTaWduaW5nU2hhcmU7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBCTFMtREtHIHdvcmsgZmxvd3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBCbHNVdGlscyBleHRlbmRzIE1wY1V0aWxzIGltcGxlbWVudHMgSUJsc1V0aWxzIHtcbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgYmFzZUNvaW46IElCYXNlQ29pbikge1xuICAgIHN1cGVyKGJpdGdvLCBiYXNlQ29pbik7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEtleWNoYWluIGNvbnRhaW5pbmcgdGhlIFVzZXIncyBCTFMtREtHIHNpZ25pbmcgbWF0ZXJpYWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlckdwZ0tleSAtIGVwaGVtZXJhbCBHUEcga2V5IHRvIGVuY3J5cHQgLyBkZWNyeXB0IHNlbnNpdHZlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gdXNlciBhbmQgc2VydmVyXG4gICAqIEBwYXJhbSB1c2VyS2V5U2hhcmUgLSB1c2VyJ3MgQkxTLURLRyBrZXkgc2hhcmVcbiAgICogQHBhcmFtIGJhY2t1cEtleVNoYXJlIC0gYmFja3VwJ3MgQkxTLURLRyBrZXkgc2hhcmVcbiAgICogQHBhcmFtIGJpdGdvS2V5Y2hhaW4gLSBwcmV2aW91c2x5IGNyZWF0ZWQgQml0R28ga2V5Y2hhaW47IG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHVzZXIgYW5kIGJhY2t1cCBrZXkgc2hhcmVzXG4gICAqIEBwYXJhbSBwYXNzcGhyYXNlIC0gd2FsbGV0IHBhc3NwaHJhc2UgdXNlZCB0byBlbmNyeXB0IHVzZXIncyBzaWduaW5nIG1hdGVyaWFsc1xuICAgKi9cbiAgYXN5bmMgY3JlYXRlVXNlcktleWNoYWluKFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdXNlcktleVNoYXJlOiBJQmxzS2V5UGFpcixcbiAgICBiYWNrdXBLZXlTaGFyZTogSUJsc0tleVBhaXIsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZTogc3RyaW5nLFxuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3QgYml0Z29LZXlTaGFyZXMgPSBiaXRnb0tleWNoYWluLmtleVNoYXJlcztcbiAgICBpZiAoIWJpdGdvS2V5U2hhcmVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0R28ga2V5IHNoYXJlcycpO1xuICAgIH1cblxuICAgIGNvbnN0IGJpdEdvVG9Vc2VyU2hhcmUgPSBiaXRnb0tleVNoYXJlcy5maW5kKChrZXlTaGFyZSkgPT4ga2V5U2hhcmUuZnJvbSA9PT0gJ2JpdGdvJyAmJiBrZXlTaGFyZS50byA9PT0gJ3VzZXInKTtcbiAgICBpZiAoIWJpdEdvVG9Vc2VyU2hhcmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBCaXRHbyB0byBVc2VyIGtleSBzaGFyZScpO1xuICAgIH1cblxuICAgIGlmICghdXNlcktleVNoYXJlLnNlY3JldFNoYXJlcyB8fCAhdXNlcktleVNoYXJlLnB1Yikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVzZXIga2V5IHNoYXJlcycpO1xuICAgIH1cbiAgICBpZiAoIWJhY2t1cEtleVNoYXJlLnNlY3JldFNoYXJlcyB8fCAhYmFja3VwS2V5U2hhcmUucHViKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmFja3VwIGtleSBzaGFyZXMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRHb1RvVXNlclB1YmxpY1NoYXJlID0gYml0R29Ub1VzZXJTaGFyZS5wdWJsaWNTaGFyZS5zbGljZSgwLCA5Nik7XG4gICAgY29uc3QgYml0R29Ub1VzZXJDaGFpbmNvZGUgPSBiaXRHb1RvVXNlclNoYXJlLnB1YmxpY1NoYXJlLnNsaWNlKDk2KTtcbiAgICBjb25zdCBjb21tb25QdWIgPSBCbHNLZXlQYWlyQ2xhc3MuYWdncmVnYXRlUHVia2V5cyhbdXNlcktleVNoYXJlLnB1YiwgYmFja3VwS2V5U2hhcmUucHViLCBiaXRHb1RvVXNlclB1YmxpY1NoYXJlXSk7XG4gICAgY29uc3QgY29tbW9uQ2hhaW5jb2RlID0gQmxzS2V5UGFpckNsYXNzLmFnZ3JlZ2F0ZUNoYWluY29kZXMoW1xuICAgICAgdXNlcktleVNoYXJlLmNoYWluY29kZSxcbiAgICAgIGJhY2t1cEtleVNoYXJlLmNoYWluY29kZSxcbiAgICAgIGJpdEdvVG9Vc2VyQ2hhaW5jb2RlLFxuICAgIF0pO1xuICAgIGNvbnN0IGNvbW1vbktleWNoYWluID0gY29tbW9uUHViICsgY29tbW9uQ2hhaW5jb2RlO1xuICAgIGlmIChjb21tb25LZXljaGFpbiAhPT0gYml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIHVzZXIga2V5Y2hhaW4gLSBjb21tb25LZXljaGFpbnMgZG8gbm90IG1hdGNoLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGJpdEdvVG9Vc2VyUHJpdmF0ZVNoYXJlID0gYXdhaXQgdGhpcy5kZWNyeXB0UHJpdmF0ZVNoYXJlKGJpdEdvVG9Vc2VyU2hhcmUucHJpdmF0ZVNoYXJlLCB1c2VyR3BnS2V5KTtcbiAgICBpZiAoYml0R29Ub1VzZXJQcml2YXRlU2hhcmUuc2xpY2UoNjQpICE9PSBiaXRHb1RvVXNlckNoYWluY29kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIHVzZXIga2V5Y2hhaW4gLSBiaXRnbyB0byB1c2VyIGNoYWluY29kZSBkbyBub3QgbWF0Y2guJyk7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJTaWduaW5nTWF0ZXJpYWw6IFNpZ25pbmdNYXRlcmlhbCA9IHtcbiAgICAgIHVzZXJTaGFyZToge1xuICAgICAgICBwdWI6IHVzZXJLZXlTaGFyZS5wdWIsXG4gICAgICAgIHByaXY6IHVzZXJLZXlTaGFyZS5zZWNyZXRTaGFyZXNbMF0sXG4gICAgICAgIHNlZWQ6IHVzZXJLZXlTaGFyZS5zZWVkLFxuICAgICAgICBjaGFpbmNvZGU6IHVzZXJLZXlTaGFyZS5jaGFpbmNvZGUsXG4gICAgICB9LFxuICAgICAgYmFja3VwU2hhcmU6IHtcbiAgICAgICAgcHViOiBiYWNrdXBLZXlTaGFyZS5wdWIsXG4gICAgICAgIHByaXY6IGJhY2t1cEtleVNoYXJlLnNlY3JldFNoYXJlc1swXSxcbiAgICAgICAgY2hhaW5jb2RlOiBiYWNrdXBLZXlTaGFyZS5jaGFpbmNvZGUsXG4gICAgICB9LFxuICAgICAgYml0Z29TaGFyZToge1xuICAgICAgICBwdWI6IGJpdEdvVG9Vc2VyUHVibGljU2hhcmUsXG4gICAgICAgIHByaXY6IGJpdEdvVG9Vc2VyUHJpdmF0ZVNoYXJlLnNsaWNlKDAsIDY0KSxcbiAgICAgICAgY2hhaW5jb2RlOiBiaXRHb1RvVXNlckNoYWluY29kZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHVzZXJLZXljaGFpblBhcmFtczogQWRkS2V5Y2hhaW5PcHRpb25zID0ge1xuICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICBrZXlUeXBlOiAnYmxzZGtnJyxcbiAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgIGVuY3J5cHRlZFBydjogdGhpcy5iaXRnby5lbmNyeXB0KHsgaW5wdXQ6IEpTT04uc3RyaW5naWZ5KHVzZXJTaWduaW5nTWF0ZXJpYWwpLCBwYXNzd29yZDogcGFzc3BocmFzZSB9KSxcbiAgICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYmFzZUNvaW4ua2V5Y2hhaW5zKCkuYWRkKHVzZXJLZXljaGFpblBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEtleWNoYWluIGNvbnRhaW5pbmcgdGhlIEJhY2t1cCBwYXJ0eSdzIEJMUy1ES0cgc2lnbmluZyBtYXRlcmlhbHMuXG4gICAqXG4gICAqIEBwYXJhbSBiYWNrdXBHcGdLZXkgLSBlcGhlbWVyYWwgR1BHIGtleSB0byBlbmNyeXB0IC8gZGVjcnlwdCBzZW5zaXRpdmUgZGF0YSBleGNoYW5nZWQgYmV0d2VlbiBiYWNrdXAgYW5kIHNlcnZlclxuICAgKiBAcGFyYW0gdXNlcktleVNoYXJlIC0gVXNlcidzIEJMUy1ES0cgS2V5c2hhcmVcbiAgICogQHBhcmFtIGJhY2t1cEtleVNoYXJlIC0gQmFja3VwJ3MgQkxTLURLRyBLZXlzaGFyZVxuICAgKiBAcGFyYW0gYml0Z29LZXljaGFpbiAtIHByZXZpb3VzbHkgY3JlYXRlZCBCaXRHbyBrZXljaGFpbjsgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdXNlciBhbmQgYmFja3VwIGtleSBzaGFyZXNcbiAgICogQHBhcmFtIHBhc3NwaHJhc2UgLSB3YWxsZXQgcGFzc3BocmFzZSB1c2VkIHRvIGVuY3J5cHQgdXNlcidzIHNpZ25pbmcgbWF0ZXJpYWxzXG4gICAqL1xuICBhc3luYyBjcmVhdGVCYWNrdXBLZXljaGFpbihcbiAgICBiYWNrdXBHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdXNlcktleVNoYXJlOiBJQmxzS2V5UGFpcixcbiAgICBiYWNrdXBLZXlTaGFyZTogSUJsc0tleVBhaXIsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZTogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBiaXRnb0tleVNoYXJlcyA9IGJpdGdvS2V5Y2hhaW4ua2V5U2hhcmVzO1xuICAgIGlmICghYml0Z29LZXlTaGFyZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiaXRnbyBrZXlzaGFyZXMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRHb1RvQmFja3VwU2hhcmUgPSBiaXRnb0tleVNoYXJlcy5maW5kKChrZXlTaGFyZSkgPT4ga2V5U2hhcmUuZnJvbSA9PT0gJ2JpdGdvJyAmJiBrZXlTaGFyZS50byA9PT0gJ2JhY2t1cCcpO1xuICAgIGlmICghYml0R29Ub0JhY2t1cFNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0R28gdG8gYmFja3VwIGtleSBzaGFyZScpO1xuICAgIH1cblxuICAgIGlmICghdXNlcktleVNoYXJlLnNlY3JldFNoYXJlcyB8fCAhdXNlcktleVNoYXJlLnB1Yikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVzZXIga2V5IHNoYXJlcycpO1xuICAgIH1cbiAgICBpZiAoIWJhY2t1cEtleVNoYXJlLnNlY3JldFNoYXJlcyB8fCAhYmFja3VwS2V5U2hhcmUucHViKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmFja3VwIGtleSBzaGFyZXMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRHb1RvQmFja3VwUHVibGljU2hhcmUgPSBiaXRHb1RvQmFja3VwU2hhcmUucHVibGljU2hhcmUuc2xpY2UoMCwgOTYpO1xuICAgIGNvbnN0IGJpdEdvVG9CYWNrdXBDaGFpbmNvZGUgPSBiaXRHb1RvQmFja3VwU2hhcmUucHVibGljU2hhcmUuc2xpY2UoOTYpO1xuICAgIGNvbnN0IGNvbW1vblB1YiA9IEJsc0tleVBhaXJDbGFzcy5hZ2dyZWdhdGVQdWJrZXlzKFtcbiAgICAgIHVzZXJLZXlTaGFyZS5wdWIsXG4gICAgICBiYWNrdXBLZXlTaGFyZS5wdWIsXG4gICAgICBiaXRHb1RvQmFja3VwUHVibGljU2hhcmUsXG4gICAgXSk7XG4gICAgY29uc3QgY29tbW9uQ2hhaW5jb2RlID0gQmxzS2V5UGFpckNsYXNzLmFnZ3JlZ2F0ZUNoYWluY29kZXMoW1xuICAgICAgdXNlcktleVNoYXJlLmNoYWluY29kZSxcbiAgICAgIGJhY2t1cEtleVNoYXJlLmNoYWluY29kZSxcbiAgICAgIGJpdEdvVG9CYWNrdXBDaGFpbmNvZGUsXG4gICAgXSk7XG4gICAgY29uc3QgY29tbW9uS2V5Y2hhaW4gPSBjb21tb25QdWIgKyBjb21tb25DaGFpbmNvZGU7XG4gICAgaWYgKGNvbW1vbktleWNoYWluICE9PSBiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgYmFja3VwIGtleWNoYWluIC0gY29tbW9uS2V5Y2hhaW5zIGRvIG5vdCBtYXRjaC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRHb1RvQmFja3VwUHJpdmF0ZVNoYXJlID0gYXdhaXQgdGhpcy5kZWNyeXB0UHJpdmF0ZVNoYXJlKGJpdEdvVG9CYWNrdXBTaGFyZS5wcml2YXRlU2hhcmUsIGJhY2t1cEdwZ0tleSk7XG4gICAgaWYgKGJpdEdvVG9CYWNrdXBQcml2YXRlU2hhcmUuc2xpY2UoNjQpICE9PSBiaXRHb1RvQmFja3VwQ2hhaW5jb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgdXNlciBrZXljaGFpbiAtIGJpdGdvIHRvIHVzZXIgY2hhaW5jb2RlIGRvIG5vdCBtYXRjaC4nKTtcbiAgICB9XG4gICAgY29uc3QgYmFja3VwU2lnbmluZ01hdGVyaWFsOiBTaWduaW5nTWF0ZXJpYWwgPSB7XG4gICAgICB1c2VyU2hhcmU6IHtcbiAgICAgICAgcHViOiB1c2VyS2V5U2hhcmUucHViLFxuICAgICAgICBwcml2OiB1c2VyS2V5U2hhcmUuc2VjcmV0U2hhcmVzWzFdLFxuICAgICAgICBjaGFpbmNvZGU6IHVzZXJLZXlTaGFyZS5jaGFpbmNvZGUsXG4gICAgICB9LFxuICAgICAgYmFja3VwU2hhcmU6IHtcbiAgICAgICAgcHViOiBiYWNrdXBLZXlTaGFyZS5wdWIsXG4gICAgICAgIHByaXY6IGJhY2t1cEtleVNoYXJlLnNlY3JldFNoYXJlc1sxXSxcbiAgICAgICAgY2hhaW5jb2RlOiBiYWNrdXBLZXlTaGFyZS5jaGFpbmNvZGUsXG4gICAgICAgIHNlZWQ6IGJhY2t1cEtleVNoYXJlLnNlZWQsXG4gICAgICB9LFxuICAgICAgYml0Z29TaGFyZToge1xuICAgICAgICBwdWI6IGJpdEdvVG9CYWNrdXBQdWJsaWNTaGFyZSxcbiAgICAgICAgcHJpdjogYml0R29Ub0JhY2t1cFByaXZhdGVTaGFyZS5zbGljZSgwLCA2NCksXG4gICAgICAgIGNoYWluY29kZTogYml0R29Ub0JhY2t1cENoYWluY29kZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBwcnYgPSBKU09OLnN0cmluZ2lmeShiYWNrdXBTaWduaW5nTWF0ZXJpYWwpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYmFzZUNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlQmFja3VwKHtcbiAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICBrZXlUeXBlOiAnYmxzZGtnJyxcbiAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgIHBydixcbiAgICAgIGVuY3J5cHRlZFBydjogdGhpcy5iaXRnby5lbmNyeXB0KHsgaW5wdXQ6IHBydiwgcGFzc3dvcmQ6IHBhc3NwaHJhc2UgfSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEtleWNoYWluIGNvbnRhaW5pbmcgQml0R28ncyBCTFMtREtHIHNpZ25pbmcgbWF0ZXJpYWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlckdwZ0tleSAtIGVwaGVtZXJhbCBHUEcga2V5IHRvIGVuY3J5cHQgLyBkZWNyeXB0IHNlbnNpdHZlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gdXNlciBhbmQgc2VydmVyXG4gICAqIEBwYXJhbSBiYWNrdXBHcGdLZXkgLSBlcGhlbWVyYWwgR1BHIGtleSB0byBlbmNyeXB0IC8gZGVjcnlwdCBzZW5zaXR2ZSBkYXRhIGV4Y2hhbmdlZCBiZXR3ZWVuIGJhY2t1cCBhbmQgc2VydmVyXG4gICAqIEBwYXJhbSB1c2VyS2V5U2hhcmUgLSB1c2VyJ3MgQkxTLURLRyBrZXkgc2hhcmVcbiAgICogQHBhcmFtIGJhY2t1cEtleVNoYXJlIC0gYmFja3VwJ3MgQkxTLURLRyBrZXkgc2hhcmVcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUJpdGdvS2V5Y2hhaW4oXG4gICAgdXNlckdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICBiYWNrdXBHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdXNlcktleVNoYXJlOiBJQmxzS2V5UGFpcixcbiAgICBiYWNrdXBLZXlTaGFyZTogSUJsc0tleVBhaXIsXG4gICAgZW50ZXJwcmlzZT86IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgaWYgKCF1c2VyS2V5U2hhcmUuc2VjcmV0U2hhcmVzIHx8ICF1c2VyS2V5U2hhcmUucHViKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBrZXkgc2hhcmVzJyk7XG4gICAgfVxuICAgIGlmICghYmFja3VwS2V5U2hhcmUuc2VjcmV0U2hhcmVzIHx8ICFiYWNrdXBLZXlTaGFyZS5wdWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiYWNrdXAga2V5IHNoYXJlcycpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJUb0JpdGdvUHVibGljU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS5wdWIsICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS5jaGFpbmNvZGUsICdoZXgnKSxcbiAgICBdKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgdXNlclRvQml0Z29Qcml2YXRlU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS5zZWNyZXRTaGFyZXNbMl0sICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS5jaGFpbmNvZGUsICdoZXgnKSxcbiAgICBdKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICBjb25zdCB1c2VyVG9CaXRnb0tleVNoYXJlID0ge1xuICAgICAgcHVibGljU2hhcmU6IHVzZXJUb0JpdGdvUHVibGljU2hhcmUsXG4gICAgICBwcml2YXRlU2hhcmU6IHVzZXJUb0JpdGdvUHJpdmF0ZVNoYXJlLFxuICAgIH07XG5cbiAgICBjb25zdCBiYWNrdXBUb0JpdGdvUHVibGljU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKGJhY2t1cEtleVNoYXJlLnB1YiwgJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20oYmFja3VwS2V5U2hhcmUuY2hhaW5jb2RlLCAnaGV4JyksXG4gICAgXSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IGJhY2t1cFRvQml0Z29Qcml2YXRlU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKGJhY2t1cEtleVNoYXJlLnNlY3JldFNoYXJlc1syXSwgJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20oYmFja3VwS2V5U2hhcmUuY2hhaW5jb2RlLCAnaGV4JyksXG4gICAgXSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IGJhY2t1cFRvQml0Z29LZXlTaGFyZSA9IHtcbiAgICAgIHB1YmxpY1NoYXJlOiBiYWNrdXBUb0JpdGdvUHVibGljU2hhcmUsXG4gICAgICBwcml2YXRlU2hhcmU6IGJhY2t1cFRvQml0Z29Qcml2YXRlU2hhcmUsXG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZUJpdGdvS2V5Y2hhaW5JbldQKFxuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgIHVzZXJUb0JpdGdvS2V5U2hhcmUsXG4gICAgICBiYWNrdXBUb0JpdGdvS2V5U2hhcmUsXG4gICAgICAnYmxzZGtnJyxcbiAgICAgIGVudGVycHJpc2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgVXNlciwgQmFja3VwLCBhbmQgQml0R28gQkxTLURLRyBLZXljaGFpbnMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMucGFzc3BocmFzZSAtIHBhc3NwaHJhc2UgdXNlZCB0byBlbmNyeXB0IHNpZ25pbmcgbWF0ZXJpYWxzIGNyZWF0ZWQgZm9yIFVzZXIgYW5kIEJhY2t1cFxuICAgKi9cbiAgYXN5bmMgY3JlYXRlS2V5Y2hhaW5zKHBhcmFtczoge1xuICAgIHBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbnRlcnByaXNlPzogc3RyaW5nO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD4ge1xuICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IHRoaXMuYmFzZUNvaW4uZ2VuZXJhdGVLZXlQYWlyKCkgYXMgSUJsc0tleVBhaXI7XG4gICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSB0aGlzLmJhc2VDb2luLmdlbmVyYXRlS2V5UGFpcigpIGFzIElCbHNLZXlQYWlyO1xuXG4gICAgY29uc3QgcmFuZG9tSGV4U3RyaW5nID0gcmFuZG9tQnl0ZXMoMTIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCByYW5kb21IZXhTdHJpbmcyID0gcmFuZG9tQnl0ZXMoMTIpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgIGNvbnN0IHVzZXJHcGdLZXkgPSBhd2FpdCBnZW5lcmF0ZUtleSh7XG4gICAgICB1c2VySURzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiByYW5kb21IZXhTdHJpbmcsXG4gICAgICAgICAgZW1haWw6IGAke3JhbmRvbUhleFN0cmluZ31AJHtyYW5kb21IZXhTdHJpbmd9LmNvbWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYmFja3VwR3BnS2V5ID0gYXdhaXQgZ2VuZXJhdGVLZXkoe1xuICAgICAgdXNlcklEczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogcmFuZG9tSGV4U3RyaW5nMixcbiAgICAgICAgICBlbWFpbDogYCR7cmFuZG9tSGV4U3RyaW5nMn1AJHtyYW5kb21IZXhTdHJpbmcyfS5jb21gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0aGlzLmNyZWF0ZUJpdGdvS2V5Y2hhaW4oXG4gICAgICB1c2VyR3BnS2V5LFxuICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICBwYXJhbXMuZW50ZXJwcmlzZVxuICAgICk7XG4gICAgY29uc3QgdXNlcktleWNoYWluUHJvbWlzZSA9IHRoaXMuY3JlYXRlVXNlcktleWNoYWluKFxuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZVxuICAgICk7XG4gICAgY29uc3QgYmFja3VwS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5jcmVhdGVCYWNrdXBLZXljaGFpbihcbiAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgIHBhcmFtcy5wYXNzcGhyYXNlXG4gICAgKTtcbiAgICBjb25zdCBbdXNlcktleWNoYWluLCBiYWNrdXBLZXljaGFpbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbdXNlcktleWNoYWluUHJvbWlzZSwgYmFja3VwS2V5Y2hhaW5Qcm9taXNlXSk7XG5cbiAgICAvLyBjcmVhdGUgd2FsbGV0XG4gICAgY29uc3Qga2V5Y2hhaW5zID0ge1xuICAgICAgdXNlcktleWNoYWluLFxuICAgICAgYmFja3VwS2V5Y2hhaW4sXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgIH07XG5cbiAgICByZXR1cm4ga2V5Y2hhaW5zO1xuICB9XG59XG4iXX0=
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { SerializedKeyPair } from 'openpgp';
|
|
2
|
-
import { IBlsKeyPair, KeychainsTriplet } from '../baseCoin';
|
|
3
|
-
import { Keychain } from '../keychain';
|
|
4
|
-
export interface IBlsUtils {
|
|
5
|
-
createUserKeychain(userGpgKey: SerializedKeyPair<string>, userKeyShare: IBlsKeyPair, backupKeyShare: IBlsKeyPair, bitgoKeychain: Keychain, passphrase: string, originalPasscodeEncryptionCode: string): Promise<Keychain>;
|
|
6
|
-
createBackupKeychain(backupGpgKey: SerializedKeyPair<string>, userKeyShare: IBlsKeyPair, backupKeyShare: IBlsKeyPair, bitgoKeychain: Keychain, passphrase: string): Promise<Keychain>;
|
|
7
|
-
createBitgoKeychain(userGpgKey: SerializedKeyPair<string>, backupGpgKey: SerializedKeyPair<string>, userKeyShare: IBlsKeyPair, backupKeyShare: IBlsKeyPair, enterprise: string): Promise<Keychain>;
|
|
8
|
-
createKeychains(params: {
|
|
9
|
-
passphrase: string;
|
|
10
|
-
enterprise?: string;
|
|
11
|
-
originalPasscodeEncryptionCode?: string;
|
|
12
|
-
}): Promise<KeychainsTriplet>;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=iBlsUtils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"iBlsUtils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/iBlsUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,SAAS;IACxB,kBAAkB,CAChB,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACrC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,aAAa,EAAE,QAAQ,EACvB,UAAU,EAAE,MAAM,EAClB,8BAA8B,EAAE,MAAM,GACrC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrB,oBAAoB,CAClB,YAAY,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACvC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,aAAa,EAAE,QAAQ,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrB,mBAAmB,CACjB,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACrC,YAAY,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACvC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrB,eAAe,CAAC,MAAM,EAAE;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,8BAA8B,CAAC,EAAE,MAAM,CAAC;KACzC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC/B"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaUJsc1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL2lCbHNVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VyaWFsaXplZEtleVBhaXIgfSBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IElCbHNLZXlQYWlyLCBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgS2V5Y2hhaW4gfSBmcm9tICcuLi9rZXljaGFpbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJsc1V0aWxzIHtcbiAgY3JlYXRlVXNlcktleWNoYWluKFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdXNlcktleVNoYXJlOiBJQmxzS2V5UGFpcixcbiAgICBiYWNrdXBLZXlTaGFyZTogSUJsc0tleVBhaXIsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZTogc3RyaW5nLFxuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+O1xuICBjcmVhdGVCYWNrdXBLZXljaGFpbihcbiAgICBiYWNrdXBHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdXNlcktleVNoYXJlOiBJQmxzS2V5UGFpcixcbiAgICBiYWNrdXBLZXlTaGFyZTogSUJsc0tleVBhaXIsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZTogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+O1xuICBjcmVhdGVCaXRnb0tleWNoYWluKFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgYmFja3VwR3BnS2V5OiBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgIHVzZXJLZXlTaGFyZTogSUJsc0tleVBhaXIsXG4gICAgYmFja3VwS2V5U2hhcmU6IElCbHNLZXlQYWlyLFxuICAgIGVudGVycHJpc2U6IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNoYWluPjtcbiAgY3JlYXRlS2V5Y2hhaW5zKHBhcmFtczoge1xuICAgIHBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbnRlcnByaXNlPzogc3RyaW5nO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD47XG59XG4iXX0=
|