@bitgo-beta/sdk-lib-mpc 8.2.0-beta.211 → 8.2.0-beta.2110

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 (147) 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 +61 -0
  45. package/dist/src/tss/dkls-vrf/util.d.ts.map +1 -0
  46. package/dist/src/tss/dkls-vrf/util.js +199 -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 +309 -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 +163 -0
  74. package/dist/src/tss/ecdsa-dkls/types.d.ts.map +1 -0
  75. package/dist/src/tss/ecdsa-dkls/types.js +215 -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/derive.d.ts +34 -0
  83. package/dist/src/tss/eddsa-mps/derive.d.ts.map +1 -0
  84. package/dist/src/tss/eddsa-mps/derive.js +198 -0
  85. package/dist/src/tss/eddsa-mps/dkg.d.ts +109 -0
  86. package/dist/src/tss/eddsa-mps/dkg.d.ts.map +1 -0
  87. package/dist/src/tss/eddsa-mps/dkg.js +304 -0
  88. package/dist/src/tss/eddsa-mps/dsg.d.ts +96 -0
  89. package/dist/src/tss/eddsa-mps/dsg.d.ts.map +1 -0
  90. package/dist/src/tss/eddsa-mps/dsg.js +346 -0
  91. package/dist/src/tss/eddsa-mps/index.d.ts +8 -0
  92. package/dist/src/tss/eddsa-mps/index.d.ts.map +1 -0
  93. package/dist/src/tss/eddsa-mps/index.js +43 -0
  94. package/dist/src/tss/eddsa-mps/types.d.ts +76 -0
  95. package/dist/src/tss/eddsa-mps/types.d.ts.map +1 -0
  96. package/dist/src/tss/eddsa-mps/types.js +105 -0
  97. package/dist/src/tss/eddsa-mps/util.d.ts +33 -0
  98. package/dist/src/tss/eddsa-mps/util.d.ts.map +1 -0
  99. package/dist/src/tss/eddsa-mps/util.js +94 -0
  100. package/dist/src/tss/eddsa-mps-vrf/dkg.d.ts +65 -0
  101. package/dist/src/tss/eddsa-mps-vrf/dkg.d.ts.map +1 -0
  102. package/dist/src/tss/eddsa-mps-vrf/dkg.js +246 -0
  103. package/dist/src/tss/eddsa-mps-vrf/index.d.ts +4 -0
  104. package/dist/src/tss/eddsa-mps-vrf/index.d.ts.map +1 -0
  105. package/dist/src/tss/eddsa-mps-vrf/index.js +40 -0
  106. package/dist/src/tss/eddsa-mps-vrf/types.d.ts +31 -0
  107. package/dist/src/tss/eddsa-mps-vrf/types.d.ts.map +1 -0
  108. package/dist/src/tss/eddsa-mps-vrf/types.js +97 -0
  109. package/dist/src/tss/eddsa-mps-vrf/util.d.ts +9 -0
  110. package/dist/src/tss/eddsa-mps-vrf/util.d.ts.map +1 -0
  111. package/dist/src/tss/eddsa-mps-vrf/util.js +36 -0
  112. package/dist/src/tss/index.d.ts +5 -0
  113. package/dist/src/tss/index.d.ts.map +1 -1
  114. package/dist/src/tss/index.js +11 -2
  115. package/dist/src/tss/redpallas-mps/commsLayer.d.ts +34 -0
  116. package/dist/src/tss/redpallas-mps/commsLayer.d.ts.map +1 -0
  117. package/dist/src/tss/redpallas-mps/commsLayer.js +100 -0
  118. package/dist/src/tss/redpallas-mps/dkg.d.ts +103 -0
  119. package/dist/src/tss/redpallas-mps/dkg.d.ts.map +1 -0
  120. package/dist/src/tss/redpallas-mps/dkg.js +285 -0
  121. package/dist/src/tss/redpallas-mps/dsg.d.ts +130 -0
  122. package/dist/src/tss/redpallas-mps/dsg.d.ts.map +1 -0
  123. package/dist/src/tss/redpallas-mps/dsg.js +376 -0
  124. package/dist/src/tss/redpallas-mps/index.d.ts +8 -0
  125. package/dist/src/tss/redpallas-mps/index.d.ts.map +1 -0
  126. package/dist/src/tss/redpallas-mps/index.js +43 -0
  127. package/dist/src/tss/redpallas-mps/rerand.d.ts +110 -0
  128. package/dist/src/tss/redpallas-mps/rerand.d.ts.map +1 -0
  129. package/dist/src/tss/redpallas-mps/rerand.js +330 -0
  130. package/dist/src/tss/redpallas-mps/types.d.ts +120 -0
  131. package/dist/src/tss/redpallas-mps/types.d.ts.map +1 -0
  132. package/dist/src/tss/redpallas-mps/types.js +133 -0
  133. package/dist/src/tss/redpallas-mps/util.d.ts +56 -0
  134. package/dist/src/tss/redpallas-mps/util.d.ts.map +1 -0
  135. package/dist/src/tss/redpallas-mps/util.js +173 -0
  136. package/dist/src/types.d.ts +0 -1
  137. package/dist/src/types.d.ts.map +1 -1
  138. package/dist/src/util.d.ts +0 -1
  139. package/dist/src/util.d.ts.map +1 -1
  140. package/dist/src/util.js +21 -22
  141. package/dist/tsconfig.tsbuildinfo +1 -1
  142. package/package.json +42 -5
  143. package/.eslintignore +0 -5
  144. package/CHANGELOG.md +0 -340
  145. package/dist/src/openssl/opensslbytes.d.ts +0 -4
  146. package/dist/src/openssl/opensslbytes.d.ts.map +0 -1
  147. package/dist/src/openssl/opensslbytes.js +0 -20
@@ -0,0 +1,133 @@
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.RedPallasRerandState = exports.RedPallasDsgState = exports.RedPallasDkgState = exports.RedPallasReducedKeyShareType = void 0;
37
+ exports.serializeMessage = serializeMessage;
38
+ exports.deserializeMessage = deserializeMessage;
39
+ exports.serializeMessages = serializeMessages;
40
+ exports.deserializeMessages = deserializeMessages;
41
+ exports.getDecodedReducedKeyShare = getDecodedReducedKeyShare;
42
+ const cbor_x_1 = require("cbor-x");
43
+ const Either_1 = require("fp-ts/Either");
44
+ const t = __importStar(require("io-ts"));
45
+ exports.RedPallasReducedKeyShareType = t.type({
46
+ keyShare: t.array(t.number),
47
+ pub: t.array(t.number),
48
+ });
49
+ /**
50
+ * Represents the state of a RedPallas DKG (Distributed Key Generation) session.
51
+ *
52
+ * Unlike the EdDSA MPS `DkgState`, there is no `Share` state: `redpallas_dkg_round2_process`
53
+ * returns a `MsgDerivationInit` (msg/pk/share/state) directly, completing the DKG session in
54
+ * one step. Key derivation (ask/nk/rivk/ivks) is a separate, subsequent, platform-side-only
55
+ * process (`redpallas_derivation_process`) not modelled here.
56
+ */
57
+ var RedPallasDkgState;
58
+ (function (RedPallasDkgState) {
59
+ /** DKG session has not been initialized */
60
+ RedPallasDkgState["Uninitialized"] = "Uninitialized";
61
+ /** DKG session has been initialized (Init state in WASM) */
62
+ RedPallasDkgState["Init"] = "Init";
63
+ /** DKG session is waiting for first message (WaitMsg1 state in WASM) */
64
+ RedPallasDkgState["WaitMsg1"] = "WaitMsg1";
65
+ /** DKG session is waiting for second message (WaitMsg2 state in WASM) */
66
+ RedPallasDkgState["WaitMsg2"] = "WaitMsg2";
67
+ /** DKG session has completed successfully and key shares are available */
68
+ RedPallasDkgState["Complete"] = "Complete";
69
+ })(RedPallasDkgState || (exports.RedPallasDkgState = RedPallasDkgState = {}));
70
+ /**
71
+ * Represents the state of a RedPallas DSG (Distributed Sign Generation) session.
72
+ *
73
+ * Mirrors the EdDSA MPS `DsgState`, except `redpallas_dsg_round0_process` does not take a
74
+ * derivation path: RedPallas key derivation (ask/nk/rivk/ivks) happens separately, upstream,
75
+ * as part of DKG (see `RedPallasDkgState`); the DSG round functions only ever operate on an
76
+ * already-derived (or root) `Keyshare`. The keyshare passed to DSG must come from a prior
77
+ * `RedPallasRerand` session (see `RedPallasRerandState`).
78
+ */
79
+ var RedPallasDsgState;
80
+ (function (RedPallasDsgState) {
81
+ /** DSG session has not been initialized */
82
+ RedPallasDsgState["Uninitialized"] = "Uninitialized";
83
+ /** initDsg() has been called; ready for getFirstMessage() */
84
+ RedPallasDsgState["Init"] = "Init";
85
+ /** R0 broadcast emitted; waiting for counterpart's R0 broadcast (SignMsg1) */
86
+ RedPallasDsgState["WaitMsg1"] = "WaitMsg1";
87
+ /** R1 broadcast emitted; waiting for counterpart's R1 broadcast (SignMsg2) */
88
+ RedPallasDsgState["WaitMsg2"] = "WaitMsg2";
89
+ /** R2 broadcast emitted; waiting for counterpart's R2 broadcast (SignMsg3, the partial sig) */
90
+ RedPallasDsgState["WaitMsg3"] = "WaitMsg3";
91
+ /** Final RedPallas signature (signature/rk) is available via getSignature() */
92
+ RedPallasDsgState["Complete"] = "Complete";
93
+ })(RedPallasDsgState || (exports.RedPallasDsgState = RedPallasDsgState = {}));
94
+ /**
95
+ * Represents the state of a RedPallas rerand (key re-randomization) session.
96
+ *
97
+ * A rerand session must run before every RedPallas DSG, between the same 2 parties
98
+ * that will then sign. Since `@bitgo/wasm-mps` 1.17.0, DSG no longer randomizes the
99
+ * key it signs with; the randomizer (`alpha`) is produced here instead.
100
+ */
101
+ var RedPallasRerandState;
102
+ (function (RedPallasRerandState) {
103
+ /** Rerand session has not been initialized */
104
+ RedPallasRerandState["Uninitialized"] = "Uninitialized";
105
+ /** initRerand() has been called; ready for getFirstMessage() */
106
+ RedPallasRerandState["Init"] = "Init";
107
+ /** R0 (local commitment) emitted; waiting for counterpart's R0 broadcast (commitment) */
108
+ RedPallasRerandState["WaitMsg1"] = "WaitMsg1";
109
+ /** R1 broadcast emitted; waiting for counterpart's R1 broadcast (randomizer + blind opening) */
110
+ RedPallasRerandState["WaitMsg2"] = "WaitMsg2";
111
+ /** Rerandomized key share (keyShare/pk/alpha) is available via getRerandomizedKeyShare() */
112
+ RedPallasRerandState["Complete"] = "Complete";
113
+ })(RedPallasRerandState || (exports.RedPallasRerandState = RedPallasRerandState = {}));
114
+ function serializeMessage(msg) {
115
+ return { from: msg.from, payload: Buffer.from(msg.payload).toString('base64') };
116
+ }
117
+ function deserializeMessage(msg) {
118
+ return { from: msg.from, payload: Buffer.from(msg.payload, 'base64') };
119
+ }
120
+ function serializeMessages(msgs) {
121
+ return msgs.map(serializeMessage);
122
+ }
123
+ function deserializeMessages(msgs) {
124
+ return msgs.map(deserializeMessage);
125
+ }
126
+ function getDecodedReducedKeyShare(reducedKeyShare) {
127
+ const decoded = exports.RedPallasReducedKeyShareType.decode((0, cbor_x_1.decode)(reducedKeyShare));
128
+ if ((0, Either_1.isLeft)(decoded)) {
129
+ throw new Error(`Unable to parse reducedKeyShare: ${decoded.left}`);
130
+ }
131
+ return decoded.right;
132
+ }
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL3JlZHBhbGxhcy1tcHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0lBLDRDQUVDO0FBRUQsZ0RBRUM7QUFFRCw4Q0FFQztBQUVELGtEQUVDO0FBRUQsOERBTUM7QUF4SkQsbUNBQWdDO0FBQ2hDLHlDQUFzQztBQUN0Qyx5Q0FBMkI7QUFFZCxRQUFBLDRCQUE0QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakQsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0NBQ3ZCLENBQUMsQ0FBQztBQUlIOzs7Ozs7O0dBT0c7QUFDSCxJQUFZLGlCQVdYO0FBWEQsV0FBWSxpQkFBaUI7SUFDM0IsMkNBQTJDO0lBQzNDLG9EQUErQixDQUFBO0lBQy9CLDREQUE0RDtJQUM1RCxrQ0FBYSxDQUFBO0lBQ2Isd0VBQXdFO0lBQ3hFLDBDQUFxQixDQUFBO0lBQ3JCLHlFQUF5RTtJQUN6RSwwQ0FBcUIsQ0FBQTtJQUNyQiwwRUFBMEU7SUFDMUUsMENBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVhXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBVzVCO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxJQUFZLGlCQWFYO0FBYkQsV0FBWSxpQkFBaUI7SUFDM0IsMkNBQTJDO0lBQzNDLG9EQUErQixDQUFBO0lBQy9CLDZEQUE2RDtJQUM3RCxrQ0FBYSxDQUFBO0lBQ2IsOEVBQThFO0lBQzlFLDBDQUFxQixDQUFBO0lBQ3JCLDhFQUE4RTtJQUM5RSwwQ0FBcUIsQ0FBQTtJQUNyQiwrRkFBK0Y7SUFDL0YsMENBQXFCLENBQUE7SUFDckIsK0VBQStFO0lBQy9FLDBDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFiVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQWE1QjtBQUVEOzs7Ozs7R0FNRztBQUNILElBQVksb0JBV1g7QUFYRCxXQUFZLG9CQUFvQjtJQUM5Qiw4Q0FBOEM7SUFDOUMsdURBQStCLENBQUE7SUFDL0IsZ0VBQWdFO0lBQ2hFLHFDQUFhLENBQUE7SUFDYix5RkFBeUY7SUFDekYsNkNBQXFCLENBQUE7SUFDckIsZ0dBQWdHO0lBQ2hHLDZDQUFxQixDQUFBO0lBQ3JCLDRGQUE0RjtJQUM1Riw2Q0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBWFcsb0JBQW9CLG9DQUFwQixvQkFBb0IsUUFXL0I7QUF3REQsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBd0I7SUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNsRixDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsR0FBc0I7SUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUN6RSxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsSUFBMEI7SUFDMUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLElBQXdCO0lBQzFELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxTQUFnQix5QkFBeUIsQ0FBQyxlQUFvQztJQUM1RSxNQUFNLE9BQU8sR0FBRyxvQ0FBNEIsQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFNLEVBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUM3RSxJQUFJLElBQUEsZUFBTSxFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVjb2RlIH0gZnJvbSAnY2Jvci14JztcbmltcG9ydCB7IGlzTGVmdCB9IGZyb20gJ2ZwLXRzL0VpdGhlcic7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcblxuZXhwb3J0IGNvbnN0IFJlZFBhbGxhc1JlZHVjZWRLZXlTaGFyZVR5cGUgPSB0LnR5cGUoe1xuICBrZXlTaGFyZTogdC5hcnJheSh0Lm51bWJlciksXG4gIHB1YjogdC5hcnJheSh0Lm51bWJlciksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVkUGFsbGFzUmVkdWNlZEtleVNoYXJlID0gdC5UeXBlT2Y8dHlwZW9mIFJlZFBhbGxhc1JlZHVjZWRLZXlTaGFyZVR5cGU+O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIGEgUmVkUGFsbGFzIERLRyAoRGlzdHJpYnV0ZWQgS2V5IEdlbmVyYXRpb24pIHNlc3Npb24uXG4gKlxuICogVW5saWtlIHRoZSBFZERTQSBNUFMgYERrZ1N0YXRlYCwgdGhlcmUgaXMgbm8gYFNoYXJlYCBzdGF0ZTogYHJlZHBhbGxhc19ka2dfcm91bmQyX3Byb2Nlc3NgXG4gKiByZXR1cm5zIGEgYE1zZ0Rlcml2YXRpb25Jbml0YCAobXNnL3BrL3NoYXJlL3N0YXRlKSBkaXJlY3RseSwgY29tcGxldGluZyB0aGUgREtHIHNlc3Npb24gaW5cbiAqIG9uZSBzdGVwLiBLZXkgZGVyaXZhdGlvbiAoYXNrL25rL3JpdmsvaXZrcykgaXMgYSBzZXBhcmF0ZSwgc3Vic2VxdWVudCwgcGxhdGZvcm0tc2lkZS1vbmx5XG4gKiBwcm9jZXNzIChgcmVkcGFsbGFzX2Rlcml2YXRpb25fcHJvY2Vzc2ApIG5vdCBtb2RlbGxlZCBoZXJlLlxuICovXG5leHBvcnQgZW51bSBSZWRQYWxsYXNEa2dTdGF0ZSB7XG4gIC8qKiBES0cgc2Vzc2lvbiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgKi9cbiAgVW5pbml0aWFsaXplZCA9ICdVbmluaXRpYWxpemVkJyxcbiAgLyoqIERLRyBzZXNzaW9uIGhhcyBiZWVuIGluaXRpYWxpemVkIChJbml0IHN0YXRlIGluIFdBU00pICovXG4gIEluaXQgPSAnSW5pdCcsXG4gIC8qKiBES0cgc2Vzc2lvbiBpcyB3YWl0aW5nIGZvciBmaXJzdCBtZXNzYWdlIChXYWl0TXNnMSBzdGF0ZSBpbiBXQVNNKSAqL1xuICBXYWl0TXNnMSA9ICdXYWl0TXNnMScsXG4gIC8qKiBES0cgc2Vzc2lvbiBpcyB3YWl0aW5nIGZvciBzZWNvbmQgbWVzc2FnZSAoV2FpdE1zZzIgc3RhdGUgaW4gV0FTTSkgKi9cbiAgV2FpdE1zZzIgPSAnV2FpdE1zZzInLFxuICAvKiogREtHIHNlc3Npb24gaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgYW5kIGtleSBzaGFyZXMgYXJlIGF2YWlsYWJsZSAqL1xuICBDb21wbGV0ZSA9ICdDb21wbGV0ZScsXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgYSBSZWRQYWxsYXMgRFNHIChEaXN0cmlidXRlZCBTaWduIEdlbmVyYXRpb24pIHNlc3Npb24uXG4gKlxuICogTWlycm9ycyB0aGUgRWREU0EgTVBTIGBEc2dTdGF0ZWAsIGV4Y2VwdCBgcmVkcGFsbGFzX2RzZ19yb3VuZDBfcHJvY2Vzc2AgZG9lcyBub3QgdGFrZSBhXG4gKiBkZXJpdmF0aW9uIHBhdGg6IFJlZFBhbGxhcyBrZXkgZGVyaXZhdGlvbiAoYXNrL25rL3JpdmsvaXZrcykgaGFwcGVucyBzZXBhcmF0ZWx5LCB1cHN0cmVhbSxcbiAqIGFzIHBhcnQgb2YgREtHIChzZWUgYFJlZFBhbGxhc0RrZ1N0YXRlYCk7IHRoZSBEU0cgcm91bmQgZnVuY3Rpb25zIG9ubHkgZXZlciBvcGVyYXRlIG9uIGFuXG4gKiBhbHJlYWR5LWRlcml2ZWQgKG9yIHJvb3QpIGBLZXlzaGFyZWAuIFRoZSBrZXlzaGFyZSBwYXNzZWQgdG8gRFNHIG11c3QgY29tZSBmcm9tIGEgcHJpb3JcbiAqIGBSZWRQYWxsYXNSZXJhbmRgIHNlc3Npb24gKHNlZSBgUmVkUGFsbGFzUmVyYW5kU3RhdGVgKS5cbiAqL1xuZXhwb3J0IGVudW0gUmVkUGFsbGFzRHNnU3RhdGUge1xuICAvKiogRFNHIHNlc3Npb24gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkICovXG4gIFVuaW5pdGlhbGl6ZWQgPSAnVW5pbml0aWFsaXplZCcsXG4gIC8qKiBpbml0RHNnKCkgaGFzIGJlZW4gY2FsbGVkOyByZWFkeSBmb3IgZ2V0Rmlyc3RNZXNzYWdlKCkgKi9cbiAgSW5pdCA9ICdJbml0JyxcbiAgLyoqIFIwIGJyb2FkY2FzdCBlbWl0dGVkOyB3YWl0aW5nIGZvciBjb3VudGVycGFydCdzIFIwIGJyb2FkY2FzdCAoU2lnbk1zZzEpICovXG4gIFdhaXRNc2cxID0gJ1dhaXRNc2cxJyxcbiAgLyoqIFIxIGJyb2FkY2FzdCBlbWl0dGVkOyB3YWl0aW5nIGZvciBjb3VudGVycGFydCdzIFIxIGJyb2FkY2FzdCAoU2lnbk1zZzIpICovXG4gIFdhaXRNc2cyID0gJ1dhaXRNc2cyJyxcbiAgLyoqIFIyIGJyb2FkY2FzdCBlbWl0dGVkOyB3YWl0aW5nIGZvciBjb3VudGVycGFydCdzIFIyIGJyb2FkY2FzdCAoU2lnbk1zZzMsIHRoZSBwYXJ0aWFsIHNpZykgKi9cbiAgV2FpdE1zZzMgPSAnV2FpdE1zZzMnLFxuICAvKiogRmluYWwgUmVkUGFsbGFzIHNpZ25hdHVyZSAoc2lnbmF0dXJlL3JrKSBpcyBhdmFpbGFibGUgdmlhIGdldFNpZ25hdHVyZSgpICovXG4gIENvbXBsZXRlID0gJ0NvbXBsZXRlJyxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiBhIFJlZFBhbGxhcyByZXJhbmQgKGtleSByZS1yYW5kb21pemF0aW9uKSBzZXNzaW9uLlxuICpcbiAqIEEgcmVyYW5kIHNlc3Npb24gbXVzdCBydW4gYmVmb3JlIGV2ZXJ5IFJlZFBhbGxhcyBEU0csIGJldHdlZW4gdGhlIHNhbWUgMiBwYXJ0aWVzXG4gKiB0aGF0IHdpbGwgdGhlbiBzaWduLiBTaW5jZSBgQGJpdGdvL3dhc20tbXBzYCAxLjE3LjAsIERTRyBubyBsb25nZXIgcmFuZG9taXplcyB0aGVcbiAqIGtleSBpdCBzaWducyB3aXRoOyB0aGUgcmFuZG9taXplciAoYGFscGhhYCkgaXMgcHJvZHVjZWQgaGVyZSBpbnN0ZWFkLlxuICovXG5leHBvcnQgZW51bSBSZWRQYWxsYXNSZXJhbmRTdGF0ZSB7XG4gIC8qKiBSZXJhbmQgc2Vzc2lvbiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgKi9cbiAgVW5pbml0aWFsaXplZCA9ICdVbmluaXRpYWxpemVkJyxcbiAgLyoqIGluaXRSZXJhbmQoKSBoYXMgYmVlbiBjYWxsZWQ7IHJlYWR5IGZvciBnZXRGaXJzdE1lc3NhZ2UoKSAqL1xuICBJbml0ID0gJ0luaXQnLFxuICAvKiogUjAgKGxvY2FsIGNvbW1pdG1lbnQpIGVtaXR0ZWQ7IHdhaXRpbmcgZm9yIGNvdW50ZXJwYXJ0J3MgUjAgYnJvYWRjYXN0IChjb21taXRtZW50KSAqL1xuICBXYWl0TXNnMSA9ICdXYWl0TXNnMScsXG4gIC8qKiBSMSBicm9hZGNhc3QgZW1pdHRlZDsgd2FpdGluZyBmb3IgY291bnRlcnBhcnQncyBSMSBicm9hZGNhc3QgKHJhbmRvbWl6ZXIgKyBibGluZCBvcGVuaW5nKSAqL1xuICBXYWl0TXNnMiA9ICdXYWl0TXNnMicsXG4gIC8qKiBSZXJhbmRvbWl6ZWQga2V5IHNoYXJlIChrZXlTaGFyZS9way9hbHBoYSkgaXMgYXZhaWxhYmxlIHZpYSBnZXRSZXJhbmRvbWl6ZWRLZXlTaGFyZSgpICovXG4gIENvbXBsZXRlID0gJ0NvbXBsZXRlJyxcbn1cblxuLyoqXG4gKiBUaGUgZmluYWwgb3V0cHV0IG9mIGEgUmVkUGFsbGFzIHJlcmFuZCBzZXNzaW9uLlxuICpcbiAqIC0gYGtleVNoYXJlYCBpcyB0aGUgcmVyYW5kb21pemVkIGtleXNoYXJlIHRvIGJlIHBhc3NlZCB0byBgUmVkUGFsbGFzRFNHLmluaXREc2dgLlxuICogLSBgcGtgIGlzIHRoZSByZXJhbmRvbWl6ZWQgcHVibGljIGtleTsgdGhlIERTRyByZXN1bHQncyBgcmtgIGVxdWFscyBpdCwgYW5kIHRoZSBEU0dcbiAqICAgc2lnbmF0dXJlIHZlcmlmaWVzIHVuZGVyIGl0LlxuICogLSBgYWxwaGFgIGlzIHRoZSAzMi1ieXRlIHR3ZWFrIHNjYWxhciBhcHBsaWVkIHRvIGJvdGggdGhlIERLRyBrZXlzaGFyZXMgYW5kIHRoZSBES0dcbiAqICAgcHVibGljIGtleSAoYHBrID0gcGtfZGtnICsgW2FscGhhXUdgKS4gSXQgaXMgZnJlc2ggcGVyIHJlcmFuZCBzZXNzaW9uIGFuZCBpZGVudGljYWxcbiAqICAgb24gYm90aCBwYXJ0aWVzLiBTaW5jZSB0aGUgcmVyYW5kIHByb3RvY29sIG1vdmVkIG91dCBvZiBEU0cgKHdhc20tbXBzIDEuMTcuMCksIHRoaXNcbiAqICAgaXMgdGhlIG9ubHkgcGxhY2UgYGFscGhhYCBpcyBleHBvc2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZFBhbGxhc1JlcmFuZFJlc3VsdCB7XG4gIGtleVNoYXJlOiBCdWZmZXI7XG4gIHBrOiBCdWZmZXI7XG4gIGFscGhhOiBCdWZmZXI7XG59XG5cbi8qKlxuICogVGhlIGZpbmFsIG91dHB1dCBvZiBhIFJlZFBhbGxhcyBEU0cgc2Vzc2lvbi5cbiAqXG4gKiAtIGBzaWduYXR1cmVgIGlzIHRoZSA2NC1ieXRlIHJhdyBTY2hub3JyIChSZWRQYWxsYXMpIHNpZ25hdHVyZS5cbiAqIC0gYHJrYCBpcyB0aGUgcmVyYW5kb21pemVkIHZlcmlmaWNhdGlvbiBrZXkgdGhhdCB0aGUgc2lnbmF0dXJlIG11c3QgYmUgdmVyaWZpZWQgYWdhaW5zdFxuICogICAoaS5lLiBgcmVkcGFsbGFzX3ZlcmlmeShyaywgc2lnbmF0dXJlLCBtZXNzYWdlKWApLCBub3QgdGhlIERLRyBwdWJsaWMga2V5LiBEU0cgZG9lc1xuICogICBub3QgcmFuZG9taXplIHRoZSBrZXkgaXQgc2lnbnMgd2l0aDogYHJrYCBlcXVhbHMgdGhlIGBwa2Agb2YgdGhlIHJlcmFuZG9taXplZFxuICogICBrZXlzaGFyZSB0aGUgRFNHIHNlc3Npb24gd2FzIGluaXRpYWxpemVkIHdpdGggKHNlZSBgUmVkUGFsbGFzUmVyYW5kUmVzdWx0YCksIGFuZFxuICogICB0aGUgY29ycmVzcG9uZGluZyBgYWxwaGFgIGlzIGF2YWlsYWJsZSBmcm9tIHRoYXQgcmVyYW5kIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWRQYWxsYXNTaWduYXR1cmVSZXN1bHQge1xuICBzaWduYXR1cmU6IEJ1ZmZlcjtcbiAgcms6IEJ1ZmZlcjtcbn1cblxuLyoqIEEgUEdQIGRldGFjaGVkLXNpZ25lZCBtZXNzYWdlIGJ5IGEgcGFydHkuXG4gKiBgbWVzc2FnZWAgaXMgdGhlIHJhdyBwYXlsb2FkIGVuY29kZWQgYXMgYmFzZTY0LlxuICogYHNpZ25hdHVyZWAgaXMgYW4gYXJtb3JlZCBQR1AgZGV0YWNoZWQgc2lnbmF0dXJlIG92ZXIgdGhvc2UgYnl0ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTVBTU2lnbmVkTWVzc2FnZSB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2lnbmF0dXJlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZTxUPiB7XG4gIHBheWxvYWQ6IFQ7XG4gIGZyb206IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgU2VyaWFsaXplZE1lc3NhZ2UgPSBNZXNzYWdlPHN0cmluZz47XG5cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRNZXNzYWdlcyA9IE1lc3NhZ2U8c3RyaW5nPltdO1xuXG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWRNZXNzYWdlID0gTWVzc2FnZTxVaW50OEFycmF5PjtcblxuZXhwb3J0IHR5cGUgRGVzZXJpYWxpemVkTWVzc2FnZXMgPSBNZXNzYWdlPFVpbnQ4QXJyYXk+W107XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVNZXNzYWdlKG1zZzogRGVzZXJpYWxpemVkTWVzc2FnZSk6IFNlcmlhbGl6ZWRNZXNzYWdlIHtcbiAgcmV0dXJuIHsgZnJvbTogbXNnLmZyb20sIHBheWxvYWQ6IEJ1ZmZlci5mcm9tKG1zZy5wYXlsb2FkKS50b1N0cmluZygnYmFzZTY0JykgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplTWVzc2FnZShtc2c6IFNlcmlhbGl6ZWRNZXNzYWdlKTogRGVzZXJpYWxpemVkTWVzc2FnZSB7XG4gIHJldHVybiB7IGZyb206IG1zZy5mcm9tLCBwYXlsb2FkOiBCdWZmZXIuZnJvbShtc2cucGF5bG9hZCwgJ2Jhc2U2NCcpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVNZXNzYWdlcyhtc2dzOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyk6IFNlcmlhbGl6ZWRNZXNzYWdlcyB7XG4gIHJldHVybiBtc2dzLm1hcChzZXJpYWxpemVNZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplTWVzc2FnZXMobXNnczogU2VyaWFsaXplZE1lc3NhZ2VzKTogRGVzZXJpYWxpemVkTWVzc2FnZXMge1xuICByZXR1cm4gbXNncy5tYXAoZGVzZXJpYWxpemVNZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29kZWRSZWR1Y2VkS2V5U2hhcmUocmVkdWNlZEtleVNoYXJlOiBCdWZmZXIgfCBVaW50OEFycmF5KTogUmVkUGFsbGFzUmVkdWNlZEtleVNoYXJlIHtcbiAgY29uc3QgZGVjb2RlZCA9IFJlZFBhbGxhc1JlZHVjZWRLZXlTaGFyZVR5cGUuZGVjb2RlKGRlY29kZShyZWR1Y2VkS2V5U2hhcmUpKTtcbiAgaWYgKGlzTGVmdChkZWNvZGVkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIHJlZHVjZWRLZXlTaGFyZTogJHtkZWNvZGVkLmxlZnR9YCk7XG4gIH1cbiAgcmV0dXJuIGRlY29kZWQucmlnaHQ7XG59XG4iXX0=
@@ -0,0 +1,56 @@
1
+ import { RedPallasDKG } from './dkg';
2
+ import { RedPallasDSG } from './dsg';
3
+ import { RedPallasRerand } from './rerand';
4
+ import { DeserializedMessages, RedPallasRerandResult, RedPallasSignatureResult } from './types';
5
+ /**
6
+ * Per-party deterministic seed material. To use the same seed for both, pass it as both fields.
7
+ * `encKey` seeds the X25519 encryption key; `dkgSeed` seeds DKG round 0.
8
+ */
9
+ export interface RedPallasDKGPartySeed {
10
+ encKey?: Buffer;
11
+ dkgSeed?: Buffer;
12
+ }
13
+ /**
14
+ * Runs a full 3-party (2-of-3) RedPallas DKG in-process. See `RedPallasDKGPartySeed`.
15
+ * Mirrors `generateEdDsaDKGKeyShares` in `../eddsa-mps/util.ts`.
16
+ */
17
+ export declare function generateRedPallasDKGKeyShares(seedUser?: RedPallasDKGPartySeed, seedBackup?: RedPallasDKGPartySeed, seedBitgo?: RedPallasDKGPartySeed): Promise<[RedPallasDKG, RedPallasDKG, RedPallasDKG]>;
18
+ /**
19
+ * Runs a full 2-party rerand session in-process: the key re-randomization that must
20
+ * precede every RedPallas DSG (same 2 parties that will then sign). See `RedPallasRerand`
21
+ * for the protocol. Asserts that both parties agree on the rerandomized public key `pk`
22
+ * and the tweak scalar `alpha`.
23
+ */
24
+ export declare function executeRerand(party1: RedPallasRerand, party2: RedPallasRerand, keyShare1: Buffer, keyShare2: Buffer): Promise<[RedPallasRerandResult, RedPallasRerandResult]>;
25
+ /**
26
+ * Initializes two RedPallas DSG parties and drives them through the protocol until the
27
+ * specified round. Mirrors `executeTillRound` in `../eddsa-mps/util.ts`, minus the
28
+ * derivation path (RedPallas DSG operates on an already-(root-or-derived) keyshare; there
29
+ * is no per-signing-session derivation path).
30
+ *
31
+ * The keyshares are used as given: for the supported flow they are rerand outputs from
32
+ * `executeRerand`, in which case both parties' signature `rk` equals the rerand `pk`
33
+ * and the signature verifies under it.
34
+ *
35
+ * @param round - Round to execute until (1–3). Returns intermediate message arrays for 1–2,
36
+ * or the final `RedPallasSignatureResult` (signature/rk) for 3.
37
+ * @param party1Dsg - First DSG party (`new RedPallasDSG(partyIdx)`), not yet initialized.
38
+ * @param party2Dsg - Second DSG party (`new RedPallasDSG(partyIdx)`), not yet initialized.
39
+ * @param keyShare1 - Key share for the first party.
40
+ * @param keyShare2 - Key share for the second party.
41
+ * @param message - Raw message bytes to sign.
42
+ */
43
+ export declare function executeTillRound(round: number, party1Dsg: RedPallasDSG, party2Dsg: RedPallasDSG, keyShare1: Buffer, keyShare2: Buffer, message: Buffer): Promise<DeserializedMessages[] | RedPallasSignatureResult>;
44
+ /**
45
+ * Verifies a `RedPallasSignatureResult` against the raw message.
46
+ *
47
+ * IMPORTANT: unlike EdDSA, RedPallas signatures must be verified against `rk` — the
48
+ * rerandomized verification key produced by the rerand session that preceded DSG — and
49
+ * NOT against the DKG (or derived) public key directly. `rk` equals the rerand result's
50
+ * `pk` (`pk = pk_dkg + [alpha]G`); the `alpha` randomizer is available from
51
+ * `RedPallasRerand.getRerandomizedKeyShare()` for callers that need to independently
52
+ * confirm the relationship between `rk` and a known `pk`, but is not required to verify
53
+ * the signature itself.
54
+ */
55
+ export declare function verifyRedPallasSignature(signatureResult: RedPallasSignatureResult, message: Buffer): Promise<boolean>;
56
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/tss/redpallas-mps/util.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAQhG;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,QAAQ,CAAC,EAAE,qBAAqB,EAChC,UAAU,CAAC,EAAE,qBAAqB,EAClC,SAAS,CAAC,EAAE,qBAAqB,GAChC,OAAO,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAiCrD;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAC,CAgBzD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,EAAE,GAAG,wBAAwB,CAAC,CAyB5D;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,wBAAwB,EACzC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAUlB"}
@@ -0,0 +1,173 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.generateRedPallasDKGKeyShares = generateRedPallasDKGKeyShares;
40
+ exports.executeRerand = executeRerand;
41
+ exports.executeTillRound = executeTillRound;
42
+ exports.verifyRedPallasSignature = verifyRedPallasSignature;
43
+ const crypto_1 = __importDefault(require("crypto"));
44
+ const assert_1 = __importDefault(require("assert"));
45
+ const ed25519_1 = require("@noble/curves/ed25519");
46
+ const dkg_1 = require("./dkg");
47
+ function generateX25519Keypair(seed) {
48
+ const privKey = seed ? seed.subarray(0, 32) : crypto_1.default.randomBytes(32);
49
+ const pubKey = Buffer.from(ed25519_1.x25519.getPublicKey(privKey));
50
+ return { privKey: Buffer.from(privKey), pubKey };
51
+ }
52
+ function validateSeed(seed) {
53
+ (0, assert_1.default)(!seed?.encKey || seed.encKey.length >= 32, 'encKey must be at least 32 bytes');
54
+ (0, assert_1.default)(!seed?.dkgSeed || seed.dkgSeed.length >= 32, 'dkgSeed must be at least 32 bytes');
55
+ return seed ?? {};
56
+ }
57
+ /**
58
+ * Runs a full 3-party (2-of-3) RedPallas DKG in-process. See `RedPallasDKGPartySeed`.
59
+ * Mirrors `generateEdDsaDKGKeyShares` in `../eddsa-mps/util.ts`.
60
+ */
61
+ async function generateRedPallasDKGKeyShares(seedUser, seedBackup, seedBitgo) {
62
+ const { encKey: userEncKey, dkgSeed: userDkgSeed } = validateSeed(seedUser);
63
+ const { encKey: backupEncKey, dkgSeed: backupDkgSeed } = validateSeed(seedBackup);
64
+ const { encKey: bitgoEncKey, dkgSeed: bitgoDkgSeed } = validateSeed(seedBitgo);
65
+ const user = new dkg_1.RedPallasDKG(3, 2, 0);
66
+ const backup = new dkg_1.RedPallasDKG(3, 2, 1);
67
+ const bitgo = new dkg_1.RedPallasDKG(3, 2, 2);
68
+ const userKP = generateX25519Keypair(userEncKey);
69
+ const backupKP = generateX25519Keypair(backupEncKey);
70
+ const bitgoKP = generateX25519Keypair(bitgoEncKey);
71
+ await user.initDkg(userKP.privKey, [backupKP.pubKey, bitgoKP.pubKey]);
72
+ await backup.initDkg(backupKP.privKey, [userKP.pubKey, bitgoKP.pubKey]);
73
+ await bitgo.initDkg(bitgoKP.privKey, [userKP.pubKey, backupKP.pubKey]);
74
+ const r1Messages = [
75
+ user.getFirstMessage(userDkgSeed),
76
+ backup.getFirstMessage(backupDkgSeed),
77
+ bitgo.getFirstMessage(bitgoDkgSeed),
78
+ ];
79
+ const r2Messages = [
80
+ ...user.handleIncomingMessages(r1Messages),
81
+ ...backup.handleIncomingMessages(r1Messages),
82
+ ...bitgo.handleIncomingMessages(r1Messages),
83
+ ];
84
+ user.handleIncomingMessages(r2Messages);
85
+ backup.handleIncomingMessages(r2Messages);
86
+ bitgo.handleIncomingMessages(r2Messages);
87
+ return [user, backup, bitgo];
88
+ }
89
+ /**
90
+ * Runs a full 2-party rerand session in-process: the key re-randomization that must
91
+ * precede every RedPallas DSG (same 2 parties that will then sign). See `RedPallasRerand`
92
+ * for the protocol. Asserts that both parties agree on the rerandomized public key `pk`
93
+ * and the tweak scalar `alpha`.
94
+ */
95
+ async function executeRerand(party1, party2, keyShare1, keyShare2) {
96
+ await party1.initRerand(keyShare1, party2.getPartyIdx());
97
+ await party2.initRerand(keyShare2, party1.getPartyIdx());
98
+ const party1Round0Message = party1.getFirstMessage();
99
+ const party2Round0Message = party2.getFirstMessage();
100
+ const [party1Round1Message] = party1.handleIncomingMessages([party1Round0Message, party2Round0Message]);
101
+ const [party2Round1Message] = party2.handleIncomingMessages([party1Round0Message, party2Round0Message]);
102
+ party1.handleIncomingMessages([party1Round1Message, party2Round1Message]);
103
+ party2.handleIncomingMessages([party1Round1Message, party2Round1Message]);
104
+ const result1 = party1.getRerandomizedKeyShare();
105
+ const result2 = party2.getRerandomizedKeyShare();
106
+ (0, assert_1.default)(result1.pk.toString('hex') === result2.pk.toString('hex'));
107
+ (0, assert_1.default)(result1.alpha.toString('hex') === result2.alpha.toString('hex'));
108
+ return [result1, result2];
109
+ }
110
+ /**
111
+ * Initializes two RedPallas DSG parties and drives them through the protocol until the
112
+ * specified round. Mirrors `executeTillRound` in `../eddsa-mps/util.ts`, minus the
113
+ * derivation path (RedPallas DSG operates on an already-(root-or-derived) keyshare; there
114
+ * is no per-signing-session derivation path).
115
+ *
116
+ * The keyshares are used as given: for the supported flow they are rerand outputs from
117
+ * `executeRerand`, in which case both parties' signature `rk` equals the rerand `pk`
118
+ * and the signature verifies under it.
119
+ *
120
+ * @param round - Round to execute until (1–3). Returns intermediate message arrays for 1–2,
121
+ * or the final `RedPallasSignatureResult` (signature/rk) for 3.
122
+ * @param party1Dsg - First DSG party (`new RedPallasDSG(partyIdx)`), not yet initialized.
123
+ * @param party2Dsg - Second DSG party (`new RedPallasDSG(partyIdx)`), not yet initialized.
124
+ * @param keyShare1 - Key share for the first party.
125
+ * @param keyShare2 - Key share for the second party.
126
+ * @param message - Raw message bytes to sign.
127
+ */
128
+ async function executeTillRound(round, party1Dsg, party2Dsg, keyShare1, keyShare2, message) {
129
+ if (round < 1 || round > 3) {
130
+ throw Error('Invalid round number');
131
+ }
132
+ await party1Dsg.initDsg(keyShare1, message, party2Dsg.getPartyIdx());
133
+ await party2Dsg.initDsg(keyShare2, message, party1Dsg.getPartyIdx());
134
+ const party1Round0Message = party1Dsg.getFirstMessage();
135
+ const party2Round0Message = party2Dsg.getFirstMessage();
136
+ const [party2Round1Messages] = party2Dsg.handleIncomingMessages([party1Round0Message, party2Round0Message]);
137
+ const [party1Round1Messages] = party1Dsg.handleIncomingMessages([party1Round0Message, party2Round0Message]);
138
+ if (round === 1)
139
+ return [[party1Round1Messages], [party2Round1Messages]];
140
+ const [party1Round2Messages] = party1Dsg.handleIncomingMessages([party1Round1Messages, party2Round1Messages]);
141
+ const [party2Round2Messages] = party2Dsg.handleIncomingMessages([party1Round1Messages, party2Round1Messages]);
142
+ if (round === 2)
143
+ return [[party1Round2Messages], [party2Round2Messages]];
144
+ party1Dsg.handleIncomingMessages([party1Round2Messages, party2Round2Messages]);
145
+ party2Dsg.handleIncomingMessages([party1Round2Messages, party2Round2Messages]);
146
+ const sig1 = party1Dsg.getSignature();
147
+ const sig2 = party2Dsg.getSignature();
148
+ (0, assert_1.default)(sig1.signature.toString('hex') === sig2.signature.toString('hex'));
149
+ (0, assert_1.default)(sig1.rk.toString('hex') === sig2.rk.toString('hex'));
150
+ return sig1;
151
+ }
152
+ /**
153
+ * Verifies a `RedPallasSignatureResult` against the raw message.
154
+ *
155
+ * IMPORTANT: unlike EdDSA, RedPallas signatures must be verified against `rk` — the
156
+ * rerandomized verification key produced by the rerand session that preceded DSG — and
157
+ * NOT against the DKG (or derived) public key directly. `rk` equals the rerand result's
158
+ * `pk` (`pk = pk_dkg + [alpha]G`); the `alpha` randomizer is available from
159
+ * `RedPallasRerand.getRerandomizedKeyShare()` for callers that need to independently
160
+ * confirm the relationship between `rk` and a known `pk`, but is not required to verify
161
+ * the signature itself.
162
+ */
163
+ async function verifyRedPallasSignature(signatureResult, message) {
164
+ const wasm = typeof window !== 'undefined' && !window.process && !window.process?.['type']
165
+ ? // eslint-disable-next-line import/no-internal-modules -- @bitgo/wasm-mps exposes environment-specific subpath exports.
166
+ await Promise.resolve().then(() => __importStar(require('@bitgo/wasm-mps/web'))).then(async (webWasm) => {
167
+ await webWasm.default();
168
+ return webWasm;
169
+ })
170
+ : await Promise.resolve().then(() => __importStar(require('@bitgo/wasm-mps')));
171
+ return wasm.redpallas_verify(signatureResult.rk, signatureResult.signature, message);
172
+ }
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvcmVkcGFsbGFzLW1wcy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUNBLHNFQXFDQztBQVFELHNDQXFCQztBQW9CRCw0Q0FnQ0M7QUFhRCw0REFhQztBQWpMRCxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLG1EQUErQztBQUMvQywrQkFBcUM7QUFLckMsU0FBUyxxQkFBcUIsQ0FBQyxJQUFhO0lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDbkQsQ0FBQztBQVdELFNBQVMsWUFBWSxDQUFDLElBQTRCO0lBQ2hELElBQUEsZ0JBQU0sRUFBQyxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLGtDQUFrQyxDQUFDLENBQUM7SUFDdEYsSUFBQSxnQkFBTSxFQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztJQUN6RixPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7R0FHRztBQUNJLEtBQUssVUFBVSw2QkFB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dGVudCI6WyJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyB4MjU1MTkgfSBmcm9tICdAbm9ibGUvY3VydmVzL2VkMjU1MTknO1xuaW1wb3J0IHsgUmVkUGFsbGFzREtHIH0gZnJvbSAnLi9ka2cnO1xuaW1wb3J0IHsgUmVkUGFsbGFzRFNHIH0gZnJvbSAnLi9kc2cnO1xuaW1wb3J0IHsgUmVkUGFsbGFzUmVyYW5kIH0gZnJvbSAnLi9yZXJhbmQnO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkTWVzc2FnZXMsIFJlZFBhbGxhc1JlcmFuZFJlc3VsdCwgUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlWDI1NTE5S2V5cGFpcihzZWVkPzogQnVmZmVyKTogeyBwcml2S2V5OiBCdWZmZXI7IHB1YktleTogQnVmZmVyIH0ge1xuICBjb25zdCBwcml2S2V5ID0gc2VlZCA/IHNlZWQuc3ViYXJyYXkoMCwgMzIpIDogY3J5cHRvLnJhbmRvbUJ5dGVzKDMyKTtcbiAgY29uc3QgcHViS2V5ID0gQnVmZmVyLmZyb20oeDI1NTE5LmdldFB1YmxpY0tleShwcml2S2V5KSk7XG4gIHJldHVybiB7IHByaXZLZXk6IEJ1ZmZlci5mcm9tKHByaXZLZXkpLCBwdWJLZXkgfTtcbn1cblxuLyoqXG4gKiBQZXItcGFydHkgZGV0ZXJtaW5pc3RpYyBzZWVkIG1hdGVyaWFsLiBUbyB1c2UgdGhlIHNhbWUgc2VlZCBmb3IgYm90aCwgcGFzcyBpdCBhcyBib3RoIGZpZWxkcy5cbiAqIGBlbmNLZXlgIHNlZWRzIHRoZSBYMjU1MTkgZW5jcnlwdGlvbiBrZXk7IGBka2dTZWVkYCBzZWVkcyBES0cgcm91bmQgMC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWRQYWxsYXNES0dQYXJ0eVNlZWQge1xuICBlbmNLZXk/OiBCdWZmZXI7XG4gIGRrZ1NlZWQ/OiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2VlZChzZWVkPzogUmVkUGFsbGFzREtHUGFydHlTZWVkKTogUmVkUGFsbGFzREtHUGFydHlTZWVkIHtcbiAgYXNzZXJ0KCFzZWVkPy5lbmNLZXkgfHwgc2VlZC5lbmNLZXkubGVuZ3RoID49IDMyLCAnZW5jS2V5IG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMnKTtcbiAgYXNzZXJ0KCFzZWVkPy5ka2dTZWVkIHx8IHNlZWQuZGtnU2VlZC5sZW5ndGggPj0gMzIsICdka2dTZWVkIG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMnKTtcbiAgcmV0dXJuIHNlZWQgPz8ge307XG59XG5cbi8qKlxuICogUnVucyBhIGZ1bGwgMy1wYXJ0eSAoMi1vZi0zKSBSZWRQYWxsYXMgREtHIGluLXByb2Nlc3MuIFNlZSBgUmVkUGFsbGFzREtHUGFydHlTZWVkYC5cbiAqIE1pcnJvcnMgYGdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXNgIGluIGAuLi9lZGRzYS1tcHMvdXRpbC50c2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVJlZFBhbGxhc0RLR0tleVNoYXJlcyhcbiAgc2VlZFVzZXI/OiBSZWRQYWxsYXNES0dQYXJ0eVNlZWQsXG4gIHNlZWRCYWNrdXA/OiBSZWRQYWxsYXNES0dQYXJ0eVNlZWQsXG4gIHNlZWRCaXRnbz86IFJlZFBhbGxhc0RLR1BhcnR5U2VlZFxuKTogUHJvbWlzZTxbUmVkUGFsbGFzREtHLCBSZWRQYWxsYXNES0csIFJlZFBhbGxhc0RLR10+IHtcbiAgY29uc3QgeyBlbmNLZXk6IHVzZXJFbmNLZXksIGRrZ1NlZWQ6IHVzZXJEa2dTZWVkIH0gPSB2YWxpZGF0ZVNlZWQoc2VlZFVzZXIpO1xuICBjb25zdCB7IGVuY0tleTogYmFja3VwRW5jS2V5LCBka2dTZWVkOiBiYWNrdXBEa2dTZWVkIH0gPSB2YWxpZGF0ZVNlZWQoc2VlZEJhY2t1cCk7XG4gIGNvbnN0IHsgZW5jS2V5OiBiaXRnb0VuY0tleSwgZGtnU2VlZDogYml0Z29Ea2dTZWVkIH0gPSB2YWxpZGF0ZVNlZWQoc2VlZEJpdGdvKTtcblxuICBjb25zdCB1c2VyID0gbmV3IFJlZFBhbGxhc0RLRygzLCAyLCAwKTtcbiAgY29uc3QgYmFja3VwID0gbmV3IFJlZFBhbGxhc0RLRygzLCAyLCAxKTtcbiAgY29uc3QgYml0Z28gPSBuZXcgUmVkUGFsbGFzREtHKDMsIDIsIDIpO1xuXG4gIGNvbnN0IHVzZXJLUCA9IGdlbmVyYXRlWDI1NTE5S2V5cGFpcih1c2VyRW5jS2V5KTtcbiAgY29uc3QgYmFja3VwS1AgPSBnZW5lcmF0ZVgyNTUxOUtleXBhaXIoYmFja3VwRW5jS2V5KTtcbiAgY29uc3QgYml0Z29LUCA9IGdlbmVyYXRlWDI1NTE5S2V5cGFpcihiaXRnb0VuY0tleSk7XG5cbiAgYXdhaXQgdXNlci5pbml0RGtnKHVzZXJLUC5wcml2S2V5LCBbYmFja3VwS1AucHViS2V5LCBiaXRnb0tQLnB1YktleV0pO1xuICBhd2FpdCBiYWNrdXAuaW5pdERrZyhiYWNrdXBLUC5wcml2S2V5LCBbdXNlcktQLnB1YktleSwgYml0Z29LUC5wdWJLZXldKTtcbiAgYXdhaXQgYml0Z28uaW5pdERrZyhiaXRnb0tQLnByaXZLZXksIFt1c2VyS1AucHViS2V5LCBiYWNrdXBLUC5wdWJLZXldKTtcblxuICBjb25zdCByMU1lc3NhZ2VzID0gW1xuICAgIHVzZXIuZ2V0Rmlyc3RNZXNzYWdlKHVzZXJEa2dTZWVkKSxcbiAgICBiYWNrdXAuZ2V0Rmlyc3RNZXNzYWdlKGJhY2t1cERrZ1NlZWQpLFxuICAgIGJpdGdvLmdldEZpcnN0TWVzc2FnZShiaXRnb0RrZ1NlZWQpLFxuICBdO1xuXG4gIGNvbnN0IHIyTWVzc2FnZXMgPSBbXG4gICAgLi4udXNlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHIxTWVzc2FnZXMpLFxuICAgIC4uLmJhY2t1cC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHIxTWVzc2FnZXMpLFxuICAgIC4uLmJpdGdvLmhhbmRsZUluY29taW5nTWVzc2FnZXMocjFNZXNzYWdlcyksXG4gIF07XG5cbiAgdXNlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHIyTWVzc2FnZXMpO1xuICBiYWNrdXAuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyMk1lc3NhZ2VzKTtcbiAgYml0Z28uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyMk1lc3NhZ2VzKTtcbiAgcmV0dXJuIFt1c2VyLCBiYWNrdXAsIGJpdGdvXTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgZnVsbCAyLXBhcnR5IHJlcmFuZCBzZXNzaW9uIGluLXByb2Nlc3M6IHRoZSBrZXkgcmUtcmFuZG9taXphdGlvbiB0aGF0IG11c3RcbiAqIHByZWNlZGUgZXZlcnkgUmVkUGFsbGFzIERTRyAoc2FtZSAyIHBhcnRpZXMgdGhhdCB3aWxsIHRoZW4gc2lnbikuIFNlZSBgUmVkUGFsbGFzUmVyYW5kYFxuICogZm9yIHRoZSBwcm90b2NvbC4gQXNzZXJ0cyB0aGF0IGJvdGggcGFydGllcyBhZ3JlZSBvbiB0aGUgcmVyYW5kb21pemVkIHB1YmxpYyBrZXkgYHBrYFxuICogYW5kIHRoZSB0d2VhayBzY2FsYXIgYGFscGhhYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVSZXJhbmQoXG4gIHBhcnR5MTogUmVkUGFsbGFzUmVyYW5kLFxuICBwYXJ0eTI6IFJlZFBhbGxhc1JlcmFuZCxcbiAga2V5U2hhcmUxOiBCdWZmZXIsXG4gIGtleVNoYXJlMjogQnVmZmVyXG4pOiBQcm9taXNlPFtSZWRQYWxsYXNSZXJhbmRSZXN1bHQsIFJlZFBhbGxhc1JlcmFuZFJlc3VsdF0+IHtcbiAgYXdhaXQgcGFydHkxLmluaXRSZXJhbmQoa2V5U2hhcmUxLCBwYXJ0eTIuZ2V0UGFydHlJZHgoKSk7XG4gIGF3YWl0IHBhcnR5Mi5pbml0UmVyYW5kKGtleVNoYXJlMiwgcGFydHkxLmdldFBhcnR5SWR4KCkpO1xuICBjb25zdCBwYXJ0eTFSb3VuZDBNZXNzYWdlID0gcGFydHkxLmdldEZpcnN0TWVzc2FnZSgpO1xuICBjb25zdCBwYXJ0eTJSb3VuZDBNZXNzYWdlID0gcGFydHkyLmdldEZpcnN0TWVzc2FnZSgpO1xuXG4gIGNvbnN0IFtwYXJ0eTFSb3VuZDFNZXNzYWdlXSA9IHBhcnR5MS5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDBNZXNzYWdlLCBwYXJ0eTJSb3VuZDBNZXNzYWdlXSk7XG4gIGNvbnN0IFtwYXJ0eTJSb3VuZDFNZXNzYWdlXSA9IHBhcnR5Mi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDBNZXNzYWdlLCBwYXJ0eTJSb3VuZDBNZXNzYWdlXSk7XG4gIHBhcnR5MS5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDFNZXNzYWdlLCBwYXJ0eTJSb3VuZDFNZXNzYWdlXSk7XG4gIHBhcnR5Mi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDFNZXNzYWdlLCBwYXJ0eTJSb3VuZDFNZXNzYWdlXSk7XG5cbiAgY29uc3QgcmVzdWx0MSA9IHBhcnR5MS5nZXRSZXJhbmRvbWl6ZWRLZXlTaGFyZSgpO1xuICBjb25zdCByZXN1bHQyID0gcGFydHkyLmdldFJlcmFuZG9taXplZEtleVNoYXJlKCk7XG4gIGFzc2VydChyZXN1bHQxLnBrLnRvU3RyaW5nKCdoZXgnKSA9PT0gcmVzdWx0Mi5way50b1N0cmluZygnaGV4JykpO1xuICBhc3NlcnQocmVzdWx0MS5hbHBoYS50b1N0cmluZygnaGV4JykgPT09IHJlc3VsdDIuYWxwaGEudG9TdHJpbmcoJ2hleCcpKTtcbiAgcmV0dXJuIFtyZXN1bHQxLCByZXN1bHQyXTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0d28gUmVkUGFsbGFzIERTRyBwYXJ0aWVzIGFuZCBkcml2ZXMgdGhlbSB0aHJvdWdoIHRoZSBwcm90b2NvbCB1bnRpbCB0aGVcbiAqIHNwZWNpZmllZCByb3VuZC4gTWlycm9ycyBgZXhlY3V0ZVRpbGxSb3VuZGAgaW4gYC4uL2VkZHNhLW1wcy91dGlsLnRzYCwgbWludXMgdGhlXG4gKiBkZXJpdmF0aW9uIHBhdGggKFJlZFBhbGxhcyBEU0cgb3BlcmF0ZXMgb24gYW4gYWxyZWFkeS0ocm9vdC1vci1kZXJpdmVkKSBrZXlzaGFyZTsgdGhlcmVcbiAqIGlzIG5vIHBlci1zaWduaW5nLXNlc3Npb24gZGVyaXZhdGlvbiBwYXRoKS5cbiAqXG4gKiBUaGUga2V5c2hhcmVzIGFyZSB1c2VkIGFzIGdpdmVuOiBmb3IgdGhlIHN1cHBvcnRlZCBmbG93IHRoZXkgYXJlIHJlcmFuZCBvdXRwdXRzIGZyb21cbiAqIGBleGVjdXRlUmVyYW5kYCwgaW4gd2hpY2ggY2FzZSBib3RoIHBhcnRpZXMnIHNpZ25hdHVyZSBgcmtgIGVxdWFscyB0aGUgcmVyYW5kIGBwa2BcbiAqIGFuZCB0aGUgc2lnbmF0dXJlIHZlcmlmaWVzIHVuZGVyIGl0LlxuICpcbiAqIEBwYXJhbSByb3VuZCAtIFJvdW5kIHRvIGV4ZWN1dGUgdW50aWwgKDHigJMzKS4gUmV0dXJucyBpbnRlcm1lZGlhdGUgbWVzc2FnZSBhcnJheXMgZm9yIDHigJMyLFxuICogICBvciB0aGUgZmluYWwgYFJlZFBhbGxhc1NpZ25hdHVyZVJlc3VsdGAgKHNpZ25hdHVyZS9yaykgZm9yIDMuXG4gKiBAcGFyYW0gcGFydHkxRHNnIC0gRmlyc3QgRFNHIHBhcnR5IChgbmV3IFJlZFBhbGxhc0RTRyhwYXJ0eUlkeClgKSwgbm90IHlldCBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSBwYXJ0eTJEc2cgLSBTZWNvbmQgRFNHIHBhcnR5IChgbmV3IFJlZFBhbGxhc0RTRyhwYXJ0eUlkeClgKSwgbm90IHlldCBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSBrZXlTaGFyZTEgLSBLZXkgc2hhcmUgZm9yIHRoZSBmaXJzdCBwYXJ0eS5cbiAqIEBwYXJhbSBrZXlTaGFyZTIgLSBLZXkgc2hhcmUgZm9yIHRoZSBzZWNvbmQgcGFydHkuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFJhdyBtZXNzYWdlIGJ5dGVzIHRvIHNpZ24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlVGlsbFJvdW5kKFxuICByb3VuZDogbnVtYmVyLFxuICBwYXJ0eTFEc2c6IFJlZFBhbGxhc0RTRyxcbiAgcGFydHkyRHNnOiBSZWRQYWxsYXNEU0csXG4gIGtleVNoYXJlMTogQnVmZmVyLFxuICBrZXlTaGFyZTI6IEJ1ZmZlcixcbiAgbWVzc2FnZTogQnVmZmVyXG4pOiBQcm9taXNlPERlc2VyaWFsaXplZE1lc3NhZ2VzW10gfCBSZWRQYWxsYXNTaWduYXR1cmVSZXN1bHQ+IHtcbiAgaWYgKHJvdW5kIDwgMSB8fCByb3VuZCA+IDMpIHtcbiAgICB0aHJvdyBFcnJvcignSW52YWxpZCByb3VuZCBudW1iZXInKTtcbiAgfVxuICBhd2FpdCBwYXJ0eTFEc2cuaW5pdERzZyhrZXlTaGFyZTEsIG1lc3NhZ2UsIHBhcnR5MkRzZy5nZXRQYXJ0eUlkeCgpKTtcbiAgYXdhaXQgcGFydHkyRHNnLmluaXREc2coa2V5U2hhcmUyLCBtZXNzYWdlLCBwYXJ0eTFEc2cuZ2V0UGFydHlJZHgoKSk7XG4gIGNvbnN0IHBhcnR5MVJvdW5kME1lc3NhZ2UgPSBwYXJ0eTFEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG4gIGNvbnN0IHBhcnR5MlJvdW5kME1lc3NhZ2UgPSBwYXJ0eTJEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG5cbiAgY29uc3QgW3BhcnR5MlJvdW5kMU1lc3NhZ2VzXSA9IHBhcnR5MkRzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDBNZXNzYWdlLCBwYXJ0eTJSb3VuZDBNZXNzYWdlXSk7XG4gIGNvbnN0IFtwYXJ0eTFSb3VuZDFNZXNzYWdlc10gPSBwYXJ0eTFEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbcGFydHkxUm91bmQwTWVzc2FnZSwgcGFydHkyUm91bmQwTWVzc2FnZV0pO1xuICBpZiAocm91bmQgPT09IDEpIHJldHVybiBbW3BhcnR5MVJvdW5kMU1lc3NhZ2VzXSwgW3BhcnR5MlJvdW5kMU1lc3NhZ2VzXV07XG5cbiAgY29uc3QgW3BhcnR5MVJvdW5kMk1lc3NhZ2VzXSA9IHBhcnR5MURzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDFNZXNzYWdlcywgcGFydHkyUm91bmQxTWVzc2FnZXNdKTtcbiAgY29uc3QgW3BhcnR5MlJvdW5kMk1lc3NhZ2VzXSA9IHBhcnR5MkRzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDFNZXNzYWdlcywgcGFydHkyUm91bmQxTWVzc2FnZXNdKTtcbiAgaWYgKHJvdW5kID09PSAyKSByZXR1cm4gW1twYXJ0eTFSb3VuZDJNZXNzYWdlc10sIFtwYXJ0eTJSb3VuZDJNZXNzYWdlc11dO1xuXG4gIHBhcnR5MURzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDJNZXNzYWdlcywgcGFydHkyUm91bmQyTWVzc2FnZXNdKTtcbiAgcGFydHkyRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3BhcnR5MVJvdW5kMk1lc3NhZ2VzLCBwYXJ0eTJSb3VuZDJNZXNzYWdlc10pO1xuXG4gIGNvbnN0IHNpZzEgPSBwYXJ0eTFEc2cuZ2V0U2lnbmF0dXJlKCk7XG4gIGNvbnN0IHNpZzIgPSBwYXJ0eTJEc2cuZ2V0U2lnbmF0dXJlKCk7XG4gIGFzc2VydChzaWcxLnNpZ25hdHVyZS50b1N0cmluZygnaGV4JykgPT09IHNpZzIuc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKSk7XG4gIGFzc2VydChzaWcxLnJrLnRvU3RyaW5nKCdoZXgnKSA9PT0gc2lnMi5yay50b1N0cmluZygnaGV4JykpO1xuICByZXR1cm4gc2lnMTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyBhIGBSZWRQYWxsYXNTaWduYXR1cmVSZXN1bHRgIGFnYWluc3QgdGhlIHJhdyBtZXNzYWdlLlxuICpcbiAqIElNUE9SVEFOVDogdW5saWtlIEVkRFNBLCBSZWRQYWxsYXMgc2lnbmF0dXJlcyBtdXN0IGJlIHZlcmlmaWVkIGFnYWluc3QgYHJrYCDigJQgdGhlXG4gKiByZXJhbmRvbWl6ZWQgdmVyaWZpY2F0aW9uIGtleSBwcm9kdWNlZCBieSB0aGUgcmVyYW5kIHNlc3Npb24gdGhhdCBwcmVjZWRlZCBEU0cg4oCUIGFuZFxuICogTk9UIGFnYWluc3QgdGhlIERLRyAob3IgZGVyaXZlZCkgcHVibGljIGtleSBkaXJlY3RseS4gYHJrYCBlcXVhbHMgdGhlIHJlcmFuZCByZXN1bHQnc1xuICogYHBrYCAoYHBrID0gcGtfZGtnICsgW2FscGhhXUdgKTsgdGhlIGBhbHBoYWAgcmFuZG9taXplciBpcyBhdmFpbGFibGUgZnJvbVxuICogYFJlZFBhbGxhc1JlcmFuZC5nZXRSZXJhbmRvbWl6ZWRLZXlTaGFyZSgpYCBmb3IgY2FsbGVycyB0aGF0IG5lZWQgdG8gaW5kZXBlbmRlbnRseVxuICogY29uZmlybSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHJrYCBhbmQgYSBrbm93biBgcGtgLCBidXQgaXMgbm90IHJlcXVpcmVkIHRvIHZlcmlmeVxuICogdGhlIHNpZ25hdHVyZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlSZWRQYWxsYXNTaWduYXR1cmUoXG4gIHNpZ25hdHVyZVJlc3VsdDogUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0LFxuICBtZXNzYWdlOiBCdWZmZXJcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB3YXNtID1cbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAhd2luZG93LnByb2Nlc3MgJiYgIXdpbmRvdy5wcm9jZXNzPy5bJ3R5cGUnXVxuICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWludGVybmFsLW1vZHVsZXMgLS0gQGJpdGdvL3dhc20tbXBzIGV4cG9zZXMgZW52aXJvbm1lbnQtc3BlY2lmaWMgc3VicGF0aCBleHBvcnRzLlxuICAgICAgICBhd2FpdCBpbXBvcnQoJ0BiaXRnby93YXNtLW1wcy93ZWInKS50aGVuKGFzeW5jICh3ZWJXYXNtKSA9PiB7XG4gICAgICAgICAgYXdhaXQgd2ViV2FzbS5kZWZhdWx0KCk7XG4gICAgICAgICAgcmV0dXJuIHdlYldhc207XG4gICAgICAgIH0pXG4gICAgICA6IGF3YWl0IGltcG9ydCgnQGJpdGdvL3dhc20tbXBzJyk7XG4gIHJldHVybiB3YXNtLnJlZHBhbGxhc192ZXJpZnkoc2lnbmF0dXJlUmVzdWx0LnJrLCBzaWduYXR1cmVSZXN1bHQuc2lnbmF0dXJlLCBtZXNzYWdlKTtcbn1cbiJdfQ==
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  export interface HashCommitDecommit {
3
2
  commitment: Buffer;
4
3
  decommitment: HashDecommitment;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;CACX"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;CACX"}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { PublicKey } from 'paillier-bigint';
3
2
  /**
4
3
  * Returns a bigint array from a hex string array
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAInE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAIvF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAU/C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAOtE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAEvD;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIvC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAEzD;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOxE;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU9E;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAO,GAAG,MAAM,CAQvE"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAInE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAIvF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAU/C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAOtE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAEvD;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIvC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAEzD;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOxE;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU9E;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAO,GAAG,MAAM,CAQvE"}