@bitgo-beta/sdk-lib-mpc 8.2.0-beta.207 → 8.2.0-beta.2071

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.
Files changed (141) hide show
  1. package/dist/src/curves/ed25519.d.ts +0 -1
  2. package/dist/src/curves/ed25519.d.ts.map +1 -1
  3. package/dist/src/curves/ed25519.js +12 -12
  4. package/dist/src/curves/ed25519Bip32HdTree.js +14 -14
  5. package/dist/src/curves/index.js +6 -2
  6. package/dist/src/curves/secp256k1.d.ts +0 -1
  7. package/dist/src/curves/secp256k1.d.ts.map +1 -1
  8. package/dist/src/curves/secp256k1.js +22 -38
  9. package/dist/src/curves/secp256k1Bip32HdTree.js +10 -10
  10. package/dist/src/curves/types.d.ts +2 -3
  11. package/dist/src/curves/types.d.ts.map +1 -1
  12. package/dist/src/curves/util.d.ts +2 -0
  13. package/dist/src/curves/util.d.ts.map +1 -1
  14. package/dist/src/curves/util.js +34 -3
  15. package/dist/src/hashCommitment.d.ts +0 -1
  16. package/dist/src/hashCommitment.d.ts.map +1 -1
  17. package/dist/src/hashCommitment.js +7 -8
  18. package/dist/src/index.d.ts +1 -1
  19. package/dist/src/index.d.ts.map +1 -1
  20. package/dist/src/index.js +24 -10
  21. package/dist/src/openssl/index.js +6 -2
  22. package/dist/src/openssl/openssl.d.ts +1 -2
  23. package/dist/src/openssl/openssl.d.ts.map +1 -1
  24. package/dist/src/openssl/openssl.js +4 -12
  25. package/dist/src/safePrime.d.ts +3 -0
  26. package/dist/src/safePrime.d.ts.map +1 -0
  27. package/dist/src/safePrime.js +19 -0
  28. package/dist/src/schnorrProof.d.ts +0 -1
  29. package/dist/src/schnorrProof.d.ts.map +1 -1
  30. package/dist/src/schnorrProof.js +8 -9
  31. package/dist/src/shamir/index.js +6 -2
  32. package/dist/src/shamir/shamir.js +2 -2
  33. package/dist/src/shamir/types.d.ts +1 -1
  34. package/dist/src/shamir/types.d.ts.map +1 -1
  35. package/dist/src/tss/dkls-vrf/dkg.d.ts +91 -0
  36. package/dist/src/tss/dkls-vrf/dkg.d.ts.map +1 -0
  37. package/dist/src/tss/dkls-vrf/dkg.js +278 -0
  38. package/dist/src/tss/dkls-vrf/index.d.ts +4 -0
  39. package/dist/src/tss/dkls-vrf/index.d.ts.map +1 -0
  40. package/dist/src/tss/dkls-vrf/index.js +40 -0
  41. package/dist/src/tss/dkls-vrf/types.d.ts +28 -0
  42. package/dist/src/tss/dkls-vrf/types.d.ts.map +1 -0
  43. package/dist/src/tss/dkls-vrf/types.js +23 -0
  44. package/dist/src/tss/dkls-vrf/util.d.ts +29 -0
  45. package/dist/src/tss/dkls-vrf/util.d.ts.map +1 -0
  46. package/dist/src/tss/dkls-vrf/util.js +113 -0
  47. package/dist/src/tss/ecdsa/index.js +23 -9
  48. package/dist/src/tss/ecdsa/paillierproof.js +10 -10
  49. package/dist/src/tss/ecdsa/rangeproof.d.ts +1 -2
  50. package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -1
  51. package/dist/src/tss/ecdsa/rangeproof.js +108 -118
  52. package/dist/src/tss/ecdsa/types.d.ts +28 -17
  53. package/dist/src/tss/ecdsa/types.d.ts.map +1 -1
  54. package/dist/src/tss/ecdsa/types.js +29 -31
  55. package/dist/src/tss/ecdsa/zkVProof.d.ts +0 -1
  56. package/dist/src/tss/ecdsa/zkVProof.d.ts.map +1 -1
  57. package/dist/src/tss/ecdsa/zkVProof.js +9 -10
  58. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts +69 -0
  59. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts.map +1 -0
  60. package/dist/src/tss/ecdsa-dkls/commsLayer.js +268 -0
  61. package/dist/src/tss/ecdsa-dkls/derive.d.ts +111 -0
  62. package/dist/src/tss/ecdsa-dkls/derive.d.ts.map +1 -0
  63. package/dist/src/tss/ecdsa-dkls/derive.js +329 -0
  64. package/dist/src/tss/ecdsa-dkls/dkg.d.ts +64 -0
  65. package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +1 -0
  66. package/dist/src/tss/ecdsa-dkls/dkg.js +334 -0
  67. package/dist/src/tss/ecdsa-dkls/dsg.d.ts +47 -0
  68. package/dist/src/tss/ecdsa-dkls/dsg.d.ts.map +1 -0
  69. package/dist/src/tss/ecdsa-dkls/dsg.js +271 -0
  70. package/dist/src/tss/ecdsa-dkls/index.d.ts +7 -0
  71. package/dist/src/tss/ecdsa-dkls/index.d.ts.map +1 -0
  72. package/dist/src/tss/ecdsa-dkls/index.js +43 -0
  73. package/dist/src/tss/ecdsa-dkls/types.d.ts +128 -0
  74. package/dist/src/tss/ecdsa-dkls/types.d.ts.map +1 -0
  75. package/dist/src/tss/ecdsa-dkls/types.js +175 -0
  76. package/dist/src/tss/ecdsa-dkls/util.d.ts +26 -0
  77. package/dist/src/tss/ecdsa-dkls/util.d.ts.map +1 -0
  78. package/dist/src/tss/ecdsa-dkls/util.js +276 -0
  79. package/dist/src/tss/eddsa-mps/commsLayer.d.ts +30 -0
  80. package/dist/src/tss/eddsa-mps/commsLayer.d.ts.map +1 -0
  81. package/dist/src/tss/eddsa-mps/commsLayer.js +96 -0
  82. package/dist/src/tss/eddsa-mps/dkg.d.ts +109 -0
  83. package/dist/src/tss/eddsa-mps/dkg.d.ts.map +1 -0
  84. package/dist/src/tss/eddsa-mps/dkg.js +303 -0
  85. package/dist/src/tss/eddsa-mps/dsg.d.ts +96 -0
  86. package/dist/src/tss/eddsa-mps/dsg.d.ts.map +1 -0
  87. package/dist/src/tss/eddsa-mps/dsg.js +346 -0
  88. package/dist/src/tss/eddsa-mps/index.d.ts +7 -0
  89. package/dist/src/tss/eddsa-mps/index.d.ts.map +1 -0
  90. package/dist/src/tss/eddsa-mps/index.js +42 -0
  91. package/dist/src/tss/eddsa-mps/types.d.ts +76 -0
  92. package/dist/src/tss/eddsa-mps/types.d.ts.map +1 -0
  93. package/dist/src/tss/eddsa-mps/types.js +105 -0
  94. package/dist/src/tss/eddsa-mps/util.d.ts +33 -0
  95. package/dist/src/tss/eddsa-mps/util.d.ts.map +1 -0
  96. package/dist/src/tss/eddsa-mps/util.js +94 -0
  97. package/dist/src/tss/eddsa-mps-vrf/dkg.d.ts +65 -0
  98. package/dist/src/tss/eddsa-mps-vrf/dkg.d.ts.map +1 -0
  99. package/dist/src/tss/eddsa-mps-vrf/dkg.js +246 -0
  100. package/dist/src/tss/eddsa-mps-vrf/index.d.ts +4 -0
  101. package/dist/src/tss/eddsa-mps-vrf/index.d.ts.map +1 -0
  102. package/dist/src/tss/eddsa-mps-vrf/index.js +40 -0
  103. package/dist/src/tss/eddsa-mps-vrf/types.d.ts +31 -0
  104. package/dist/src/tss/eddsa-mps-vrf/types.d.ts.map +1 -0
  105. package/dist/src/tss/eddsa-mps-vrf/types.js +97 -0
  106. package/dist/src/tss/eddsa-mps-vrf/util.d.ts +9 -0
  107. package/dist/src/tss/eddsa-mps-vrf/util.d.ts.map +1 -0
  108. package/dist/src/tss/eddsa-mps-vrf/util.js +36 -0
  109. package/dist/src/tss/index.d.ts +5 -0
  110. package/dist/src/tss/index.d.ts.map +1 -1
  111. package/dist/src/tss/index.js +11 -2
  112. package/dist/src/tss/redpallas-mps/commsLayer.d.ts +34 -0
  113. package/dist/src/tss/redpallas-mps/commsLayer.d.ts.map +1 -0
  114. package/dist/src/tss/redpallas-mps/commsLayer.js +100 -0
  115. package/dist/src/tss/redpallas-mps/dkg.d.ts +103 -0
  116. package/dist/src/tss/redpallas-mps/dkg.d.ts.map +1 -0
  117. package/dist/src/tss/redpallas-mps/dkg.js +285 -0
  118. package/dist/src/tss/redpallas-mps/dsg.d.ts +108 -0
  119. package/dist/src/tss/redpallas-mps/dsg.d.ts.map +1 -0
  120. package/dist/src/tss/redpallas-mps/dsg.js +355 -0
  121. package/dist/src/tss/redpallas-mps/index.d.ts +7 -0
  122. package/dist/src/tss/redpallas-mps/index.d.ts.map +1 -0
  123. package/dist/src/tss/redpallas-mps/index.js +42 -0
  124. package/dist/src/tss/redpallas-mps/types.d.ts +85 -0
  125. package/dist/src/tss/redpallas-mps/types.d.ts.map +1 -0
  126. package/dist/src/tss/redpallas-mps/types.js +112 -0
  127. package/dist/src/tss/redpallas-mps/util.d.ts +43 -0
  128. package/dist/src/tss/redpallas-mps/util.d.ts.map +1 -0
  129. package/dist/src/tss/redpallas-mps/util.js +147 -0
  130. package/dist/src/types.d.ts +0 -1
  131. package/dist/src/types.d.ts.map +1 -1
  132. package/dist/src/util.d.ts +0 -1
  133. package/dist/src/util.d.ts.map +1 -1
  134. package/dist/src/util.js +21 -22
  135. package/dist/tsconfig.tsbuildinfo +1 -1
  136. package/package.json +42 -5
  137. package/.eslintignore +0 -5
  138. package/CHANGELOG.md +0 -340
  139. package/dist/src/openssl/opensslbytes.d.ts +0 -4
  140. package/dist/src/openssl/opensslbytes.d.ts.map +0 -1
  141. package/dist/src/openssl/opensslbytes.js +0 -20
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MpsVrfUtils = exports.MpsVrfTypes = exports.MpsVrf = void 0;
37
+ exports.MpsVrf = __importStar(require("./dkg"));
38
+ exports.MpsVrfTypes = __importStar(require("./types"));
39
+ exports.MpsVrfUtils = __importStar(require("./util"));
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VkZHNhLW1wcy12cmYvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWdDO0FBQ2hDLHVEQUF1QztBQUN2QyxzREFBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBNcHNWcmYgZnJvbSAnLi9ka2cnO1xuZXhwb3J0ICogYXMgTXBzVnJmVHlwZXMgZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBhcyBNcHNWcmZVdGlscyBmcm9tICcuL3V0aWwnO1xuIl19
@@ -0,0 +1,31 @@
1
+ import { Buffer } from 'buffer';
2
+ /**
3
+ * States of the VRF DKG state machine. Kept separate from `eddsa-mps`'s signing
4
+ * `DkgState` because the round counts differ. MPS wasm state bytes have no round
5
+ * tag, so the round is tracked here and carried in `VrfDkgSessionData`.
6
+ */
7
+ export declare enum VrfDkgState {
8
+ Uninitialized = 0,
9
+ /** Commitment created and broadcast; waiting for the other parties' VrfKeygenMsg1. */
10
+ Round1 = 1,
11
+ /** Openings created; waiting for the VrfKeygenMsg2 entries addressed to this party. */
12
+ Round2 = 2,
13
+ Complete = 3,
14
+ InvalidState = 4
15
+ }
16
+ export interface VrfDkgSessionData {
17
+ /**
18
+ * Serialized wasm round state. Secret key material — it carries this party's
19
+ * secret VRF share. Never log it or persist it in the clear.
20
+ */
21
+ vrfStateBytes?: Uint8Array;
22
+ vrfState: VrfDkgState;
23
+ keyShareBuff?: Buffer;
24
+ }
25
+ /** Decode a wasm round-1 map key as a party index. */
26
+ export declare function decodePartyId(recipient: string): number;
27
+ /** Decode the wasm round-1 recipient → bytes map. */
28
+ export declare function decodeVrfRound1MsgMap(msg: unknown): Record<string, Uint8Array>;
29
+ /** Decode persisted VRF DKG session data. */
30
+ export declare function decodeVrfDkgSessionData(sessionData: unknown): VrfDkgSessionData;
31
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tss/eddsa-mps-vrf/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC;;;;GAIG;AACH,oBAAY,WAAW;IACrB,aAAa,IAAI;IACjB,sFAAsF;IACtF,MAAM,IAAA;IACN,uFAAuF;IACvF,MAAM,IAAA;IACN,QAAQ,IAAA;IACR,YAAY,IAAA;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAgCD,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED,qDAAqD;AACrD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAM9E;AAED,6CAA6C;AAC7C,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,OAAO,GAAG,iBAAiB,CAM/E"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.VrfDkgState = void 0;
37
+ exports.decodePartyId = decodePartyId;
38
+ exports.decodeVrfRound1MsgMap = decodeVrfRound1MsgMap;
39
+ exports.decodeVrfDkgSessionData = decodeVrfDkgSessionData;
40
+ const buffer_1 = require("buffer");
41
+ const Either_1 = require("fp-ts/Either");
42
+ const t = __importStar(require("io-ts"));
43
+ /**
44
+ * States of the VRF DKG state machine. Kept separate from `eddsa-mps`'s signing
45
+ * `DkgState` because the round counts differ. MPS wasm state bytes have no round
46
+ * tag, so the round is tracked here and carried in `VrfDkgSessionData`.
47
+ */
48
+ var VrfDkgState;
49
+ (function (VrfDkgState) {
50
+ VrfDkgState[VrfDkgState["Uninitialized"] = 0] = "Uninitialized";
51
+ /** Commitment created and broadcast; waiting for the other parties' VrfKeygenMsg1. */
52
+ VrfDkgState[VrfDkgState["Round1"] = 1] = "Round1";
53
+ /** Openings created; waiting for the VrfKeygenMsg2 entries addressed to this party. */
54
+ VrfDkgState[VrfDkgState["Round2"] = 2] = "Round2";
55
+ VrfDkgState[VrfDkgState["Complete"] = 3] = "Complete";
56
+ VrfDkgState[VrfDkgState["InvalidState"] = 4] = "InvalidState";
57
+ })(VrfDkgState || (exports.VrfDkgState = VrfDkgState = {}));
58
+ const Uint8ArrayCodec = new t.Type('Uint8Array', (u) => u instanceof Uint8Array, (u, c) => (u instanceof Uint8Array ? t.success(u) : t.failure(u, c)), t.identity);
59
+ const BufferCodec = new t.Type('Buffer', (u) => buffer_1.Buffer.isBuffer(u), (u, c) => (buffer_1.Buffer.isBuffer(u) ? t.success(u) : t.failure(u, c)), t.identity);
60
+ const VrfDkgRound1MsgMap = t.record(t.string, Uint8ArrayCodec);
61
+ const RestorableVrfDkgState = t.union([
62
+ t.literal(VrfDkgState.Round1),
63
+ t.literal(VrfDkgState.Round2),
64
+ t.literal(VrfDkgState.Complete),
65
+ ]);
66
+ const VrfDkgSessionDataCodec = t.intersection([
67
+ t.type({ vrfState: RestorableVrfDkgState }),
68
+ t.partial({
69
+ vrfStateBytes: Uint8ArrayCodec,
70
+ keyShareBuff: BufferCodec,
71
+ }),
72
+ ]);
73
+ /** Decode a wasm round-1 map key as a party index. */
74
+ function decodePartyId(recipient) {
75
+ const to = Number.parseInt(recipient, 10);
76
+ if (!Number.isInteger(to) || to < 0 || String(to) !== recipient) {
77
+ throw new Error(`VRF DKG round-1 recipient is not a party id: ${recipient}`);
78
+ }
79
+ return to;
80
+ }
81
+ /** Decode the wasm round-1 recipient → bytes map. */
82
+ function decodeVrfRound1MsgMap(msg) {
83
+ const decoded = VrfDkgRound1MsgMap.decode(msg);
84
+ if ((0, Either_1.isLeft)(decoded)) {
85
+ throw new Error('VRF DKG round-1 message is not a party-id map of byte arrays');
86
+ }
87
+ return decoded.right;
88
+ }
89
+ /** Decode persisted VRF DKG session data. */
90
+ function decodeVrfDkgSessionData(sessionData) {
91
+ const decoded = VrfDkgSessionDataCodec.decode(sessionData);
92
+ if ((0, Either_1.isLeft)(decoded)) {
93
+ throw new Error('Invalid VRF DKG session data');
94
+ }
95
+ return decoded.right;
96
+ }
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VkZHNhLW1wcy12cmYvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNERBLHNDQU1DO0FBR0Qsc0RBTUM7QUFHRCwwREFNQztBQXBGRCxtQ0FBZ0M7QUFDaEMseUNBQXNDO0FBQ3RDLHlDQUEyQjtBQUUzQjs7OztHQUlHO0FBQ0gsSUFBWSxXQVFYO0FBUkQsV0FBWSxXQUFXO0lBQ3JCLCtEQUFpQixDQUFBO0lBQ2pCLHNGQUFzRjtJQUN0RixpREFBTSxDQUFBO0lBQ04sdUZBQXVGO0lBQ3ZGLGlEQUFNLENBQUE7SUFDTixxREFBUSxDQUFBO0lBQ1IsNkRBQVksQ0FBQTtBQUNkLENBQUMsRUFSVyxXQUFXLDJCQUFYLFdBQVcsUUFRdEI7QUFZRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ2hDLFlBQVksRUFDWixDQUFDLENBQUMsRUFBbUIsRUFBRSxDQUFDLENBQUMsWUFBWSxVQUFVLEVBQy9DLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNwRSxDQUFDLENBQUMsUUFBUSxDQUNYLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQzVCLFFBQVEsRUFDUixDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsZUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFDdEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGVBQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQy9ELENBQUMsQ0FBQyxRQUFRLENBQ1gsQ0FBQztBQUVGLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBRS9ELE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNwQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDN0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztDQUNoQyxDQUFDLENBQUM7QUFFSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDNUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO0lBQzNDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDUixhQUFhLEVBQUUsZUFBZTtRQUM5QixZQUFZLEVBQUUsV0FBVztLQUMxQixDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBRUgsc0RBQXNEO0FBQ3RELFNBQWdCLGFBQWEsQ0FBQyxTQUFpQjtJQUM3QyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNoRSxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxxREFBcUQ7QUFDckQsU0FBZ0IscUJBQXFCLENBQUMsR0FBWTtJQUNoRCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsSUFBSSxJQUFBLGVBQU0sRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztJQUNsRixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3ZCLENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsU0FBZ0IsdUJBQXVCLENBQUMsV0FBb0I7SUFDMUQsTUFBTSxPQUFPLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNELElBQUksSUFBQSxlQUFNLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IGlzTGVmdCB9IGZyb20gJ2ZwLXRzL0VpdGhlcic7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcblxuLyoqXG4gKiBTdGF0ZXMgb2YgdGhlIFZSRiBES0cgc3RhdGUgbWFjaGluZS4gS2VwdCBzZXBhcmF0ZSBmcm9tIGBlZGRzYS1tcHNgJ3Mgc2lnbmluZ1xuICogYERrZ1N0YXRlYCBiZWNhdXNlIHRoZSByb3VuZCBjb3VudHMgZGlmZmVyLiBNUFMgd2FzbSBzdGF0ZSBieXRlcyBoYXZlIG5vIHJvdW5kXG4gKiB0YWcsIHNvIHRoZSByb3VuZCBpcyB0cmFja2VkIGhlcmUgYW5kIGNhcnJpZWQgaW4gYFZyZkRrZ1Nlc3Npb25EYXRhYC5cbiAqL1xuZXhwb3J0IGVudW0gVnJmRGtnU3RhdGUge1xuICBVbmluaXRpYWxpemVkID0gMCxcbiAgLyoqIENvbW1pdG1lbnQgY3JlYXRlZCBhbmQgYnJvYWRjYXN0OyB3YWl0aW5nIGZvciB0aGUgb3RoZXIgcGFydGllcycgVnJmS2V5Z2VuTXNnMS4gKi9cbiAgUm91bmQxLFxuICAvKiogT3BlbmluZ3MgY3JlYXRlZDsgd2FpdGluZyBmb3IgdGhlIFZyZktleWdlbk1zZzIgZW50cmllcyBhZGRyZXNzZWQgdG8gdGhpcyBwYXJ0eS4gKi9cbiAgUm91bmQyLFxuICBDb21wbGV0ZSxcbiAgSW52YWxpZFN0YXRlLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZyZkRrZ1Nlc3Npb25EYXRhIHtcbiAgLyoqXG4gICAqIFNlcmlhbGl6ZWQgd2FzbSByb3VuZCBzdGF0ZS4gU2VjcmV0IGtleSBtYXRlcmlhbCDigJQgaXQgY2FycmllcyB0aGlzIHBhcnR5J3NcbiAgICogc2VjcmV0IFZSRiBzaGFyZS4gTmV2ZXIgbG9nIGl0IG9yIHBlcnNpc3QgaXQgaW4gdGhlIGNsZWFyLlxuICAgKi9cbiAgdnJmU3RhdGVCeXRlcz86IFVpbnQ4QXJyYXk7XG4gIHZyZlN0YXRlOiBWcmZEa2dTdGF0ZTtcbiAga2V5U2hhcmVCdWZmPzogQnVmZmVyO1xufVxuXG5jb25zdCBVaW50OEFycmF5Q29kZWMgPSBuZXcgdC5UeXBlPFVpbnQ4QXJyYXksIFVpbnQ4QXJyYXksIHVua25vd24+KFxuICAnVWludDhBcnJheScsXG4gICh1KTogdSBpcyBVaW50OEFycmF5ID0+IHUgaW5zdGFuY2VvZiBVaW50OEFycmF5LFxuICAodSwgYykgPT4gKHUgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gdC5zdWNjZXNzKHUpIDogdC5mYWlsdXJlKHUsIGMpKSxcbiAgdC5pZGVudGl0eVxuKTtcblxuY29uc3QgQnVmZmVyQ29kZWMgPSBuZXcgdC5UeXBlPEJ1ZmZlciwgQnVmZmVyLCB1bmtub3duPihcbiAgJ0J1ZmZlcicsXG4gICh1KTogdSBpcyBCdWZmZXIgPT4gQnVmZmVyLmlzQnVmZmVyKHUpLFxuICAodSwgYykgPT4gKEJ1ZmZlci5pc0J1ZmZlcih1KSA/IHQuc3VjY2Vzcyh1KSA6IHQuZmFpbHVyZSh1LCBjKSksXG4gIHQuaWRlbnRpdHlcbik7XG5cbmNvbnN0IFZyZkRrZ1JvdW5kMU1zZ01hcCA9IHQucmVjb3JkKHQuc3RyaW5nLCBVaW50OEFycmF5Q29kZWMpO1xuXG5jb25zdCBSZXN0b3JhYmxlVnJmRGtnU3RhdGUgPSB0LnVuaW9uKFtcbiAgdC5saXRlcmFsKFZyZkRrZ1N0YXRlLlJvdW5kMSksXG4gIHQubGl0ZXJhbChWcmZEa2dTdGF0ZS5Sb3VuZDIpLFxuICB0LmxpdGVyYWwoVnJmRGtnU3RhdGUuQ29tcGxldGUpLFxuXSk7XG5cbmNvbnN0IFZyZkRrZ1Nlc3Npb25EYXRhQ29kZWMgPSB0LmludGVyc2VjdGlvbihbXG4gIHQudHlwZSh7IHZyZlN0YXRlOiBSZXN0b3JhYmxlVnJmRGtnU3RhdGUgfSksXG4gIHQucGFydGlhbCh7XG4gICAgdnJmU3RhdGVCeXRlczogVWludDhBcnJheUNvZGVjLFxuICAgIGtleVNoYXJlQnVmZjogQnVmZmVyQ29kZWMsXG4gIH0pLFxuXSk7XG5cbi8qKiBEZWNvZGUgYSB3YXNtIHJvdW5kLTEgbWFwIGtleSBhcyBhIHBhcnR5IGluZGV4LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVBhcnR5SWQocmVjaXBpZW50OiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCB0byA9IE51bWJlci5wYXJzZUludChyZWNpcGllbnQsIDEwKTtcbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHRvKSB8fCB0byA8IDAgfHwgU3RyaW5nKHRvKSAhPT0gcmVjaXBpZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWUkYgREtHIHJvdW5kLTEgcmVjaXBpZW50IGlzIG5vdCBhIHBhcnR5IGlkOiAke3JlY2lwaWVudH1gKTtcbiAgfVxuICByZXR1cm4gdG87XG59XG5cbi8qKiBEZWNvZGUgdGhlIHdhc20gcm91bmQtMSByZWNpcGllbnQg4oaSIGJ5dGVzIG1hcC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVWcmZSb3VuZDFNc2dNYXAobXNnOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgVWludDhBcnJheT4ge1xuICBjb25zdCBkZWNvZGVkID0gVnJmRGtnUm91bmQxTXNnTWFwLmRlY29kZShtc2cpO1xuICBpZiAoaXNMZWZ0KGRlY29kZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdWUkYgREtHIHJvdW5kLTEgbWVzc2FnZSBpcyBub3QgYSBwYXJ0eS1pZCBtYXAgb2YgYnl0ZSBhcnJheXMnKTtcbiAgfVxuICByZXR1cm4gZGVjb2RlZC5yaWdodDtcbn1cblxuLyoqIERlY29kZSBwZXJzaXN0ZWQgVlJGIERLRyBzZXNzaW9uIGRhdGEuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVnJmRGtnU2Vzc2lvbkRhdGEoc2Vzc2lvbkRhdGE6IHVua25vd24pOiBWcmZEa2dTZXNzaW9uRGF0YSB7XG4gIGNvbnN0IGRlY29kZWQgPSBWcmZEa2dTZXNzaW9uRGF0YUNvZGVjLmRlY29kZShzZXNzaW9uRGF0YSk7XG4gIGlmIChpc0xlZnQoZGVjb2RlZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgVlJGIERLRyBzZXNzaW9uIGRhdGEnKTtcbiAgfVxuICByZXR1cm4gZGVjb2RlZC5yaWdodDtcbn1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ import { Buffer } from 'buffer';
2
+ import { VrfDkg } from './dkg';
3
+ /**
4
+ * Runs a local 2-of-3 VRF DKG across user (0), backup (1) and bitgo (2) parties and
5
+ * returns the three completed VrfDkg sessions, mirroring `generateVrfDKGKeyShares` from
6
+ * `dkls-vrf/util.ts`.
7
+ */
8
+ export declare function generateVrfDKGKeyShares(seedUser?: Buffer, seedBackup?: Buffer, seedBitgo?: Buffer): Promise<[VrfDkg, VrfDkg, VrfDkg]>;
9
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/tss/eddsa-mps-vrf/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAiCnC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateVrfDKGKeyShares = generateVrfDKGKeyShares;
4
+ const dkg_1 = require("./dkg");
5
+ /**
6
+ * Runs a local 2-of-3 VRF DKG across user (0), backup (1) and bitgo (2) parties and
7
+ * returns the three completed VrfDkg sessions, mirroring `generateVrfDKGKeyShares` from
8
+ * `dkls-vrf/util.ts`.
9
+ */
10
+ async function generateVrfDKGKeyShares(seedUser, seedBackup, seedBitgo) {
11
+ const user = new dkg_1.VrfDkg(3, 2, 0, seedUser);
12
+ const backup = new dkg_1.VrfDkg(3, 2, 1, seedBackup);
13
+ const bitgo = new dkg_1.VrfDkg(3, 2, 2, seedBitgo);
14
+ // #region round 1
15
+ const userRound1Messages = await user.initDkg();
16
+ const backupRound1Messages = await backup.initDkg();
17
+ const bitgoRound1Messages = await bitgo.initDkg();
18
+ const round1Messages = [userRound1Messages, backupRound1Messages, bitgoRound1Messages];
19
+ // #endregion
20
+ // #region round 2
21
+ const round2Outputs = await Promise.all([user, backup, bitgo].map((party, i) => party.handleIncomingMessages({
22
+ p2pMessages: [],
23
+ broadcastMessages: round1Messages.flatMap((m) => m.broadcastMessages).filter((m) => m.from !== i),
24
+ })));
25
+ // #endregion
26
+ // #region finalize
27
+ for (const [i, party] of [user, backup, bitgo].entries()) {
28
+ await party.handleIncomingMessages({
29
+ p2pMessages: round2Outputs.flatMap((m) => m.p2pMessages).filter((m) => m.to === i),
30
+ broadcastMessages: [],
31
+ });
32
+ }
33
+ // #endregion
34
+ return [user, backup, bitgo];
35
+ }
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZWRkc2EtbXBzLXZyZi91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsMERBcUNDO0FBNUNELCtCQUErQjtBQUUvQjs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLHVCQUF1QixDQUMzQyxRQUFpQixFQUNqQixVQUFtQixFQUNuQixTQUFrQjtJQUVsQixNQUFNLElBQUksR0FBRyxJQUFJLFlBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvQyxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUU3QyxrQkFBa0I7SUFDbEIsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNoRCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZGLGFBQWE7SUFFYixrQkFBa0I7SUFDbEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNyQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ3JDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztRQUMzQixXQUFXLEVBQUUsRUFBRTtRQUNmLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7S0FDbEcsQ0FBQyxDQUNILENBQ0YsQ0FBQztJQUNGLGFBQWE7SUFFYixtQkFBbUI7SUFDbkIsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3pELE1BQU0sS0FBSyxDQUFDLHNCQUFzQixDQUFDO1lBQ2pDLFdBQVcsRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsRixpQkFBaUIsRUFBRSxFQUFFO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxhQUFhO0lBRWIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgeyBWcmZEa2cgfSBmcm9tICcuL2RrZyc7XG5cbi8qKlxuICogUnVucyBhIGxvY2FsIDItb2YtMyBWUkYgREtHIGFjcm9zcyB1c2VyICgwKSwgYmFja3VwICgxKSBhbmQgYml0Z28gKDIpIHBhcnRpZXMgYW5kXG4gKiByZXR1cm5zIHRoZSB0aHJlZSBjb21wbGV0ZWQgVnJmRGtnIHNlc3Npb25zLCBtaXJyb3JpbmcgYGdlbmVyYXRlVnJmREtHS2V5U2hhcmVzYCBmcm9tXG4gKiBgZGtscy12cmYvdXRpbC50c2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVZyZkRLR0tleVNoYXJlcyhcbiAgc2VlZFVzZXI/OiBCdWZmZXIsXG4gIHNlZWRCYWNrdXA/OiBCdWZmZXIsXG4gIHNlZWRCaXRnbz86IEJ1ZmZlclxuKTogUHJvbWlzZTxbVnJmRGtnLCBWcmZEa2csIFZyZkRrZ10+IHtcbiAgY29uc3QgdXNlciA9IG5ldyBWcmZEa2coMywgMiwgMCwgc2VlZFVzZXIpO1xuICBjb25zdCBiYWNrdXAgPSBuZXcgVnJmRGtnKDMsIDIsIDEsIHNlZWRCYWNrdXApO1xuICBjb25zdCBiaXRnbyA9IG5ldyBWcmZEa2coMywgMiwgMiwgc2VlZEJpdGdvKTtcblxuICAvLyAjcmVnaW9uIHJvdW5kIDFcbiAgY29uc3QgdXNlclJvdW5kMU1lc3NhZ2VzID0gYXdhaXQgdXNlci5pbml0RGtnKCk7XG4gIGNvbnN0IGJhY2t1cFJvdW5kMU1lc3NhZ2VzID0gYXdhaXQgYmFja3VwLmluaXREa2coKTtcbiAgY29uc3QgYml0Z29Sb3VuZDFNZXNzYWdlcyA9IGF3YWl0IGJpdGdvLmluaXREa2coKTtcbiAgY29uc3Qgcm91bmQxTWVzc2FnZXMgPSBbdXNlclJvdW5kMU1lc3NhZ2VzLCBiYWNrdXBSb3VuZDFNZXNzYWdlcywgYml0Z29Sb3VuZDFNZXNzYWdlc107XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHJvdW5kIDJcbiAgY29uc3Qgcm91bmQyT3V0cHV0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIFt1c2VyLCBiYWNrdXAsIGJpdGdvXS5tYXAoKHBhcnR5LCBpKSA9PlxuICAgICAgcGFydHkuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IHJvdW5kMU1lc3NhZ2VzLmZsYXRNYXAoKG0pID0+IG0uYnJvYWRjYXN0TWVzc2FnZXMpLmZpbHRlcigobSkgPT4gbS5mcm9tICE9PSBpKSxcbiAgICAgIH0pXG4gICAgKVxuICApO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBmaW5hbGl6ZVxuICBmb3IgKGNvbnN0IFtpLCBwYXJ0eV0gb2YgW3VzZXIsIGJhY2t1cCwgYml0Z29dLmVudHJpZXMoKSkge1xuICAgIGF3YWl0IHBhcnR5LmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IHJvdW5kMk91dHB1dHMuZmxhdE1hcCgobSkgPT4gbS5wMnBNZXNzYWdlcykuZmlsdGVyKChtKSA9PiBtLnRvID09PSBpKSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgICB9KTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgcmV0dXJuIFt1c2VyLCBiYWNrdXAsIGJpdGdvXTtcbn1cbiJdfQ==
@@ -1,2 +1,7 @@
1
1
  export * from './ecdsa';
2
+ export * from './ecdsa-dkls';
3
+ export * from './dkls-vrf';
4
+ export * from './eddsa-mps';
5
+ export * from './eddsa-mps-vrf';
6
+ export * from './redpallas-mps';
2
7
  //# 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"}
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,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,4 +15,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
15
  };
12
16
  Object.defineProperty(exports, "__esModule", { value: true });
13
17
  __exportStar(require("./ecdsa"), exports);
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDBDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZWNkc2EnO1xuIl19
18
+ __exportStar(require("./ecdsa-dkls"), exports);
19
+ __exportStar(require("./dkls-vrf"), exports);
20
+ __exportStar(require("./eddsa-mps"), exports);
21
+ __exportStar(require("./eddsa-mps-vrf"), exports);
22
+ __exportStar(require("./redpallas-mps"), exports);
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBd0I7QUFDeEIsK0NBQTZCO0FBQzdCLDZDQUEyQjtBQUMzQiw4Q0FBNEI7QUFDNUIsa0RBQWdDO0FBQ2hDLGtEQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZWNkc2EnO1xuZXhwb3J0ICogZnJvbSAnLi9lY2RzYS1ka2xzJztcbmV4cG9ydCAqIGZyb20gJy4vZGtscy12cmYnO1xuZXhwb3J0ICogZnJvbSAnLi9lZGRzYS1tcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9lZGRzYS1tcHMtdnJmJztcbmV4cG9ydCAqIGZyb20gJy4vcmVkcGFsbGFzLW1wcyc7XG4iXX0=
@@ -0,0 +1,34 @@
1
+ import * as pgp from 'openpgp';
2
+ import { MPSSignedMessage } from './types';
3
+ /**
4
+ * PGP detached-signs raw WASM bytes with the given private key.
5
+ * Returns an MPSSignedMessage with the base64-encoded payload and armored signature.
6
+ *
7
+ * Mirrors `detachSignMpsMessage` in `../eddsa-mps/commsLayer.ts`. Kept as an independent
8
+ * copy (rather than a shared import) so RedPallas MPS never depends on the EdDSA MPS
9
+ * module, and vice versa.
10
+ */
11
+ export declare function detachSignMpsMessage(rawBytes: Buffer | Uint8Array, signingKey: pgp.PrivateKey): Promise<MPSSignedMessage>;
12
+ /**
13
+ * Verifies a PGP detached signature on an MPSSignedMessage and returns the decoded raw bytes.
14
+ * Throws if the signature is invalid or not present.
15
+ */
16
+ export declare function verifyMpsMessage(msg: MPSSignedMessage, verificationKey: pgp.Key): Promise<Buffer>;
17
+ /**
18
+ * Extracts the X25519 public key bytes from a GPG key's encryption subkey.
19
+ * Works for both public-only and private keys — use this for third-party keys (e.g. BitGo's).
20
+ *
21
+ * @param key - A GPG key with an X25519 encryption subkey.
22
+ * @returns 32-byte X25519 public key.
23
+ */
24
+ export declare function extractEd25519PublicKey(key: pgp.Key): Promise<Buffer>;
25
+ /**
26
+ * Extracts the X25519 public and private key bytes from a GPG ed25519 private key's
27
+ * encryption subkey. Encapsulates the keyPacket internals and the little-endian scalar
28
+ * reversal in one place so sdk-core only deals with plain Buffers.
29
+ *
30
+ * @param privateKey - An ed25519 GPG private key with an X25519 encryption subkey.
31
+ * @returns [pk, sk] — 32-byte X25519 public key and private scalar.
32
+ */
33
+ export declare function extractEd25519KeyPair(privateKey: pgp.PrivateKey): Promise<[Buffer, Buffer]>;
34
+ //# sourceMappingURL=commsLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commsLayer.d.ts","sourceRoot":"","sources":["../../../../src/tss/redpallas-mps/commsLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAC7B,UAAU,EAAE,GAAG,CAAC,UAAU,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAU3B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAUvG;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAG3E;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAOjG"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.detachSignMpsMessage = detachSignMpsMessage;
37
+ exports.verifyMpsMessage = verifyMpsMessage;
38
+ exports.extractEd25519PublicKey = extractEd25519PublicKey;
39
+ exports.extractEd25519KeyPair = extractEd25519KeyPair;
40
+ const pgp = __importStar(require("openpgp"));
41
+ /**
42
+ * PGP detached-signs raw WASM bytes with the given private key.
43
+ * Returns an MPSSignedMessage with the base64-encoded payload and armored signature.
44
+ *
45
+ * Mirrors `detachSignMpsMessage` in `../eddsa-mps/commsLayer.ts`. Kept as an independent
46
+ * copy (rather than a shared import) so RedPallas MPS never depends on the EdDSA MPS
47
+ * module, and vice versa.
48
+ */
49
+ async function detachSignMpsMessage(rawBytes, signingKey) {
50
+ const signature = await pgp.sign({
51
+ message: await pgp.createMessage({ binary: rawBytes }),
52
+ signingKeys: signingKey,
53
+ detached: true,
54
+ });
55
+ return {
56
+ message: Buffer.from(rawBytes).toString('base64'),
57
+ signature: signature,
58
+ };
59
+ }
60
+ /**
61
+ * Verifies a PGP detached signature on an MPSSignedMessage and returns the decoded raw bytes.
62
+ * Throws if the signature is invalid or not present.
63
+ */
64
+ async function verifyMpsMessage(msg, verificationKey) {
65
+ const rawBytes = Buffer.from(msg.message, 'base64');
66
+ const result = await pgp.verify({
67
+ message: await pgp.createMessage({ binary: rawBytes }),
68
+ signature: await pgp.readSignature({ armoredSignature: msg.signature }),
69
+ verificationKeys: verificationKey,
70
+ expectSigned: true,
71
+ });
72
+ await result.signatures[0].verified;
73
+ return rawBytes;
74
+ }
75
+ /**
76
+ * Extracts the X25519 public key bytes from a GPG key's encryption subkey.
77
+ * Works for both public-only and private keys — use this for third-party keys (e.g. BitGo's).
78
+ *
79
+ * @param key - A GPG key with an X25519 encryption subkey.
80
+ * @returns 32-byte X25519 public key.
81
+ */
82
+ async function extractEd25519PublicKey(key) {
83
+ const { keyPacket } = await key.getEncryptionKey();
84
+ return Buffer.from(keyPacket.publicParams.Q).subarray(1);
85
+ }
86
+ /**
87
+ * Extracts the X25519 public and private key bytes from a GPG ed25519 private key's
88
+ * encryption subkey. Encapsulates the keyPacket internals and the little-endian scalar
89
+ * reversal in one place so sdk-core only deals with plain Buffers.
90
+ *
91
+ * @param privateKey - An ed25519 GPG private key with an X25519 encryption subkey.
92
+ * @returns [pk, sk] — 32-byte X25519 public key and private scalar.
93
+ */
94
+ async function extractEd25519KeyPair(privateKey) {
95
+ const encKey = await privateKey.getEncryptionKey();
96
+ const pk = Buffer.from(encKey.keyPacket.publicParams.Q).subarray(1);
97
+ const sk = Buffer.from(encKey.keyPacket.privateParams.d).reverse();
98
+ return [pk, sk];
99
+ }
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbXNMYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvcmVkcGFsbGFzLW1wcy9jb21tc0xheWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0Esb0RBYUM7QUFNRCw0Q0FVQztBQVNELDBEQUdDO0FBVUQsc0RBT0M7QUFyRUQsNkNBQStCO0FBRy9COzs7Ozs7O0dBT0c7QUFDSSxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLFFBQTZCLEVBQzdCLFVBQTBCO0lBRTFCLE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQztRQUMvQixPQUFPLEVBQUUsTUFBTSxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3RELFdBQVcsRUFBRSxVQUFVO1FBQ3ZCLFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQyxDQUFDO0lBQ0gsT0FBTztRQUNMLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDakQsU0FBUyxFQUFFLFNBQW1CO0tBQy9CLENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLGdCQUFnQixDQUFDLEdBQXFCLEVBQUUsZUFBd0I7SUFDcEYsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUM5QixPQUFPLEVBQUUsTUFBTSxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3RELFNBQVMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkUsZ0JBQWdCLEVBQUUsZUFBZTtRQUNqQyxZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDLENBQUM7SUFDSCxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3BDLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUsdUJBQXVCLENBQUMsR0FBWTtJQUN4RCxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNuRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUUsU0FBUyxDQUFDLFlBQWtDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0ksS0FBSyxVQUFVLHFCQUFxQixDQUFDLFVBQTBCO0lBQ3BFLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDbkQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBRSxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQWtDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNGLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ25CLE1BQU0sQ0FBQyxTQUE2RCxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQ3RGLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDWixPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgeyBNUFNTaWduZWRNZXNzYWdlIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogUEdQIGRldGFjaGVkLXNpZ25zIHJhdyBXQVNNIGJ5dGVzIHdpdGggdGhlIGdpdmVuIHByaXZhdGUga2V5LlxuICogUmV0dXJucyBhbiBNUFNTaWduZWRNZXNzYWdlIHdpdGggdGhlIGJhc2U2NC1lbmNvZGVkIHBheWxvYWQgYW5kIGFybW9yZWQgc2lnbmF0dXJlLlxuICpcbiAqIE1pcnJvcnMgYGRldGFjaFNpZ25NcHNNZXNzYWdlYCBpbiBgLi4vZWRkc2EtbXBzL2NvbW1zTGF5ZXIudHNgLiBLZXB0IGFzIGFuIGluZGVwZW5kZW50XG4gKiBjb3B5IChyYXRoZXIgdGhhbiBhIHNoYXJlZCBpbXBvcnQpIHNvIFJlZFBhbGxhcyBNUFMgbmV2ZXIgZGVwZW5kcyBvbiB0aGUgRWREU0EgTVBTXG4gKiBtb2R1bGUsIGFuZCB2aWNlIHZlcnNhLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGV0YWNoU2lnbk1wc01lc3NhZ2UoXG4gIHJhd0J5dGVzOiBCdWZmZXIgfCBVaW50OEFycmF5LFxuICBzaWduaW5nS2V5OiBwZ3AuUHJpdmF0ZUtleVxuKTogUHJvbWlzZTxNUFNTaWduZWRNZXNzYWdlPiB7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHBncC5zaWduKHtcbiAgICBtZXNzYWdlOiBhd2FpdCBwZ3AuY3JlYXRlTWVzc2FnZSh7IGJpbmFyeTogcmF3Qnl0ZXMgfSksXG4gICAgc2lnbmluZ0tleXM6IHNpZ25pbmdLZXksXG4gICAgZGV0YWNoZWQ6IHRydWUsXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKHJhd0J5dGVzKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgc2lnbmF0dXJlOiBzaWduYXR1cmUgYXMgc3RyaW5nLFxuICB9O1xufVxuXG4vKipcbiAqIFZlcmlmaWVzIGEgUEdQIGRldGFjaGVkIHNpZ25hdHVyZSBvbiBhbiBNUFNTaWduZWRNZXNzYWdlIGFuZCByZXR1cm5zIHRoZSBkZWNvZGVkIHJhdyBieXRlcy5cbiAqIFRocm93cyBpZiB0aGUgc2lnbmF0dXJlIGlzIGludmFsaWQgb3Igbm90IHByZXNlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlNcHNNZXNzYWdlKG1zZzogTVBTU2lnbmVkTWVzc2FnZSwgdmVyaWZpY2F0aW9uS2V5OiBwZ3AuS2V5KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgY29uc3QgcmF3Qnl0ZXMgPSBCdWZmZXIuZnJvbShtc2cubWVzc2FnZSwgJ2Jhc2U2NCcpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZ3AudmVyaWZ5KHtcbiAgICBtZXNzYWdlOiBhd2FpdCBwZ3AuY3JlYXRlTWVzc2FnZSh7IGJpbmFyeTogcmF3Qnl0ZXMgfSksXG4gICAgc2lnbmF0dXJlOiBhd2FpdCBwZ3AucmVhZFNpZ25hdHVyZSh7IGFybW9yZWRTaWduYXR1cmU6IG1zZy5zaWduYXR1cmUgfSksXG4gICAgdmVyaWZpY2F0aW9uS2V5czogdmVyaWZpY2F0aW9uS2V5LFxuICAgIGV4cGVjdFNpZ25lZDogdHJ1ZSxcbiAgfSk7XG4gIGF3YWl0IHJlc3VsdC5zaWduYXR1cmVzWzBdLnZlcmlmaWVkO1xuICByZXR1cm4gcmF3Qnl0ZXM7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIFgyNTUxOSBwdWJsaWMga2V5IGJ5dGVzIGZyb20gYSBHUEcga2V5J3MgZW5jcnlwdGlvbiBzdWJrZXkuXG4gKiBXb3JrcyBmb3IgYm90aCBwdWJsaWMtb25seSBhbmQgcHJpdmF0ZSBrZXlzIOKAlCB1c2UgdGhpcyBmb3IgdGhpcmQtcGFydHkga2V5cyAoZS5nLiBCaXRHbydzKS5cbiAqXG4gKiBAcGFyYW0ga2V5IC0gQSBHUEcga2V5IHdpdGggYW4gWDI1NTE5IGVuY3J5cHRpb24gc3Via2V5LlxuICogQHJldHVybnMgMzItYnl0ZSBYMjU1MTkgcHVibGljIGtleS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RFZDI1NTE5UHVibGljS2V5KGtleTogcGdwLktleSk6IFByb21pc2U8QnVmZmVyPiB7XG4gIGNvbnN0IHsga2V5UGFja2V0IH0gPSBhd2FpdCBrZXkuZ2V0RW5jcnlwdGlvbktleSgpO1xuICByZXR1cm4gQnVmZmVyLmZyb20oKGtleVBhY2tldC5wdWJsaWNQYXJhbXMgYXMgeyBROiBVaW50OEFycmF5IH0pLlEpLnN1YmFycmF5KDEpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBYMjU1MTkgcHVibGljIGFuZCBwcml2YXRlIGtleSBieXRlcyBmcm9tIGEgR1BHIGVkMjU1MTkgcHJpdmF0ZSBrZXknc1xuICogZW5jcnlwdGlvbiBzdWJrZXkuIEVuY2Fwc3VsYXRlcyB0aGUga2V5UGFja2V0IGludGVybmFscyBhbmQgdGhlIGxpdHRsZS1lbmRpYW4gc2NhbGFyXG4gKiByZXZlcnNhbCBpbiBvbmUgcGxhY2Ugc28gc2RrLWNvcmUgb25seSBkZWFscyB3aXRoIHBsYWluIEJ1ZmZlcnMuXG4gKlxuICogQHBhcmFtIHByaXZhdGVLZXkgLSBBbiBlZDI1NTE5IEdQRyBwcml2YXRlIGtleSB3aXRoIGFuIFgyNTUxOSBlbmNyeXB0aW9uIHN1YmtleS5cbiAqIEByZXR1cm5zICBbcGssIHNrXSDigJQgMzItYnl0ZSBYMjU1MTkgcHVibGljIGtleSBhbmQgcHJpdmF0ZSBzY2FsYXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0RWQyNTUxOUtleVBhaXIocHJpdmF0ZUtleTogcGdwLlByaXZhdGVLZXkpOiBQcm9taXNlPFtCdWZmZXIsIEJ1ZmZlcl0+IHtcbiAgY29uc3QgZW5jS2V5ID0gYXdhaXQgcHJpdmF0ZUtleS5nZXRFbmNyeXB0aW9uS2V5KCk7XG4gIGNvbnN0IHBrID0gQnVmZmVyLmZyb20oKGVuY0tleS5rZXlQYWNrZXQucHVibGljUGFyYW1zIGFzIHsgUTogVWludDhBcnJheSB9KS5RKS5zdWJhcnJheSgxKTtcbiAgY29uc3Qgc2sgPSBCdWZmZXIuZnJvbShcbiAgICAoZW5jS2V5LmtleVBhY2tldCBhcyB1bmtub3duIGFzIHsgcHJpdmF0ZVBhcmFtczogeyBkOiBVaW50OEFycmF5IH0gfSkucHJpdmF0ZVBhcmFtcy5kXG4gICkucmV2ZXJzZSgpO1xuICByZXR1cm4gW3BrLCBza107XG59XG4iXX0=
@@ -0,0 +1,103 @@
1
+ import { DeserializedMessage, DeserializedMessages, RedPallasDkgState } from './types';
2
+ /**
3
+ * RedPallas (Zcash Ironwood) Distributed Key Generation (DKG) implementation using @bitgo/wasm-mps.
4
+ *
5
+ * Mirrors the structure of the EdDSA MPS `DKG` class (see `../eddsa-mps/dkg.ts`), but wraps the
6
+ * `redpallas_dkg_*` WASM bindings. Round2 additionally requires a `derivationSeed` and returns a
7
+ * `MsgDerivationInit` (msg/pk/share/state) rather than a final `Share`, because RedPallas key
8
+ * derivation (ask/nk/rivk/ivks, via `redpallas_derivation_process`) is a separate, subsequent
9
+ * process that is platform-side only and intentionally not exposed here.
10
+ *
11
+ * State is explicit: each round function returns `{ msg, state }` bytes. The state bytes are
12
+ * stored between rounds and passed to the next round function, mirroring the server-side
13
+ * persistence pattern (state would be serialised to DB, or in OVC's case, a microSD card).
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const dkg = new RedPallasDKG(3, 2, 0);
18
+ * // X25519 keys come from GPG encryption subkeys (extracted by the orchestrator)
19
+ * await dkg.initDkg(myX25519PrivKey, [otherParty1X25519PubKey, otherParty2X25519PubKey]);
20
+ * const msg1 = dkg.getFirstMessage();
21
+ * const msg2s = dkg.handleIncomingMessages(allThreeMsg1s);
22
+ * dkg.handleIncomingMessages(allThreeMsg2s, derivationSeed); // completes DKG
23
+ * const keyShare = dkg.getKeyShare();
24
+ * ```
25
+ */
26
+ export declare class RedPallasDKG {
27
+ protected n: number;
28
+ protected t: number;
29
+ protected partyIdx: number;
30
+ /** Private X25519 key (from GPG encryption subkey) */
31
+ private decryptionKey;
32
+ /** Other parties' X25519 public keys (from their GPG encryption subkeys), sorted by party index */
33
+ private otherPubKeys;
34
+ /** Serialised round state bytes returned by the previous round function */
35
+ private dkgStateBytes;
36
+ /** Opaque bincode-serialised keyshare from round2 */
37
+ private keyShare;
38
+ /** RedPallas public key (verification key) from round2 */
39
+ private sharePk;
40
+ /** Lazily loaded WASM module */
41
+ private wasmMps;
42
+ protected dkgState: RedPallasDkgState;
43
+ constructor(n: number, t: number, partyIdx: number);
44
+ private loadWasmMps;
45
+ private getWasmMps;
46
+ getState(): RedPallasDkgState;
47
+ /**
48
+ * Initialises the DKG session with this party's X25519 private key and the other parties'
49
+ * X25519 public keys. Keys are extracted from GPG encryption subkeys by the orchestrator.
50
+ *
51
+ * @param decryptionKey - This party's 32-byte X25519 private key (GPG enc subkey private part).
52
+ * @param otherEncPublicKeys - Other parties' 32-byte X25519 public keys, sorted by ascending
53
+ * party index (excluding own). For a 3-party setup, this is [party_A_pub, party_B_pub].
54
+ */
55
+ initDkg(decryptionKey: Buffer, otherEncPublicKeys: Buffer[]): Promise<void>;
56
+ /**
57
+ * Runs round0 of the DKG protocol. Returns this party's broadcast message.
58
+ * Stores the round state bytes internally for the next round.
59
+ *
60
+ * @param dkgSeed - Optional 32-byte seed for deterministic DKG output (testing only).
61
+ */
62
+ getFirstMessage(dkgSeed?: Buffer): DeserializedMessage;
63
+ /**
64
+ * Handles incoming messages from all parties and advances the protocol.
65
+ *
66
+ * - In WaitMsg1: runs round1, returns this party's round1 broadcast message.
67
+ * - In WaitMsg2: runs round2, completes DKG, returns [].
68
+ *
69
+ * The caller passes all n messages (including own); own message is filtered
70
+ * out internally. Other parties' messages are sorted by ascending party index,
71
+ * matching the ordering expected by @bitgo/wasm-mps.
72
+ *
73
+ * @param messagesForIthRound - All n messages for this round (including own).
74
+ */
75
+ handleIncomingMessages(messagesForIthRound: DeserializedMessages): DeserializedMessages;
76
+ /**
77
+ * Returns the opaque bincode-serialised keyshare produced by round2.
78
+ * This is used as input to the (platform-side) signing and derivation protocols.
79
+ */
80
+ getKeyShare(): Buffer;
81
+ /**
82
+ * Returns the RedPallas public key (verification key) agreed by all parties during DKG.
83
+ */
84
+ getSharePublicKey(): Buffer;
85
+ /**
86
+ * Returns a CBOR-encoded ReducedKeyShare buffer containing the party's opaque
87
+ * signing key share in the `keyShare` field. This buffer is private key material.
88
+ * The caller encrypts it and stores it as `reducedEncryptedPrv` on the key card QR code.
89
+ */
90
+ getReducedKeyShare(): Buffer;
91
+ /**
92
+ * Exports the current session state as a JSON string for persistence.
93
+ * Includes: round state bytes, current DKG round, decryption key, other parties' pub keys.
94
+ * This mirrors what a server would store in a database between API rounds.
95
+ */
96
+ getSession(): string;
97
+ /**
98
+ * Restores a previously exported session. Allows the protocol to continue
99
+ * from where it left off, as if the round state was loaded from a database.
100
+ */
101
+ restoreSession(session: string): void;
102
+ }
103
+ //# sourceMappingURL=dkg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dkg.d.ts","sourceRoot":"","sources":["../../../../src/tss/redpallas-mps/dkg.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,iBAAiB,EAA4B,MAAM,SAAS,CAAC;AAMjH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,YAAY;IACvB,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE3B,sDAAsD;IACtD,OAAO,CAAC,aAAa,CAAuB;IAC5C,mGAAmG;IACnG,OAAO,CAAC,YAAY,CAAyB;IAC7C,2EAA2E;IAC3E,OAAO,CAAC,aAAa,CAAuB;IAC5C,qDAAqD;IACrD,OAAO,CAAC,QAAQ,CAAuB;IACvC,0DAA0D;IAC1D,OAAO,CAAC,OAAO,CAAuB;IACtC,gCAAgC;IAChC,OAAO,CAAC,OAAO,CAAwB;IAEvC,SAAS,CAAC,QAAQ,EAAE,iBAAiB,CAAmC;gBAE5D,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;YAMpC,WAAW;IAoBzB,OAAO,CAAC,UAAU;IAOlB,QAAQ,IAAI,iBAAiB;IAI7B;;;;;;;OAOG;IACG,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjF;;;;;OAKG;IACH,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAmBtD;;;;;;;;;;;OAWG;IACH,sBAAsB,CAAC,mBAAmB,EAAE,oBAAoB,GAAG,oBAAoB;IAsDvF;;;OAGG;IACH,WAAW,IAAI,MAAM;IAOrB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAO3B;;;;OAIG;IACH,kBAAkB,IAAI,MAAM;IAW5B;;;;OAIG;IACH,UAAU,IAAI,MAAM;IAepB;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAOtC"}