@bitgo-beta/sdk-lib-mpc 8.2.0-beta.1685 → 8.2.0-beta.1687
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/tss/ecdsa-dkls/commsLayer.d.ts.map +1 -1
- package/dist/src/tss/ecdsa-dkls/commsLayer.js +15 -8
- package/dist/src/tss/eddsa-mps/dkg.d.ts +93 -0
- package/dist/src/tss/eddsa-mps/dkg.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/dkg.js +217 -0
- package/dist/src/tss/eddsa-mps/index.d.ts +4 -0
- package/dist/src/tss/eddsa-mps/index.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/index.js +40 -0
- package/dist/src/tss/eddsa-mps/types.d.ts +36 -0
- package/dist/src/tss/eddsa-mps/types.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/types.js +85 -0
- package/dist/src/tss/eddsa-mps/util.d.ts +7 -0
- package/dist/src/tss/eddsa-mps/util.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/util.js +13 -0
- package/dist/src/tss/index.d.ts +1 -0
- package/dist/src/tss/index.d.ts.map +1 -1
- package/dist/src/tss/index.js +2 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commsLayer.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa-dkls/commsLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGxG;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,2BAA2B,QAAsB,CAAC;AAE/D;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAkB7F;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC,CA6BzB;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,yBAAyB,EAAE,cAAc,EACzC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcxG;AAED;;;;;GAKG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,eAAe,EACzB,sBAAsB,EAAE,WAAW,EAAE,EACrC,oBAAoB,EAAE,WAAW,EAAE,GAClC,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"commsLayer.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa-dkls/commsLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGxG;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,2BAA2B,QAAsB,CAAC;AAE/D;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAkB7F;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC,CA6BzB;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,yBAAyB,EAAE,cAAc,EACzC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcxG;AAED;;;;;GAKG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,eAAe,EACzB,sBAAsB,EAAE,WAAW,EAAE,EACrC,oBAAoB,EAAE,WAAW,EAAE,GAClC,OAAO,CAAC,kBAAkB,CAAC,CA0C7B;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,kBAAkB,EAC5B,oBAAoB,EAAE,WAAW,EAAE,EACnC,wBAAwB,EAAE,WAAW,EAAE,GACtC,OAAO,CAAC,eAAe,CAAC,CAwC1B"}
|
|
@@ -209,9 +209,15 @@ async function decryptAndVerifyIncomingMessages(messages, pubVerificationGpgKeys
|
|
|
209
209
|
if (!(await verifySignedData(m.payload, pubGpgKey.gpgKey))) {
|
|
210
210
|
throw Error(`Failed to authenticate broadcast message from party: ${m.from}`);
|
|
211
211
|
}
|
|
212
|
+
if (m.signatureR !== undefined) {
|
|
213
|
+
if (!(await verifySignedData(m.signatureR, pubGpgKey.gpgKey))) {
|
|
214
|
+
throw Error(`Failed to authenticate signatureR in broadcast message from party: ${m.from}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
212
217
|
return {
|
|
213
218
|
from: m.from,
|
|
214
219
|
payload: m.payload.message,
|
|
220
|
+
signatureR: m.signatureR?.message,
|
|
215
221
|
};
|
|
216
222
|
})),
|
|
217
223
|
};
|
|
@@ -245,17 +251,18 @@ async function encryptAndAuthOutgoingMessages(messages, pubEncryptionGpgKeys, pr
|
|
|
245
251
|
if (!prvGpgKey) {
|
|
246
252
|
throw Error(`No private key provided for sender with ID: ${m.from}`);
|
|
247
253
|
}
|
|
254
|
+
const [signedPayload, signedSignatureR] = await Promise.all([
|
|
255
|
+
detachSignData(Buffer.from(m.payload, 'base64'), prvGpgKey.gpgKey),
|
|
256
|
+
m.signatureR
|
|
257
|
+
? detachSignData(Buffer.from(m.signatureR, 'base64'), prvGpgKey.gpgKey)
|
|
258
|
+
: Promise.resolve(undefined),
|
|
259
|
+
]);
|
|
248
260
|
return {
|
|
249
261
|
from: m.from,
|
|
250
|
-
payload:
|
|
251
|
-
signatureR:
|
|
252
|
-
? {
|
|
253
|
-
message: m.signatureR,
|
|
254
|
-
signature: '',
|
|
255
|
-
}
|
|
256
|
-
: undefined,
|
|
262
|
+
payload: signedPayload,
|
|
263
|
+
signatureR: signedSignatureR,
|
|
257
264
|
};
|
|
258
265
|
})),
|
|
259
266
|
};
|
|
260
267
|
}
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbXNMYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZWNkc2EtZGtscy9jb21tc0xheWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9DQSx3Q0FrQkM7QUFRRCw0REFpQ0M7QUFRRCxnRUF5QkM7QUFPRCw0Q0FjQztBQVFELDRFQXdDQztBQVFELHdFQTJDQztBQXZQRCw2Q0FBK0I7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDVSxRQUFBLDJCQUEyQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUUvRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGNBQWMsQ0FBQyxJQUFZLEVBQUUsWUFBb0I7SUFDckUsTUFBTSxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDMUUsTUFBTSxTQUFTLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQy9CLE9BQU87UUFDUCxXQUFXLEVBQUUsVUFBVTtRQUN2QixNQUFNLEVBQUUsU0FBUztRQUNqQixRQUFRLEVBQUUsSUFBSTtRQUNkLE1BQU0sRUFBRTtZQUNOLFlBQVksRUFBRSxJQUFJLEdBQUcsRUFBRTtZQUN2QixXQUFXLEVBQUUsS0FBSztZQUNsQixXQUFXLEVBQUUsS0FBSztTQUNuQjtLQUNGLENBQUMsQ0FBQztJQUNILE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDaEMsU0FBUyxFQUFFLFNBQVM7S0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRDs7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Q0FBQyxDQUNIO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZXJpYWxpemVkTWVzc2FnZXMsIEF1dGhFbmNNZXNzYWdlLCBBdXRoRW5jTWVzc2FnZXMsIFBhcnR5R3BnS2V5LCBBdXRoTWVzc2FnZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0ICogYXMgcGdwIGZyb20gJ29wZW5wZ3AnO1xuXG4vKipcbiAqIFRvbGVyYW5jZSB3aW5kb3cgZm9yIE9wZW5QR1AgZGF0ZS1iYXNlZCBrZXkgdmFsaWRpdHkgY2hlY2tzICgyNCBob3VycykuXG4gKlxuICogQmFja2dyb3VuZDogT3BlblBHUC5qcyB1c2VzIHRoZSBgZGF0ZWAgcGFyYW1ldGVyIHRvIGNoZWNrIGtleSBleHBpcnkgYXQgYVxuICogZ2l2ZW4gcG9pbnQgaW4gdGltZS4gV2UgcHJldmlvdXNseSBwYXNzZWQgYGRhdGU6IG51bGxgIHRvIGRpc2FibGUgdGhpcyBjaGVja1xuICogZW50aXJlbHkgKHNlZSBIU00tNzA2KSBiZWNhdXNlIE9WQyBjb2xkLXNpZ25pbmcgZmxvd3MgZm9yIHRydXN0IGFuZCBTTUNcbiAqIGNsaWVudHMgY2FuIGludm9sdmUgc2lnbmlmaWNhbnQgY2xvY2sgc2tldyBiZXR3ZWVuIHRoZSBzaWduaW5nIGRldmljZSBhbmQgdGhlXG4gKiBzZXJ2ZXIg4oCUIHRoZSBkZXZpY2UgbWF5IGJlIGFpci1nYXBwZWQgYW5kIGl0cyBjbG9jayBjYW4gZHJpZnQgYnkgaG91cnMuXG4gKlxuICogTm90ZTogdGhpcyBHUEcgZXhwaXJ5IGNoZWNrIGlzIG5vdCBzdHJpY3RseSByZXF1aXJlZCBmb3IgcmVwbGF5IHByb3RlY3Rpb24uXG4gKiBUaGUgREtMUyBwcm90b2NvbCBoYXMgaXRzIG93biBtZWNoYW5pc20gZm9yIHByZXZlbnRpbmcgcmVwbGF5IGF0dGFja3NcbiAqIChzZXNzaW9uLWJvdW5kIGNvbW1pdG1lbnRzIGFuZCByb3VuZC1zcGVjaWZpYyBtZXNzYWdlIHZhbGlkYXRpb24pLCBzbyB0aGVcbiAqIE9wZW5QR1AgZGF0ZSBjaGVjayBpcyBhIGRlZmVuc2UtaW4tZGVwdGggbWVhc3VyZSByYXRoZXIgdGhhbiB0aGUgcHJpbWFyeVxuICogcmVwbGF5IG1pdGlnYXRpb24uXG4gKlxuICogT3BlblBHUCdzIGBkYXRlYCBwYXJhbWV0ZXIgc2hpZnRzIHRoZSByZWZlcmVuY2UgdGltZSBmb3IgQUxMIHRlbXBvcmFsXG4gKiBjaGVja3Mgc2ltdWx0YW5lb3VzbHkgKGtleSBleHBpcnksIHNlbGYtc2lnbmF0dXJlIHZhbGlkaXR5LCBzaWduYXR1cmVcbiAqIGZyZXNobmVzcykuIFRoaXMgbWVhbnMgYSBzaW5nbGUgc2hpZnRlZCBkYXRlIGNhbm5vdCBpbmRlcGVuZGVudGx5IHJlbGF4XG4gKiBrZXktZXhwaXJ5IGNoZWNrcyB3aXRob3V0IGJyZWFraW5nIHNlbGYtc2lnbmF0dXJlIHZhbGlkYXRpb24gb24gZnJlc2gga2V5cy5cbiAqXG4gKiBUaGVyZWZvcmU6XG4gKiAtIGVuY3J5cHQvZGVjcnlwdCBvbWl0IGBkYXRlYCAodXNlIGRlZmF1bHQgPSBjdXJyZW50IHRpbWUpIGZvciBub3JtYWwga2V5XG4gKiAgIGV4cGlyeSBjaGVja2luZyBhbmQgc2VsZi1zaWduYXR1cmUgdmFsaWRhdGlvbi5cbiAqIC0gdmVyaWZ5IHVzZXMgYG5vdyArIHRvbGVyYW5jZWAgc28gdGhhdCBzaWduYXR1cmVzIGZyb20gT1ZDIGRldmljZXMgd2hvc2VcbiAqICAgY2xvY2tzIGFyZSB1cCB0byAyNCBob3VycyBhaGVhZCBhcmUgbm90IHJlamVjdGVkIGFzIFwiZnJvbSB0aGUgZnV0dXJlXCIuXG4gKi9cbmV4cG9ydCBjb25zdCBTSUdOQVRVUkVfREFURV9UT0xFUkFOQ0VfTVMgPSAyNCAqIDYwICogNjAgKiAxMDAwO1xuXG4vKipcbiAqIERldGFjaCBzaWducyBhIGJpbmFyeSBhbmQgZW5jb2RlcyBpdCBpbiBiYXNlNjRcbiAqIEBwYXJhbSBkYXRhIGJpbmFyeSB0byBlbmNvZGUgaW4gYmFzZTY0IGFuZCBzaWduXG4gKiBAcGFyYW0gcHJpdmF0ZUFybW9yIHByaXZhdGUga2V5IHRvIHNpZ24gd2l0aFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGV0YWNoU2lnbkRhdGEoZGF0YTogQnVmZmVyLCBwcml2YXRlQXJtb3I6IHN0cmluZyk6IFByb21pc2U8QXV0aE1lc3NhZ2U+IHtcbiAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHBncC5jcmVhdGVNZXNzYWdlKHsgYmluYXJ5OiBkYXRhIH0pO1xuICBjb25zdCBwcml2YXRlS2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogcHJpdmF0ZUFybW9yIH0pO1xuICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBwZ3Auc2lnbih7XG4gICAgbWVzc2FnZSxcbiAgICBzaWduaW5nS2V5czogcHJpdmF0ZUtleSxcbiAgICBmb3JtYXQ6ICdhcm1vcmVkJyxcbiAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICBjb25maWc6IHtcbiAgICAgIHJlamVjdEN1cnZlczogbmV3IFNldCgpLFxuICAgICAgc2hvd1ZlcnNpb246IGZhbHNlLFxuICAgICAgc2hvd0NvbW1lbnQ6IGZhbHNlLFxuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIG1lc3NhZ2U6IGRhdGEudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgIHNpZ25hdHVyZTogc2lnbmF0dXJlLFxuICB9O1xufVxuXG4vKipcbiAqIEVuY3J5cHRzIGFuZCBkZXRhY2ggc2lnbnMgYSBiaW5hcnlcbiAqIEBwYXJhbSBkYXRhIGJpbmFyeSB0byBlbmNyeXB0IGFuZCBzaWduXG4gKiBAcGFyYW0gcHVibGljQXJtb3IgcHVibGljIGtleSB0byBlbmNyeXB0IHdpdGhcbiAqIEBwYXJhbSBwcml2YXRlQXJtb3IgcHJpdmF0ZSBrZXkgdG8gc2lnbiB3aXRoXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNyeXB0QW5kRGV0YWNoU2lnbkRhdGEoXG4gIGRhdGE6IEJ1ZmZlcixcbiAgcHVibGljQXJtb3I6IHN0cmluZyxcbiAgcHJpdmF0ZUFybW9yOiBzdHJpbmdcbik6IFByb21pc2U8QXV0aEVuY01lc3NhZ2U+IHtcbiAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHBncC5jcmVhdGVNZXNzYWdlKHsgYmluYXJ5OiBkYXRhIH0pO1xuICBjb25zdCBwdWJsaWNLZXkgPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHB1YmxpY0FybW9yIH0pO1xuICBjb25zdCBwcml2YXRlS2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogcHJpdmF0ZUFybW9yIH0pO1xuICBjb25zdCBlbmNyeXB0ZWRNZXNzYWdlID0gYXdhaXQgcGdwLmVuY3J5cHQoe1xuICAgIG1lc3NhZ2UsXG4gICAgZW5jcnlwdGlvbktleXM6IHB1YmxpY0tleSxcbiAgICBmb3JtYXQ6ICdhcm1vcmVkJyxcbiAgICBjb25maWc6IHtcbiAgICAgIHJlamVjdEN1cnZlczogbmV3IFNldCgpLFxuICAgICAgc2hvd1ZlcnNpb246IGZhbHNlLFxuICAgICAgc2hvd0NvbW1lbnQ6IGZhbHNlLFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBwZ3Auc2lnbih7XG4gICAgbWVzc2FnZSxcbiAgICBzaWduaW5nS2V5czogcHJpdmF0ZUtleSxcbiAgICBmb3JtYXQ6ICdhcm1vcmVkJyxcbiAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICBjb25maWc6IHtcbiAgICAgIHJlamVjdEN1cnZlczogbmV3IFNldCgpLFxuICAgICAgc2hvd1ZlcnNpb246IGZhbHNlLFxuICAgICAgc2hvd0NvbW1lbnQ6IGZhbHNlLFxuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGVuY3J5cHRlZE1lc3NhZ2U6IGVuY3J5cHRlZE1lc3NhZ2UsXG4gICAgc2lnbmF0dXJlOiBzaWduYXR1cmUsXG4gIH07XG59XG5cbi8qKlxuICogRGVjcnlwdHMgYW5kIHZlcmlmaWVzIHNpZ25hdHVyZSBvbiBhIGJpbmFyeVxuICogQHBhcmFtIGVuY3J5cHRlZEFuZFNpZ25lZE1lc3NhZ2UgbWVzc2FnZSB0byBkZWNyeXB0IGFuZCB2ZXJpZnlcbiAqIEBwYXJhbSBwdWJsaWNBcm1vciBwdWJsaWMga2V5IHRvIHZlcmlmeSBzaWduYXR1cmUgd2l0aFxuICogQHBhcmFtIHByaXZhdGVBcm1vciBwcml2YXRlIGtleSB0byBkZWNyeXB0IHdpdGhcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlY3J5cHRBbmRWZXJpZnlTaWduZWREYXRhKFxuICBlbmNyeXB0ZWRBbmRTaWduZWRNZXNzYWdlOiBBdXRoRW5jTWVzc2FnZSxcbiAgcHVibGljQXJtb3I6IHN0cmluZyxcbiAgcHJpdmF0ZUFybW9yOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHB1YmxpY0tleSA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogcHVibGljQXJtb3IgfSk7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBhd2FpdCBwZ3AucmVhZFByaXZhdGVLZXkoeyBhcm1vcmVkS2V5OiBwcml2YXRlQXJtb3IgfSk7XG4gIGNvbnN0IGRlY3J5cHRlZE1lc3NhZ2UgPSBhd2FpdCBwZ3AuZGVjcnlwdCh7XG4gICAgbWVzc2FnZTogYXdhaXQgcGdwLnJlYWRNZXNzYWdlKHsgYXJtb3JlZE1lc3NhZ2U6IGVuY3J5cHRlZEFuZFNpZ25lZE1lc3NhZ2UuZW5jcnlwdGVkTWVzc2FnZSB9KSxcbiAgICBkZWNyeXB0aW9uS2V5czogW3ByaXZhdGVLZXldLFxuICAgIGNvbmZpZzoge1xuICAgICAgcmVqZWN0Q3VydmVzOiBuZXcgU2V0KCksXG4gICAgICBzaG93VmVyc2lvbjogZmFsc2UsXG4gICAgICBzaG93Q29tbWVudDogZmFsc2UsXG4gICAgfSxcbiAgICBmb3JtYXQ6ICdiaW5hcnknLFxuICB9KTtcbiAgY29uc3QgdmVyaWZpY2F0aW9uUmVzdWx0ID0gYXdhaXQgcGdwLnZlcmlmeSh7XG4gICAgbWVzc2FnZTogYXdhaXQgcGdwLmNyZWF0ZU1lc3NhZ2UoeyBiaW5hcnk6IGRlY3J5cHRlZE1lc3NhZ2UuZGF0YSB9KSxcbiAgICBzaWduYXR1cmU6IGF3YWl0IHBncC5yZWFkU2lnbmF0dXJlKHsgYXJtb3JlZFNpZ25hdHVyZTogZW5jcnlwdGVkQW5kU2lnbmVkTWVzc2FnZS5zaWduYXR1cmUgfSksXG4gICAgdmVyaWZpY2F0aW9uS2V5czogcHVibGljS2V5LFxuICAgIGRhdGU6IG5ldyBEYXRlKERhdGUubm93KCkgKyBTSUdOQVRVUkVfREFURV9UT0xFUkFOQ0VfTVMpLFxuICB9KTtcbiAgYXdhaXQgdmVyaWZpY2F0aW9uUmVzdWx0LnNpZ25hdHVyZXNbMF0udmVyaWZpZWQ7XG4gIHJldHVybiBCdWZmZXIuZnJvbShkZWNyeXB0ZWRNZXNzYWdlLmRhdGEpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyBzaWduYXR1cmUgb24gYSBiaW5hcnkgKG1lc3NhZ2UgcGFzc2VkIHNob3VsZCBiZSBlbmNvZGVkIGluIGJhc2U2NCkuXG4gKiBAcGFyYW0gc2lnbmVkTWVzc2FnZSBtZXNzYWdlIHRvIHZlcmlmeVxuICogQHBhcmFtIHB1YmxpY0FybW9yIHB1YmxpYyBrZXkgdG8gdmVyaWZ5IHNpZ25hdHVyZSB3aXRoXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlTaWduZWREYXRhKHNpZ25lZE1lc3NhZ2U6IEF1dGhNZXNzYWdlLCBwdWJsaWNBcm1vcjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHB1YmxpY0tleSA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogcHVibGljQXJtb3IgfSk7XG4gIGNvbnN0IHZlcmlmaWNhdGlvblJlc3VsdCA9IGF3YWl0IHBncC52ZXJpZnkoe1xuICAgIG1lc3NhZ2U6IGF3YWl0IHBncC5jcmVhdGVNZXNzYWdlKHsgYmluYXJ5OiBCdWZmZXIuZnJvbShzaWduZWRNZXNzYWdlLm1lc3NhZ2UsICdiYXNlNjQnKSB9KSxcbiAgICBzaWduYXR1cmU6IGF3YWl0IHBncC5yZWFkU2lnbmF0dXJlKHsgYXJtb3JlZFNpZ25hdHVyZTogc2lnbmVkTWVzc2FnZS5zaWduYXR1cmUgfSksXG4gICAgdmVyaWZpY2F0aW9uS2V5czogcHVibGljS2V5LFxuICAgIGRhdGU6IG5ldyBEYXRlKERhdGUubm93KCkgKyBTSUdOQVRVUkVfREFURV9UT0xFUkFOQ0VfTVMpLFxuICB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB2ZXJpZmljYXRpb25SZXN1bHQuc2lnbmF0dXJlc1swXS52ZXJpZmllZDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIERlY3J5cHRzIGFuZCB2ZXJpZmllcyBwMnAgbWVzc2FnZXMgKyB2ZXJpZmllcyBicm9hZGNhc3QgbWVzc2FnZXNcbiAqIEBwYXJhbSBtZXNzYWdlcyBtZXNzYWdlIHRvIGRlY3J5cHQgYW5kIHZlcmlmeVxuICogQHBhcmFtIHB1YlZlcmlmaWNhdGlvbkdwZ0tleXMgcHVibGljIGtleXMgdG8gdmVyaWZ5IHNpZ25hdHVyZXMgd2l0aFxuICogQHBhcmFtIHBydkRlY3J5cHRpb25HcGdLZXlzIHByaXZhdGUga2V5cyB0byBkZWNyeXB0IHdpdGhcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICBtZXNzYWdlczogQXV0aEVuY01lc3NhZ2VzLFxuICBwdWJWZXJpZmljYXRpb25HcGdLZXlzOiBQYXJ0eUdwZ0tleVtdLFxuICBwcnZEZWNyeXB0aW9uR3BnS2V5czogUGFydHlHcGdLZXlbXVxuKTogUHJvbWlzZTxTZXJpYWxpemVkTWVzc2FnZXM+IHtcbiAgcmV0dXJuIHtcbiAgICBwMnBNZXNzYWdlczogYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBtZXNzYWdlcy5wMnBNZXNzYWdlcy5tYXAoYXN5bmMgKG0pID0+IHtcbiAgICAgICAgY29uc3QgcHViR3BnS2V5ID0gcHViVmVyaWZpY2F0aW9uR3BnS2V5cy5maW5kKChrKSA9PiBrLnBhcnR5SWQgPT09IG0uZnJvbSk7XG4gICAgICAgIGNvbnN0IHBydkdwZ0tleSA9IHBydkRlY3J5cHRpb25HcGdLZXlzLmZpbmQoKGspID0+IGsucGFydHlJZCA9PT0gbS50byk7XG4gICAgICAgIGlmICghcHViR3BnS2V5KSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIHB1YmxpYyBrZXkgcHJvdmlkZWQgZm9yIHNlbmRlciB3aXRoIElEOiAke20uZnJvbX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBydkdwZ0tleSkge1xuICAgICAgICAgIHRocm93IEVycm9yKGBObyBwcml2YXRlIGtleSBwcm92aWRlZCBmb3IgcmVjZXBpZW50IHdpdGggSUQ6ICR7bS50b31gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRvOiBtLnRvLFxuICAgICAgICAgIGZyb206IG0uZnJvbSxcbiAgICAgICAgICBwYXlsb2FkOiBhd2FpdCBkZWNyeXB0QW5kVmVyaWZ5U2lnbmVkRGF0YShtLnBheWxvYWQsIHB1YkdwZ0tleS5ncGdLZXksIHBydkdwZ0tleS5ncGdLZXkpLFxuICAgICAgICAgIGNvbW1pdG1lbnQ6IG0uY29tbWl0bWVudCxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBtZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5tYXAoYXN5bmMgKG0pID0+IHtcbiAgICAgICAgY29uc3QgcHViR3BnS2V5ID0gcHViVmVyaWZpY2F0aW9uR3BnS2V5cy5maW5kKChrKSA9PiBrLnBhcnR5SWQgPT09IG0uZnJvbSk7XG4gICAgICAgIGlmICghcHViR3BnS2V5KSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIHB1YmxpYyBrZXkgcHJvdmlkZWQgZm9yIHNlbmRlciB3aXRoIElEOiAke20uZnJvbX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShhd2FpdCB2ZXJpZnlTaWduZWREYXRhKG0ucGF5bG9hZCwgcHViR3BnS2V5LmdwZ0tleSkpKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoYEZhaWxlZCB0byBhdXRoZW50aWNhdGUgYnJvYWRjYXN0IG1lc3NhZ2UgZnJvbSBwYXJ0eTogJHttLmZyb219YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmcm9tOiBtLmZyb20sXG4gICAgICAgICAgcGF5bG9hZDogbS5wYXlsb2FkLm1lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICksXG4gIH07XG59XG5cbi8qKlxuICogRW5jcnlwdHMgYW5kIHNpZ25zIHAycCBtZXNzYWdlcyArIHNpZ25zIGJyb2FkY2FzdCBtZXNzYWdlc1xuICogQHBhcmFtIG1lc3NhZ2VzIG1lc3NhZ2VzIHRvIGVuY3J5cHQgYW5kIHNpZ25cbiAqIEBwYXJhbSBwdWJFbmNyeXB0aW9uR3BnS2V5IHB1YmxpYyBrZXlzIHRvIGVuY3J5cHQgZGF0YSB0b1xuICogQHBhcmFtIHBydkF1dGhlbnRpY2F0aW9uR3BnS2V5IHByaXZhdGUga2V5cyB0byBzaWduIHdpdGhcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY3J5cHRBbmRBdXRoT3V0Z29pbmdNZXNzYWdlcyhcbiAgbWVzc2FnZXM6IFNlcmlhbGl6ZWRNZXNzYWdlcyxcbiAgcHViRW5jcnlwdGlvbkdwZ0tleXM6IFBhcnR5R3BnS2V5W10sXG4gIHBydkF1dGhlbnRpY2F0aW9uR3BnS2V5czogUGFydHlHcGdLZXlbXVxuKTogUHJvbWlzZTxBdXRoRW5jTWVzc2FnZXM+IHtcbiAgcmV0dXJuIHtcbiAgICBwMnBNZXNzYWdlczogYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBtZXNzYWdlcy5wMnBNZXNzYWdlcy5tYXAoYXN5bmMgKG0pID0+IHtcbiAgICAgICAgY29uc3QgcHViR3BnS2V5ID0gcHViRW5jcnlwdGlvbkdwZ0tleXMuZmluZCgoaykgPT4gay5wYXJ0eUlkID09PSBtLnRvKTtcbiAgICAgICAgY29uc3QgcHJ2R3BnS2V5ID0gcHJ2QXV0aGVudGljYXRpb25HcGdLZXlzLmZpbmQoKGspID0+IGsucGFydHlJZCA9PT0gbS5mcm9tKTtcbiAgICAgICAgaWYgKCFwdWJHcGdLZXkpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gcHVibGljIGtleSBwcm92aWRlZCBmb3IgcmVjaXBpZW50IHdpdGggSUQ6ICR7bS50b31gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBydkdwZ0tleSkge1xuICAgICAgICAgIHRocm93IEVycm9yKGBObyBwcml2YXRlIGtleSBwcm92aWRlZCBmb3Igc2VuZGVyIHdpdGggSUQ6ICR7bS5mcm9tfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG86IG0udG8sXG4gICAgICAgICAgZnJvbTogbS5mcm9tLFxuICAgICAgICAgIHBheWxvYWQ6IGF3YWl0IGVuY3J5cHRBbmREZXRhY2hTaWduRGF0YShCdWZmZXIuZnJvbShtLnBheWxvYWQsICdiYXNlNjQnKSwgcHViR3BnS2V5LmdwZ0tleSwgcHJ2R3BnS2V5LmdwZ0tleSksXG4gICAgICAgICAgY29tbWl0bWVudDogbS5jb21taXRtZW50LFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLm1hcChhc3luYyAobSkgPT4ge1xuICAgICAgICBjb25zdCBwcnZHcGdLZXkgPSBwcnZBdXRoZW50aWNhdGlvbkdwZ0tleXMuZmluZCgoaykgPT4gay5wYXJ0eUlkID09PSBtLmZyb20pO1xuICAgICAgICBpZiAoIXBydkdwZ0tleSkge1xuICAgICAgICAgIHRocm93IEVycm9yKGBObyBwcml2YXRlIGtleSBwcm92aWRlZCBmb3Igc2VuZGVyIHdpdGggSUQ6ICR7bS5mcm9tfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZnJvbTogbS5mcm9tLFxuICAgICAgICAgIHBheWxvYWQ6IGF3YWl0IGRldGFjaFNpZ25EYXRhKEJ1ZmZlci5mcm9tKG0ucGF5bG9hZCwgJ2Jhc2U2NCcpLCBwcnZHcGdLZXkuZ3BnS2V5KSxcbiAgICAgICAgICBzaWduYXR1cmVSOiBtLnNpZ25hdHVyZVJcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG0uc2lnbmF0dXJlUixcbiAgICAgICAgICAgICAgICBzaWduYXR1cmU6ICcnLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKSxcbiAgfTtcbn1cbiJdfQ==
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbXNMYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZWNkc2EtZGtscy9jb21tc0xheWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9DQSx3Q0FrQkM7QUFRRCw0REFpQ0M7QUFRRCxnRUF5QkM7QUFPRCw0Q0FjQztBQVFELDRFQThDQztBQVFELHdFQTRDQztBQTlQRCw2Q0FBK0I7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDVSxRQUFBLDJCQUEyQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUUvRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGNBQWMsQ0FBQyxJQUFZLEVBQUUsWUFBb0I7SUFDckUsTUFBTSxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDMUUsTUFBTSxTQUFTLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQy9CLE9BQU87UUFDUCxXQUFXLEVBQUUsVUFBVTtRQUN2QixNQUFNLEVBQUUsU0FBUztRQUNqQixRQUFRLEVBQUUsSUFBSTtRQUNkLE1BQU0sRUFBRTtZQUNOLFlBQVksRUFBRSxJQUFJLEdBQUcsRUFBRTtZQUN2QixXQUFXLEVBQUUsS0FBSztZQUNsQixXQUFXLEVBQUUsS0FBSztTQUNuQjtLQUNGLENBQUMsQ0FBQztJQUNILE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDaEMsU0FBUyxFQUFFLFNBQVM7S0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRDs7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QUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQzFELGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQztnQkFDbEUsQ0FBQyxDQUFDLFVBQVU7b0JBQ1YsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQztvQkFDdkUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO2FBQy9CLENBQUMsQ0FBQztZQUNILE9BQU87Z0JBQ0wsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO2dCQUNaLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixVQUFVLEVBQUUsZ0JBQWdCO2FBQzdCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSDtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VyaWFsaXplZE1lc3NhZ2VzLCBBdXRoRW5jTWVzc2FnZSwgQXV0aEVuY01lc3NhZ2VzLCBQYXJ0eUdwZ0tleSwgQXV0aE1lc3NhZ2UgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCAqIGFzIHBncCBmcm9tICdvcGVucGdwJztcblxuLyoqXG4gKiBUb2xlcmFuY2Ugd2luZG93IGZvciBPcGVuUEdQIGRhdGUtYmFzZWQga2V5IHZhbGlkaXR5IGNoZWNrcyAoMjQgaG91cnMpLlxuICpcbiAqIEJhY2tncm91bmQ6IE9wZW5QR1AuanMgdXNlcyB0aGUgYGRhdGVgIHBhcmFtZXRlciB0byBjaGVjayBrZXkgZXhwaXJ5IGF0IGFcbiAqIGdpdmVuIHBvaW50IGluIHRpbWUuIFdlIHByZXZpb3VzbHkgcGFzc2VkIGBkYXRlOiBudWxsYCB0byBkaXNhYmxlIHRoaXMgY2hlY2tcbiAqIGVudGlyZWx5IChzZWUgSFNNLTcwNikgYmVjYXVzZSBPVkMgY29sZC1zaWduaW5nIGZsb3dzIGZvciB0cnVzdCBhbmQgU01DXG4gKiBjbGllbnRzIGNhbiBpbnZvbHZlIHNpZ25pZmljYW50IGNsb2NrIHNrZXcgYmV0d2VlbiB0aGUgc2lnbmluZyBkZXZpY2UgYW5kIHRoZVxuICogc2VydmVyIOKAlCB0aGUgZGV2aWNlIG1heSBiZSBhaXItZ2FwcGVkIGFuZCBpdHMgY2xvY2sgY2FuIGRyaWZ0IGJ5IGhvdXJzLlxuICpcbiAqIE5vdGU6IHRoaXMgR1BHIGV4cGlyeSBjaGVjayBpcyBub3Qgc3RyaWN0bHkgcmVxdWlyZWQgZm9yIHJlcGxheSBwcm90ZWN0aW9uLlxuICogVGhlIERLTFMgcHJvdG9jb2wgaGFzIGl0cyBvd24gbWVjaGFuaXNtIGZvciBwcmV2ZW50aW5nIHJlcGxheSBhdHRhY2tzXG4gKiAoc2Vzc2lvbi1ib3VuZCBjb21taXRtZW50cyBhbmQgcm91bmQtc3BlY2lmaWMgbWVzc2FnZSB2YWxpZGF0aW9uKSwgc28gdGhlXG4gKiBPcGVuUEdQIGRhdGUgY2hlY2sgaXMgYSBkZWZlbnNlLWluLWRlcHRoIG1lYXN1cmUgcmF0aGVyIHRoYW4gdGhlIHByaW1hcnlcbiAqIHJlcGxheSBtaXRpZ2F0aW9uLlxuICpcbiAqIE9wZW5QR1AncyBgZGF0ZWAgcGFyYW1ldGVyIHNoaWZ0cyB0aGUgcmVmZXJlbmNlIHRpbWUgZm9yIEFMTCB0ZW1wb3JhbFxuICogY2hlY2tzIHNpbXVsdGFuZW91c2x5IChrZXkgZXhwaXJ5LCBzZWxmLXNpZ25hdHVyZSB2YWxpZGl0eSwgc2lnbmF0dXJlXG4gKiBmcmVzaG5lc3MpLiBUaGlzIG1lYW5zIGEgc2luZ2xlIHNoaWZ0ZWQgZGF0ZSBjYW5ub3QgaW5kZXBlbmRlbnRseSByZWxheFxuICoga2V5LWV4cGlyeSBjaGVja3Mgd2l0aG91dCBicmVha2luZyBzZWxmLXNpZ25hdHVyZSB2YWxpZGF0aW9uIG9uIGZyZXNoIGtleXMuXG4gKlxuICogVGhlcmVmb3JlOlxuICogLSBlbmNyeXB0L2RlY3J5cHQgb21pdCBgZGF0ZWAgKHVzZSBkZWZhdWx0ID0gY3VycmVudCB0aW1lKSBmb3Igbm9ybWFsIGtleVxuICogICBleHBpcnkgY2hlY2tpbmcgYW5kIHNlbGYtc2lnbmF0dXJlIHZhbGlkYXRpb24uXG4gKiAtIHZlcmlmeSB1c2VzIGBub3cgKyB0b2xlcmFuY2VgIHNvIHRoYXQgc2lnbmF0dXJlcyBmcm9tIE9WQyBkZXZpY2VzIHdob3NlXG4gKiAgIGNsb2NrcyBhcmUgdXAgdG8gMjQgaG91cnMgYWhlYWQgYXJlIG5vdCByZWplY3RlZCBhcyBcImZyb20gdGhlIGZ1dHVyZVwiLlxuICovXG5leHBvcnQgY29uc3QgU0lHTkFUVVJFX0RBVEVfVE9MRVJBTkNFX01TID0gMjQgKiA2MCAqIDYwICogMTAwMDtcblxuLyoqXG4gKiBEZXRhY2ggc2lnbnMgYSBiaW5hcnkgYW5kIGVuY29kZXMgaXQgaW4gYmFzZTY0XG4gKiBAcGFyYW0gZGF0YSBiaW5hcnkgdG8gZW5jb2RlIGluIGJhc2U2NCBhbmQgc2lnblxuICogQHBhcmFtIHByaXZhdGVBcm1vciBwcml2YXRlIGtleSB0byBzaWduIHdpdGhcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRldGFjaFNpZ25EYXRhKGRhdGE6IEJ1ZmZlciwgcHJpdmF0ZUFybW9yOiBzdHJpbmcpOiBQcm9taXNlPEF1dGhNZXNzYWdlPiB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBwZ3AuY3JlYXRlTWVzc2FnZSh7IGJpbmFyeTogZGF0YSB9KTtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IHByaXZhdGVBcm1vciB9KTtcbiAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgcGdwLnNpZ24oe1xuICAgIG1lc3NhZ2UsXG4gICAgc2lnbmluZ0tleXM6IHByaXZhdGVLZXksXG4gICAgZm9ybWF0OiAnYXJtb3JlZCcsXG4gICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICByZWplY3RDdXJ2ZXM6IG5ldyBTZXQoKSxcbiAgICAgIHNob3dWZXJzaW9uOiBmYWxzZSxcbiAgICAgIHNob3dDb21tZW50OiBmYWxzZSxcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlOiBkYXRhLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICBzaWduYXR1cmU6IHNpZ25hdHVyZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBFbmNyeXB0cyBhbmQgZGV0YWNoIHNpZ25zIGEgYmluYXJ5XG4gKiBAcGFyYW0gZGF0YSBiaW5hcnkgdG8gZW5jcnlwdCBhbmQgc2lnblxuICogQHBhcmFtIHB1YmxpY0FybW9yIHB1YmxpYyBrZXkgdG8gZW5jcnlwdCB3aXRoXG4gKiBAcGFyYW0gcHJpdmF0ZUFybW9yIHByaXZhdGUga2V5IHRvIHNpZ24gd2l0aFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jcnlwdEFuZERldGFjaFNpZ25EYXRhKFxuICBkYXRhOiBCdWZmZXIsXG4gIHB1YmxpY0FybW9yOiBzdHJpbmcsXG4gIHByaXZhdGVBcm1vcjogc3RyaW5nXG4pOiBQcm9taXNlPEF1dGhFbmNNZXNzYWdlPiB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBwZ3AuY3JlYXRlTWVzc2FnZSh7IGJpbmFyeTogZGF0YSB9KTtcbiAgY29uc3QgcHVibGljS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBwdWJsaWNBcm1vciB9KTtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IHByaXZhdGVBcm1vciB9KTtcbiAgY29uc3QgZW5jcnlwdGVkTWVzc2FnZSA9IGF3YWl0IHBncC5lbmNyeXB0KHtcbiAgICBtZXNzYWdlLFxuICAgIGVuY3J5cHRpb25LZXlzOiBwdWJsaWNLZXksXG4gICAgZm9ybWF0OiAnYXJtb3JlZCcsXG4gICAgY29uZmlnOiB7XG4gICAgICByZWplY3RDdXJ2ZXM6IG5ldyBTZXQoKSxcbiAgICAgIHNob3dWZXJzaW9uOiBmYWxzZSxcbiAgICAgIHNob3dDb21tZW50OiBmYWxzZSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgcGdwLnNpZ24oe1xuICAgIG1lc3NhZ2UsXG4gICAgc2lnbmluZ0tleXM6IHByaXZhdGVLZXksXG4gICAgZm9ybWF0OiAnYXJtb3JlZCcsXG4gICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICByZWplY3RDdXJ2ZXM6IG5ldyBTZXQoKSxcbiAgICAgIHNob3dWZXJzaW9uOiBmYWxzZSxcbiAgICAgIHNob3dDb21tZW50OiBmYWxzZSxcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBlbmNyeXB0ZWRNZXNzYWdlOiBlbmNyeXB0ZWRNZXNzYWdlLFxuICAgIHNpZ25hdHVyZTogc2lnbmF0dXJlLFxuICB9O1xufVxuXG4vKipcbiAqIERlY3J5cHRzIGFuZCB2ZXJpZmllcyBzaWduYXR1cmUgb24gYSBiaW5hcnlcbiAqIEBwYXJhbSBlbmNyeXB0ZWRBbmRTaWduZWRNZXNzYWdlIG1lc3NhZ2UgdG8gZGVjcnlwdCBhbmQgdmVyaWZ5XG4gKiBAcGFyYW0gcHVibGljQXJtb3IgcHVibGljIGtleSB0byB2ZXJpZnkgc2lnbmF0dXJlIHdpdGhcbiAqIEBwYXJhbSBwcml2YXRlQXJtb3IgcHJpdmF0ZSBrZXkgdG8gZGVjcnlwdCB3aXRoXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWNyeXB0QW5kVmVyaWZ5U2lnbmVkRGF0YShcbiAgZW5jcnlwdGVkQW5kU2lnbmVkTWVzc2FnZTogQXV0aEVuY01lc3NhZ2UsXG4gIHB1YmxpY0FybW9yOiBzdHJpbmcsXG4gIHByaXZhdGVBcm1vcjogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwdWJsaWNLZXkgPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHB1YmxpY0FybW9yIH0pO1xuICBjb25zdCBwcml2YXRlS2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogcHJpdmF0ZUFybW9yIH0pO1xuICBjb25zdCBkZWNyeXB0ZWRNZXNzYWdlID0gYXdhaXQgcGdwLmRlY3J5cHQoe1xuICAgIG1lc3NhZ2U6IGF3YWl0IHBncC5yZWFkTWVzc2FnZSh7IGFybW9yZWRNZXNzYWdlOiBlbmNyeXB0ZWRBbmRTaWduZWRNZXNzYWdlLmVuY3J5cHRlZE1lc3NhZ2UgfSksXG4gICAgZGVjcnlwdGlvbktleXM6IFtwcml2YXRlS2V5XSxcbiAgICBjb25maWc6IHtcbiAgICAgIHJlamVjdEN1cnZlczogbmV3IFNldCgpLFxuICAgICAgc2hvd1ZlcnNpb246IGZhbHNlLFxuICAgICAgc2hvd0NvbW1lbnQ6IGZhbHNlLFxuICAgIH0sXG4gICAgZm9ybWF0OiAnYmluYXJ5JyxcbiAgfSk7XG4gIGNvbnN0IHZlcmlmaWNhdGlvblJlc3VsdCA9IGF3YWl0IHBncC52ZXJpZnkoe1xuICAgIG1lc3NhZ2U6IGF3YWl0IHBncC5jcmVhdGVNZXNzYWdlKHsgYmluYXJ5OiBkZWNyeXB0ZWRNZXNzYWdlLmRhdGEgfSksXG4gICAgc2lnbmF0dXJlOiBhd2FpdCBwZ3AucmVhZFNpZ25hdHVyZSh7IGFybW9yZWRTaWduYXR1cmU6IGVuY3J5cHRlZEFuZFNpZ25lZE1lc3NhZ2Uuc2lnbmF0dXJlIH0pLFxuICAgIHZlcmlmaWNhdGlvbktleXM6IHB1YmxpY0tleSxcbiAgICBkYXRlOiBuZXcgRGF0ZShEYXRlLm5vdygpICsgU0lHTkFUVVJFX0RBVEVfVE9MRVJBTkNFX01TKSxcbiAgfSk7XG4gIGF3YWl0IHZlcmlmaWNhdGlvblJlc3VsdC5zaWduYXR1cmVzWzBdLnZlcmlmaWVkO1xuICByZXR1cm4gQnVmZmVyLmZyb20oZGVjcnlwdGVkTWVzc2FnZS5kYXRhKS50b1N0cmluZygnYmFzZTY0Jyk7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgc2lnbmF0dXJlIG9uIGEgYmluYXJ5IChtZXNzYWdlIHBhc3NlZCBzaG91bGQgYmUgZW5jb2RlZCBpbiBiYXNlNjQpLlxuICogQHBhcmFtIHNpZ25lZE1lc3NhZ2UgbWVzc2FnZSB0byB2ZXJpZnlcbiAqIEBwYXJhbSBwdWJsaWNBcm1vciBwdWJsaWMga2V5IHRvIHZlcmlmeSBzaWduYXR1cmUgd2l0aFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5U2lnbmVkRGF0YShzaWduZWRNZXNzYWdlOiBBdXRoTWVzc2FnZSwgcHVibGljQXJtb3I6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBwdWJsaWNLZXkgPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHB1YmxpY0FybW9yIH0pO1xuICBjb25zdCB2ZXJpZmljYXRpb25SZXN1bHQgPSBhd2FpdCBwZ3AudmVyaWZ5KHtcbiAgICBtZXNzYWdlOiBhd2FpdCBwZ3AuY3JlYXRlTWVzc2FnZSh7IGJpbmFyeTogQnVmZmVyLmZyb20oc2lnbmVkTWVzc2FnZS5tZXNzYWdlLCAnYmFzZTY0JykgfSksXG4gICAgc2lnbmF0dXJlOiBhd2FpdCBwZ3AucmVhZFNpZ25hdHVyZSh7IGFybW9yZWRTaWduYXR1cmU6IHNpZ25lZE1lc3NhZ2Uuc2lnbmF0dXJlIH0pLFxuICAgIHZlcmlmaWNhdGlvbktleXM6IHB1YmxpY0tleSxcbiAgICBkYXRlOiBuZXcgRGF0ZShEYXRlLm5vdygpICsgU0lHTkFUVVJFX0RBVEVfVE9MRVJBTkNFX01TKSxcbiAgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdmVyaWZpY2F0aW9uUmVzdWx0LnNpZ25hdHVyZXNbMF0udmVyaWZpZWQ7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWNyeXB0cyBhbmQgdmVyaWZpZXMgcDJwIG1lc3NhZ2VzICsgdmVyaWZpZXMgYnJvYWRjYXN0IG1lc3NhZ2VzXG4gKiBAcGFyYW0gbWVzc2FnZXMgbWVzc2FnZSB0byBkZWNyeXB0IGFuZCB2ZXJpZnlcbiAqIEBwYXJhbSBwdWJWZXJpZmljYXRpb25HcGdLZXlzIHB1YmxpYyBrZXlzIHRvIHZlcmlmeSBzaWduYXR1cmVzIHdpdGhcbiAqIEBwYXJhbSBwcnZEZWNyeXB0aW9uR3BnS2V5cyBwcml2YXRlIGtleXMgdG8gZGVjcnlwdCB3aXRoXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgbWVzc2FnZXM6IEF1dGhFbmNNZXNzYWdlcyxcbiAgcHViVmVyaWZpY2F0aW9uR3BnS2V5czogUGFydHlHcGdLZXlbXSxcbiAgcHJ2RGVjcnlwdGlvbkdwZ0tleXM6IFBhcnR5R3BnS2V5W11cbik6IFByb21pc2U8U2VyaWFsaXplZE1lc3NhZ2VzPiB7XG4gIHJldHVybiB7XG4gICAgcDJwTWVzc2FnZXM6IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbWVzc2FnZXMucDJwTWVzc2FnZXMubWFwKGFzeW5jIChtKSA9PiB7XG4gICAgICAgIGNvbnN0IHB1YkdwZ0tleSA9IHB1YlZlcmlmaWNhdGlvbkdwZ0tleXMuZmluZCgoaykgPT4gay5wYXJ0eUlkID09PSBtLmZyb20pO1xuICAgICAgICBjb25zdCBwcnZHcGdLZXkgPSBwcnZEZWNyeXB0aW9uR3BnS2V5cy5maW5kKChrKSA9PiBrLnBhcnR5SWQgPT09IG0udG8pO1xuICAgICAgICBpZiAoIXB1YkdwZ0tleSkge1xuICAgICAgICAgIHRocm93IEVycm9yKGBObyBwdWJsaWMga2V5IHByb3ZpZGVkIGZvciBzZW5kZXIgd2l0aCBJRDogJHttLmZyb219YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwcnZHcGdLZXkpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gcHJpdmF0ZSBrZXkgcHJvdmlkZWQgZm9yIHJlY2VwaWVudCB3aXRoIElEOiAke20udG99YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0bzogbS50byxcbiAgICAgICAgICBmcm9tOiBtLmZyb20sXG4gICAgICAgICAgcGF5bG9hZDogYXdhaXQgZGVjcnlwdEFuZFZlcmlmeVNpZ25lZERhdGEobS5wYXlsb2FkLCBwdWJHcGdLZXkuZ3BnS2V5LCBwcnZHcGdLZXkuZ3BnS2V5KSxcbiAgICAgICAgICBjb21taXRtZW50OiBtLmNvbW1pdG1lbnQsXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMubWFwKGFzeW5jIChtKSA9PiB7XG4gICAgICAgIGNvbnN0IHB1YkdwZ0tleSA9IHB1YlZlcmlmaWNhdGlvbkdwZ0tleXMuZmluZCgoaykgPT4gay5wYXJ0eUlkID09PSBtLmZyb20pO1xuICAgICAgICBpZiAoIXB1YkdwZ0tleSkge1xuICAgICAgICAgIHRocm93IEVycm9yKGBObyBwdWJsaWMga2V5IHByb3ZpZGVkIGZvciBzZW5kZXIgd2l0aCBJRDogJHttLmZyb219YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoYXdhaXQgdmVyaWZ5U2lnbmVkRGF0YShtLnBheWxvYWQsIHB1YkdwZ0tleS5ncGdLZXkpKSkge1xuICAgICAgICAgIHRocm93IEVycm9yKGBGYWlsZWQgdG8gYXV0aGVudGljYXRlIGJyb2FkY2FzdCBtZXNzYWdlIGZyb20gcGFydHk6ICR7bS5mcm9tfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtLnNpZ25hdHVyZVIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICghKGF3YWl0IHZlcmlmeVNpZ25lZERhdGEobS5zaWduYXR1cmVSLCBwdWJHcGdLZXkuZ3BnS2V5KSkpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBGYWlsZWQgdG8gYXV0aGVudGljYXRlIHNpZ25hdHVyZVIgaW4gYnJvYWRjYXN0IG1lc3NhZ2UgZnJvbSBwYXJ0eTogJHttLmZyb219YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZnJvbTogbS5mcm9tLFxuICAgICAgICAgIHBheWxvYWQ6IG0ucGF5bG9hZC5tZXNzYWdlLFxuICAgICAgICAgIHNpZ25hdHVyZVI6IG0uc2lnbmF0dXJlUj8ubWVzc2FnZSxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBFbmNyeXB0cyBhbmQgc2lnbnMgcDJwIG1lc3NhZ2VzICsgc2lnbnMgYnJvYWRjYXN0IG1lc3NhZ2VzXG4gKiBAcGFyYW0gbWVzc2FnZXMgbWVzc2FnZXMgdG8gZW5jcnlwdCBhbmQgc2lnblxuICogQHBhcmFtIHB1YkVuY3J5cHRpb25HcGdLZXkgcHVibGljIGtleXMgdG8gZW5jcnlwdCBkYXRhIHRvXG4gKiBAcGFyYW0gcHJ2QXV0aGVudGljYXRpb25HcGdLZXkgcHJpdmF0ZSBrZXlzIHRvIHNpZ24gd2l0aFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jcnlwdEFuZEF1dGhPdXRnb2luZ01lc3NhZ2VzKFxuICBtZXNzYWdlczogU2VyaWFsaXplZE1lc3NhZ2VzLFxuICBwdWJFbmNyeXB0aW9uR3BnS2V5czogUGFydHlHcGdLZXlbXSxcbiAgcHJ2QXV0aGVudGljYXRpb25HcGdLZXlzOiBQYXJ0eUdwZ0tleVtdXG4pOiBQcm9taXNlPEF1dGhFbmNNZXNzYWdlcz4ge1xuICByZXR1cm4ge1xuICAgIHAycE1lc3NhZ2VzOiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1lc3NhZ2VzLnAycE1lc3NhZ2VzLm1hcChhc3luYyAobSkgPT4ge1xuICAgICAgICBjb25zdCBwdWJHcGdLZXkgPSBwdWJFbmNyeXB0aW9uR3BnS2V5cy5maW5kKChrKSA9PiBrLnBhcnR5SWQgPT09IG0udG8pO1xuICAgICAgICBjb25zdCBwcnZHcGdLZXkgPSBwcnZBdXRoZW50aWNhdGlvbkdwZ0tleXMuZmluZCgoaykgPT4gay5wYXJ0eUlkID09PSBtLmZyb20pO1xuICAgICAgICBpZiAoIXB1YkdwZ0tleSkge1xuICAgICAgICAgIHRocm93IEVycm9yKGBObyBwdWJsaWMga2V5IHByb3ZpZGVkIGZvciByZWNpcGllbnQgd2l0aCBJRDogJHttLnRvfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcHJ2R3BnS2V5KSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIHByaXZhdGUga2V5IHByb3ZpZGVkIGZvciBzZW5kZXIgd2l0aCBJRDogJHttLmZyb219YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0bzogbS50byxcbiAgICAgICAgICBmcm9tOiBtLmZyb20sXG4gICAgICAgICAgcGF5bG9hZDogYXdhaXQgZW5jcnlwdEFuZERldGFjaFNpZ25EYXRhKEJ1ZmZlci5mcm9tKG0ucGF5bG9hZCwgJ2Jhc2U2NCcpLCBwdWJHcGdLZXkuZ3BnS2V5LCBwcnZHcGdLZXkuZ3BnS2V5KSxcbiAgICAgICAgICBjb21taXRtZW50OiBtLmNvbW1pdG1lbnQsXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMubWFwKGFzeW5jIChtKSA9PiB7XG4gICAgICAgIGNvbnN0IHBydkdwZ0tleSA9IHBydkF1dGhlbnRpY2F0aW9uR3BnS2V5cy5maW5kKChrKSA9PiBrLnBhcnR5SWQgPT09IG0uZnJvbSk7XG4gICAgICAgIGlmICghcHJ2R3BnS2V5KSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIHByaXZhdGUga2V5IHByb3ZpZGVkIGZvciBzZW5kZXIgd2l0aCBJRDogJHttLmZyb219YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW3NpZ25lZFBheWxvYWQsIHNpZ25lZFNpZ25hdHVyZVJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIGRldGFjaFNpZ25EYXRhKEJ1ZmZlci5mcm9tKG0ucGF5bG9hZCwgJ2Jhc2U2NCcpLCBwcnZHcGdLZXkuZ3BnS2V5KSxcbiAgICAgICAgICBtLnNpZ25hdHVyZVJcbiAgICAgICAgICAgID8gZGV0YWNoU2lnbkRhdGEoQnVmZmVyLmZyb20obS5zaWduYXR1cmVSLCAnYmFzZTY0JyksIHBydkdwZ0tleS5ncGdLZXkpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpLFxuICAgICAgICBdKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmcm9tOiBtLmZyb20sXG4gICAgICAgICAgcGF5bG9hZDogc2lnbmVkUGF5bG9hZCxcbiAgICAgICAgICBzaWduYXR1cmVSOiBzaWduZWRTaWduYXR1cmVSLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApLFxuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { DeserializedMessage, DeserializedMessages, DkgState } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* EdDSA Distributed Key Generation (DKG) implementation using @bitgo/wasm-mps.
|
|
4
|
+
*
|
|
5
|
+
* State is explicit: each round function returns `{ msg, state }` bytes.
|
|
6
|
+
* The state bytes are stored between rounds and passed to the next round function,
|
|
7
|
+
* mirroring the server-side persistence pattern (state would be serialised to DB).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const dkg = new DKG(3, 2, 0);
|
|
12
|
+
* // X25519 keys come from GPG encryption subkeys (extracted by the orchestrator)
|
|
13
|
+
* dkg.initDkg(myX25519PrivKey, [otherParty1X25519PubKey, otherParty2X25519PubKey]);
|
|
14
|
+
* const msg1 = dkg.getFirstMessage();
|
|
15
|
+
* const msg2s = dkg.handleIncomingMessages(allThreeMsg1s);
|
|
16
|
+
* dkg.handleIncomingMessages(allThreeMsg2s); // completes DKG
|
|
17
|
+
* const keyShare = dkg.getKeyShare();
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare class DKG {
|
|
21
|
+
protected n: number;
|
|
22
|
+
protected t: number;
|
|
23
|
+
protected partyIdx: number;
|
|
24
|
+
/** Private X25519 key (from GPG encryption subkey) */
|
|
25
|
+
private decryptionKey;
|
|
26
|
+
/** Other parties' X25519 public keys (from their GPG encryption subkeys), sorted by party index */
|
|
27
|
+
private otherPubKeys;
|
|
28
|
+
/** Serialised round state bytes returned by the previous round function */
|
|
29
|
+
private dkgStateBytes;
|
|
30
|
+
/** Opaque bincode-serialised keyshare from round2 */
|
|
31
|
+
private keyShare;
|
|
32
|
+
/** 32-byte Ed25519 public key from round2 */
|
|
33
|
+
private sharePk;
|
|
34
|
+
protected dkgState: DkgState;
|
|
35
|
+
constructor(n: number, t: number, partyIdx: number);
|
|
36
|
+
getState(): DkgState;
|
|
37
|
+
/**
|
|
38
|
+
* Initialises the DKG session with this party's X25519 private key and the other parties'
|
|
39
|
+
* X25519 public keys. Keys are extracted from GPG encryption subkeys by the orchestrator.
|
|
40
|
+
*
|
|
41
|
+
* @param decryptionKey - This party's 32-byte X25519 private key (GPG enc subkey private part).
|
|
42
|
+
* @param otherEncPublicKeys - Other parties' 32-byte X25519 public keys, sorted by ascending
|
|
43
|
+
* party index (excluding own). For a 3-party setup, this is [party_A_pub, party_B_pub].
|
|
44
|
+
*/
|
|
45
|
+
initDkg(decryptionKey: Buffer, otherEncPublicKeys: Buffer[]): void;
|
|
46
|
+
/**
|
|
47
|
+
* Runs round0 of the DKG protocol. Returns this party's broadcast message.
|
|
48
|
+
* Stores the round state bytes internally for the next round.
|
|
49
|
+
*
|
|
50
|
+
* @param dkgSeed - Optional 32-byte seed for deterministic DKG output (testing only).
|
|
51
|
+
*/
|
|
52
|
+
getFirstMessage(dkgSeed?: Buffer): DeserializedMessage;
|
|
53
|
+
/**
|
|
54
|
+
* Handles incoming messages from all parties and advances the protocol.
|
|
55
|
+
*
|
|
56
|
+
* - In WaitMsg1: runs round1, returns this party's round1 broadcast message.
|
|
57
|
+
* - In WaitMsg2: runs round2, completes DKG, returns [].
|
|
58
|
+
*
|
|
59
|
+
* The caller passes all n messages (including own); own message is filtered
|
|
60
|
+
* out internally. Other parties' messages are sorted by ascending party index,
|
|
61
|
+
* matching the ordering expected by @bitgo/wasm-mps.
|
|
62
|
+
*
|
|
63
|
+
* @param messagesForIthRound - All n messages for this round (including own).
|
|
64
|
+
*/
|
|
65
|
+
handleIncomingMessages(messagesForIthRound: DeserializedMessages): DeserializedMessages;
|
|
66
|
+
/**
|
|
67
|
+
* Returns the opaque bincode-serialised keyshare produced by round2.
|
|
68
|
+
* This is used as input to the signing protocol.
|
|
69
|
+
*/
|
|
70
|
+
getKeyShare(): Buffer;
|
|
71
|
+
/**
|
|
72
|
+
* Returns the 32-byte Ed25519 public key agreed by all parties during DKG.
|
|
73
|
+
*/
|
|
74
|
+
getSharePublicKey(): Buffer;
|
|
75
|
+
/**
|
|
76
|
+
* Returns a CBOR-encoded reduced representation containing the public key.
|
|
77
|
+
* Note: private key material and chain code are not separately accessible
|
|
78
|
+
* from @bitgo/wasm-mps; the full keyshare is available via getKeyShare().
|
|
79
|
+
*/
|
|
80
|
+
getReducedKeyShare(): Buffer;
|
|
81
|
+
/**
|
|
82
|
+
* Exports the current session state as a JSON string for persistence.
|
|
83
|
+
* Includes: round state bytes, current DKG round, decryption key, other parties' pub keys.
|
|
84
|
+
* This mirrors what a server would store in a database between API rounds.
|
|
85
|
+
*/
|
|
86
|
+
getSession(): string;
|
|
87
|
+
/**
|
|
88
|
+
* Restores a previously exported session. Allows the protocol to continue
|
|
89
|
+
* from where it left off, as if the round state was loaded from a database.
|
|
90
|
+
*/
|
|
91
|
+
restoreSession(session: string): void;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=dkg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dkg.d.ts","sourceRoot":"","sources":["../../../../src/tss/eddsa-mps/dkg.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,QAAQ,EAAwB,MAAM,SAAS,CAAC;AAEpG;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,GAAG;IACd,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE3B,sDAAsD;IACtD,OAAO,CAAC,aAAa,CAAuB;IAC5C,mGAAmG;IACnG,OAAO,CAAC,YAAY,CAAyB;IAC7C,2EAA2E;IAC3E,OAAO,CAAC,aAAa,CAAuB;IAC5C,qDAAqD;IACrD,OAAO,CAAC,QAAQ,CAAuB;IACvC,6CAA6C;IAC7C,OAAO,CAAC,OAAO,CAAuB;IAEtC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAA0B;gBAE1C,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAMlD,QAAQ,IAAI,QAAQ;IAIpB;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI;IAgBlE;;;;;OAKG;IACH,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAkBtD;;;;;;;;;;;OAWG;IACH,sBAAsB,CAAC,mBAAmB,EAAE,oBAAoB,GAAG,oBAAoB;IAoDvF;;;OAGG;IACH,WAAW,IAAI,MAAM;IAOrB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAO3B;;;;OAIG;IACH,kBAAkB,IAAI,MAAM;IAU5B;;;;OAIG;IACH,UAAU,IAAI,MAAM;IAepB;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAOtC"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DKG = void 0;
|
|
7
|
+
const wasm_mps_1 = require("@bitgo/wasm-mps");
|
|
8
|
+
const cbor_x_1 = require("cbor-x");
|
|
9
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
10
|
+
const types_1 = require("./types");
|
|
11
|
+
/**
|
|
12
|
+
* EdDSA Distributed Key Generation (DKG) implementation using @bitgo/wasm-mps.
|
|
13
|
+
*
|
|
14
|
+
* State is explicit: each round function returns `{ msg, state }` bytes.
|
|
15
|
+
* The state bytes are stored between rounds and passed to the next round function,
|
|
16
|
+
* mirroring the server-side persistence pattern (state would be serialised to DB).
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const dkg = new DKG(3, 2, 0);
|
|
21
|
+
* // X25519 keys come from GPG encryption subkeys (extracted by the orchestrator)
|
|
22
|
+
* dkg.initDkg(myX25519PrivKey, [otherParty1X25519PubKey, otherParty2X25519PubKey]);
|
|
23
|
+
* const msg1 = dkg.getFirstMessage();
|
|
24
|
+
* const msg2s = dkg.handleIncomingMessages(allThreeMsg1s);
|
|
25
|
+
* dkg.handleIncomingMessages(allThreeMsg2s); // completes DKG
|
|
26
|
+
* const keyShare = dkg.getKeyShare();
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
class DKG {
|
|
30
|
+
constructor(n, t, partyIdx) {
|
|
31
|
+
/** Private X25519 key (from GPG encryption subkey) */
|
|
32
|
+
this.decryptionKey = null;
|
|
33
|
+
/** Other parties' X25519 public keys (from their GPG encryption subkeys), sorted by party index */
|
|
34
|
+
this.otherPubKeys = null;
|
|
35
|
+
/** Serialised round state bytes returned by the previous round function */
|
|
36
|
+
this.dkgStateBytes = null;
|
|
37
|
+
/** Opaque bincode-serialised keyshare from round2 */
|
|
38
|
+
this.keyShare = null;
|
|
39
|
+
/** 32-byte Ed25519 public key from round2 */
|
|
40
|
+
this.sharePk = null;
|
|
41
|
+
this.dkgState = types_1.DkgState.Uninitialized;
|
|
42
|
+
this.n = n;
|
|
43
|
+
this.t = t;
|
|
44
|
+
this.partyIdx = partyIdx;
|
|
45
|
+
}
|
|
46
|
+
getState() {
|
|
47
|
+
return this.dkgState;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Initialises the DKG session with this party's X25519 private key and the other parties'
|
|
51
|
+
* X25519 public keys. Keys are extracted from GPG encryption subkeys by the orchestrator.
|
|
52
|
+
*
|
|
53
|
+
* @param decryptionKey - This party's 32-byte X25519 private key (GPG enc subkey private part).
|
|
54
|
+
* @param otherEncPublicKeys - Other parties' 32-byte X25519 public keys, sorted by ascending
|
|
55
|
+
* party index (excluding own). For a 3-party setup, this is [party_A_pub, party_B_pub].
|
|
56
|
+
*/
|
|
57
|
+
initDkg(decryptionKey, otherEncPublicKeys) {
|
|
58
|
+
if (!decryptionKey || decryptionKey.length !== 32) {
|
|
59
|
+
throw Error('Missing or invalid decryption key: must be 32 bytes');
|
|
60
|
+
}
|
|
61
|
+
if (!otherEncPublicKeys || otherEncPublicKeys.length !== this.n - 1) {
|
|
62
|
+
throw Error(`Expected ${this.n - 1} other parties' public keys`);
|
|
63
|
+
}
|
|
64
|
+
if (this.t > this.n || this.partyIdx >= this.n) {
|
|
65
|
+
throw Error('Invalid parameters for DKG');
|
|
66
|
+
}
|
|
67
|
+
this.decryptionKey = decryptionKey;
|
|
68
|
+
this.otherPubKeys = otherEncPublicKeys;
|
|
69
|
+
this.dkgState = types_1.DkgState.Init;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Runs round0 of the DKG protocol. Returns this party's broadcast message.
|
|
73
|
+
* Stores the round state bytes internally for the next round.
|
|
74
|
+
*
|
|
75
|
+
* @param dkgSeed - Optional 32-byte seed for deterministic DKG output (testing only).
|
|
76
|
+
*/
|
|
77
|
+
getFirstMessage(dkgSeed) {
|
|
78
|
+
if (this.dkgState !== types_1.DkgState.Init) {
|
|
79
|
+
throw Error('DKG session not initialized');
|
|
80
|
+
}
|
|
81
|
+
const seed = dkgSeed ?? crypto_1.default.randomBytes(32);
|
|
82
|
+
let result;
|
|
83
|
+
try {
|
|
84
|
+
result = (0, wasm_mps_1.ed25519_dkg_round0_process)(this.partyIdx, this.decryptionKey, this.otherPubKeys, seed);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
throw new Error(`Error while creating the first message from party ${this.partyIdx}: ${err}`);
|
|
88
|
+
}
|
|
89
|
+
this.dkgStateBytes = Buffer.from(result.state);
|
|
90
|
+
this.dkgState = types_1.DkgState.WaitMsg1;
|
|
91
|
+
return { payload: new Uint8Array(result.msg), from: this.partyIdx };
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Handles incoming messages from all parties and advances the protocol.
|
|
95
|
+
*
|
|
96
|
+
* - In WaitMsg1: runs round1, returns this party's round1 broadcast message.
|
|
97
|
+
* - In WaitMsg2: runs round2, completes DKG, returns [].
|
|
98
|
+
*
|
|
99
|
+
* The caller passes all n messages (including own); own message is filtered
|
|
100
|
+
* out internally. Other parties' messages are sorted by ascending party index,
|
|
101
|
+
* matching the ordering expected by @bitgo/wasm-mps.
|
|
102
|
+
*
|
|
103
|
+
* @param messagesForIthRound - All n messages for this round (including own).
|
|
104
|
+
*/
|
|
105
|
+
handleIncomingMessages(messagesForIthRound) {
|
|
106
|
+
if (this.dkgState === types_1.DkgState.Complete) {
|
|
107
|
+
throw Error('DKG session already completed');
|
|
108
|
+
}
|
|
109
|
+
if (this.dkgState === types_1.DkgState.Uninitialized) {
|
|
110
|
+
throw Error('DKG session not initialized');
|
|
111
|
+
}
|
|
112
|
+
if (this.dkgState === types_1.DkgState.Init) {
|
|
113
|
+
throw Error('DKG session must call getFirstMessage() before handling incoming messages. Call getFirstMessage() first.');
|
|
114
|
+
}
|
|
115
|
+
if (messagesForIthRound.length !== this.n) {
|
|
116
|
+
throw Error('Invalid number of messages for the round. Number of messages should be equal to N');
|
|
117
|
+
}
|
|
118
|
+
// Extract other parties' messages, sorted by party index (ascending)
|
|
119
|
+
const otherMsgs = messagesForIthRound
|
|
120
|
+
.filter((m) => m.from !== this.partyIdx)
|
|
121
|
+
.sort((a, b) => a.from - b.from)
|
|
122
|
+
.map((m) => m.payload);
|
|
123
|
+
if (this.dkgState === types_1.DkgState.WaitMsg1) {
|
|
124
|
+
let result;
|
|
125
|
+
try {
|
|
126
|
+
result = (0, wasm_mps_1.ed25519_dkg_round1_process)(otherMsgs, this.dkgStateBytes);
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
throw new Error(`Error while creating messages from party ${this.partyIdx}, round ${this.dkgState}: ${err}`);
|
|
130
|
+
}
|
|
131
|
+
// Store new state; this is what would be persisted to DB between API rounds
|
|
132
|
+
this.dkgStateBytes = Buffer.from(result.state);
|
|
133
|
+
this.dkgState = types_1.DkgState.WaitMsg2;
|
|
134
|
+
return [{ payload: new Uint8Array(result.msg), from: this.partyIdx }];
|
|
135
|
+
}
|
|
136
|
+
if (this.dkgState === types_1.DkgState.WaitMsg2) {
|
|
137
|
+
let share;
|
|
138
|
+
try {
|
|
139
|
+
share = (0, wasm_mps_1.ed25519_dkg_round2_process)(otherMsgs, this.dkgStateBytes);
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
throw new Error(`Error while creating messages from party ${this.partyIdx}, round ${this.dkgState}: ${err}`);
|
|
143
|
+
}
|
|
144
|
+
this.keyShare = Buffer.from(share.share);
|
|
145
|
+
this.sharePk = Buffer.from(share.pk);
|
|
146
|
+
this.dkgStateBytes = null;
|
|
147
|
+
this.dkgState = types_1.DkgState.Complete;
|
|
148
|
+
return [];
|
|
149
|
+
}
|
|
150
|
+
throw Error('Unexpected DKG state');
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Returns the opaque bincode-serialised keyshare produced by round2.
|
|
154
|
+
* This is used as input to the signing protocol.
|
|
155
|
+
*/
|
|
156
|
+
getKeyShare() {
|
|
157
|
+
if (!this.keyShare) {
|
|
158
|
+
throw Error('DKG session not initialized');
|
|
159
|
+
}
|
|
160
|
+
return this.keyShare;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Returns the 32-byte Ed25519 public key agreed by all parties during DKG.
|
|
164
|
+
*/
|
|
165
|
+
getSharePublicKey() {
|
|
166
|
+
if (!this.sharePk) {
|
|
167
|
+
throw Error('DKG session not initialized');
|
|
168
|
+
}
|
|
169
|
+
return this.sharePk;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Returns a CBOR-encoded reduced representation containing the public key.
|
|
173
|
+
* Note: private key material and chain code are not separately accessible
|
|
174
|
+
* from @bitgo/wasm-mps; the full keyshare is available via getKeyShare().
|
|
175
|
+
*/
|
|
176
|
+
getReducedKeyShare() {
|
|
177
|
+
if (!this.sharePk) {
|
|
178
|
+
throw Error('DKG session not initialized');
|
|
179
|
+
}
|
|
180
|
+
const reducedKeyShare = {
|
|
181
|
+
pub: Array.from(this.sharePk),
|
|
182
|
+
};
|
|
183
|
+
return Buffer.from((0, cbor_x_1.encode)(reducedKeyShare));
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Exports the current session state as a JSON string for persistence.
|
|
187
|
+
* Includes: round state bytes, current DKG round, decryption key, other parties' pub keys.
|
|
188
|
+
* This mirrors what a server would store in a database between API rounds.
|
|
189
|
+
*/
|
|
190
|
+
getSession() {
|
|
191
|
+
if (this.dkgState === types_1.DkgState.Complete) {
|
|
192
|
+
throw Error('DKG session is complete. Exporting the session is not allowed.');
|
|
193
|
+
}
|
|
194
|
+
if (this.dkgState === types_1.DkgState.Uninitialized) {
|
|
195
|
+
throw Error('DKG session not initialized');
|
|
196
|
+
}
|
|
197
|
+
return JSON.stringify({
|
|
198
|
+
dkgStateBytes: this.dkgStateBytes?.toString('base64') ?? null,
|
|
199
|
+
dkgRound: this.dkgState,
|
|
200
|
+
decryptionKey: this.decryptionKey?.toString('base64') ?? null,
|
|
201
|
+
otherPubKeys: this.otherPubKeys?.map((k) => k.toString('base64')) ?? null,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Restores a previously exported session. Allows the protocol to continue
|
|
206
|
+
* from where it left off, as if the round state was loaded from a database.
|
|
207
|
+
*/
|
|
208
|
+
restoreSession(session) {
|
|
209
|
+
const data = JSON.parse(session);
|
|
210
|
+
this.dkgStateBytes = data.dkgStateBytes ? Buffer.from(data.dkgStateBytes, 'base64') : null;
|
|
211
|
+
this.dkgState = data.dkgRound;
|
|
212
|
+
this.decryptionKey = data.decryptionKey ? Buffer.from(data.decryptionKey, 'base64') : null;
|
|
213
|
+
this.otherPubKeys = data.otherPubKeys ? data.otherPubKeys.map((k) => Buffer.from(k, 'base64')) : null;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
exports.DKG = DKG;
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGtnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9lZGRzYS1tcHMvZGtnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhDQUFxSDtBQUNySCxtQ0FBZ0M7QUFDaEMsb0RBQTRCO0FBQzVCLG1DQUFvRztBQUVwRzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFhLEdBQUc7SUFrQmQsWUFBWSxDQUFTLEVBQUUsQ0FBUyxFQUFFLFFBQWdCO1FBYmxELHNEQUFzRDtRQUM5QyxrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDNUMsbUdBQW1HO1FBQzNGLGlCQUFZLEdBQW9CLElBQUksQ0FBQztRQUM3QywyRUFBMkU7UUFDbkUsa0JBQWEsR0FBa0IsSUFBSSxDQUFDO1FBQzVDLHFEQUFxRDtRQUM3QyxhQUFRLEdBQWtCLElBQUksQ0FBQztRQUN2Qyw2Q0FBNkM7UUFDckMsWUFBTyxHQUFrQixJQUFJLENBQUM7UUFFNUIsYUFBUSxHQUFhLGdCQUFRLENBQUMsYUFBYSxDQUFDO1FBR3BELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE9BQU8sQ0FBQyxhQUFxQixFQUFFLGtCQUE0QjtRQUN6RCxJQUFJLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDbEQsTUFBTSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFB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SSxDQUFDO1FBQzNGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFlBQXlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdEgsQ0FBQztDQUNGO0FBL01ELGtCQStNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVkMjU1MTlfZGtnX3JvdW5kMF9wcm9jZXNzLCBlZDI1NTE5X2RrZ19yb3VuZDFfcHJvY2VzcywgZWQyNTUxOV9ka2dfcm91bmQyX3Byb2Nlc3MgfSBmcm9tICdAYml0Z28vd2FzbS1tcHMnO1xuaW1wb3J0IHsgZW5jb2RlIH0gZnJvbSAnY2Jvci14JztcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IERlc2VyaWFsaXplZE1lc3NhZ2UsIERlc2VyaWFsaXplZE1lc3NhZ2VzLCBEa2dTdGF0ZSwgRWRkc2FSZWR1Y2VkS2V5U2hhcmUgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBFZERTQSBEaXN0cmlidXRlZCBLZXkgR2VuZXJhdGlvbiAoREtHKSBpbXBsZW1lbnRhdGlvbiB1c2luZyBAYml0Z28vd2FzbS1tcHMuXG4gKlxuICogU3RhdGUgaXMgZXhwbGljaXQ6IGVhY2ggcm91bmQgZnVuY3Rpb24gcmV0dXJucyBgeyBtc2csIHN0YXRlIH1gIGJ5dGVzLlxuICogVGhlIHN0YXRlIGJ5dGVzIGFyZSBzdG9yZWQgYmV0d2VlbiByb3VuZHMgYW5kIHBhc3NlZCB0byB0aGUgbmV4dCByb3VuZCBmdW5jdGlvbixcbiAqIG1pcnJvcmluZyB0aGUgc2VydmVyLXNpZGUgcGVyc2lzdGVuY2UgcGF0dGVybiAoc3RhdGUgd291bGQgYmUgc2VyaWFsaXNlZCB0byBEQikuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGRrZyA9IG5ldyBES0coMywgMiwgMCk7XG4gKiAvLyBYMjU1MTkga2V5cyBjb21lIGZyb20gR1BHIGVuY3J5cHRpb24gc3Via2V5cyAoZXh0cmFjdGVkIGJ5IHRoZSBvcmNoZXN0cmF0b3IpXG4gKiBka2cuaW5pdERrZyhteVgyNTUxOVByaXZLZXksIFtvdGhlclBhcnR5MVgyNTUxOVB1YktleSwgb3RoZXJQYXJ0eTJYMjU1MTlQdWJLZXldKTtcbiAqIGNvbnN0IG1zZzEgPSBka2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG4gKiBjb25zdCBtc2cycyA9IGRrZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKGFsbFRocmVlTXNnMXMpO1xuICogZGtnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoYWxsVGhyZWVNc2cycyk7ICAvLyBjb21wbGV0ZXMgREtHXG4gKiBjb25zdCBrZXlTaGFyZSA9IGRrZy5nZXRLZXlTaGFyZSgpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBES0cge1xuICBwcm90ZWN0ZWQgbjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgdDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgcGFydHlJZHg6IG51bWJlcjtcblxuICAvKiogUHJpdmF0ZSBYMjU1MTkga2V5IChmcm9tIEdQRyBlbmNyeXB0aW9uIHN1YmtleSkgKi9cbiAgcHJpdmF0ZSBkZWNyeXB0aW9uS2V5OiBCdWZmZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIE90aGVyIHBhcnRpZXMnIFgyNTUxOSBwdWJsaWMga2V5cyAoZnJvbSB0aGVpciBHUEcgZW5jcnlwdGlvbiBzdWJrZXlzKSwgc29ydGVkIGJ5IHBhcnR5IGluZGV4ICovXG4gIHByaXZhdGUgb3RoZXJQdWJLZXlzOiBCdWZmZXJbXSB8IG51bGwgPSBudWxsO1xuICAvKiogU2VyaWFsaXNlZCByb3VuZCBzdGF0ZSBieXRlcyByZXR1cm5lZCBieSB0aGUgcHJldmlvdXMgcm91bmQgZnVuY3Rpb24gKi9cbiAgcHJpdmF0ZSBka2dTdGF0ZUJ5dGVzOiBCdWZmZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIE9wYXF1ZSBiaW5jb2RlLXNlcmlhbGlzZWQga2V5c2hhcmUgZnJvbSByb3VuZDIgKi9cbiAgcHJpdmF0ZSBrZXlTaGFyZTogQnVmZmVyIHwgbnVsbCA9IG51bGw7XG4gIC8qKiAzMi1ieXRlIEVkMjU1MTkgcHVibGljIGtleSBmcm9tIHJvdW5kMiAqL1xuICBwcml2YXRlIHNoYXJlUGs6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuXG4gIHByb3RlY3RlZCBka2dTdGF0ZTogRGtnU3RhdGUgPSBEa2dTdGF0ZS5VbmluaXRpYWxpemVkO1xuXG4gIGNvbnN0cnVjdG9yKG46IG51bWJlciwgdDogbnVtYmVyLCBwYXJ0eUlkeDogbnVtYmVyKSB7XG4gICAgdGhpcy5uID0gbjtcbiAgICB0aGlzLnQgPSB0O1xuICAgIHRoaXMucGFydHlJZHggPSBwYXJ0eUlkeDtcbiAgfVxuXG4gIGdldFN0YXRlKCk6IERrZ1N0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5ka2dTdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXNlcyB0aGUgREtHIHNlc3Npb24gd2l0aCB0aGlzIHBhcnR5J3MgWDI1NTE5IHByaXZhdGUga2V5IGFuZCB0aGUgb3RoZXIgcGFydGllcydcbiAgICogWDI1NTE5IHB1YmxpYyBrZXlzLiBLZXlzIGFyZSBleHRyYWN0ZWQgZnJvbSBHUEcgZW5jcnlwdGlvbiBzdWJrZXlzIGJ5IHRoZSBvcmNoZXN0cmF0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBkZWNyeXB0aW9uS2V5IC0gVGhpcyBwYXJ0eSdzIDMyLWJ5dGUgWDI1NTE5IHByaXZhdGUga2V5IChHUEcgZW5jIHN1YmtleSBwcml2YXRlIHBhcnQpLlxuICAgKiBAcGFyYW0gb3RoZXJFbmNQdWJsaWNLZXlzIC0gT3RoZXIgcGFydGllcycgMzItYnl0ZSBYMjU1MTkgcHVibGljIGtleXMsIHNvcnRlZCBieSBhc2NlbmRpbmdcbiAgICogICBwYXJ0eSBpbmRleCAoZXhjbHVkaW5nIG93bikuIEZvciBhIDMtcGFydHkgc2V0dXAsIHRoaXMgaXMgW3BhcnR5X0FfcHViLCBwYXJ0eV9CX3B1Yl0uXG4gICAqL1xuICBpbml0RGtnKGRlY3J5cHRpb25LZXk6IEJ1ZmZlciwgb3RoZXJFbmNQdWJsaWNLZXlzOiBCdWZmZXJbXSk6IHZvaWQge1xuICAgIGlmICghZGVjcnlwdGlvbktleSB8fCBkZWNyeXB0aW9uS2V5Lmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgZGVjcnlwdGlvbiBrZXk6IG11c3QgYmUgMzIgYnl0ZXMnKTtcbiAgICB9XG4gICAgaWYgKCFvdGhlckVuY1B1YmxpY0tleXMgfHwgb3RoZXJFbmNQdWJsaWNLZXlzLmxlbmd0aCAhPT0gdGhpcy5uIC0gMSkge1xuICAgICAgdGhyb3cgRXJyb3IoYEV4cGVjdGVkICR7dGhpcy5uIC0gMX0gb3RoZXIgcGFydGllcycgcHVibGljIGtleXNgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudCA+IHRoaXMubiB8fCB0aGlzLnBhcnR5SWR4ID49IHRoaXMubikge1xuICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgcGFyYW1ldGVycyBmb3IgREtHJyk7XG4gICAgfVxuXG4gICAgdGhpcy5kZWNyeXB0aW9uS2V5ID0gZGVjcnlwdGlvbktleTtcbiAgICB0aGlzLm90aGVyUHViS2V5cyA9IG90aGVyRW5jUHVibGljS2V5cztcbiAgICB0aGlzLmRrZ1N0YXRlID0gRGtnU3RhdGUuSW5pdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHJvdW5kMCBvZiB0aGUgREtHIHByb3RvY29sLiBSZXR1cm5zIHRoaXMgcGFydHkncyBicm9hZGNhc3QgbWVzc2FnZS5cbiAgICogU3RvcmVzIHRoZSByb3VuZCBzdGF0ZSBieXRlcyBpbnRlcm5hbGx5IGZvciB0aGUgbmV4dCByb3VuZC5cbiAgICpcbiAgICogQHBhcmFtIGRrZ1NlZWQgLSBPcHRpb25hbCAzMi1ieXRlIHNlZWQgZm9yIGRldGVybWluaXN0aWMgREtHIG91dHB1dCAodGVzdGluZyBvbmx5KS5cbiAgICovXG4gIGdldEZpcnN0TWVzc2FnZShka2dTZWVkPzogQnVmZmVyKTogRGVzZXJpYWxpemVkTWVzc2FnZSB7XG4gICAgaWYgKHRoaXMuZGtnU3RhdGUgIT09IERrZ1N0YXRlLkluaXQpIHtcbiAgICAgIHRocm93IEVycm9yKCdES0cgc2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWVkID0gZGtnU2VlZCA/PyBjcnlwdG8ucmFuZG9tQnl0ZXMoMzIpO1xuICAgIGxldCByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGVkMjU1MTlfZGtnX3JvdW5kMF9wcm9jZXNzKHRoaXMucGFydHlJZHgsIHRoaXMuZGVjcnlwdGlvbktleSEsIHRoaXMub3RoZXJQdWJLZXlzISwgc2VlZCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIGNyZWF0aW5nIHRoZSBmaXJzdCBtZXNzYWdlIGZyb20gcGFydHkgJHt0aGlzLnBhcnR5SWR4fTogJHtlcnJ9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5ka2dTdGF0ZUJ5dGVzID0gQnVmZmVyLmZyb20ocmVzdWx0LnN0YXRlKTtcbiAgICB0aGlzLmRrZ1N0YXRlID0gRGtnU3RhdGUuV2FpdE1zZzE7XG4gICAgcmV0dXJuIHsgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkocmVzdWx0Lm1zZyksIGZyb206IHRoaXMucGFydHlJZHggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGluY29taW5nIG1lc3NhZ2VzIGZyb20gYWxsIHBhcnRpZXMgYW5kIGFkdmFuY2VzIHRoZSBwcm90b2NvbC5cbiAgICpcbiAgICogLSBJbiBXYWl0TXNnMTogcnVucyByb3VuZDEsIHJldHVybnMgdGhpcyBwYXJ0eSdzIHJvdW5kMSBicm9hZGNhc3QgbWVzc2FnZS5cbiAgICogLSBJbiBXYWl0TXNnMjogcnVucyByb3VuZDIsIGNvbXBsZXRlcyBES0csIHJldHVybnMgW10uXG4gICAqXG4gICAqIFRoZSBjYWxsZXIgcGFzc2VzIGFsbCBuIG1lc3NhZ2VzIChpbmNsdWRpbmcgb3duKTsgb3duIG1lc3NhZ2UgaXMgZmlsdGVyZWRcbiAgICogb3V0IGludGVybmFsbHkuIE90aGVyIHBhcnRpZXMnIG1lc3NhZ2VzIGFyZSBzb3J0ZWQgYnkgYXNjZW5kaW5nIHBhcnR5IGluZGV4LFxuICAgKiBtYXRjaGluZyB0aGUgb3JkZXJpbmcgZXhwZWN0ZWQgYnkgQGJpdGdvL3dhc20tbXBzLlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZXNGb3JJdGhSb3VuZCAtIEFsbCBuIG1lc3NhZ2VzIGZvciB0aGlzIHJvdW5kIChpbmNsdWRpbmcgb3duKS5cbiAgICovXG4gIGhhbmRsZUluY29taW5nTWVzc2FnZXMobWVzc2FnZXNGb3JJdGhSb3VuZDogRGVzZXJpYWxpemVkTWVzc2FnZXMpOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyB7XG4gICAgaWYgKHRoaXMuZGtnU3RhdGUgPT09IERrZ1N0YXRlLkNvbXBsZXRlKSB7XG4gICAgICB0aHJvdyBFcnJvcignREtHIHNlc3Npb24gYWxyZWFkeSBjb21wbGV0ZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGtnU3RhdGUgPT09IERrZ1N0YXRlLlVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdES0cgc2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGtnU3RhdGUgPT09IERrZ1N0YXRlLkluaXQpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnREtHIHNlc3Npb24gbXVzdCBjYWxsIGdldEZpcnN0TWVzc2FnZSgpIGJlZm9yZSBoYW5kbGluZyBpbmNvbWluZyBtZXNzYWdlcy4gQ2FsbCBnZXRGaXJzdE1lc3NhZ2UoKSBmaXJzdC4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZXNGb3JJdGhSb3VuZC5sZW5ndGggIT09IHRoaXMubikge1xuICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgbnVtYmVyIG9mIG1lc3NhZ2VzIGZvciB0aGUgcm91bmQuIE51bWJlciBvZiBtZXNzYWdlcyBzaG91bGQgYmUgZXF1YWwgdG8gTicpO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3Qgb3RoZXIgcGFydGllcycgbWVzc2FnZXMsIHNvcnRlZCBieSBwYXJ0eSBpbmRleCAoYXNjZW5kaW5nKVxuICAgIGNvbnN0IG90aGVyTXNncyA9IG1lc3NhZ2VzRm9ySXRoUm91bmRcbiAgICAgIC5maWx0ZXIoKG0pID0+IG0uZnJvbSAhPT0gdGhpcy5wYXJ0eUlkeClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmZyb20gLSBiLmZyb20pXG4gICAgICAubWFwKChtKSA9PiBtLnBheWxvYWQpO1xuXG4gICAgaWYgKHRoaXMuZGtnU3RhdGUgPT09IERrZ1N0YXRlLldhaXRNc2cxKSB7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gZWQyNTUxOV9ka2dfcm91bmQxX3Byb2Nlc3Mob3RoZXJNc2dzLCB0aGlzLmRrZ1N0YXRlQnl0ZXMhKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIGNyZWF0aW5nIG1lc3NhZ2VzIGZyb20gcGFydHkgJHt0aGlzLnBhcnR5SWR4fSwgcm91bmQgJHt0aGlzLmRrZ1N0YXRlfTogJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgICAvLyBTdG9yZSBuZXcgc3RhdGU7IHRoaXMgaXMgd2hhdCB3b3VsZCBiZSBwZXJzaXN0ZWQgdG8gREIgYmV0d2VlbiBBUEkgcm91bmRzXG4gICAgICB0aGlzLmRrZ1N0YXRlQnl0ZXMgPSBCdWZmZXIuZnJvbShyZXN1bHQuc3RhdGUpO1xuICAgICAgdGhpcy5ka2dTdGF0ZSA9IERrZ1N0YXRlLldhaXRNc2cyO1xuICAgICAgcmV0dXJuIFt7IHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KHJlc3VsdC5tc2cpLCBmcm9tOiB0aGlzLnBhcnR5SWR4IH1dO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRrZ1N0YXRlID09PSBEa2dTdGF0ZS5XYWl0TXNnMikge1xuICAgICAgbGV0IHNoYXJlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2hhcmUgPSBlZDI1NTE5X2RrZ19yb3VuZDJfcHJvY2VzcyhvdGhlck1zZ3MsIHRoaXMuZGtnU3RhdGVCeXRlcyEpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgbWVzc2FnZXMgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9LCByb3VuZCAke3RoaXMuZGtnU3RhdGV9OiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMua2V5U2hhcmUgPSBCdWZmZXIuZnJvbShzaGFyZS5zaGFyZSk7XG4gICAgICB0aGlzLnNoYXJlUGsgPSBCdWZmZXIuZnJvbShzaGFyZS5wayk7XG4gICAgICB0aGlzLmRrZ1N0YXRlQnl0ZXMgPSBudWxsO1xuICAgICAgdGhpcy5ka2dTdGF0ZSA9IERrZ1N0YXRlLkNvbXBsZXRlO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHRocm93IEVycm9yKCdVbmV4cGVjdGVkIERLRyBzdGF0ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9wYXF1ZSBiaW5jb2RlLXNlcmlhbGlzZWQga2V5c2hhcmUgcHJvZHVjZWQgYnkgcm91bmQyLlxuICAgKiBUaGlzIGlzIHVzZWQgYXMgaW5wdXQgdG8gdGhlIHNpZ25pbmcgcHJvdG9jb2wuXG4gICAqL1xuICBnZXRLZXlTaGFyZSgpOiBCdWZmZXIge1xuICAgIGlmICghdGhpcy5rZXlTaGFyZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RLRyBzZXNzaW9uIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5rZXlTaGFyZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSAzMi1ieXRlIEVkMjU1MTkgcHVibGljIGtleSBhZ3JlZWQgYnkgYWxsIHBhcnRpZXMgZHVyaW5nIERLRy5cbiAgICovXG4gIGdldFNoYXJlUHVibGljS2V5KCk6IEJ1ZmZlciB7XG4gICAgaWYgKCF0aGlzLnNoYXJlUGspIHtcbiAgICAgIHRocm93IEVycm9yKCdES0cgc2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hhcmVQaztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgQ0JPUi1lbmNvZGVkIHJlZHVjZWQgcmVwcmVzZW50YXRpb24gY29udGFpbmluZyB0aGUgcHVibGljIGtleS5cbiAgICogTm90ZTogcHJpdmF0ZSBrZXkgbWF0ZXJpYWwgYW5kIGNoYWluIGNvZGUgYXJlIG5vdCBzZXBhcmF0ZWx5IGFjY2Vzc2libGVcbiAgICogZnJvbSBAYml0Z28vd2FzbS1tcHM7IHRoZSBmdWxsIGtleXNoYXJlIGlzIGF2YWlsYWJsZSB2aWEgZ2V0S2V5U2hhcmUoKS5cbiAgICovXG4gIGdldFJlZHVjZWRLZXlTaGFyZSgpOiBCdWZmZXIge1xuICAgIGlmICghdGhpcy5zaGFyZVBrKSB7XG4gICAgICB0aHJvdyBFcnJvcignREtHIHNlc3Npb24gbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIGNvbnN0IHJlZHVjZWRLZXlTaGFyZTogRWRkc2FSZWR1Y2VkS2V5U2hhcmUgPSB7XG4gICAgICBwdWI6IEFycmF5LmZyb20odGhpcy5zaGFyZVBrKSxcbiAgICB9O1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShlbmNvZGUocmVkdWNlZEtleVNoYXJlKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0cyB0aGUgY3VycmVudCBzZXNzaW9uIHN0YXRlIGFzIGEgSlNPTiBzdHJpbmcgZm9yIHBlcnNpc3RlbmNlLlxuICAgKiBJbmNsdWRlczogcm91bmQgc3RhdGUgYnl0ZXMsIGN1cnJlbnQgREtHIHJvdW5kLCBkZWNyeXB0aW9uIGtleSwgb3RoZXIgcGFydGllcycgcHViIGtleXMuXG4gICAqIFRoaXMgbWlycm9ycyB3aGF0IGEgc2VydmVyIHdvdWxkIHN0b3JlIGluIGEgZGF0YWJhc2UgYmV0d2VlbiBBUEkgcm91bmRzLlxuICAgKi9cbiAgZ2V0U2Vzc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRrZ1N0YXRlID09PSBEa2dTdGF0ZS5Db21wbGV0ZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RLRyBzZXNzaW9uIGlzIGNvbXBsZXRlLiBFeHBvcnRpbmcgdGhlIHNlc3Npb24gaXMgbm90IGFsbG93ZWQuJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRrZ1N0YXRlID09PSBEa2dTdGF0ZS5VbmluaXRpYWxpemVkKSB7XG4gICAgICB0aHJvdyBFcnJvcignREtHIHNlc3Npb24gbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBka2dTdGF0ZUJ5dGVzOiB0aGlzLmRrZ1N0YXRlQnl0ZXM/LnRvU3RyaW5nKCdiYXNlNjQnKSA/PyBudWxsLFxuICAgICAgZGtnUm91bmQ6IHRoaXMuZGtnU3RhdGUsXG4gICAgICBkZWNyeXB0aW9uS2V5OiB0aGlzLmRlY3J5cHRpb25LZXk/LnRvU3RyaW5nKCdiYXNlNjQnKSA/PyBudWxsLFxuICAgICAgb3RoZXJQdWJLZXlzOiB0aGlzLm90aGVyUHViS2V5cz8ubWFwKChrKSA9PiBrLnRvU3RyaW5nKCdiYXNlNjQnKSkgPz8gbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyBhIHByZXZpb3VzbHkgZXhwb3J0ZWQgc2Vzc2lvbi4gQWxsb3dzIHRoZSBwcm90b2NvbCB0byBjb250aW51ZVxuICAgKiBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmLCBhcyBpZiB0aGUgcm91bmQgc3RhdGUgd2FzIGxvYWRlZCBmcm9tIGEgZGF0YWJhc2UuXG4gICAqL1xuICByZXN0b3JlU2Vzc2lvbihzZXNzaW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShzZXNzaW9uKTtcbiAgICB0aGlzLmRrZ1N0YXRlQnl0ZXMgPSBkYXRhLmRrZ1N0YXRlQnl0ZXMgPyBCdWZmZXIuZnJvbShkYXRhLmRrZ1N0YXRlQnl0ZXMsICdiYXNlNjQnKSA6IG51bGw7XG4gICAgdGhpcy5ka2dTdGF0ZSA9IGRhdGEuZGtnUm91bmQ7XG4gICAgdGhpcy5kZWNyeXB0aW9uS2V5ID0gZGF0YS5kZWNyeXB0aW9uS2V5ID8gQnVmZmVyLmZyb20oZGF0YS5kZWNyeXB0aW9uS2V5LCAnYmFzZTY0JykgOiBudWxsO1xuICAgIHRoaXMub3RoZXJQdWJLZXlzID0gZGF0YS5vdGhlclB1YktleXMgPyAoZGF0YS5vdGhlclB1YktleXMgYXMgc3RyaW5nW10pLm1hcCgoaykgPT4gQnVmZmVyLmZyb20oaywgJ2Jhc2U2NCcpKSA6IG51bGw7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tss/eddsa-mps/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,QAAQ,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
exports.MPSTypes = exports.MPSUtil = exports.EddsaMPSDkg = void 0;
|
|
37
|
+
exports.EddsaMPSDkg = __importStar(require("./dkg"));
|
|
38
|
+
exports.MPSUtil = __importStar(require("./util"));
|
|
39
|
+
exports.MPSTypes = __importStar(require("./types"));
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VkZHNhLW1wcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFBcUM7QUFDckMsa0RBQWtDO0FBQ2xDLG9EQUFvQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIEVkZHNhTVBTRGtnIGZyb20gJy4vZGtnJztcbmV4cG9ydCAqIGFzIE1QU1V0aWwgZnJvbSAnLi91dGlsJztcbmV4cG9ydCAqIGFzIE1QU1R5cGVzIGZyb20gJy4vdHlwZXMnO1xuIl19
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as t from 'io-ts';
|
|
2
|
+
export declare const ReducedKeyShareType: t.TypeC<{
|
|
3
|
+
pub: t.ArrayC<t.NumberC>;
|
|
4
|
+
}>;
|
|
5
|
+
export type EddsaReducedKeyShare = t.TypeOf<typeof ReducedKeyShareType>;
|
|
6
|
+
/**
|
|
7
|
+
* Represents the state of a DKG (Distributed Key Generation) session
|
|
8
|
+
*/
|
|
9
|
+
export declare enum DkgState {
|
|
10
|
+
/** DKG session has not been initialized */
|
|
11
|
+
Uninitialized = "Uninitialized",
|
|
12
|
+
/** DKG session has been initialized (Init state in WASM) */
|
|
13
|
+
Init = "Init",
|
|
14
|
+
/** DKG session is waiting for first message (WaitMsg1 state in WASM) */
|
|
15
|
+
WaitMsg1 = "WaitMsg1",
|
|
16
|
+
/** DKG session is waiting for second message (WaitMsg2 state in WASM) */
|
|
17
|
+
WaitMsg2 = "WaitMsg2",
|
|
18
|
+
/** DKG session has generated key shares (Share state in WASM) */
|
|
19
|
+
Share = "Share",
|
|
20
|
+
/** DKG session has completed successfully and key shares are available */
|
|
21
|
+
Complete = "Complete"
|
|
22
|
+
}
|
|
23
|
+
export interface Message<T> {
|
|
24
|
+
payload: T;
|
|
25
|
+
from: number;
|
|
26
|
+
}
|
|
27
|
+
export type SerializedMessage = Message<string>;
|
|
28
|
+
export type SerializedMessages = Message<string>[];
|
|
29
|
+
export type DeserializedMessage = Message<Uint8Array>;
|
|
30
|
+
export type DeserializedMessages = Message<Uint8Array>[];
|
|
31
|
+
export declare function serializeMessage(msg: DeserializedMessage): SerializedMessage;
|
|
32
|
+
export declare function deserializeMessage(msg: SerializedMessage): DeserializedMessage;
|
|
33
|
+
export declare function serializeMessages(msgs: DeserializedMessages): SerializedMessages;
|
|
34
|
+
export declare function deserializeMessages(msgs: SerializedMessages): DeserializedMessages;
|
|
35
|
+
export declare function getDecodedReducedKeyShare(reducedKeyShare: Buffer | Uint8Array): EddsaReducedKeyShare;
|
|
36
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tss/eddsa-mps/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAE3B,eAAO,MAAM,mBAAmB;;EAE9B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAExE;;GAEG;AACH,oBAAY,QAAQ;IAClB,2CAA2C;IAC3C,aAAa,kBAAkB;IAC/B,4DAA4D;IAC5D,IAAI,SAAS;IACb,wEAAwE;IACxE,QAAQ,aAAa;IACrB,yEAAyE;IACzE,QAAQ,aAAa;IACrB,iEAAiE;IACjE,KAAK,UAAU;IACf,0EAA0E;IAC1E,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AAEnD,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtD,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;AAEzD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,GAAG,iBAAiB,CAE5E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,mBAAmB,CAE9E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,GAAG,kBAAkB,CAEhF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB,CAElF;AAED,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,UAAU,GAAG,oBAAoB,CAMpG"}
|