@bitgo-beta/sdk-lib-mpc 8.2.1-alpha.460 → 8.2.1-alpha.462
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/eddsa-mps/derive.d.ts +18 -0
- package/dist/src/tss/eddsa-mps/derive.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/derive.js +51 -0
- package/dist/src/tss/eddsa-mps/dsg.d.ts +2 -0
- package/dist/src/tss/eddsa-mps/dsg.d.ts.map +1 -1
- package/dist/src/tss/eddsa-mps/dsg.js +7 -1
- package/dist/src/tss/eddsa-mps/index.d.ts +1 -0
- package/dist/src/tss/eddsa-mps/index.d.ts.map +1 -1
- package/dist/src/tss/eddsa-mps/index.js +4 -2
- package/dist/src/tss/eddsa-mps/util.d.ts +15 -0
- package/dist/src/tss/eddsa-mps/util.d.ts.map +1 -1
- package/dist/src/tss/eddsa-mps/util.js +35 -1
- 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/src/tss/schnorr-dkls/dsg.d.ts +118 -0
- package/dist/src/tss/schnorr-dkls/dsg.d.ts.map +1 -0
- package/dist/src/tss/schnorr-dkls/dsg.js +374 -0
- package/dist/src/tss/schnorr-dkls/index.d.ts +4 -0
- package/dist/src/tss/schnorr-dkls/index.d.ts.map +1 -0
- package/dist/src/tss/schnorr-dkls/index.js +40 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derives a child public key from a common keychain using the Silence Labs
|
|
3
|
+
* BIP32-Ed25519 non-hardened derivation formula:
|
|
4
|
+
*
|
|
5
|
+
* HMAC = HMAC-SHA512(key=chaincode, data=pk_bytes || index_BE_4)
|
|
6
|
+
* child_pk = parent_pk + 8 * LE(trunc28(HMAC_left)) * G
|
|
7
|
+
* child_chaincode = HMAC_right (right 32 bytes)
|
|
8
|
+
*
|
|
9
|
+
* This differs from the Cardano BIP32-Ed25519 formula used by
|
|
10
|
+
* `Eddsa.deriveUnhardened` in three ways: no 0x02 prefix byte, big-endian
|
|
11
|
+
* index, and a single HMAC instead of two. The formulas produce completely
|
|
12
|
+
* different child keys at every derived level.
|
|
13
|
+
*
|
|
14
|
+
* Returns the same on-the-wire format as `Eddsa.deriveUnhardened`:
|
|
15
|
+
* 128-char hex = 64-char derived pk + 64-char derived chaincode
|
|
16
|
+
*/
|
|
17
|
+
export declare function deriveUnhardenedMps(commonKeychainHex: string, path: string): string;
|
|
18
|
+
//# sourceMappingURL=derive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive.d.ts","sourceRoot":"","sources":["../../../../src/tss/eddsa-mps/derive.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAoCnF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deriveUnhardenedMps = deriveUnhardenedMps;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const ed25519_1 = require("@noble/curves/ed25519");
|
|
6
|
+
const util_1 = require("../../curves/util");
|
|
7
|
+
/**
|
|
8
|
+
* Derives a child public key from a common keychain using the Silence Labs
|
|
9
|
+
* BIP32-Ed25519 non-hardened derivation formula:
|
|
10
|
+
*
|
|
11
|
+
* HMAC = HMAC-SHA512(key=chaincode, data=pk_bytes || index_BE_4)
|
|
12
|
+
* child_pk = parent_pk + 8 * LE(trunc28(HMAC_left)) * G
|
|
13
|
+
* child_chaincode = HMAC_right (right 32 bytes)
|
|
14
|
+
*
|
|
15
|
+
* This differs from the Cardano BIP32-Ed25519 formula used by
|
|
16
|
+
* `Eddsa.deriveUnhardened` in three ways: no 0x02 prefix byte, big-endian
|
|
17
|
+
* index, and a single HMAC instead of two. The formulas produce completely
|
|
18
|
+
* different child keys at every derived level.
|
|
19
|
+
*
|
|
20
|
+
* Returns the same on-the-wire format as `Eddsa.deriveUnhardened`:
|
|
21
|
+
* 128-char hex = 64-char derived pk + 64-char derived chaincode
|
|
22
|
+
*/
|
|
23
|
+
function deriveUnhardenedMps(commonKeychainHex, path) {
|
|
24
|
+
if (commonKeychainHex.length !== 128) {
|
|
25
|
+
throw new Error(`Invalid commonKeychain: expected 128 hex chars (32-byte pk + 32-byte chaincode), got ${commonKeychainHex.length}`);
|
|
26
|
+
}
|
|
27
|
+
const buf = Buffer.from(commonKeychainHex, 'hex');
|
|
28
|
+
let pkBytes = Buffer.from(buf.subarray(0, 32));
|
|
29
|
+
let ccBytes = Buffer.from(buf.subarray(32, 64));
|
|
30
|
+
const indices = path === '' || path === 'm' ? [] : (0, util_1.pathToIndices)(path);
|
|
31
|
+
for (const index of indices) {
|
|
32
|
+
const indexBuf = Buffer.alloc(4);
|
|
33
|
+
indexBuf.writeUInt32BE(index, 0);
|
|
34
|
+
const hmac = (0, crypto_1.createHmac)('sha512', ccBytes)
|
|
35
|
+
.update(Buffer.concat([pkBytes, indexBuf]))
|
|
36
|
+
.digest();
|
|
37
|
+
const zl = hmac.subarray(0, 32);
|
|
38
|
+
const zr = hmac.subarray(32);
|
|
39
|
+
// parse_offset: 8 * LE(zl[0..28] || zeroes)
|
|
40
|
+
// Mirrors Rust: U256::from_le_slice(&z_l).shl(3), where z_l[28..32] = 0.
|
|
41
|
+
const truncZl = Buffer.alloc(32);
|
|
42
|
+
zl.copy(truncZl, 0, 0, 28);
|
|
43
|
+
const offset = BigInt('0x' + Buffer.from(truncZl).reverse().toString('hex')) * 8n;
|
|
44
|
+
// child_pk = offset * G + parent_pk
|
|
45
|
+
const childPoint = ed25519_1.ed25519.ExtendedPoint.BASE.multiply(offset).add(ed25519_1.ed25519.ExtendedPoint.fromHex(pkBytes));
|
|
46
|
+
pkBytes = Buffer.from(childPoint.toRawBytes());
|
|
47
|
+
ccBytes = Buffer.from(zr);
|
|
48
|
+
}
|
|
49
|
+
return pkBytes.toString('hex') + ccBytes.toString('hex');
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9lZGRzYS1tcHMvZGVyaXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBb0JBLGtEQW9DQztBQXhERCxtQ0FBb0M7QUFDcEMsbURBQWdEO0FBQ2hELDRDQUFrRDtBQUVsRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxpQkFBeUIsRUFBRSxJQUFZO0lBQ3pFLElBQUksaUJBQWlCLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQ2Isd0ZBQXdGLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUNuSCxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEQsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9DLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssRUFBRSxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBQSxvQkFBYSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZFLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVqQyxNQUFNLElBQUksR0FBRyxJQUFBLG1CQUFVLEVBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQzthQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQzFDLE1BQU0sRUFBRSxDQUFDO1FBRVosTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU3Qiw0Q0FBNEM7UUFDNUMseUVBQXlFO1FBQ3pFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWxGLG9DQUFvQztRQUNwQyxNQUFNLFVBQVUsR0FBRyxpQkFBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxpQkFBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMzRyxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMvQyxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhtYWMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgZWQyNTUxOSB9IGZyb20gJ0Bub2JsZS9jdXJ2ZXMvZWQyNTUxOSc7XG5pbXBvcnQgeyBwYXRoVG9JbmRpY2VzIH0gZnJvbSAnLi4vLi4vY3VydmVzL3V0aWwnO1xuXG4vKipcbiAqIERlcml2ZXMgYSBjaGlsZCBwdWJsaWMga2V5IGZyb20gYSBjb21tb24ga2V5Y2hhaW4gdXNpbmcgdGhlIFNpbGVuY2UgTGFic1xuICogQklQMzItRWQyNTUxOSBub24taGFyZGVuZWQgZGVyaXZhdGlvbiBmb3JtdWxhOlxuICpcbiAqICAgSE1BQyA9IEhNQUMtU0hBNTEyKGtleT1jaGFpbmNvZGUsIGRhdGE9cGtfYnl0ZXMgfHwgaW5kZXhfQkVfNClcbiAqICAgY2hpbGRfcGsgPSBwYXJlbnRfcGsgKyA4ICogTEUodHJ1bmMyOChITUFDX2xlZnQpKSAqIEdcbiAqICAgY2hpbGRfY2hhaW5jb2RlID0gSE1BQ19yaWdodCAocmlnaHQgMzIgYnl0ZXMpXG4gKlxuICogVGhpcyBkaWZmZXJzIGZyb20gdGhlIENhcmRhbm8gQklQMzItRWQyNTUxOSBmb3JtdWxhIHVzZWQgYnlcbiAqIGBFZGRzYS5kZXJpdmVVbmhhcmRlbmVkYCBpbiB0aHJlZSB3YXlzOiBubyAweDAyIHByZWZpeCBieXRlLCBiaWctZW5kaWFuXG4gKiBpbmRleCwgYW5kIGEgc2luZ2xlIEhNQUMgaW5zdGVhZCBvZiB0d28uIFRoZSBmb3JtdWxhcyBwcm9kdWNlIGNvbXBsZXRlbHlcbiAqIGRpZmZlcmVudCBjaGlsZCBrZXlzIGF0IGV2ZXJ5IGRlcml2ZWQgbGV2ZWwuXG4gKlxuICogUmV0dXJucyB0aGUgc2FtZSBvbi10aGUtd2lyZSBmb3JtYXQgYXMgYEVkZHNhLmRlcml2ZVVuaGFyZGVuZWRgOlxuICogICAxMjgtY2hhciBoZXggPSA2NC1jaGFyIGRlcml2ZWQgcGsgKyA2NC1jaGFyIGRlcml2ZWQgY2hhaW5jb2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVVbmhhcmRlbmVkTXBzKGNvbW1vbktleWNoYWluSGV4OiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChjb21tb25LZXljaGFpbkhleC5sZW5ndGggIT09IDEyOCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGNvbW1vbktleWNoYWluOiBleHBlY3RlZCAxMjggaGV4IGNoYXJzICgzMi1ieXRlIHBrICsgMzItYnl0ZSBjaGFpbmNvZGUpLCBnb3QgJHtjb21tb25LZXljaGFpbkhleC5sZW5ndGh9YFxuICAgICk7XG4gIH1cblxuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShjb21tb25LZXljaGFpbkhleCwgJ2hleCcpO1xuICBsZXQgcGtCeXRlcyA9IEJ1ZmZlci5mcm9tKGJ1Zi5zdWJhcnJheSgwLCAzMikpO1xuICBsZXQgY2NCeXRlcyA9IEJ1ZmZlci5mcm9tKGJ1Zi5zdWJhcnJheSgzMiwgNjQpKTtcblxuICBjb25zdCBpbmRpY2VzID0gcGF0aCA9PT0gJycgfHwgcGF0aCA9PT0gJ20nID8gW10gOiBwYXRoVG9JbmRpY2VzKHBhdGgpO1xuICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGljZXMpIHtcbiAgICBjb25zdCBpbmRleEJ1ZiA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICBpbmRleEJ1Zi53cml0ZVVJbnQzMkJFKGluZGV4LCAwKTtcblxuICAgIGNvbnN0IGhtYWMgPSBjcmVhdGVIbWFjKCdzaGE1MTInLCBjY0J5dGVzKVxuICAgICAgLnVwZGF0ZShCdWZmZXIuY29uY2F0KFtwa0J5dGVzLCBpbmRleEJ1Zl0pKVxuICAgICAgLmRpZ2VzdCgpO1xuXG4gICAgY29uc3QgemwgPSBobWFjLnN1YmFycmF5KDAsIDMyKTtcbiAgICBjb25zdCB6ciA9IGhtYWMuc3ViYXJyYXkoMzIpO1xuXG4gICAgLy8gcGFyc2Vfb2Zmc2V0OiA4ICogTEUoemxbMC4uMjhdIHx8IHplcm9lcylcbiAgICAvLyBNaXJyb3JzIFJ1c3Q6IFUyNTY6OmZyb21fbGVfc2xpY2UoJnpfbCkuc2hsKDMpLCB3aGVyZSB6X2xbMjguLjMyXSA9IDAuXG4gICAgY29uc3QgdHJ1bmNabCA9IEJ1ZmZlci5hbGxvYygzMik7XG4gICAgemwuY29weSh0cnVuY1psLCAwLCAwLCAyOCk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gQmlnSW50KCcweCcgKyBCdWZmZXIuZnJvbSh0cnVuY1psKS5yZXZlcnNlKCkudG9TdHJpbmcoJ2hleCcpKSAqIDhuO1xuXG4gICAgLy8gY2hpbGRfcGsgPSBvZmZzZXQgKiBHICsgcGFyZW50X3BrXG4gICAgY29uc3QgY2hpbGRQb2ludCA9IGVkMjU1MTkuRXh0ZW5kZWRQb2ludC5CQVNFLm11bHRpcGx5KG9mZnNldCkuYWRkKGVkMjU1MTkuRXh0ZW5kZWRQb2ludC5mcm9tSGV4KHBrQnl0ZXMpKTtcbiAgICBwa0J5dGVzID0gQnVmZmVyLmZyb20oY2hpbGRQb2ludC50b1Jhd0J5dGVzKCkpO1xuICAgIGNjQnl0ZXMgPSBCdWZmZXIuZnJvbSh6cik7XG4gIH1cblxuICByZXR1cm4gcGtCeXRlcy50b1N0cmluZygnaGV4JykgKyBjY0J5dGVzLnRvU3RyaW5nKCdoZXgnKTtcbn1cbiJdfQ==
|
|
@@ -38,6 +38,8 @@ export declare class DSG {
|
|
|
38
38
|
protected dsgState: DsgState;
|
|
39
39
|
constructor(partyIdx: number);
|
|
40
40
|
getState(): DsgState;
|
|
41
|
+
getPartyIdx(): number;
|
|
42
|
+
getOtherPartyIdx(): number | null;
|
|
41
43
|
/**
|
|
42
44
|
* Initialises the DSG session. The keyshare must come from a prior DKG run, and
|
|
43
45
|
* `otherPartyIdx` must be the single counterpart who will co-sign with this party.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dsg.d.ts","sourceRoot":"","sources":["../../../../src/tss/eddsa-mps/dsg.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,GAAG;IACd,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE9C,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAAuB;IACvC,oFAAoF;IACpF,OAAO,CAAC,OAAO,CAAuB;IACtC,oGAAoG;IACpG,OAAO,CAAC,cAAc,CAAuB;IAE7C,2EAA2E;IAC3E,OAAO,CAAC,aAAa,CAAuB;IAC5C,4EAA4E;IAC5E,OAAO,CAAC,SAAS,CAAuB;IAExC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAA0B;gBAE1C,QAAQ,EAAE,MAAM;IAI5B,QAAQ,IAAI,QAAQ;IAIpB;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAqB/F;;;;OAIG;IACH,eAAe,IAAI,mBAAmB;IAoBtC;;;;;;;;;;;;;OAaG;IACH,sBAAsB,CAAC,mBAAmB,EAAE,oBAAoB,GAAG,oBAAoB;IAqEvF;;;OAGG;IACH,YAAY,IAAI,MAAM;IAOtB;;;;OAIG;IACH,UAAU,IAAI,MAAM;IAqBpB;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CA2DtC"}
|
|
1
|
+
{"version":3,"file":"dsg.d.ts","sourceRoot":"","sources":["../../../../src/tss/eddsa-mps/dsg.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,GAAG;IACd,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE9C,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAAuB;IACvC,oFAAoF;IACpF,OAAO,CAAC,OAAO,CAAuB;IACtC,oGAAoG;IACpG,OAAO,CAAC,cAAc,CAAuB;IAE7C,2EAA2E;IAC3E,OAAO,CAAC,aAAa,CAAuB;IAC5C,4EAA4E;IAC5E,OAAO,CAAC,SAAS,CAAuB;IAExC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAA0B;gBAE1C,QAAQ,EAAE,MAAM;IAI5B,QAAQ,IAAI,QAAQ;IAIpB,WAAW,IAAI,MAAM;IAIrB,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIjC;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAqB/F;;;;OAIG;IACH,eAAe,IAAI,mBAAmB;IAoBtC;;;;;;;;;;;;;OAaG;IACH,sBAAsB,CAAC,mBAAmB,EAAE,oBAAoB,GAAG,oBAAoB;IAqEvF;;;OAGG;IACH,YAAY,IAAI,MAAM;IAOtB;;;;OAIG;IACH,UAAU,IAAI,MAAM;IAqBpB;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CA2DtC"}
|
|
@@ -49,6 +49,12 @@ class DSG {
|
|
|
49
49
|
getState() {
|
|
50
50
|
return this.dsgState;
|
|
51
51
|
}
|
|
52
|
+
getPartyIdx() {
|
|
53
|
+
return this.partyIdx;
|
|
54
|
+
}
|
|
55
|
+
getOtherPartyIdx() {
|
|
56
|
+
return this.otherPartyIdx;
|
|
57
|
+
}
|
|
52
58
|
/**
|
|
53
59
|
* Initialises the DSG session. The keyshare must come from a prior DKG run, and
|
|
54
60
|
* `otherPartyIdx` must be the single counterpart who will co-sign with this party.
|
|
@@ -275,4 +281,4 @@ class DSG {
|
|
|
275
281
|
}
|
|
276
282
|
}
|
|
277
283
|
exports.DSG = DSG;
|
|
278
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHNnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9lZGRzYS1tcHMvZHNnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw4Q0FLeUI7QUFDekIsbUNBQThFO0FBRTlFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBYSxHQUFHO0lBa0JkLFlBQVksUUFBZ0I7UUFoQmxCLGtCQUFhLEdBQWtCLElBQUksQ0FBQztRQUU5QywwREFBMEQ7UUFDbEQsYUFBUSxHQUFrQixJQUFJLENBQUM7UUFDdkMsb0ZBQW9GO1FBQzVFLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQ3RDLG9HQUFvRztRQUM1RixtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFFN0MsMkVBQTJFO1FBQ25FLGtCQUFhLEdBQWtCLElBQUksQ0FBQztRQUM1Qyw0RUFBNEU7UUFDcEUsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFFOUIsYUFBUSxHQUFhLGdCQUFRLENBQUMsYUFBYSxDQUFDO1FBR3BELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxPQUFPLENBQUMsUUFBZ0IsRUFBRSxPQUFlLEVBQUUsY0FBc0IsRUFBRSxhQUFxQjtRQUN0RixJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsTUFBTSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksSUFBSSxD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LENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzFDLENBQUM7Q0FDRjtBQXpRRCxrQkF5UUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICBlZDI1NTE5X2RzZ19yb3VuZDBfcHJvY2VzcyxcbiAgZWQyNTUxOV9kc2dfcm91bmQxX3Byb2Nlc3MsXG4gIGVkMjU1MTlfZHNnX3JvdW5kMl9wcm9jZXNzLFxuICBlZDI1NTE5X2RzZ19yb3VuZDNfcHJvY2Vzcyxcbn0gZnJvbSAnQGJpdGdvL3dhc20tbXBzJztcbmltcG9ydCB7IERlc2VyaWFsaXplZE1lc3NhZ2UsIERlc2VyaWFsaXplZE1lc3NhZ2VzLCBEc2dTdGF0ZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEVkRFNBIERpc3RyaWJ1dGVkIFNpZ24gR2VuZXJhdGlvbiAoRFNHKSBpbXBsZW1lbnRhdGlvbiB1c2luZyBAYml0Z28vd2FzbS1tcHMuXG4gKlxuICogU3RhdGUgaXMgZXhwbGljaXQ6IGVhY2ggV0FTTSByb3VuZCBmdW5jdGlvbiByZXR1cm5zXG4gKiBgeyBtc2csIHN0YXRlIH1gIGJ5dGVzOyB0aGUgc3RhdGUgYnl0ZXMgYXJlIHN0b3JlZCBiZXR3ZWVuIHJvdW5kcyBhbmQgcGFzc2VkIHRvIHRoZVxuICogbmV4dCByb3VuZCBmdW5jdGlvbiAodGhpcyBpcyB3aGF0IGEgc2VydmVyIHdvdWxkIHBlcnNpc3QgdG8gYSBkYXRhYmFzZSBiZXR3ZWVuIEFQSVxuICogcm91bmRzKS5cbiAqXG4gKiBUaGUgcHJvdG9jb2wgaXMgaGFyZC1jb2RlZCAyLW9mLTM6IGVhY2ggc2lnbmluZyBwYXJ0eSBjb21tdW5pY2F0ZXMgd2l0aCBleGFjdGx5IG9uZVxuICogY291bnRlcnBhcnQuIGBoYW5kbGVJbmNvbWluZ01lc3NhZ2VzYCBhY2NlcHRzIGJvdGggbWVzc2FnZXMgKG93biArIGNvdW50ZXJwYXJ0KSwgYW5kXG4gKiBmaWx0ZXJzIG93biBvdXQgaW50ZXJuYWxseS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZHNnID0gbmV3IERTRygwKTsgIC8vIHBhcnR5SWR4IDBcbiAqIGRzZy5pbml0RHNnKGtleVNoYXJlLCBtZXNzYWdlLCAnbScsIDIpOyAgLy8gY291bnRlcnBhcnQgaXMgcGFydHkgMlxuICogY29uc3QgbXNnMSA9IGRzZy5nZXRGaXJzdE1lc3NhZ2UoKTtcbiAqIGNvbnN0IG1zZzIgPSBkc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbbXNnMSwgcGVlck1zZzFdKTsgIC8vIGVtaXRzIFNpZ25Nc2cyXG4gKiBjb25zdCBtc2czID0gZHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW21zZzJbMF0sIHBlZXJNc2cyXSk7ICAvLyBlbWl0cyBTaWduTXNnM1xuICogZHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW21zZzNbMF0sIHBlZXJNc2czXSk7ICAvLyBjb21wbGV0ZXMgRFNHXG4gKiBjb25zdCBzaWduYXR1cmUgPSBkc2cuZ2V0U2lnbmF0dXJlKCk7ICAvLyA2NC1ieXRlIEVkMjU1MTkgc2lnbmF0dXJlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIERTRyB7XG4gIHByb3RlY3RlZCBwYXJ0eUlkeDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgb3RoZXJQYXJ0eUlkeDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIE9wYXF1ZSBiaW5jb2RlLXNlcmlhbGlzZWQgS2V5c2hhcmUgZnJvbSBhIHByaW9yIERLRyAqL1xuICBwcml2YXRlIGtleVNoYXJlOiBCdWZmZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIFJhdyBtZXNzYWdlIGJ5dGVzIHRvIHNpZ24gKEVkMjU1MTkgaGFzaGVzIGludGVybmFsbHk7IG5vIHByZWhhc2hpbmcgcmVxdWlyZWQpICovXG4gIHByaXZhdGUgbWVzc2FnZTogQnVmZmVyIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBCSVAtMzItc3R5bGUgZGVyaXZhdGlvbiBwYXRoLCBlLmcuIFwibVwiIG9yIFwibS8wLzFcIi4gRm9sZGVkIGluIHZpYSBLZXlzaGFyZTo6ZGVyaXZlX3dpdGhfb2Zmc2V0ICovXG4gIHByaXZhdGUgZGVyaXZhdGlvblBhdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBTZXJpYWxpc2VkIHJvdW5kIHN0YXRlIGJ5dGVzIHJldHVybmVkIGJ5IHRoZSBwcmV2aW91cyByb3VuZCBmdW5jdGlvbiAqL1xuICBwcml2YXRlIGRzZ1N0YXRlQnl0ZXM6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuICAvKiogRmluYWwgNjQtYnl0ZSBFZDI1NTE5IHNpZ25hdHVyZSwgYXZhaWxhYmxlIGFmdGVyIFdhaXRNc2czIC0+IENvbXBsZXRlICovXG4gIHByaXZhdGUgc2lnbmF0dXJlOiBCdWZmZXIgfCBudWxsID0gbnVsbDtcblxuICBwcm90ZWN0ZWQgZHNnU3RhdGU6IERzZ1N0YXRlID0gRHNnU3RhdGUuVW5pbml0aWFsaXplZDtcblxuICBjb25zdHJ1Y3RvcihwYXJ0eUlkeDogbnVtYmVyKSB7XG4gICAgdGhpcy5wYXJ0eUlkeCA9IHBhcnR5SWR4O1xuICB9XG5cbiAgZ2V0U3RhdGUoKTogRHNnU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmRzZ1N0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpc2VzIHRoZSBEU0cgc2Vzc2lvbi4gVGhlIGtleXNoYXJlIG11c3QgY29tZSBmcm9tIGEgcHJpb3IgREtHIHJ1biwgYW5kXG4gICAqIGBvdGhlclBhcnR5SWR4YCBtdXN0IGJlIHRoZSBzaW5nbGUgY291bnRlcnBhcnQgd2hvIHdpbGwgY28tc2lnbiB3aXRoIHRoaXMgcGFydHkuXG4gICAqXG4gICAqIEBwYXJhbSBrZXlTaGFyZSAtIE9wYXF1ZSBiaW5jb2RlLXNlcmlhbGlzZWQgS2V5c2hhcmUgYnl0ZXMgZnJvbSBgREtHLmdldEtleVNoYXJlKClgLlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFJhdyBtZXNzYWdlIGJ5dGVzIHRvIHNpZ24gKG5vIHByZWhhc2hpbmcpLlxuICAgKiBAcGFyYW0gZGVyaXZhdGlvblBhdGggLSBCSVAtMzItc3R5bGUgZGVyaXZhdGlvbiBwYXRoLiBVc2UgYFwibVwiYCBmb3IgdGhlIHJvb3Qga2V5LlxuICAgKiBAcGFyYW0gb3RoZXJQYXJ0eUlkeCAtIFBhcnR5IGluZGV4IG9mIHRoZSBzaW5nbGUgY291bnRlcnBhcnQgaW4gdGhpcyBzaWduaW5nIHNlc3Npb24uXG4gICAqICAgTXVzdCBkaWZmZXIgZnJvbSB0aGlzIHBhcnR5J3Mgb3duIGBwYXJ0eUlkeGAgYW5kIGJlIGluIGBbMCwgMl1gLlxuICAgKi9cbiAgaW5pdERzZyhrZXlTaGFyZTogQnVmZmVyLCBtZXNzYWdlOiBCdWZmZXIsIGRlcml2YXRpb25QYXRoOiBzdHJpbmcsIG90aGVyUGFydHlJZHg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICgha2V5U2hhcmUgfHwga2V5U2hhcmUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIGtleVNoYXJlJyk7XG4gICAgfVxuICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCBtZXNzYWdlJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcnR5SWR4IDwgMCB8fCB0aGlzLnBhcnR5SWR4ID4gMikge1xuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgcGFydHlJZHggJHt0aGlzLnBhcnR5SWR4fTogbXVzdCBiZSBpbiBbMCwgMl1gKTtcbiAgICB9XG4gICAgaWYgKG90aGVyUGFydHlJZHggPCAwIHx8IG90aGVyUGFydHlJZHggPiAyIHx8IG90aGVyUGFydHlJZHggPT09IHRoaXMucGFydHlJZHgpIHtcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIG90aGVyUGFydHlJZHggJHtvdGhlclBhcnR5SWR4fTogbXVzdCBiZSBpbiBbMCwgMl0gYW5kICE9IHBhcnR5SWR4YCk7XG4gICAgfVxuXG4gICAgdGhpcy5rZXlTaGFyZSA9IGtleVNoYXJlO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5kZXJpdmF0aW9uUGF0aCA9IGRlcml2YXRpb25QYXRoO1xuICAgIHRoaXMub3RoZXJQYXJ0eUlkeCA9IG90aGVyUGFydHlJZHg7XG4gICAgdGhpcy5kc2dTdGF0ZSA9IERzZ1N0YXRlLkluaXQ7XG4gIH1cblxuICAvKipcbiAgICogUnVucyByb3VuZCAwIG9mIHRoZSBEU0cgcHJvdG9jb2wuIFJldHVybnMgdGhpcyBwYXJ0eSdzIGJyb2FkY2FzdCBtZXNzYWdlXG4gICAqIChhIGBTaWduTXNnMWAgY29udGFpbmluZyB0aGUgY29tbWl0bWVudCB0byBgUl9pYCkuIFN0b3JlcyB0aGUgcm91bmQgc3RhdGVcbiAgICogYnl0ZXMgaW50ZXJuYWxseSBmb3IgdGhlIG5leHQgcm91bmQuXG4gICAqL1xuICBnZXRGaXJzdE1lc3NhZ2UoKTogRGVzZXJpYWxpemVkTWVzc2FnZSB7XG4gICAgaWYgKHRoaXMuZHNnU3RhdGUgIT09IERzZ1N0YXRlLkluaXQpIHtcbiAgICAgIHRocm93IEVycm9yKCdEU0cgc2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgYXNzZXJ0KHRoaXMua2V5U2hhcmUsICdrZXlTaGFyZSBtdXN0IGJlIHNldCBhZnRlciBpbml0RHNnJyk7XG4gICAgYXNzZXJ0KHRoaXMuZGVyaXZhdGlvblBhdGggIT09IG51bGwsICdkZXJpdmF0aW9uUGF0aCBtdXN0IGJlIHNldCBhZnRlciBpbml0RHNnJyk7XG4gICAgYXNzZXJ0KHRoaXMubWVzc2FnZSwgJ21lc3NhZ2UgbXVzdCBiZSBzZXQgYWZ0ZXIgaW5pdERzZycpO1xuXG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gZWQyNTUxOV9kc2dfcm91bmQwX3Byb2Nlc3ModGhpcy5rZXlTaGFyZSwgdGhpcy5kZXJpdmF0aW9uUGF0aCwgdGhpcy5tZXNzYWdlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIGZpcnN0IG1lc3NhZ2UgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9OiAke2Vycn1gKTtcbiAgICB9XG5cbiAgICB0aGlzLmRzZ1N0YXRlQnl0ZXMgPSBCdWZmZXIuZnJvbShyZXN1bHQuc3RhdGUpO1xuICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5XYWl0TXNnMTtcbiAgICByZXR1cm4geyBwYXlsb2FkOiBuZXcgVWludDhBcnJheShyZXN1bHQubXNnKSwgZnJvbTogdGhpcy5wYXJ0eUlkeCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgaW5jb21pbmcgbWVzc2FnZXMgZm9yIHRoZSBjdXJyZW50IHJvdW5kIGFuZCBhZHZhbmNlcyB0aGUgcHJvdG9jb2wuXG4gICAqXG4gICAqIC0gSW4gYFdhaXRNc2cxYDogcnVucyByb3VuZCAxLCByZXR1cm5zIHRoaXMgcGFydHkncyBgU2lnbk1zZzJgIGJyb2FkY2FzdC5cbiAgICogLSBJbiBgV2FpdE1zZzJgOiBydW5zIHJvdW5kIDIgKHdoaWNoIGludGVybmFsbHkgZnVzZXMgdHdvIFNpbGVuY2UgTGFicyB0cmFuc2l0aW9ucyksXG4gICAqICAgcmV0dXJucyB0aGlzIHBhcnR5J3MgYFNpZ25Nc2czYCBicm9hZGNhc3QgKHBhcnRpYWwgc2lnbmF0dXJlKS5cbiAgICogLSBJbiBgV2FpdE1zZzNgOiBydW5zIHJvdW5kIDMsIGNvbXBsZXRlcyBEU0csIHJldHVybnMgYFtdYC5cbiAgICpcbiAgICogVGhlIGNhbGxlciBwYXNzZXMgYm90aCBtZXNzYWdlcyAob3duICsgY291bnRlcnBhcnQpIGZvciBzeW1tZXRyeSB3aXRoXG4gICAqIGBES0cuaGFuZGxlSW5jb21pbmdNZXNzYWdlc2AuIE93biBtZXNzYWdlIGlzIGZpbHRlcmVkIG91dCBpbnRlcm5hbGx5OyBvbmx5IHRoZVxuICAgKiBjb3VudGVycGFydCdzIHBheWxvYWQgaXMgZm9yd2FyZGVkIHRvIHRoZSBXQVNNIHJvdW5kIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZXNGb3JJdGhSb3VuZCAtIEJvdGggbWVzc2FnZXMgZm9yIHRoaXMgcm91bmQgKG93biArIGNvdW50ZXJwYXJ0KS5cbiAgICovXG4gIGhhbmRsZUluY29taW5nTWVzc2FnZXMobWVzc2FnZXNGb3JJdGhSb3VuZDogRGVzZXJpYWxpemVkTWVzc2FnZXMpOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyB7XG4gICAgaWYgKHRoaXMuZHNnU3RhdGUgPT09IERzZ1N0YXRlLkNvbXBsZXRlKSB7XG4gICAgICB0aHJvdyBFcnJvcignRFNHIHNlc3Npb24gYWxyZWFkeSBjb21wbGV0ZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHNnU3RhdGUgPT09IERzZ1N0YXRlLlVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdEU0cgc2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHNnU3RhdGUgPT09IERzZ1N0YXRlLkluaXQpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnRFNHIHNlc3Npb24gbXVzdCBjYWxsIGdldEZpcnN0TWVzc2FnZSgpIGJlZm9yZSBoYW5kbGluZyBpbmNvbWluZyBtZXNzYWdlcy4gQ2FsbCBnZXRGaXJzdE1lc3NhZ2UoKSBmaXJzdC4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZXNGb3JJdGhSb3VuZC5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIG51bWJlciBvZiBtZXNzYWdlcyBmb3IgdGhlIHJvdW5kLiBFeHBlY3RlZCAyIG1lc3NhZ2VzIChvd24gKyBjb3VudGVycGFydCkgZm9yIDItb2YtMyBEU0cnKTtcbiAgICB9XG5cbiAgICBjb25zdCBwZWVyTWVzc2FnZXMgPSBtZXNzYWdlc0Zvckl0aFJvdW5kLmZpbHRlcigobSkgPT4gbS5mcm9tICE9PSB0aGlzLnBhcnR5SWR4KTtcbiAgICBpZiAocGVlck1lc3NhZ2VzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgMSBjb3VudGVycGFydCBtZXNzYWdlOyBnb3QgJHtwZWVyTWVzc2FnZXMubGVuZ3RofWApO1xuICAgIH1cbiAgICBjb25zdCBwZWVyTXNnID0gcGVlck1lc3NhZ2VzWzBdO1xuICAgIGlmIChwZWVyTXNnLmZyb20gIT09IHRoaXMub3RoZXJQYXJ0eUlkeCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFVuZXhwZWN0ZWQgY291bnRlcnBhcnQgcGFydHkgaW5kZXg6IGdvdCAke3BlZXJNc2cuZnJvbX0sIGV4cGVjdGVkICR7dGhpcy5vdGhlclBhcnR5SWR4fWApO1xuICAgIH1cbiAgICBjb25zdCBwZWVyUGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHBlZXJNc2cucGF5bG9hZCk7XG5cbiAgICBpZiAodGhpcy5kc2dTdGF0ZSA9PT0gRHNnU3RhdGUuV2FpdE1zZzEpIHtcbiAgICAgIGFzc2VydCh0aGlzLmRzZ1N0YXRlQnl0ZXMsICdkc2dTdGF0ZUJ5dGVzIG11c3QgYmUgc2V0IGluIFdhaXRNc2cxJyk7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gZWQyNTUxOV9kc2dfcm91bmQxX3Byb2Nlc3MocGVlclBheWxvYWQsIHRoaXMuZHNnU3RhdGVCeXRlcyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyBtZXNzYWdlcyBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH0sIHJvdW5kICR7dGhpcy5kc2dTdGF0ZX06ICR7ZXJyfWApO1xuICAgICAgfVxuICAgICAgdGhpcy5kc2dTdGF0ZUJ5dGVzID0gQnVmZmVyLmZyb20ocmVzdWx0LnN0YXRlKTtcbiAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5XYWl0TXNnMjtcbiAgICAgIHJldHVybiBbeyBwYXlsb2FkOiBuZXcgVWludDhBcnJheShyZXN1bHQubXNnKSwgZnJvbTogdGhpcy5wYXJ0eUlkeCB9XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kc2dTdGF0ZSA9PT0gRHNnU3RhdGUuV2FpdE1zZzIpIHtcbiAgICAgIGFzc2VydCh0aGlzLmRzZ1N0YXRlQnl0ZXMsICdkc2dTdGF0ZUJ5dGVzIG11c3QgYmUgc2V0IGluIFdhaXRNc2cyJyk7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gZWQyNTUxOV9kc2dfcm91bmQyX3Byb2Nlc3MocGVlclBheWxvYWQsIHRoaXMuZHNnU3RhdGVCeXRlcyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyBtZXNzYWdlcyBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH0sIHJvdW5kICR7dGhpcy5kc2dTdGF0ZX06ICR7ZXJyfWApO1xuICAgICAgfVxuICAgICAgdGhpcy5kc2dTdGF0ZUJ5dGVzID0gQnVmZmVyLmZyb20ocmVzdWx0LnN0YXRlKTtcbiAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5XYWl0TXNnMztcbiAgICAgIHJldHVybiBbeyBwYXlsb2FkOiBuZXcgVWludDhBcnJheShyZXN1bHQubXNnKSwgZnJvbTogdGhpcy5wYXJ0eUlkeCB9XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kc2dTdGF0ZSA9PT0gRHNnU3RhdGUuV2FpdE1zZzMpIHtcbiAgICAgIGFzc2VydCh0aGlzLmRzZ1N0YXRlQnl0ZXMsICdkc2dTdGF0ZUJ5dGVzIG11c3QgYmUgc2V0IGluIFdhaXRNc2czJyk7XG4gICAgICBsZXQgc2lnQnl0ZXM7XG4gICAgICB0cnkge1xuICAgICAgICBzaWdCeXRlcyA9IGVkMjU1MTlfZHNnX3JvdW5kM19wcm9jZXNzKHBlZXJQYXlsb2FkLCB0aGlzLmRzZ1N0YXRlQnl0ZXMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgbWVzc2FnZXMgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9LCByb3VuZCAke3RoaXMuZHNnU3RhdGV9OiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2lnbmF0dXJlID0gQnVmZmVyLmZyb20oc2lnQnl0ZXMpO1xuICAgICAgdGhpcy5kc2dTdGF0ZUJ5dGVzID0gbnVsbDtcbiAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5Db21wbGV0ZTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB0aHJvdyBFcnJvcignVW5leHBlY3RlZCBEU0cgc3RhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmaW5hbCA2NC1ieXRlIEVkMjU1MTkgc2lnbmF0dXJlIHByb2R1Y2VkIGJ5IHJvdW5kIDMuXG4gICAqIE9ubHkgYXZhaWxhYmxlIG9uY2UgdGhlIHByb3RvY29sIHJlYWNoZXMgYENvbXBsZXRlYC5cbiAgICovXG4gIGdldFNpZ25hdHVyZSgpOiBCdWZmZXIge1xuICAgIGlmICghdGhpcy5zaWduYXR1cmUpIHtcbiAgICAgIHRocm93IEVycm9yKCdEU0cgc2Vzc2lvbiBoYXMgbm90IHByb2R1Y2VkIGEgc2lnbmF0dXJlIHlldCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zaWduYXR1cmU7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0cyB0aGUgY3VycmVudCBzZXNzaW9uIHN0YXRlIGFzIGEgSlNPTiBzdHJpbmcgZm9yIHBlcnNpc3RlbmNlLlxuICAgKiBJbmNsdWRlcyB0aGUgb3BhcXVlIHJvdW5kIHN0YXRlIGJ5dGVzIHBsdXMgZXZlcnl0aGluZyBuZWVkZWQgdG8gcmUtZW50ZXIgdGhlXG4gICAqIHByb3RvY29sIGFmdGVyIGEgcmVzdGFydCAoa2V5c2hhcmUsIG1lc3NhZ2UsIGRlcml2YXRpb24gcGF0aCwgY291bnRlcnBhcnQpLlxuICAgKi9cbiAgZ2V0U2Vzc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRzZ1N0YXRlID09PSBEc2dTdGF0ZS5Db21wbGV0ZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RTRyBzZXNzaW9uIGlzIGNvbXBsZXRlLiBFeHBvcnRpbmcgdGhlIHNlc3Npb24gaXMgbm90IGFsbG93ZWQuJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRzZ1N0YXRlID09PSBEc2dTdGF0ZS5VbmluaXRpYWxpemVkKSB7XG4gICAgICB0aHJvdyBFcnJvcignRFNHIHNlc3Npb24gbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRzZ1N0YXRlID09PSBEc2dTdGF0ZS5Jbml0KSB7XG4gICAgICB0aHJvdyBFcnJvcignRFNHIHNlc3Npb24gbXVzdCBwcm9kdWNlIGl0cyBmaXJzdCBtZXNzYWdlIGJlZm9yZSBleHBvcnRpbmcuJyk7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBkc2dTdGF0ZUJ5dGVzOiB0aGlzLmRzZ1N0YXRlQnl0ZXM/LnRvU3RyaW5nKCdiYXNlNjQnKSA/PyBudWxsLFxuICAgICAgZHNnUm91bmQ6IHRoaXMuZHNnU3RhdGUsXG4gICAgICBrZXlTaGFyZTogdGhpcy5rZXlTaGFyZT8udG9TdHJpbmcoJ2Jhc2U2NCcpID8/IG51bGwsXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2U/LnRvU3RyaW5nKCdiYXNlNjQnKSA/PyBudWxsLFxuICAgICAgZGVyaXZhdGlvblBhdGg6IHRoaXMuZGVyaXZhdGlvblBhdGgsXG4gICAgICBwYXJ0eUlkeDogdGhpcy5wYXJ0eUlkeCxcbiAgICAgIG90aGVyUGFydHlJZHg6IHRoaXMub3RoZXJQYXJ0eUlkeCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyBhIHByZXZpb3VzbHkgZXhwb3J0ZWQgc2Vzc2lvbi4gQWxsb3dzIHRoZSBwcm90b2NvbCB0byBjb250aW51ZSBmcm9tXG4gICAqIHdoZXJlIGl0IGxlZnQgb2ZmLCBhcyBpZiB0aGUgcm91bmQgc3RhdGUgd2FzIGxvYWRlZCBmcm9tIGEgZGF0YWJhc2UuXG4gICAqL1xuICByZXN0b3JlU2Vzc2lvbihzZXNzaW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShzZXNzaW9uKTtcbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoRHNnU3RhdGUpLmluY2x1ZGVzKGRhdGEuZHNnUm91bmQpKSB7XG4gICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBkc2dSb3VuZCBpbiBzZXNzaW9uOiAke2RhdGEuZHNnUm91bmR9YCk7XG4gICAgfVxuICAgIGlmIChkYXRhLmRzZ1JvdW5kID09PSBEc2dTdGF0ZS5VbmluaXRpYWxpemVkIHx8IGRhdGEuZHNnUm91bmQgPT09IERzZ1N0YXRlLkluaXQpIHtcbiAgICAgIHRocm93IEVycm9yKGBDYW5ub3QgcmVzdG9yZSBEU0cgc2Vzc2lvbiBpbiBzdGF0ZSAke2RhdGEuZHNnUm91bmR9YCk7XG4gICAgfVxuICAgIGlmIChkYXRhLmRzZ1JvdW5kID09PSBEc2dTdGF0ZS5Db21wbGV0ZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RTRyBzZXNzaW9uIGlzIGNvbXBsZXRlLiBSZXN0b3JpbmcgdGhlIHNlc3Npb24gaXMgbm90IGFsbG93ZWQuJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YS5wYXJ0eUlkeCAhPT0gJ251bWJlcicgfHwgZGF0YS5wYXJ0eUlkeCA8IDAgfHwgZGF0YS5wYXJ0eUlkeCA+IDIpIHtcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIHBhcnR5SWR4IGluIHNlc3Npb246ICR7ZGF0YS5wYXJ0eUlkeH1gKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIGRhdGEub3RoZXJQYXJ0eUlkeCAhPT0gJ251bWJlcicgfHxcbiAgICAgIGRhdGEub3RoZXJQYXJ0eUlkeCA8IDAgfHxcbiAgICAgIGRhdGEub3RoZXJQYXJ0eUlkeCA+IDIgfHxcbiAgICAgIGRhdGEub3RoZXJQYXJ0eUlkeCA9PT0gZGF0YS5wYXJ0eUlkeFxuICAgICkge1xuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgb3RoZXJQYXJ0eUlkeCBpbiBzZXNzaW9uOiAke2RhdGEub3RoZXJQYXJ0eUlkeH1gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFydHlJZHggIT09IGRhdGEucGFydHlJZHgpIHtcbiAgICAgIHRocm93IEVycm9yKGBTZXNzaW9uIHBhcnR5SWR4ICR7ZGF0YS5wYXJ0eUlkeH0gZG9lcyBub3QgbWF0Y2ggaW5zdGFuY2UgJHt0aGlzLnBhcnR5SWR4fWApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEuZHNnU3RhdGVCeXRlcyAhPT0gJ3N0cmluZycgfHwgZGF0YS5kc2dTdGF0ZUJ5dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFJvdW5kICR7ZGF0YS5kc2dSb3VuZH0gcmVxdWlyZXMgZHNnU3RhdGVCeXRlc2ApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEua2V5U2hhcmUgIT09ICdzdHJpbmcnIHx8IGRhdGEua2V5U2hhcmUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignUmVzdG9yZWQgc2Vzc2lvbiBtaXNzaW5nIGtleVNoYXJlJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YS5tZXNzYWdlICE9PSAnc3RyaW5nJyB8fCBkYXRhLm1lc3NhZ2UubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignUmVzdG9yZWQgc2Vzc2lvbiBtaXNzaW5nIG1lc3NhZ2UnKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhLmRlcml2YXRpb25QYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Jlc3RvcmVkIHNlc3Npb24gbWlzc2luZyBkZXJpdmF0aW9uUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGRzZ1N0YXRlQnl0ZXMgPSBCdWZmZXIuZnJvbShkYXRhLmRzZ1N0YXRlQnl0ZXMsICdiYXNlNjQnKTtcbiAgICBjb25zdCBrZXlTaGFyZSA9IEJ1ZmZlci5mcm9tKGRhdGEua2V5U2hhcmUsICdiYXNlNjQnKTtcbiAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20oZGF0YS5tZXNzYWdlLCAnYmFzZTY0Jyk7XG4gICAgaWYgKGRzZ1N0YXRlQnl0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihgUm91bmQgJHtkYXRhLmRzZ1JvdW5kfSByZXF1aXJlcyBkc2dTdGF0ZUJ5dGVzYCk7XG4gICAgfVxuICAgIGlmIChrZXlTaGFyZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IEVycm9yKCdSZXN0b3JlZCBzZXNzaW9uIG1pc3Npbmcga2V5U2hhcmUnKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignUmVzdG9yZWQgc2Vzc2lvbiBtaXNzaW5nIG1lc3NhZ2UnKTtcbiAgICB9XG5cbiAgICB0aGlzLmRzZ1N0YXRlQnl0ZXMgPSBkc2dTdGF0ZUJ5dGVzO1xuICAgIHRoaXMuZHNnU3RhdGUgPSBkYXRhLmRzZ1JvdW5kO1xuICAgIHRoaXMua2V5U2hhcmUgPSBrZXlTaGFyZTtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuZGVyaXZhdGlvblBhdGggPSBkYXRhLmRlcml2YXRpb25QYXRoO1xuICAgIHRoaXMucGFydHlJZHggPSBkYXRhLnBhcnR5SWR4O1xuICAgIHRoaXMub3RoZXJQYXJ0eUlkeCA9IGRhdGEub3RoZXJQYXJ0eUlkeDtcbiAgfVxufVxuIl19
|
|
284
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHNnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9lZGRzYS1tcHMvZHNnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw4Q0FLeUI7QUFDekIsbUNBQThFO0FBRTlFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBYSxHQUFHO0lBa0JkLFlBQVksUUFBZ0I7UUFoQmxCLGtCQUFhLEdBQWtCLElBQUksQ0FBQztRQUU5QywwREFBMEQ7UUFDbEQsYUFBUSxHQUFrQixJQUFJLENBQUM7UUFDdkMsb0ZBQW9GO1FBQzVFLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQ3RDLG9HQUFvRztRQUM1RixtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFFN0MsMkVBQTJFO1FBQ25FLGtCQUFhLEdBQWtCLElBQUksQ0FBQztRQUM1Qyw0RUFBNEU7UUFDcEUsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFFOUIsYUFBUSxHQUFhLGdCQUFRLENBQUMsYUFBYSxDQUFDO1FBR3BELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILE9BQU8sQ0FBQyxRQUFnQixFQUFFLE9BQWUsRUFBRSxjQUFzQixFQUFFLGFBQXFCO1FBQ3RGLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxNQUFNLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxJ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RyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDMUMsQ0FBQztDQUNGO0FBalJELGtCQWlSQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7XG4gIGVkMjU1MTlfZHNnX3JvdW5kMF9wcm9jZXNzLFxuICBlZDI1NTE5X2RzZ19yb3VuZDFfcHJvY2VzcyxcbiAgZWQyNTUxOV9kc2dfcm91bmQyX3Byb2Nlc3MsXG4gIGVkMjU1MTlfZHNnX3JvdW5kM19wcm9jZXNzLFxufSBmcm9tICdAYml0Z28vd2FzbS1tcHMnO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkTWVzc2FnZSwgRGVzZXJpYWxpemVkTWVzc2FnZXMsIERzZ1N0YXRlIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogRWREU0EgRGlzdHJpYnV0ZWQgU2lnbiBHZW5lcmF0aW9uIChEU0cpIGltcGxlbWVudGF0aW9uIHVzaW5nIEBiaXRnby93YXNtLW1wcy5cbiAqXG4gKiBTdGF0ZSBpcyBleHBsaWNpdDogZWFjaCBXQVNNIHJvdW5kIGZ1bmN0aW9uIHJldHVybnNcbiAqIGB7IG1zZywgc3RhdGUgfWAgYnl0ZXM7IHRoZSBzdGF0ZSBieXRlcyBhcmUgc3RvcmVkIGJldHdlZW4gcm91bmRzIGFuZCBwYXNzZWQgdG8gdGhlXG4gKiBuZXh0IHJvdW5kIGZ1bmN0aW9uICh0aGlzIGlzIHdoYXQgYSBzZXJ2ZXIgd291bGQgcGVyc2lzdCB0byBhIGRhdGFiYXNlIGJldHdlZW4gQVBJXG4gKiByb3VuZHMpLlxuICpcbiAqIFRoZSBwcm90b2NvbCBpcyBoYXJkLWNvZGVkIDItb2YtMzogZWFjaCBzaWduaW5nIHBhcnR5IGNvbW11bmljYXRlcyB3aXRoIGV4YWN0bHkgb25lXG4gKiBjb3VudGVycGFydC4gYGhhbmRsZUluY29taW5nTWVzc2FnZXNgIGFjY2VwdHMgYm90aCBtZXNzYWdlcyAob3duICsgY291bnRlcnBhcnQpLCBhbmRcbiAqIGZpbHRlcnMgb3duIG91dCBpbnRlcm5hbGx5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBkc2cgPSBuZXcgRFNHKDApOyAgLy8gcGFydHlJZHggMFxuICogZHNnLmluaXREc2coa2V5U2hhcmUsIG1lc3NhZ2UsICdtJywgMik7ICAvLyBjb3VudGVycGFydCBpcyBwYXJ0eSAyXG4gKiBjb25zdCBtc2cxID0gZHNnLmdldEZpcnN0TWVzc2FnZSgpO1xuICogY29uc3QgbXNnMiA9IGRzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFttc2cxLCBwZWVyTXNnMV0pOyAgLy8gZW1pdHMgU2lnbk1zZzJcbiAqIGNvbnN0IG1zZzMgPSBkc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbbXNnMlswXSwgcGVlck1zZzJdKTsgIC8vIGVtaXRzIFNpZ25Nc2czXG4gKiBkc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbbXNnM1swXSwgcGVlck1zZzNdKTsgIC8vIGNvbXBsZXRlcyBEU0dcbiAqIGNvbnN0IHNpZ25hdHVyZSA9IGRzZy5nZXRTaWduYXR1cmUoKTsgIC8vIDY0LWJ5dGUgRWQyNTUxOSBzaWduYXR1cmVcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgRFNHIHtcbiAgcHJvdGVjdGVkIHBhcnR5SWR4OiBudW1iZXI7XG4gIHByb3RlY3RlZCBvdGhlclBhcnR5SWR4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvKiogT3BhcXVlIGJpbmNvZGUtc2VyaWFsaXNlZCBLZXlzaGFyZSBmcm9tIGEgcHJpb3IgREtHICovXG4gIHByaXZhdGUga2V5U2hhcmU6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuICAvKiogUmF3IG1lc3NhZ2UgYnl0ZXMgdG8gc2lnbiAoRWQyNTUxOSBoYXNoZXMgaW50ZXJuYWxseTsgbm8gcHJlaGFzaGluZyByZXF1aXJlZCkgKi9cbiAgcHJpdmF0ZSBtZXNzYWdlOiBCdWZmZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIEJJUC0zMi1zdHlsZSBkZXJpdmF0aW9uIHBhdGgsIGUuZy4gXCJtXCIgb3IgXCJtLzAvMVwiLiBGb2xkZWQgaW4gdmlhIEtleXNoYXJlOjpkZXJpdmVfd2l0aF9vZmZzZXQgKi9cbiAgcHJpdmF0ZSBkZXJpdmF0aW9uUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFNlcmlhbGlzZWQgcm91bmQgc3RhdGUgYnl0ZXMgcmV0dXJuZWQgYnkgdGhlIHByZXZpb3VzIHJvdW5kIGZ1bmN0aW9uICovXG4gIHByaXZhdGUgZHNnU3RhdGVCeXRlczogQnVmZmVyIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBGaW5hbCA2NC1ieXRlIEVkMjU1MTkgc2lnbmF0dXJlLCBhdmFpbGFibGUgYWZ0ZXIgV2FpdE1zZzMgLT4gQ29tcGxldGUgKi9cbiAgcHJpdmF0ZSBzaWduYXR1cmU6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuXG4gIHByb3RlY3RlZCBkc2dTdGF0ZTogRHNnU3RhdGUgPSBEc2dTdGF0ZS5VbmluaXRpYWxpemVkO1xuXG4gIGNvbnN0cnVjdG9yKHBhcnR5SWR4OiBudW1iZXIpIHtcbiAgICB0aGlzLnBhcnR5SWR4ID0gcGFydHlJZHg7XG4gIH1cblxuICBnZXRTdGF0ZSgpOiBEc2dTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZHNnU3RhdGU7XG4gIH1cblxuICBnZXRQYXJ0eUlkeCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcnR5SWR4O1xuICB9XG5cbiAgZ2V0T3RoZXJQYXJ0eUlkeCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5vdGhlclBhcnR5SWR4O1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpc2VzIHRoZSBEU0cgc2Vzc2lvbi4gVGhlIGtleXNoYXJlIG11c3QgY29tZSBmcm9tIGEgcHJpb3IgREtHIHJ1biwgYW5kXG4gICAqIGBvdGhlclBhcnR5SWR4YCBtdXN0IGJlIHRoZSBzaW5nbGUgY291bnRlcnBhcnQgd2hvIHdpbGwgY28tc2lnbiB3aXRoIHRoaXMgcGFydHkuXG4gICAqXG4gICAqIEBwYXJhbSBrZXlTaGFyZSAtIE9wYXF1ZSBiaW5jb2RlLXNlcmlhbGlzZWQgS2V5c2hhcmUgYnl0ZXMgZnJvbSBgREtHLmdldEtleVNoYXJlKClgLlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFJhdyBtZXNzYWdlIGJ5dGVzIHRvIHNpZ24gKG5vIHByZWhhc2hpbmcpLlxuICAgKiBAcGFyYW0gZGVyaXZhdGlvblBhdGggLSBCSVAtMzItc3R5bGUgZGVyaXZhdGlvbiBwYXRoLiBVc2UgYFwibVwiYCBmb3IgdGhlIHJvb3Qga2V5LlxuICAgKiBAcGFyYW0gb3RoZXJQYXJ0eUlkeCAtIFBhcnR5IGluZGV4IG9mIHRoZSBzaW5nbGUgY291bnRlcnBhcnQgaW4gdGhpcyBzaWduaW5nIHNlc3Npb24uXG4gICAqICAgTXVzdCBkaWZmZXIgZnJvbSB0aGlzIHBhcnR5J3Mgb3duIGBwYXJ0eUlkeGAgYW5kIGJlIGluIGBbMCwgMl1gLlxuICAgKi9cbiAgaW5pdERzZyhrZXlTaGFyZTogQnVmZmVyLCBtZXNzYWdlOiBCdWZmZXIsIGRlcml2YXRpb25QYXRoOiBzdHJpbmcsIG90aGVyUGFydHlJZHg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICgha2V5U2hhcmUgfHwga2V5U2hhcmUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIGtleVNoYXJlJyk7XG4gICAgfVxuICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCBtZXNzYWdlJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcnR5SWR4IDwgMCB8fCB0aGlzLnBhcnR5SWR4ID4gMikge1xuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgcGFydHlJZHggJHt0aGlzLnBhcnR5SWR4fTogbXVzdCBiZSBpbiBbMCwgMl1gKTtcbiAgICB9XG4gICAgaWYgKG90aGVyUGFydHlJZHggPCAwIHx8IG90aGVyUGFydHlJZHggPiAyIHx8IG90aGVyUGFydHlJZHggPT09IHRoaXMucGFydHlJZHgpIHtcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIG90aGVyUGFydHlJZHggJHtvdGhlclBhcnR5SWR4fTogbXVzdCBiZSBpbiBbMCwgMl0gYW5kICE9IHBhcnR5SWR4YCk7XG4gICAgfVxuXG4gICAgdGhpcy5rZXlTaGFyZSA9IGtleVNoYXJlO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5kZXJpdmF0aW9uUGF0aCA9IGRlcml2YXRpb25QYXRoO1xuICAgIHRoaXMub3RoZXJQYXJ0eUlkeCA9IG90aGVyUGFydHlJZHg7XG4gICAgdGhpcy5kc2dTdGF0ZSA9IERzZ1N0YXRlLkluaXQ7XG4gIH1cblxuICAvKipcbiAgICogUnVucyByb3VuZCAwIG9mIHRoZSBEU0cgcHJvdG9jb2wuIFJldHVybnMgdGhpcyBwYXJ0eSdzIGJyb2FkY2FzdCBtZXNzYWdlXG4gICAqIChhIGBTaWduTXNnMWAgY29udGFpbmluZyB0aGUgY29tbWl0bWVudCB0byBgUl9pYCkuIFN0b3JlcyB0aGUgcm91bmQgc3RhdGVcbiAgICogYnl0ZXMgaW50ZXJuYWxseSBmb3IgdGhlIG5leHQgcm91bmQuXG4gICAqL1xuICBnZXRGaXJzdE1lc3NhZ2UoKTogRGVzZXJpYWxpemVkTWVzc2FnZSB7XG4gICAgaWYgKHRoaXMuZHNnU3RhdGUgIT09IERzZ1N0YXRlLkluaXQpIHtcbiAgICAgIHRocm93IEVycm9yKCdEU0cgc2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgYXNzZXJ0KHRoaXMua2V5U2hhcmUsICdrZXlTaGFyZSBtdXN0IGJlIHNldCBhZnRlciBpbml0RHNnJyk7XG4gICAgYXNzZXJ0KHRoaXMuZGVyaXZhdGlvblBhdGggIT09IG51bGwsICdkZXJpdmF0aW9uUGF0aCBtdXN0IGJlIHNldCBhZnRlciBpbml0RHNnJyk7XG4gICAgYXNzZXJ0KHRoaXMubWVzc2FnZSwgJ21lc3NhZ2UgbXVzdCBiZSBzZXQgYWZ0ZXIgaW5pdERzZycpO1xuXG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gZWQyNTUxOV9kc2dfcm91bmQwX3Byb2Nlc3ModGhpcy5rZXlTaGFyZSwgdGhpcy5kZXJpdmF0aW9uUGF0aCwgdGhpcy5tZXNzYWdlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIGZpcnN0IG1lc3NhZ2UgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9OiAke2Vycn1gKTtcbiAgICB9XG5cbiAgICB0aGlzLmRzZ1N0YXRlQnl0ZXMgPSBCdWZmZXIuZnJvbShyZXN1bHQuc3RhdGUpO1xuICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5XYWl0TXNnMTtcbiAgICByZXR1cm4geyBwYXlsb2FkOiBuZXcgVWludDhBcnJheShyZXN1bHQubXNnKSwgZnJvbTogdGhpcy5wYXJ0eUlkeCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgaW5jb21pbmcgbWVzc2FnZXMgZm9yIHRoZSBjdXJyZW50IHJvdW5kIGFuZCBhZHZhbmNlcyB0aGUgcHJvdG9jb2wuXG4gICAqXG4gICAqIC0gSW4gYFdhaXRNc2cxYDogcnVucyByb3VuZCAxLCByZXR1cm5zIHRoaXMgcGFydHkncyBgU2lnbk1zZzJgIGJyb2FkY2FzdC5cbiAgICogLSBJbiBgV2FpdE1zZzJgOiBydW5zIHJvdW5kIDIgKHdoaWNoIGludGVybmFsbHkgZnVzZXMgdHdvIFNpbGVuY2UgTGFicyB0cmFuc2l0aW9ucyksXG4gICAqICAgcmV0dXJucyB0aGlzIHBhcnR5J3MgYFNpZ25Nc2czYCBicm9hZGNhc3QgKHBhcnRpYWwgc2lnbmF0dXJlKS5cbiAgICogLSBJbiBgV2FpdE1zZzNgOiBydW5zIHJvdW5kIDMsIGNvbXBsZXRlcyBEU0csIHJldHVybnMgYFtdYC5cbiAgICpcbiAgICogVGhlIGNhbGxlciBwYXNzZXMgYm90aCBtZXNzYWdlcyAob3duICsgY291bnRlcnBhcnQpIGZvciBzeW1tZXRyeSB3aXRoXG4gICAqIGBES0cuaGFuZGxlSW5jb21pbmdNZXNzYWdlc2AuIE93biBtZXNzYWdlIGlzIGZpbHRlcmVkIG91dCBpbnRlcm5hbGx5OyBvbmx5IHRoZVxuICAgKiBjb3VudGVycGFydCdzIHBheWxvYWQgaXMgZm9yd2FyZGVkIHRvIHRoZSBXQVNNIHJvdW5kIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZXNGb3JJdGhSb3VuZCAtIEJvdGggbWVzc2FnZXMgZm9yIHRoaXMgcm91bmQgKG93biArIGNvdW50ZXJwYXJ0KS5cbiAgICovXG4gIGhhbmRsZUluY29taW5nTWVzc2FnZXMobWVzc2FnZXNGb3JJdGhSb3VuZDogRGVzZXJpYWxpemVkTWVzc2FnZXMpOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyB7XG4gICAgaWYgKHRoaXMuZHNnU3RhdGUgPT09IERzZ1N0YXRlLkNvbXBsZXRlKSB7XG4gICAgICB0aHJvdyBFcnJvcignRFNHIHNlc3Npb24gYWxyZWFkeSBjb21wbGV0ZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHNnU3RhdGUgPT09IERzZ1N0YXRlLlVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdEU0cgc2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHNnU3RhdGUgPT09IERzZ1N0YXRlLkluaXQpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnRFNHIHNlc3Npb24gbXVzdCBjYWxsIGdldEZpcnN0TWVzc2FnZSgpIGJlZm9yZSBoYW5kbGluZyBpbmNvbWluZyBtZXNzYWdlcy4gQ2FsbCBnZXRGaXJzdE1lc3NhZ2UoKSBmaXJzdC4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZXNGb3JJdGhSb3VuZC5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIG51bWJlciBvZiBtZXNzYWdlcyBmb3IgdGhlIHJvdW5kLiBFeHBlY3RlZCAyIG1lc3NhZ2VzIChvd24gKyBjb3VudGVycGFydCkgZm9yIDItb2YtMyBEU0cnKTtcbiAgICB9XG5cbiAgICBjb25zdCBwZWVyTWVzc2FnZXMgPSBtZXNzYWdlc0Zvckl0aFJvdW5kLmZpbHRlcigobSkgPT4gbS5mcm9tICE9PSB0aGlzLnBhcnR5SWR4KTtcbiAgICBpZiAocGVlck1lc3NhZ2VzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgMSBjb3VudGVycGFydCBtZXNzYWdlOyBnb3QgJHtwZWVyTWVzc2FnZXMubGVuZ3RofWApO1xuICAgIH1cbiAgICBjb25zdCBwZWVyTXNnID0gcGVlck1lc3NhZ2VzWzBdO1xuICAgIGlmIChwZWVyTXNnLmZyb20gIT09IHRoaXMub3RoZXJQYXJ0eUlkeCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFVuZXhwZWN0ZWQgY291bnRlcnBhcnQgcGFydHkgaW5kZXg6IGdvdCAke3BlZXJNc2cuZnJvbX0sIGV4cGVjdGVkICR7dGhpcy5vdGhlclBhcnR5SWR4fWApO1xuICAgIH1cbiAgICBjb25zdCBwZWVyUGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHBlZXJNc2cucGF5bG9hZCk7XG5cbiAgICBpZiAodGhpcy5kc2dTdGF0ZSA9PT0gRHNnU3RhdGUuV2FpdE1zZzEpIHtcbiAgICAgIGFzc2VydCh0aGlzLmRzZ1N0YXRlQnl0ZXMsICdkc2dTdGF0ZUJ5dGVzIG11c3QgYmUgc2V0IGluIFdhaXRNc2cxJyk7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gZWQyNTUxOV9kc2dfcm91bmQxX3Byb2Nlc3MocGVlclBheWxvYWQsIHRoaXMuZHNnU3RhdGVCeXRlcyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyBtZXNzYWdlcyBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH0sIHJvdW5kICR7dGhpcy5kc2dTdGF0ZX06ICR7ZXJyfWApO1xuICAgICAgfVxuICAgICAgdGhpcy5kc2dTdGF0ZUJ5dGVzID0gQnVmZmVyLmZyb20ocmVzdWx0LnN0YXRlKTtcbiAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5XYWl0TXNnMjtcbiAgICAgIHJldHVybiBbeyBwYXlsb2FkOiBuZXcgVWludDhBcnJheShyZXN1bHQubXNnKSwgZnJvbTogdGhpcy5wYXJ0eUlkeCB9XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kc2dTdGF0ZSA9PT0gRHNnU3RhdGUuV2FpdE1zZzIpIHtcbiAgICAgIGFzc2VydCh0aGlzLmRzZ1N0YXRlQnl0ZXMsICdkc2dTdGF0ZUJ5dGVzIG11c3QgYmUgc2V0IGluIFdhaXRNc2cyJyk7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gZWQyNTUxOV9kc2dfcm91bmQyX3Byb2Nlc3MocGVlclBheWxvYWQsIHRoaXMuZHNnU3RhdGVCeXRlcyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyBtZXNzYWdlcyBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH0sIHJvdW5kICR7dGhpcy5kc2dTdGF0ZX06ICR7ZXJyfWApO1xuICAgICAgfVxuICAgICAgdGhpcy5kc2dTdGF0ZUJ5dGVzID0gQnVmZmVyLmZyb20ocmVzdWx0LnN0YXRlKTtcbiAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5XYWl0TXNnMztcbiAgICAgIHJldHVybiBbeyBwYXlsb2FkOiBuZXcgVWludDhBcnJheShyZXN1bHQubXNnKSwgZnJvbTogdGhpcy5wYXJ0eUlkeCB9XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kc2dTdGF0ZSA9PT0gRHNnU3RhdGUuV2FpdE1zZzMpIHtcbiAgICAgIGFzc2VydCh0aGlzLmRzZ1N0YXRlQnl0ZXMsICdkc2dTdGF0ZUJ5dGVzIG11c3QgYmUgc2V0IGluIFdhaXRNc2czJyk7XG4gICAgICBsZXQgc2lnQnl0ZXM7XG4gICAgICB0cnkge1xuICAgICAgICBzaWdCeXRlcyA9IGVkMjU1MTlfZHNnX3JvdW5kM19wcm9jZXNzKHBlZXJQYXlsb2FkLCB0aGlzLmRzZ1N0YXRlQnl0ZXMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgbWVzc2FnZXMgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9LCByb3VuZCAke3RoaXMuZHNnU3RhdGV9OiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2lnbmF0dXJlID0gQnVmZmVyLmZyb20oc2lnQnl0ZXMpO1xuICAgICAgdGhpcy5kc2dTdGF0ZUJ5dGVzID0gbnVsbDtcbiAgICAgIHRoaXMuZHNnU3RhdGUgPSBEc2dTdGF0ZS5Db21wbGV0ZTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB0aHJvdyBFcnJvcignVW5leHBlY3RlZCBEU0cgc3RhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmaW5hbCA2NC1ieXRlIEVkMjU1MTkgc2lnbmF0dXJlIHByb2R1Y2VkIGJ5IHJvdW5kIDMuXG4gICAqIE9ubHkgYXZhaWxhYmxlIG9uY2UgdGhlIHByb3RvY29sIHJlYWNoZXMgYENvbXBsZXRlYC5cbiAgICovXG4gIGdldFNpZ25hdHVyZSgpOiBCdWZmZXIge1xuICAgIGlmICghdGhpcy5zaWduYXR1cmUpIHtcbiAgICAgIHRocm93IEVycm9yKCdEU0cgc2Vzc2lvbiBoYXMgbm90IHByb2R1Y2VkIGEgc2lnbmF0dXJlIHlldCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zaWduYXR1cmU7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0cyB0aGUgY3VycmVudCBzZXNzaW9uIHN0YXRlIGFzIGEgSlNPTiBzdHJpbmcgZm9yIHBlcnNpc3RlbmNlLlxuICAgKiBJbmNsdWRlcyB0aGUgb3BhcXVlIHJvdW5kIHN0YXRlIGJ5dGVzIHBsdXMgZXZlcnl0aGluZyBuZWVkZWQgdG8gcmUtZW50ZXIgdGhlXG4gICAqIHByb3RvY29sIGFmdGVyIGEgcmVzdGFydCAoa2V5c2hhcmUsIG1lc3NhZ2UsIGRlcml2YXRpb24gcGF0aCwgY291bnRlcnBhcnQpLlxuICAgKi9cbiAgZ2V0U2Vzc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRzZ1N0YXRlID09PSBEc2dTdGF0ZS5Db21wbGV0ZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RTRyBzZXNzaW9uIGlzIGNvbXBsZXRlLiBFeHBvcnRpbmcgdGhlIHNlc3Npb24gaXMgbm90IGFsbG93ZWQuJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRzZ1N0YXRlID09PSBEc2dTdGF0ZS5VbmluaXRpYWxpemVkKSB7XG4gICAgICB0aHJvdyBFcnJvcignRFNHIHNlc3Npb24gbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRzZ1N0YXRlID09PSBEc2dTdGF0ZS5Jbml0KSB7XG4gICAgICB0aHJvdyBFcnJvcignRFNHIHNlc3Npb24gbXVzdCBwcm9kdWNlIGl0cyBmaXJzdCBtZXNzYWdlIGJlZm9yZSBleHBvcnRpbmcuJyk7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBkc2dTdGF0ZUJ5dGVzOiB0aGlzLmRzZ1N0YXRlQnl0ZXM/LnRvU3RyaW5nKCdiYXNlNjQnKSA/PyBudWxsLFxuICAgICAgZHNnUm91bmQ6IHRoaXMuZHNnU3RhdGUsXG4gICAgICBrZXlTaGFyZTogdGhpcy5rZXlTaGFyZT8udG9TdHJpbmcoJ2Jhc2U2NCcpID8/IG51bGwsXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2U/LnRvU3RyaW5nKCdiYXNlNjQnKSA/PyBudWxsLFxuICAgICAgZGVyaXZhdGlvblBhdGg6IHRoaXMuZGVyaXZhdGlvblBhdGgsXG4gICAgICBwYXJ0eUlkeDogdGhpcy5wYXJ0eUlkeCxcbiAgICAgIG90aGVyUGFydHlJZHg6IHRoaXMub3RoZXJQYXJ0eUlkeCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyBhIHByZXZpb3VzbHkgZXhwb3J0ZWQgc2Vzc2lvbi4gQWxsb3dzIHRoZSBwcm90b2NvbCB0byBjb250aW51ZSBmcm9tXG4gICAqIHdoZXJlIGl0IGxlZnQgb2ZmLCBhcyBpZiB0aGUgcm91bmQgc3RhdGUgd2FzIGxvYWRlZCBmcm9tIGEgZGF0YWJhc2UuXG4gICAqL1xuICByZXN0b3JlU2Vzc2lvbihzZXNzaW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShzZXNzaW9uKTtcbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoRHNnU3RhdGUpLmluY2x1ZGVzKGRhdGEuZHNnUm91bmQpKSB7XG4gICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBkc2dSb3VuZCBpbiBzZXNzaW9uOiAke2RhdGEuZHNnUm91bmR9YCk7XG4gICAgfVxuICAgIGlmIChkYXRhLmRzZ1JvdW5kID09PSBEc2dTdGF0ZS5VbmluaXRpYWxpemVkIHx8IGRhdGEuZHNnUm91bmQgPT09IERzZ1N0YXRlLkluaXQpIHtcbiAgICAgIHRocm93IEVycm9yKGBDYW5ub3QgcmVzdG9yZSBEU0cgc2Vzc2lvbiBpbiBzdGF0ZSAke2RhdGEuZHNnUm91bmR9YCk7XG4gICAgfVxuICAgIGlmIChkYXRhLmRzZ1JvdW5kID09PSBEc2dTdGF0ZS5Db21wbGV0ZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RTRyBzZXNzaW9uIGlzIGNvbXBsZXRlLiBSZXN0b3JpbmcgdGhlIHNlc3Npb24gaXMgbm90IGFsbG93ZWQuJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YS5wYXJ0eUlkeCAhPT0gJ251bWJlcicgfHwgZGF0YS5wYXJ0eUlkeCA8IDAgfHwgZGF0YS5wYXJ0eUlkeCA+IDIpIHtcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIHBhcnR5SWR4IGluIHNlc3Npb246ICR7ZGF0YS5wYXJ0eUlkeH1gKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIGRhdGEub3RoZXJQYXJ0eUlkeCAhPT0gJ251bWJlcicgfHxcbiAgICAgIGRhdGEub3RoZXJQYXJ0eUlkeCA8IDAgfHxcbiAgICAgIGRhdGEub3RoZXJQYXJ0eUlkeCA+IDIgfHxcbiAgICAgIGRhdGEub3RoZXJQYXJ0eUlkeCA9PT0gZGF0YS5wYXJ0eUlkeFxuICAgICkge1xuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgb3RoZXJQYXJ0eUlkeCBpbiBzZXNzaW9uOiAke2RhdGEub3RoZXJQYXJ0eUlkeH1gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFydHlJZHggIT09IGRhdGEucGFydHlJZHgpIHtcbiAgICAgIHRocm93IEVycm9yKGBTZXNzaW9uIHBhcnR5SWR4ICR7ZGF0YS5wYXJ0eUlkeH0gZG9lcyBub3QgbWF0Y2ggaW5zdGFuY2UgJHt0aGlzLnBhcnR5SWR4fWApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEuZHNnU3RhdGVCeXRlcyAhPT0gJ3N0cmluZycgfHwgZGF0YS5kc2dTdGF0ZUJ5dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFJvdW5kICR7ZGF0YS5kc2dSb3VuZH0gcmVxdWlyZXMgZHNnU3RhdGVCeXRlc2ApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEua2V5U2hhcmUgIT09ICdzdHJpbmcnIHx8IGRhdGEua2V5U2hhcmUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignUmVzdG9yZWQgc2Vzc2lvbiBtaXNzaW5nIGtleVNoYXJlJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YS5tZXNzYWdlICE9PSAnc3RyaW5nJyB8fCBkYXRhLm1lc3NhZ2UubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignUmVzdG9yZWQgc2Vzc2lvbiBtaXNzaW5nIG1lc3NhZ2UnKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhLmRlcml2YXRpb25QYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Jlc3RvcmVkIHNlc3Npb24gbWlzc2luZyBkZXJpdmF0aW9uUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGRzZ1N0YXRlQnl0ZXMgPSBCdWZmZXIuZnJvbShkYXRhLmRzZ1N0YXRlQnl0ZXMsICdiYXNlNjQnKTtcbiAgICBjb25zdCBrZXlTaGFyZSA9IEJ1ZmZlci5mcm9tKGRhdGEua2V5U2hhcmUsICdiYXNlNjQnKTtcbiAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20oZGF0YS5tZXNzYWdlLCAnYmFzZTY0Jyk7XG4gICAgaWYgKGRzZ1N0YXRlQnl0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihgUm91bmQgJHtkYXRhLmRzZ1JvdW5kfSByZXF1aXJlcyBkc2dTdGF0ZUJ5dGVzYCk7XG4gICAgfVxuICAgIGlmIChrZXlTaGFyZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IEVycm9yKCdSZXN0b3JlZCBzZXNzaW9uIG1pc3Npbmcga2V5U2hhcmUnKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignUmVzdG9yZWQgc2Vzc2lvbiBtaXNzaW5nIG1lc3NhZ2UnKTtcbiAgICB9XG5cbiAgICB0aGlzLmRzZ1N0YXRlQnl0ZXMgPSBkc2dTdGF0ZUJ5dGVzO1xuICAgIHRoaXMuZHNnU3RhdGUgPSBkYXRhLmRzZ1JvdW5kO1xuICAgIHRoaXMua2V5U2hhcmUgPSBrZXlTaGFyZTtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuZGVyaXZhdGlvblBhdGggPSBkYXRhLmRlcml2YXRpb25QYXRoO1xuICAgIHRoaXMucGFydHlJZHggPSBkYXRhLnBhcnR5SWR4O1xuICAgIHRoaXMub3RoZXJQYXJ0eUlkeCA9IGRhdGEub3RoZXJQYXJ0eUlkeDtcbiAgfVxufVxuIl19
|
|
@@ -1 +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,WAAW,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,QAAQ,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,cAAc,CAAC"}
|
|
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,WAAW,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,QAAQ,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -33,10 +33,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.MPSComms = exports.MPSTypes = exports.MPSUtil = exports.EddsaMPSDsg = exports.EddsaMPSDkg = void 0;
|
|
36
|
+
exports.deriveUnhardenedMps = exports.MPSComms = exports.MPSTypes = exports.MPSUtil = exports.EddsaMPSDsg = exports.EddsaMPSDkg = void 0;
|
|
37
37
|
exports.EddsaMPSDkg = __importStar(require("./dkg"));
|
|
38
38
|
exports.EddsaMPSDsg = __importStar(require("./dsg"));
|
|
39
39
|
exports.MPSUtil = __importStar(require("./util"));
|
|
40
40
|
exports.MPSTypes = __importStar(require("./types"));
|
|
41
41
|
exports.MPSComms = __importStar(require("./commsLayer"));
|
|
42
|
-
|
|
42
|
+
var derive_1 = require("./derive");
|
|
43
|
+
Object.defineProperty(exports, "deriveUnhardenedMps", { enumerable: true, get: function () { return derive_1.deriveUnhardenedMps; } });
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VkZHNhLW1wcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFBcUM7QUFDckMscURBQXFDO0FBQ3JDLGtEQUFrQztBQUNsQyxvREFBb0M7QUFDcEMseURBQXlDO0FBQ3pDLG1DQUErQztBQUF0Qyw2R0FBQSxtQkFBbUIsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIEVkZHNhTVBTRGtnIGZyb20gJy4vZGtnJztcbmV4cG9ydCAqIGFzIEVkZHNhTVBTRHNnIGZyb20gJy4vZHNnJztcbmV4cG9ydCAqIGFzIE1QU1V0aWwgZnJvbSAnLi91dGlsJztcbmV4cG9ydCAqIGFzIE1QU1R5cGVzIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogYXMgTVBTQ29tbXMgZnJvbSAnLi9jb21tc0xheWVyJztcbmV4cG9ydCB7IGRlcml2ZVVuaGFyZGVuZWRNcHMgfSBmcm9tICcuL2Rlcml2ZSc7XG4iXX0=
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { DKG } from './dkg';
|
|
2
|
+
import { DSG } from './dsg';
|
|
3
|
+
import { DeserializedMessages } from './types';
|
|
2
4
|
/**
|
|
3
5
|
* Concatenates multiple Uint8Array instances into a single Uint8Array
|
|
4
6
|
* @param chunks - Array of Uint8Array instances to concatenate
|
|
@@ -15,4 +17,17 @@ export interface EdDsaDKGPartySeed {
|
|
|
15
17
|
}
|
|
16
18
|
/** See `EdDsaDKGPartySeed`. Mirrors `DklsUtils.generateDKGKeyShares` for ECDSA DKLS. */
|
|
17
19
|
export declare function generateEdDsaDKGKeyShares(seedUser?: EdDsaDKGPartySeed, seedBackup?: EdDsaDKGPartySeed, seedBitgo?: EdDsaDKGPartySeed): Promise<[DKG, DKG, DKG]>;
|
|
20
|
+
/**
|
|
21
|
+
* Initializes two DSG parties and drives them through the protocol until the specified round.
|
|
22
|
+
*
|
|
23
|
+
* @param round - Round to execute until (1–3). Returns intermediate message arrays for 1–2,
|
|
24
|
+
* or the 64-byte Ed25519 signature Buffer for 3.
|
|
25
|
+
* @param party1Dsg - First DSG party (`new DSG(partyIdx)`), not yet initialized.
|
|
26
|
+
* @param party2Dsg - Second DSG party (`new DSG(partyIdx)`), not yet initialized.
|
|
27
|
+
* @param keyShare1 - Key share for the first party.
|
|
28
|
+
* @param keyShare2 - Key share for the second party.
|
|
29
|
+
* @param message - Raw message bytes to sign.
|
|
30
|
+
* @param derivationPath - BIP-32-style derivation path, e.g. `"m"` or `"m/0/0"`.
|
|
31
|
+
*/
|
|
32
|
+
export declare function executeTillRound(round: number, party1Dsg: DSG, party2Dsg: DSG, keyShare1: Buffer, keyShare2: Buffer, message: Buffer, derivationPath: string): DeserializedMessages[] | Buffer;
|
|
18
33
|
//# sourceMappingURL=util.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/tss/eddsa-mps/util.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/tss/eddsa-mps/util.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAG5D;AAQD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD,wFAAwF;AACxF,wBAAsB,yBAAyB,CAC7C,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,UAAU,CAAC,EAAE,iBAAiB,EAC9B,SAAS,CAAC,EAAE,iBAAiB,GAC5B,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAkC1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,GACrB,oBAAoB,EAAE,GAAG,MAAM,CAsBjC"}
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.concatBytes = concatBytes;
|
|
7
7
|
exports.generateEdDsaDKGKeyShares = generateEdDsaDKGKeyShares;
|
|
8
|
+
exports.executeTillRound = executeTillRound;
|
|
8
9
|
const crypto_1 = __importDefault(require("crypto"));
|
|
9
10
|
const assert_1 = __importDefault(require("assert"));
|
|
10
11
|
const ed25519_1 = require("@noble/curves/ed25519");
|
|
@@ -57,4 +58,37 @@ async function generateEdDsaDKGKeyShares(seedUser, seedBackup, seedBitgo) {
|
|
|
57
58
|
bitgo.handleIncomingMessages(r2Messages);
|
|
58
59
|
return [user, backup, bitgo];
|
|
59
60
|
}
|
|
60
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Initializes two DSG parties and drives them through the protocol until the specified round.
|
|
63
|
+
*
|
|
64
|
+
* @param round - Round to execute until (1–3). Returns intermediate message arrays for 1–2,
|
|
65
|
+
* or the 64-byte Ed25519 signature Buffer for 3.
|
|
66
|
+
* @param party1Dsg - First DSG party (`new DSG(partyIdx)`), not yet initialized.
|
|
67
|
+
* @param party2Dsg - Second DSG party (`new DSG(partyIdx)`), not yet initialized.
|
|
68
|
+
* @param keyShare1 - Key share for the first party.
|
|
69
|
+
* @param keyShare2 - Key share for the second party.
|
|
70
|
+
* @param message - Raw message bytes to sign.
|
|
71
|
+
* @param derivationPath - BIP-32-style derivation path, e.g. `"m"` or `"m/0/0"`.
|
|
72
|
+
*/
|
|
73
|
+
function executeTillRound(round, party1Dsg, party2Dsg, keyShare1, keyShare2, message, derivationPath) {
|
|
74
|
+
if (round < 1 || round > 3) {
|
|
75
|
+
throw Error('Invalid round number');
|
|
76
|
+
}
|
|
77
|
+
party1Dsg.initDsg(keyShare1, message, derivationPath, party2Dsg.getPartyIdx());
|
|
78
|
+
party2Dsg.initDsg(keyShare2, message, derivationPath, party1Dsg.getPartyIdx());
|
|
79
|
+
const party1Round0Message = party1Dsg.getFirstMessage();
|
|
80
|
+
const party2Round0Message = party2Dsg.getFirstMessage();
|
|
81
|
+
const [party2Round1Messages] = party2Dsg.handleIncomingMessages([party1Round0Message, party2Round0Message]);
|
|
82
|
+
const [party1Round1Messages] = party1Dsg.handleIncomingMessages([party1Round0Message, party2Round0Message]);
|
|
83
|
+
if (round === 1)
|
|
84
|
+
return [[party1Round1Messages], [party2Round1Messages]];
|
|
85
|
+
const [party1Round2Messages] = party1Dsg.handleIncomingMessages([party1Round1Messages, party2Round1Messages]);
|
|
86
|
+
const [party2Round2Messages] = party2Dsg.handleIncomingMessages([party1Round1Messages, party2Round1Messages]);
|
|
87
|
+
if (round === 2)
|
|
88
|
+
return [[party1Round2Messages], [party2Round2Messages]];
|
|
89
|
+
party1Dsg.handleIncomingMessages([party1Round2Messages, party2Round2Messages]);
|
|
90
|
+
party2Dsg.handleIncomingMessages([party1Round2Messages, party2Round2Messages]);
|
|
91
|
+
(0, assert_1.default)(party1Dsg.getSignature().toString('hex') === party2Dsg.getSignature().toString('hex'));
|
|
92
|
+
return party1Dsg.getSignature();
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZWRkc2EtbXBzL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFZQSxrQ0FHQztBQXdCRCw4REFzQ0M7QUFjRCw0Q0E4QkM7QUF6SEQsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1QixtREFBK0M7QUFDL0MsK0JBQTRCO0FBSTVCOzs7O0dBSUc7QUFDSCxTQUFnQixXQUFXLENBQUMsTUFBb0I7SUFDOUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFELE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLElBQWE7SUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNuRCxDQUFDO0FBV0QsU0FBUyxZQUFZLENBQUMsSUFBd0I7SUFDNUMsSUFBQSxnQkFBTSxFQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztJQUN0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LENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDL0UsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUMsb0JBQW9CLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBRS9FLElBQUEsZ0JBQU0sRUFBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5RixPQUFPLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgeDI1NTE5IH0gZnJvbSAnQG5vYmxlL2N1cnZlcy9lZDI1NTE5JztcbmltcG9ydCB7IERLRyB9IGZyb20gJy4vZGtnJztcbmltcG9ydCB7IERTRyB9IGZyb20gJy4vZHNnJztcbmltcG9ydCB7IERlc2VyaWFsaXplZE1lc3NhZ2VzIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQ29uY2F0ZW5hdGVzIG11bHRpcGxlIFVpbnQ4QXJyYXkgaW5zdGFuY2VzIGludG8gYSBzaW5nbGUgVWludDhBcnJheVxuICogQHBhcmFtIGNodW5rcyAtIEFycmF5IG9mIFVpbnQ4QXJyYXkgaW5zdGFuY2VzIHRvIGNvbmNhdGVuYXRlXG4gKiBAcmV0dXJucyBDb25jYXRlbmF0ZWQgVWludDhBcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0Qnl0ZXMoY2h1bmtzOiBVaW50OEFycmF5W10pOiBVaW50OEFycmF5IHtcbiAgY29uc3QgYnVmZmVycyA9IGNodW5rcy5tYXAoKGNodW5rKSA9PiBCdWZmZXIuZnJvbShjaHVuaykpO1xuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmNvbmNhdChidWZmZXJzKSk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlWDI1NTE5S2V5cGFpcihzZWVkPzogQnVmZmVyKTogeyBwcml2S2V5OiBCdWZmZXI7IHB1YktleTogQnVmZmVyIH0ge1xuICBjb25zdCBwcml2S2V5ID0gc2VlZCA/IHNlZWQuc3ViYXJyYXkoMCwgMzIpIDogY3J5cHRvLnJhbmRvbUJ5dGVzKDMyKTtcbiAgY29uc3QgcHViS2V5ID0gQnVmZmVyLmZyb20oeDI1NTE5LmdldFB1YmxpY0tleShwcml2S2V5KSk7XG4gIHJldHVybiB7IHByaXZLZXk6IEJ1ZmZlci5mcm9tKHByaXZLZXkpLCBwdWJLZXkgfTtcbn1cblxuLyoqXG4gKiBQZXItcGFydHkgZGV0ZXJtaW5pc3RpYyBzZWVkIG1hdGVyaWFsLiBUbyB1c2UgdGhlIHNhbWUgc2VlZCBmb3IgYm90aCwgcGFzcyBpdCBhcyBib3RoIGZpZWxkcy5cbiAqIGBlbmNLZXlgIHNlZWRzIHRoZSBYMjU1MTkgZW5jcnlwdGlvbiBrZXk7IGBka2dTZWVkYCBzZWVkcyBES0cgcm91bmQgMC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZERzYURLR1BhcnR5U2VlZCB7XG4gIGVuY0tleT86IEJ1ZmZlcjtcbiAgZGtnU2VlZD86IEJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTZWVkKHNlZWQ/OiBFZERzYURLR1BhcnR5U2VlZCk6IEVkRHNhREtHUGFydHlTZWVkIHtcbiAgYXNzZXJ0KCFzZWVkPy5lbmNLZXkgfHwgc2VlZC5lbmNLZXkubGVuZ3RoID49IDMyLCAnZW5jS2V5IG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMnKTtcbiAgYXNzZXJ0KCFzZWVkPy5ka2dTZWVkIHx8IHNlZWQuZGtnU2VlZC5sZW5ndGggPj0gMzIsICdka2dTZWVkIG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMnKTtcbiAgcmV0dXJuIHNlZWQgPz8ge307XG59XG5cbi8qKiBTZWUgYEVkRHNhREtHUGFydHlTZWVkYC4gTWlycm9ycyBgRGtsc1V0aWxzLmdlbmVyYXRlREtHS2V5U2hhcmVzYCBmb3IgRUNEU0EgREtMUy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKFxuICBzZWVkVXNlcj86IEVkRHNhREtHUGFydHlTZWVkLFxuICBzZWVkQmFja3VwPzogRWREc2FES0dQYXJ0eVNlZWQsXG4gIHNlZWRCaXRnbz86IEVkRHNhREtHUGFydHlTZWVkXG4pOiBQcm9taXNlPFtES0csIERLRywgREtHXT4ge1xuICBjb25zdCB7IGVuY0tleTogdXNlckVuY0tleSwgZGtnU2VlZDogdXNlckRrZ1NlZWQgfSA9IHZhbGlkYXRlU2VlZChzZWVkVXNlcik7XG4gIGNvbnN0IHsgZW5jS2V5OiBiYWNrdXBFbmNLZXksIGRrZ1NlZWQ6IGJhY2t1cERrZ1NlZWQgfSA9IHZhbGlkYXRlU2VlZChzZWVkQmFja3VwKTtcbiAgY29uc3QgeyBlbmNLZXk6IGJpdGdvRW5jS2V5LCBka2dTZWVkOiBiaXRnb0RrZ1NlZWQgfSA9IHZhbGlkYXRlU2VlZChzZWVkQml0Z28pO1xuXG4gIGNvbnN0IHVzZXIgPSBuZXcgREtHKDMsIDIsIDApO1xuICBjb25zdCBiYWNrdXAgPSBuZXcgREtHKDMsIDIsIDEpO1xuICBjb25zdCBiaXRnbyA9IG5ldyBES0coMywgMiwgMik7XG5cbiAgY29uc3QgdXNlcktQID0gZ2VuZXJhdGVYMjU1MTlLZXlwYWlyKHVzZXJFbmNLZXkpO1xuICBjb25zdCBiYWNrdXBLUCA9IGdlbmVyYXRlWDI1NTE5S2V5cGFpcihiYWNrdXBFbmNLZXkpO1xuICBjb25zdCBiaXRnb0tQID0gZ2VuZXJhdGVYMjU1MTlLZXlwYWlyKGJpdGdvRW5jS2V5KTtcblxuICBhd2FpdCB1c2VyLmluaXREa2codXNlcktQLnByaXZLZXksIFtiYWNrdXBLUC5wdWJLZXksIGJpdGdvS1AucHViS2V5XSk7XG4gIGF3YWl0IGJhY2t1cC5pbml0RGtnKGJhY2t1cEtQLnByaXZLZXksIFt1c2VyS1AucHViS2V5LCBiaXRnb0tQLnB1YktleV0pO1xuICBhd2FpdCBiaXRnby5pbml0RGtnKGJpdGdvS1AucHJpdktleSwgW3VzZXJLUC5wdWJLZXksIGJhY2t1cEtQLnB1YktleV0pO1xuXG4gIGNvbnN0IHIxTWVzc2FnZXMgPSBbXG4gICAgdXNlci5nZXRGaXJzdE1lc3NhZ2UodXNlckRrZ1NlZWQpLFxuICAgIGJhY2t1cC5nZXRGaXJzdE1lc3NhZ2UoYmFja3VwRGtnU2VlZCksXG4gICAgYml0Z28uZ2V0Rmlyc3RNZXNzYWdlKGJpdGdvRGtnU2VlZCksXG4gIF07XG5cbiAgY29uc3QgcjJNZXNzYWdlcyA9IFtcbiAgICAuLi51c2VyLmhhbmRsZUluY29taW5nTWVzc2FnZXMocjFNZXNzYWdlcyksXG4gICAgLi4uYmFja3VwLmhhbmRsZUluY29taW5nTWVzc2FnZXMocjFNZXNzYWdlcyksXG4gICAgLi4uYml0Z28uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyMU1lc3NhZ2VzKSxcbiAgXTtcblxuICB1c2VyLmhhbmRsZUluY29taW5nTWVzc2FnZXMocjJNZXNzYWdlcyk7XG4gIGJhY2t1cC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHIyTWVzc2FnZXMpO1xuICBiaXRnby5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHIyTWVzc2FnZXMpO1xuXG4gIHJldHVybiBbdXNlciwgYmFja3VwLCBiaXRnb107XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdHdvIERTRyBwYXJ0aWVzIGFuZCBkcml2ZXMgdGhlbSB0aHJvdWdoIHRoZSBwcm90b2NvbCB1bnRpbCB0aGUgc3BlY2lmaWVkIHJvdW5kLlxuICpcbiAqIEBwYXJhbSByb3VuZCAtIFJvdW5kIHRvIGV4ZWN1dGUgdW50aWwgKDHigJMzKS4gUmV0dXJucyBpbnRlcm1lZGlhdGUgbWVzc2FnZSBhcnJheXMgZm9yIDHigJMyLFxuICogICBvciB0aGUgNjQtYnl0ZSBFZDI1NTE5IHNpZ25hdHVyZSBCdWZmZXIgZm9yIDMuXG4gKiBAcGFyYW0gcGFydHkxRHNnIC0gRmlyc3QgRFNHIHBhcnR5IChgbmV3IERTRyhwYXJ0eUlkeClgKSwgbm90IHlldCBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSBwYXJ0eTJEc2cgLSBTZWNvbmQgRFNHIHBhcnR5IChgbmV3IERTRyhwYXJ0eUlkeClgKSwgbm90IHlldCBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSBrZXlTaGFyZTEgLSBLZXkgc2hhcmUgZm9yIHRoZSBmaXJzdCBwYXJ0eS5cbiAqIEBwYXJhbSBrZXlTaGFyZTIgLSBLZXkgc2hhcmUgZm9yIHRoZSBzZWNvbmQgcGFydHkuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFJhdyBtZXNzYWdlIGJ5dGVzIHRvIHNpZ24uXG4gKiBAcGFyYW0gZGVyaXZhdGlvblBhdGggLSBCSVAtMzItc3R5bGUgZGVyaXZhdGlvbiBwYXRoLCBlLmcuIGBcIm1cImAgb3IgYFwibS8wLzBcImAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlVGlsbFJvdW5kKFxuICByb3VuZDogbnVtYmVyLFxuICBwYXJ0eTFEc2c6IERTRyxcbiAgcGFydHkyRHNnOiBEU0csXG4gIGtleVNoYXJlMTogQnVmZmVyLFxuICBrZXlTaGFyZTI6IEJ1ZmZlcixcbiAgbWVzc2FnZTogQnVmZmVyLFxuICBkZXJpdmF0aW9uUGF0aDogc3RyaW5nXG4pOiBEZXNlcmlhbGl6ZWRNZXNzYWdlc1tdIHwgQnVmZmVyIHtcbiAgaWYgKHJvdW5kIDwgMSB8fCByb3VuZCA+IDMpIHtcbiAgICB0aHJvdyBFcnJvcignSW52YWxpZCByb3VuZCBudW1iZXInKTtcbiAgfVxuICBwYXJ0eTFEc2cuaW5pdERzZyhrZXlTaGFyZTEsIG1lc3NhZ2UsIGRlcml2YXRpb25QYXRoLCBwYXJ0eTJEc2cuZ2V0UGFydHlJZHgoKSk7XG4gIHBhcnR5MkRzZy5pbml0RHNnKGtleVNoYXJlMiwgbWVzc2FnZSwgZGVyaXZhdGlvblBhdGgsIHBhcnR5MURzZy5nZXRQYXJ0eUlkeCgpKTtcbiAgY29uc3QgcGFydHkxUm91bmQwTWVzc2FnZSA9IHBhcnR5MURzZy5nZXRGaXJzdE1lc3NhZ2UoKTtcbiAgY29uc3QgcGFydHkyUm91bmQwTWVzc2FnZSA9IHBhcnR5MkRzZy5nZXRGaXJzdE1lc3NhZ2UoKTtcblxuICBjb25zdCBbcGFydHkyUm91bmQxTWVzc2FnZXNdID0gcGFydHkyRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3BhcnR5MVJvdW5kME1lc3NhZ2UsIHBhcnR5MlJvdW5kME1lc3NhZ2VdKTtcbiAgY29uc3QgW3BhcnR5MVJvdW5kMU1lc3NhZ2VzXSA9IHBhcnR5MURzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDBNZXNzYWdlLCBwYXJ0eTJSb3VuZDBNZXNzYWdlXSk7XG4gIGlmIChyb3VuZCA9PT0gMSkgcmV0dXJuIFtbcGFydHkxUm91bmQxTWVzc2FnZXNdLCBbcGFydHkyUm91bmQxTWVzc2FnZXNdXTtcblxuICBjb25zdCBbcGFydHkxUm91bmQyTWVzc2FnZXNdID0gcGFydHkxRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3BhcnR5MVJvdW5kMU1lc3NhZ2VzLCBwYXJ0eTJSb3VuZDFNZXNzYWdlc10pO1xuICBjb25zdCBbcGFydHkyUm91bmQyTWVzc2FnZXNdID0gcGFydHkyRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3BhcnR5MVJvdW5kMU1lc3NhZ2VzLCBwYXJ0eTJSb3VuZDFNZXNzYWdlc10pO1xuICBpZiAocm91bmQgPT09IDIpIHJldHVybiBbW3BhcnR5MVJvdW5kMk1lc3NhZ2VzXSwgW3BhcnR5MlJvdW5kMk1lc3NhZ2VzXV07XG5cbiAgcGFydHkxRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3BhcnR5MVJvdW5kMk1lc3NhZ2VzLCBwYXJ0eTJSb3VuZDJNZXNzYWdlc10pO1xuICBwYXJ0eTJEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbcGFydHkxUm91bmQyTWVzc2FnZXMsIHBhcnR5MlJvdW5kMk1lc3NhZ2VzXSk7XG5cbiAgYXNzZXJ0KHBhcnR5MURzZy5nZXRTaWduYXR1cmUoKS50b1N0cmluZygnaGV4JykgPT09IHBhcnR5MkRzZy5nZXRTaWduYXR1cmUoKS50b1N0cmluZygnaGV4JykpO1xuICByZXR1cm4gcGFydHkxRHNnLmdldFNpZ25hdHVyZSgpO1xufVxuIl19
|
package/dist/src/tss/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tss/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tss/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
|
package/dist/src/tss/index.js
CHANGED
|
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./ecdsa"), exports);
|
|
18
18
|
__exportStar(require("./ecdsa-dkls"), exports);
|
|
19
19
|
__exportStar(require("./eddsa-mps"), exports);
|
|
20
|
-
|
|
20
|
+
__exportStar(require("./schnorr-dkls"), exports);
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBd0I7QUFDeEIsK0NBQTZCO0FBQzdCLDhDQUE0QjtBQUM1QixpREFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2VjZHNhJztcbmV4cG9ydCAqIGZyb20gJy4vZWNkc2EtZGtscyc7XG5leHBvcnQgKiBmcm9tICcuL2VkZHNhLW1wcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaG5vcnItZGtscyc7XG4iXX0=
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-party BIP-340 Schnorr threshold signing (SchnorrDsg).
|
|
3
|
+
*
|
|
4
|
+
* Works with the Shamir keyshares produced by `DklsDkg` (DKLS23 key generation).
|
|
5
|
+
* No new WASM is required: key material is read directly from the CBOR-encoded
|
|
6
|
+
* keyshare, Lagrange interpolation is computed in TypeScript, and BIP-340 Schnorr
|
|
7
|
+
* algebra is performed with `@noble/curves/secp256k1`.
|
|
8
|
+
*
|
|
9
|
+
* Protocol (2 broadcast rounds):
|
|
10
|
+
*
|
|
11
|
+
* Round 1 init()
|
|
12
|
+
* • Each party generates a random nonce scalar k_i.
|
|
13
|
+
* • Broadcasts the nonce point R_i = k_i * G (33-byte compressed).
|
|
14
|
+
*
|
|
15
|
+
* Round 2 handleIncomingMessages([R_j])
|
|
16
|
+
* • Compute combined nonce R = R_i + R_j.
|
|
17
|
+
* • If R.y is odd, negate k_i (BIP-340 requires even-y R).
|
|
18
|
+
* • Compute BIP-340 challenge e = H("BIP0340/challenge", R.x ‖ P.x ‖ msg).
|
|
19
|
+
* • Compute partial signature s_i = k_i + e · λ_i · priv_i (mod n).
|
|
20
|
+
* • Broadcasts s_i as 32-byte big-endian scalar.
|
|
21
|
+
*
|
|
22
|
+
* Combine handleIncomingMessages([s_j])
|
|
23
|
+
* • s = s_i + s_j mod n.
|
|
24
|
+
* • signature = Buffer.concat([R.x_32, s_32]) — 64-byte BIP-340 Schnorr.
|
|
25
|
+
*
|
|
26
|
+
* BIP-32 non-hardened derivation is supported. For path `m/a/b/...`, the total
|
|
27
|
+
* IL scalar (sum of per-level HMAC-SHA512 left halves) is computed from the
|
|
28
|
+
* shared public key / chaincode. The party with the smallest index in
|
|
29
|
+
* `signingPartyIndices` absorbs the entire IL adjustment so that Lagrange
|
|
30
|
+
* interpolation still reconstructs the correct child private key.
|
|
31
|
+
*
|
|
32
|
+
* References:
|
|
33
|
+
* BIP-340 https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki
|
|
34
|
+
* FROST https://eprint.iacr.org/2020/852
|
|
35
|
+
*/
|
|
36
|
+
import { DeserializedBroadcastMessage, DeserializedMessages } from '../ecdsa-dkls/types';
|
|
37
|
+
/** 64-byte BIP-340 Schnorr signature `(R.x_32 ‖ s_32)`. */
|
|
38
|
+
export type SchnorrDklsSignature = {
|
|
39
|
+
/** 32-byte x-coordinate of the nonce point R. */
|
|
40
|
+
R: Uint8Array;
|
|
41
|
+
/** 32-byte Schnorr scalar s. */
|
|
42
|
+
S: Uint8Array;
|
|
43
|
+
};
|
|
44
|
+
export declare enum SchnorrDsgState {
|
|
45
|
+
Uninitialized = 0,
|
|
46
|
+
Round1 = 1,// waiting to receive the other party's nonce point R_j
|
|
47
|
+
Round2 = 2,// waiting to receive the other party's partial scalar s_j
|
|
48
|
+
Complete = 3
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Two-party BIP-340 Schnorr threshold signing session.
|
|
52
|
+
*
|
|
53
|
+
* Compatible with keyshares produced by `DklsDkg.Dkg` (DKLS23 key generation).
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* // Party 0 (HSM / BitGo) and party 1 (user), 2-of-2 DKG keyshares.
|
|
58
|
+
* const party0 = new SchnorrDsg(ks0, 0, [0, 1], 'm/0', hash32);
|
|
59
|
+
* const party1 = new SchnorrDsg(ks1, 1, [0, 1], 'm/0', hash32);
|
|
60
|
+
*
|
|
61
|
+
* const r0 = await party0.init(); // Round 1
|
|
62
|
+
* const r1 = await party1.init();
|
|
63
|
+
*
|
|
64
|
+
* const s0 = party0.handleIncomingMessages({ broadcastMessages: [r1], p2pMessages: [] }); // Round 2
|
|
65
|
+
* const s1 = party1.handleIncomingMessages({ broadcastMessages: [r0], p2pMessages: [] });
|
|
66
|
+
*
|
|
67
|
+
* party0.handleIncomingMessages({ broadcastMessages: s1.broadcastMessages, p2pMessages: [] }); // Combine
|
|
68
|
+
* // party0.signature ← 64-byte BIP-340 Schnorr sig
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export declare class SchnorrDsg {
|
|
72
|
+
private readonly partyIdx;
|
|
73
|
+
private readonly signingPartyIndices;
|
|
74
|
+
private readonly messageHash;
|
|
75
|
+
private readonly derivationPath;
|
|
76
|
+
private state;
|
|
77
|
+
private _signature;
|
|
78
|
+
private readonly effectivePriv;
|
|
79
|
+
private readonly pubKeyX;
|
|
80
|
+
private ki;
|
|
81
|
+
private Ri;
|
|
82
|
+
private R_combined;
|
|
83
|
+
private si;
|
|
84
|
+
/**
|
|
85
|
+
* @param keyShare CBOR-encoded DKLS keyshare (full or reduced format).
|
|
86
|
+
* @param partyIdx This party's index in the DKG (0-based, must be in `signingPartyIndices`).
|
|
87
|
+
* @param signingPartyIndices Indices of ALL parties participating in this signing session.
|
|
88
|
+
* Must contain `partyIdx`. The Lagrange coefficients are computed
|
|
89
|
+
* for this subset.
|
|
90
|
+
* @param derivationPath BIP-32 non-hardened path (e.g. `'m/0'`). Defaults to root `'m'`.
|
|
91
|
+
* @param messageHash 32-byte message hash to sign.
|
|
92
|
+
*/
|
|
93
|
+
constructor(keyShare: Buffer, partyIdx: number, signingPartyIndices: number[], derivationPath: string, messageHash: Buffer);
|
|
94
|
+
/** The combined 64-byte BIP-340 Schnorr signature `(R.x_32 ‖ s_32)`. Available after `Complete`. */
|
|
95
|
+
get signature(): SchnorrDklsSignature;
|
|
96
|
+
get dsgState(): SchnorrDsgState;
|
|
97
|
+
/**
|
|
98
|
+
* Round 1: generate a fresh ephemeral nonce and broadcast the nonce point R_i.
|
|
99
|
+
* @returns Broadcast message containing the 33-byte compressed nonce point.
|
|
100
|
+
*/
|
|
101
|
+
init(): Promise<DeserializedBroadcastMessage>;
|
|
102
|
+
/**
|
|
103
|
+
* Process incoming messages for the current round:
|
|
104
|
+
*
|
|
105
|
+
* - Round 1 → receives nonce point `R_j` → returns partial scalar `s_i`.
|
|
106
|
+
* - Round 2 → receives partial scalar `s_j` → produces final signature.
|
|
107
|
+
*/
|
|
108
|
+
handleIncomingMessages(messages: DeserializedMessages): DeserializedMessages;
|
|
109
|
+
/**
|
|
110
|
+
* Round 1: receive R_j, compute combined R, apply BIP-340 parity, compute s_i.
|
|
111
|
+
*/
|
|
112
|
+
private _handleRound1;
|
|
113
|
+
/**
|
|
114
|
+
* Round 2 (combine): receive s_j, produce the final BIP-340 Schnorr signature.
|
|
115
|
+
*/
|
|
116
|
+
private _handleRound2;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=dsg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsg.d.ts","sourceRoot":"","sources":["../../../../src/tss/schnorr-dkls/dsg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAKH,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AA+IzF,2DAA2D;AAC3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,iDAAiD;IACjD,CAAC,EAAE,UAAU,CAAC;IACd,gCAAgC;IAChC,CAAC,EAAE,UAAU,CAAC;CACf,CAAC;AAEF,oBAAY,eAAe;IACzB,aAAa,IAAI;IACjB,MAAM,IAAA,CAAE,uDAAuD;IAC/D,MAAM,IAAA,CAAE,0DAA0D;IAClE,QAAQ,IAAA;CACT;AAID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAW;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,KAAK,CAAkD;IAC/D,OAAO,CAAC,UAAU,CAAmC;IAGrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAGjC,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,EAAE,CAAmE;IAG7E,OAAO,CAAC,UAAU,CAAmE;IACrF,OAAO,CAAC,EAAE,CAAa;IAEvB;;;;;;;;OAQG;gBAED,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,mBAAmB,EAAE,MAAM,EAAE,EAC7B,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM;IA8ErB,oGAAoG;IACpG,IAAI,SAAS,IAAI,oBAAoB,CAKpC;IAED,IAAI,QAAQ,IAAI,eAAe,CAE9B;IAED;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,4BAA4B,CAAC;IAqBnD;;;;;OAKG;IACH,sBAAsB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,oBAAoB;IAY5E;;OAEG;IACH,OAAO,CAAC,aAAa;IAuCrB;;OAEG;IACH,OAAO,CAAC,aAAa;CAiBtB"}
|