@bitgo-beta/sdk-lib-mpc 8.2.1-alpha.461 → 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.
@@ -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==
@@ -3,4 +3,5 @@ export * as EddsaMPSDsg from './dsg';
3
3
  export * as MPSUtil from './util';
4
4
  export * as MPSTypes from './types';
5
5
  export * as MPSComms from './commsLayer';
6
+ export { deriveUnhardenedMps } from './derive';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VkZHNhLW1wcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFBcUM7QUFDckMscURBQXFDO0FBQ3JDLGtEQUFrQztBQUNsQyxvREFBb0M7QUFDcEMseURBQXlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogYXMgRWRkc2FNUFNEa2cgZnJvbSAnLi9ka2cnO1xuZXhwb3J0ICogYXMgRWRkc2FNUFNEc2cgZnJvbSAnLi9kc2cnO1xuZXhwb3J0ICogYXMgTVBTVXRpbCBmcm9tICcuL3V0aWwnO1xuZXhwb3J0ICogYXMgTVBTVHlwZXMgZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBhcyBNUFNDb21tcyBmcm9tICcuL2NvbW1zTGF5ZXInO1xuIl19
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,5 @@
1
1
  export * from './ecdsa';
2
2
  export * from './ecdsa-dkls';
3
3
  export * from './eddsa-mps';
4
+ export * from './schnorr-dkls';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBd0I7QUFDeEIsK0NBQTZCO0FBQzdCLDhDQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZWNkc2EnO1xuZXhwb3J0ICogZnJvbSAnLi9lY2RzYS1ka2xzJztcbmV4cG9ydCAqIGZyb20gJy4vZWRkc2EtbXBzJztcbiJdfQ==
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"}