@bitgo-beta/sdk-lib-mpc 8.2.1-alpha.37 → 8.2.1-alpha.370

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 (94) 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/ecdsa/index.d.ts +2 -4
  36. package/dist/src/tss/ecdsa/index.d.ts.map +1 -1
  37. package/dist/src/tss/ecdsa/index.js +26 -17
  38. package/dist/src/tss/ecdsa/{paillierProof.d.ts → paillierproof.d.ts} +1 -1
  39. package/dist/src/tss/ecdsa/{paillierProof.d.ts.map → paillierproof.d.ts.map} +1 -1
  40. package/dist/src/tss/ecdsa/paillierproof.js +86 -0
  41. package/dist/src/tss/ecdsa/{rangeProof.d.ts → rangeproof.d.ts} +2 -3
  42. package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -0
  43. package/dist/src/tss/ecdsa/rangeproof.js +394 -0
  44. package/dist/src/tss/ecdsa/types.d.ts +28 -68
  45. package/dist/src/tss/ecdsa/types.d.ts.map +1 -1
  46. package/dist/src/tss/ecdsa/types.js +29 -96
  47. package/dist/src/tss/ecdsa/zkVProof.d.ts +0 -1
  48. package/dist/src/tss/ecdsa/zkVProof.d.ts.map +1 -1
  49. package/dist/src/tss/ecdsa/zkVProof.js +9 -10
  50. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts +42 -0
  51. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts.map +1 -0
  52. package/dist/src/tss/ecdsa-dkls/commsLayer.js +235 -0
  53. package/dist/src/tss/ecdsa-dkls/dkg.d.ts +57 -0
  54. package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +1 -0
  55. package/dist/src/tss/ecdsa-dkls/dkg.js +321 -0
  56. package/dist/src/tss/ecdsa-dkls/dsg.d.ts +47 -0
  57. package/dist/src/tss/ecdsa-dkls/dsg.d.ts.map +1 -0
  58. package/dist/src/tss/ecdsa-dkls/dsg.js +266 -0
  59. package/dist/src/tss/ecdsa-dkls/index.d.ts +6 -0
  60. package/dist/src/tss/ecdsa-dkls/index.d.ts.map +1 -0
  61. package/dist/src/tss/ecdsa-dkls/index.js +42 -0
  62. package/dist/src/tss/ecdsa-dkls/types.d.ts +118 -0
  63. package/dist/src/tss/ecdsa-dkls/types.d.ts.map +1 -0
  64. package/dist/src/tss/ecdsa-dkls/types.js +165 -0
  65. package/dist/src/tss/ecdsa-dkls/util.d.ts +26 -0
  66. package/dist/src/tss/ecdsa-dkls/util.d.ts.map +1 -0
  67. package/dist/src/tss/ecdsa-dkls/util.js +276 -0
  68. package/dist/src/tss/index.d.ts +1 -0
  69. package/dist/src/tss/index.d.ts.map +1 -1
  70. package/dist/src/tss/index.js +7 -2
  71. package/dist/src/types.d.ts +0 -1
  72. package/dist/src/types.d.ts.map +1 -1
  73. package/dist/src/util.d.ts +0 -3
  74. package/dist/src/util.d.ts.map +1 -1
  75. package/dist/src/util.js +21 -65
  76. package/dist/tsconfig.tsbuildinfo +1 -1
  77. package/package.json +29 -7
  78. package/.eslintignore +0 -5
  79. package/CHANGELOG.md +0 -148
  80. package/dist/src/openssl/opensslbytes.d.ts +0 -4
  81. package/dist/src/openssl/opensslbytes.d.ts.map +0 -1
  82. package/dist/src/openssl/opensslbytes.js +0 -20
  83. package/dist/src/tss/ecdsa/generatePaillierKey.d.ts +0 -6
  84. package/dist/src/tss/ecdsa/generatePaillierKey.d.ts.map +0 -1
  85. package/dist/src/tss/ecdsa/generatePaillierKey.js +0 -52
  86. package/dist/src/tss/ecdsa/noSmallFactorsProof.d.ts +0 -24
  87. package/dist/src/tss/ecdsa/noSmallFactorsProof.d.ts.map +0 -1
  88. package/dist/src/tss/ecdsa/noSmallFactorsProof.js +0 -157
  89. package/dist/src/tss/ecdsa/paillierBlumProof.d.ts +0 -16
  90. package/dist/src/tss/ecdsa/paillierBlumProof.d.ts.map +0 -1
  91. package/dist/src/tss/ecdsa/paillierBlumProof.js +0 -148
  92. package/dist/src/tss/ecdsa/paillierProof.js +0 -86
  93. package/dist/src/tss/ecdsa/rangeProof.d.ts.map +0 -1
  94. package/dist/src/tss/ecdsa/rangeProof.js +0 -404
@@ -0,0 +1,165 @@
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.ReducedKeyShareType = exports.DsgState = exports.DkgState = void 0;
40
+ exports.serializeMessages = serializeMessages;
41
+ exports.deserializeMessages = deserializeMessages;
42
+ exports.deserializeP2PMessage = deserializeP2PMessage;
43
+ exports.deserializeBroadcastMessage = deserializeBroadcastMessage;
44
+ exports.serializeP2PMessage = serializeP2PMessage;
45
+ exports.serializeBroadcastMessage = serializeBroadcastMessage;
46
+ exports.getCommonKeychain = getCommonKeychain;
47
+ exports.getDecodedReducedKeyShare = getDecodedReducedKeyShare;
48
+ const assert_1 = __importDefault(require("assert"));
49
+ const cbor_x_1 = require("cbor-x");
50
+ const t = __importStar(require("io-ts"));
51
+ const Either_1 = require("fp-ts/Either");
52
+ var DkgState;
53
+ (function (DkgState) {
54
+ DkgState[DkgState["Uninitialized"] = 0] = "Uninitialized";
55
+ DkgState[DkgState["Round1"] = 1] = "Round1";
56
+ DkgState[DkgState["Round2"] = 2] = "Round2";
57
+ DkgState[DkgState["Round3"] = 3] = "Round3";
58
+ DkgState[DkgState["Round4"] = 4] = "Round4";
59
+ DkgState[DkgState["Complete"] = 5] = "Complete";
60
+ DkgState[DkgState["InvalidState"] = 6] = "InvalidState";
61
+ })(DkgState || (exports.DkgState = DkgState = {}));
62
+ var DsgState;
63
+ (function (DsgState) {
64
+ DsgState[DsgState["Uninitialized"] = 0] = "Uninitialized";
65
+ DsgState[DsgState["Round1"] = 1] = "Round1";
66
+ DsgState[DsgState["Round2"] = 2] = "Round2";
67
+ DsgState[DsgState["Round3"] = 3] = "Round3";
68
+ DsgState[DsgState["Round4"] = 4] = "Round4";
69
+ DsgState[DsgState["Complete"] = 5] = "Complete";
70
+ DsgState[DsgState["InvalidState"] = 6] = "InvalidState";
71
+ })(DsgState || (exports.DsgState = DsgState = {}));
72
+ exports.ReducedKeyShareType = t.type({
73
+ bigSList: t.array(t.array(t.number)),
74
+ xList: t.array(t.array(t.number)),
75
+ rootChainCode: t.array(t.number),
76
+ prv: t.array(t.number),
77
+ pub: t.array(t.number),
78
+ });
79
+ /**
80
+ * Serializes messages payloads to base64 strings.
81
+ * @param messages
82
+ */
83
+ function serializeMessages(messages) {
84
+ return {
85
+ p2pMessages: messages.p2pMessages.map(serializeP2PMessage),
86
+ broadcastMessages: messages.broadcastMessages.map(serializeBroadcastMessage),
87
+ };
88
+ }
89
+ /**
90
+ * Deserialize messages payloads to Uint8Array.
91
+ * @param messages
92
+ */
93
+ function deserializeMessages(messages) {
94
+ return {
95
+ p2pMessages: messages.p2pMessages.map(deserializeP2PMessage),
96
+ broadcastMessages: messages.broadcastMessages.map(deserializeBroadcastMessage),
97
+ };
98
+ }
99
+ /**
100
+ * Deserializes a P2P message.
101
+ * @param message
102
+ */
103
+ function deserializeP2PMessage(message) {
104
+ return {
105
+ to: message.to,
106
+ from: message.from,
107
+ payload: new Uint8Array(Buffer.from(message.payload, 'base64')),
108
+ commitment: message.commitment ? new Uint8Array(Buffer.from(message.commitment, 'hex')) : undefined,
109
+ };
110
+ }
111
+ /**
112
+ * Deserializes a Broadcast message.
113
+ * @param message
114
+ */
115
+ function deserializeBroadcastMessage(message) {
116
+ return {
117
+ from: message.from,
118
+ payload: new Uint8Array(Buffer.from(message.payload, 'base64')),
119
+ signatureR: message.signatureR ? new Uint8Array(Buffer.from(message.signatureR, 'base64')) : undefined,
120
+ };
121
+ }
122
+ /**
123
+ * Serializes a P2P message.
124
+ * @param message
125
+ */
126
+ function serializeP2PMessage(message) {
127
+ return {
128
+ to: message.to,
129
+ from: message.from,
130
+ payload: Buffer.from(message.payload).toString('base64'),
131
+ commitment: message.commitment ? Buffer.from(message.commitment).toString('hex') : undefined,
132
+ };
133
+ }
134
+ /**
135
+ * Serializes a Broadcast message.
136
+ * @param message
137
+ */
138
+ function serializeBroadcastMessage(message) {
139
+ return {
140
+ from: message.from,
141
+ payload: Buffer.from(message.payload).toString('base64'),
142
+ signatureR: message.signatureR ? Buffer.from(message.signatureR).toString('base64') : undefined,
143
+ };
144
+ }
145
+ /**
146
+ * Gets commonkeyChain from DKLS keyShare
147
+ * @param {Buffer} keyShare - DKLS keyShare
148
+ * @returns {string} commonKeychain in hex format
149
+ */
150
+ function getCommonKeychain(keyShare) {
151
+ const parsedKeyShare = (0, cbor_x_1.decode)(keyShare);
152
+ (0, assert_1.default)(parsedKeyShare.public_key, 'public_key not found in keyShare');
153
+ (0, assert_1.default)(parsedKeyShare.root_chain_code, 'root_chain_code not found in public_key');
154
+ const publicKey = Buffer.from(parsedKeyShare.public_key).toString('hex');
155
+ const rootChainCode = Buffer.from(parsedKeyShare.root_chain_code).toString('hex');
156
+ return publicKey + rootChainCode;
157
+ }
158
+ function getDecodedReducedKeyShare(reducedKeyShare) {
159
+ const decoded = exports.ReducedKeyShareType.decode((0, cbor_x_1.decode)(reducedKeyShare));
160
+ if ((0, Either_1.isLeft)(decoded)) {
161
+ throw new Error(`Unable to parse reducedKeyShare: ${decoded.left}`);
162
+ }
163
+ return decoded.right;
164
+ }
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhLWRrbHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUdBLDhDQUtDO0FBTUQsa0RBS0M7QUFNRCxzREFPQztBQU1ELGtFQU1DO0FBTUQsa0RBT0M7QUFNRCw4REFNQztBQU9ELDhDQU9DO0FBRUQsOERBTUM7QUF6TEQsb0RBQTRCO0FBQzVCLG1DQUFnQztBQUNoQyx5Q0FBMkI7QUFFM0IseUNBQXNDO0FBaUJ0QyxJQUFZLFFBUVg7QUFSRCxXQUFZLFFBQVE7SUFDbEIseURBQWlCLENBQUE7SUFDakIsMkNBQU0sQ0FBQTtJQUNOLDJDQUFNLENBQUE7SUFDTiwyQ0FBTSxDQUFBO0lBQ04sMkNBQU0sQ0FBQTtJQUNOLCtDQUFRLENBQUE7SUFDUix1REFBWSxDQUFBO0FBQ2QsQ0FBQyxFQVJXLFFBQVEsd0JBQVIsUUFBUSxRQVFuQjtBQUVELElBQVksUUFRWDtBQVJELFdBQVksUUFBUTtJQUNsQix5REFBYSxDQUFBO0lBQ2IsMkNBQU0sQ0FBQTtJQUNOLDJDQUFNLENBQUE7SUFDTiwyQ0FBTSxDQUFBO0lBQ04sMkNBQU0sQ0FBQTtJQUNOLCtDQUFRLENBQUE7SUFDUix1REFBWSxDQUFBO0FBQ2QsQ0FBQyxFQVJXLFFBQVEsd0JBQVIsUUFBUSxRQVFuQjtBQXVCWSxRQUFBLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDeEMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsYUFBYSxFQUFFLENBQUMsQ0FBQyxL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LENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQ2hHLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLFFBQWdCO0lBQ2hELE1BQU0sY0FBYyxHQUFHLElBQUEsZUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLElBQUEsZ0JBQU0sRUFBQyxjQUFjLENBQUMsVUFBVSxFQUFFLGtDQUFrQyxDQUFDLENBQUM7SUFDdEUsSUFBQSxnQkFBTSxFQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUseUNBQXlDLENBQUMsQ0FBQztJQUNsRixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekUsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLE9BQU8sU0FBUyxHQUFHLGFBQWEsQ0FBQztBQUNuQyxDQUFDO0FBRUQsU0FBZ0IseUJBQXlCLENBQUMsZUFBb0M7SUFDNUUsTUFBTSxPQUFPLEdBQUcsMkJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBTSxFQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDcEUsSUFBSSxJQUFBLGVBQU0sRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGRlY29kZSB9IGZyb20gJ2Nib3IteCc7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7IFhTaGFyZSB9IGZyb20gJy4uL2VjZHNhL3R5cGVzJztcbmltcG9ydCB7IGlzTGVmdCB9IGZyb20gJ2ZwLXRzL0VpdGhlcic7XG5cbi8vIEJyb2FkY2FzdCBtZXNzYWdlIG1lYW50IHRvIGJlIHNlbnQgdG8gbXVsdGlwbGUgcGFydGllc1xuaW50ZXJmYWNlIEJyb2FkY2FzdE1lc3NhZ2U8VD4ge1xuICBwYXlsb2FkOiBUO1xuICBmcm9tOiBudW1iZXI7XG4gIHNpZ25hdHVyZVI/OiBUO1xufVxuXG4vLyBQMlAgbWVzc2FnZSBtZWFudCB0byBiZSBzZW50IHRvIGEgc3BlY2lmaWMgcGFydHlcbmludGVyZmFjZSBQMlBNZXNzYWdlPFQsIEc+IHtcbiAgcGF5bG9hZDogVDtcbiAgZnJvbTogbnVtYmVyO1xuICBjb21taXRtZW50PzogRztcbiAgdG86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gRGtnU3RhdGUge1xuICBVbmluaXRpYWxpemVkID0gMCxcbiAgUm91bmQxLFxuICBSb3VuZDIsXG4gIFJvdW5kMyxcbiAgUm91bmQ0LFxuICBDb21wbGV0ZSxcbiAgSW52YWxpZFN0YXRlLFxufVxuXG5leHBvcnQgZW51bSBEc2dTdGF0ZSB7XG4gIFVuaW5pdGlhbGl6ZWQsXG4gIFJvdW5kMSxcbiAgUm91bmQyLFxuICBSb3VuZDMsXG4gIFJvdW5kNCxcbiAgQ29tcGxldGUsXG4gIEludmFsaWRTdGF0ZSxcbn1cblxuZXhwb3J0IHR5cGUgQXV0aEVuY01lc3NhZ2UgPSB7XG4gIGVuY3J5cHRlZE1lc3NhZ2U6IHN0cmluZztcbiAgc2lnbmF0dXJlOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgQXV0aE1lc3NhZ2UgPSB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2lnbmF0dXJlOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgUGFydHlHcGdLZXkgPSB7XG4gIHBhcnR5SWQ6IG51bWJlcjtcbiAgZ3BnS2V5OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRGtsc1NpZ25hdHVyZTxUPiA9IHtcbiAgUjogVDtcbiAgUzogVDtcbn07XG5leHBvcnQgdHlwZSBSZXRyb2ZpdERhdGEgPSB7XG4gIHhTaGFyZTogUGFydGlhbDxYU2hhcmU+O1xuICB4aUxpc3Q/OiBudW1iZXJbXVtdO1xufTtcblxuZXhwb3J0IGNvbnN0IFJlZHVjZWRLZXlTaGFyZVR5cGUgPSB0LnR5cGUoe1xuICBiaWdTTGlzdDogdC5hcnJheSh0LmFycmF5KHQubnVtYmVyKSksXG4gIHhMaXN0OiB0LmFycmF5KHQuYXJyYXkodC5udW1iZXIpKSxcbiAgcm9vdENoYWluQ29kZTogdC5hcnJheSh0Lm51bWJlciksXG4gIHBydjogdC5hcnJheSh0Lm51bWJlciksXG4gIHB1YjogdC5hcnJheSh0Lm51bWJlciksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVkdWNlZEtleVNoYXJlID0gdC5UeXBlT2Y8dHlwZW9mIFJlZHVjZWRLZXlTaGFyZVR5cGU+O1xuXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkQnJvYWRjYXN0TWVzc2FnZSA9IEJyb2FkY2FzdE1lc3NhZ2U8c3RyaW5nPjtcbmV4cG9ydCB0eXBlIERlc2VyaWFsaXplZEJyb2FkY2FzdE1lc3NhZ2UgPSBCcm9hZGNhc3RNZXNzYWdlPFVpbnQ4QXJyYXk+O1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZFAyUE1lc3NhZ2UgPSBQMlBNZXNzYWdlPHN0cmluZywgc3RyaW5nPjtcbmV4cG9ydCB0eXBlIERlc2VyaWFsaXplZFAyUE1lc3NhZ2UgPSBQMlBNZXNzYWdlPFVpbnQ4QXJyYXksIFVpbnQ4QXJyYXk+O1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZERrbHNTaWduYXR1cmUgPSBEa2xzU2lnbmF0dXJlPHN0cmluZz47XG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWREa2xzU2lnbmF0dXJlID0gRGtsc1NpZ25hdHVyZTxVaW50OEFycmF5PjtcbmV4cG9ydCB0eXBlIEF1dGhFbmNQMlBNZXNzYWdlID0gUDJQTWVzc2FnZTxBdXRoRW5jTWVzc2FnZSwgc3RyaW5nPjtcbmV4cG9ydCB0eXBlIEF1dGhCcm9hZGNhc3RNZXNzYWdlID0gQnJvYWRjYXN0TWVzc2FnZTxBdXRoTWVzc2FnZT47XG5leHBvcnQgdHlwZSBTZXJpYWxpemVkTWVzc2FnZXMgPSB7XG4gIHAycE1lc3NhZ2VzOiBTZXJpYWxpemVkUDJQTWVzc2FnZVtdO1xuICBicm9hZGNhc3RNZXNzYWdlczogU2VyaWFsaXplZEJyb2FkY2FzdE1lc3NhZ2VbXTtcbn07XG5leHBvcnQgdHlwZSBBdXRoRW5jTWVzc2FnZXMgPSB7XG4gIHAycE1lc3NhZ2VzOiBBdXRoRW5jUDJQTWVzc2FnZVtdO1xuICBicm9hZGNhc3RNZXNzYWdlczogQXV0aEJyb2FkY2FzdE1lc3NhZ2VbXTtcbn07XG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWRNZXNzYWdlcyA9IHtcbiAgcDJwTWVzc2FnZXM6IERlc2VyaWFsaXplZFAyUE1lc3NhZ2VbXTtcbiAgYnJvYWRjYXN0TWVzc2FnZXM6IERlc2VyaWFsaXplZEJyb2FkY2FzdE1lc3NhZ2VbXTtcbn07XG5cbi8qKlxuICogU2VyaWFsaXplcyBtZXNzYWdlcyBwYXlsb2FkcyB0byBiYXNlNjQgc3RyaW5ncy5cbiAqIEBwYXJhbSBtZXNzYWdlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTWVzc2FnZXMobWVzc2FnZXM6IERlc2VyaWFsaXplZE1lc3NhZ2VzKTogU2VyaWFsaXplZE1lc3NhZ2VzIHtcbiAgcmV0dXJuIHtcbiAgICBwMnBNZXNzYWdlczogbWVzc2FnZXMucDJwTWVzc2FnZXMubWFwKHNlcmlhbGl6ZVAyUE1lc3NhZ2UpLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBtZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5tYXAoc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZSksXG4gIH07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgbWVzc2FnZXMgcGF5bG9hZHMgdG8gVWludDhBcnJheS5cbiAqIEBwYXJhbSBtZXNzYWdlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemVNZXNzYWdlcyhtZXNzYWdlczogU2VyaWFsaXplZE1lc3NhZ2VzKTogRGVzZXJpYWxpemVkTWVzc2FnZXMge1xuICByZXR1cm4ge1xuICAgIHAycE1lc3NhZ2VzOiBtZXNzYWdlcy5wMnBNZXNzYWdlcy5tYXAoZGVzZXJpYWxpemVQMlBNZXNzYWdlKSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogbWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMubWFwKGRlc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZSksXG4gIH07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGEgUDJQIG1lc3NhZ2UuXG4gKiBAcGFyYW0gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemVQMlBNZXNzYWdlKG1lc3NhZ2U6IFNlcmlhbGl6ZWRQMlBNZXNzYWdlKTogRGVzZXJpYWxpemVkUDJQTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdG86IG1lc3NhZ2UudG8sXG4gICAgZnJvbTogbWVzc2FnZS5mcm9tLFxuICAgIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKG1lc3NhZ2UucGF5bG9hZCwgJ2Jhc2U2NCcpKSxcbiAgICBjb21taXRtZW50OiBtZXNzYWdlLmNvbW1pdG1lbnQgPyBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShtZXNzYWdlLmNvbW1pdG1lbnQsICdoZXgnKSkgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGEgQnJvYWRjYXN0IG1lc3NhZ2UuXG4gKiBAcGFyYW0gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemVCcm9hZGNhc3RNZXNzYWdlKG1lc3NhZ2U6IFNlcmlhbGl6ZWRCcm9hZGNhc3RNZXNzYWdlKTogRGVzZXJpYWxpemVkQnJvYWRjYXN0TWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgZnJvbTogbWVzc2FnZS5mcm9tLFxuICAgIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKG1lc3NhZ2UucGF5bG9hZCwgJ2Jhc2U2NCcpKSxcbiAgICBzaWduYXR1cmVSOiBtZXNzYWdlLnNpZ25hdHVyZVIgPyBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShtZXNzYWdlLnNpZ25hdHVyZVIsICdiYXNlNjQnKSkgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhIFAyUCBtZXNzYWdlLlxuICogQHBhcmFtIG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVAyUE1lc3NhZ2UobWVzc2FnZTogRGVzZXJpYWxpemVkUDJQTWVzc2FnZSk6IFNlcmlhbGl6ZWRQMlBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogbWVzc2FnZS50byxcbiAgICBmcm9tOiBtZXNzYWdlLmZyb20sXG4gICAgcGF5bG9hZDogQnVmZmVyLmZyb20obWVzc2FnZS5wYXlsb2FkKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgY29tbWl0bWVudDogbWVzc2FnZS5jb21taXRtZW50ID8gQnVmZmVyLmZyb20obWVzc2FnZS5jb21taXRtZW50KS50b1N0cmluZygnaGV4JykgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhIEJyb2FkY2FzdCBtZXNzYWdlLlxuICogQHBhcmFtIG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUJyb2FkY2FzdE1lc3NhZ2UobWVzc2FnZTogRGVzZXJpYWxpemVkQnJvYWRjYXN0TWVzc2FnZSk6IFNlcmlhbGl6ZWRCcm9hZGNhc3RNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBmcm9tOiBtZXNzYWdlLmZyb20sXG4gICAgcGF5bG9hZDogQnVmZmVyLmZyb20obWVzc2FnZS5wYXlsb2FkKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgc2lnbmF0dXJlUjogbWVzc2FnZS5zaWduYXR1cmVSID8gQnVmZmVyLmZyb20obWVzc2FnZS5zaWduYXR1cmVSKS50b1N0cmluZygnYmFzZTY0JykgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogR2V0cyBjb21tb25rZXlDaGFpbiBmcm9tIERLTFMga2V5U2hhcmVcbiAqIEBwYXJhbSB7QnVmZmVyfSBrZXlTaGFyZSAtIERLTFMga2V5U2hhcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbW1vbktleWNoYWluIGluIGhleCBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1vbktleWNoYWluKGtleVNoYXJlOiBCdWZmZXIpOiBzdHJpbmcge1xuICBjb25zdCBwYXJzZWRLZXlTaGFyZSA9IGRlY29kZShrZXlTaGFyZSk7XG4gIGFzc2VydChwYXJzZWRLZXlTaGFyZS5wdWJsaWNfa2V5LCAncHVibGljX2tleSBub3QgZm91bmQgaW4ga2V5U2hhcmUnKTtcbiAgYXNzZXJ0KHBhcnNlZEtleVNoYXJlLnJvb3RfY2hhaW5fY29kZSwgJ3Jvb3RfY2hhaW5fY29kZSBub3QgZm91bmQgaW4gcHVibGljX2tleScpO1xuICBjb25zdCBwdWJsaWNLZXkgPSBCdWZmZXIuZnJvbShwYXJzZWRLZXlTaGFyZS5wdWJsaWNfa2V5KS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IHJvb3RDaGFpbkNvZGUgPSBCdWZmZXIuZnJvbShwYXJzZWRLZXlTaGFyZS5yb290X2NoYWluX2NvZGUpLnRvU3RyaW5nKCdoZXgnKTtcbiAgcmV0dXJuIHB1YmxpY0tleSArIHJvb3RDaGFpbkNvZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvZGVkUmVkdWNlZEtleVNoYXJlKHJlZHVjZWRLZXlTaGFyZTogQnVmZmVyIHwgVWludDhBcnJheSk6IFJlZHVjZWRLZXlTaGFyZSB7XG4gIGNvbnN0IGRlY29kZWQgPSBSZWR1Y2VkS2V5U2hhcmVUeXBlLmRlY29kZShkZWNvZGUocmVkdWNlZEtleVNoYXJlKSk7XG4gIGlmIChpc0xlZnQoZGVjb2RlZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSByZWR1Y2VkS2V5U2hhcmU6ICR7ZGVjb2RlZC5sZWZ0fWApO1xuICB9XG4gIHJldHVybiBkZWNvZGVkLnJpZ2h0O1xufVxuIl19
@@ -0,0 +1,26 @@
1
+ import { DeserializedDklsSignature, DeserializedMessages, RetrofitData } from './types';
2
+ import { Hash } from 'crypto';
3
+ import { Dsg } from './dsg';
4
+ import { Dkg } from './dkg';
5
+ /**
6
+ * Combines partial signatures from parties participating in DSG.
7
+ * @param round4MessagePayloads - round 4 message payloads from participating parties
8
+ * @param rHex - hex representation of the r value in the signature
9
+ * @returns {DeserializedMessages} - messages to send to other parties for the next round
10
+ */
11
+ export declare function combinePartialSignatures(round4MessagePayloads: Uint8Array[], rHex: string): DeserializedDklsSignature;
12
+ /**
13
+ * Verify a DKLs Signature and serialize it to recid:r:s:publickey format.
14
+ * @param message - message that was signed.
15
+ * @param dklsSignature - R and S values of the ECDSA signature.
16
+ * @param commonKeychain - public key appended to chaincode in hex.
17
+ * @param derivationPath - optional derivation path to derive on the commonkeychain before verification.
18
+ * @param hash - optional hash function to apply on message before verifying. Default is sha256.
19
+ * @param shouldHash - flag to determine whether message should be hashed before verifying.
20
+ * @returns {string} - serialized signature in `recid:r:s:publickey` format
21
+ */
22
+ export declare function verifyAndConvertDklsSignature(message: Buffer, dklsSignature: DeserializedDklsSignature, commonKeychain: string, derivationPath?: string, hash?: Hash, shouldHash?: boolean): string;
23
+ export declare function executeTillRound(round: number, party1Dsg: Dsg, party2Dsg: Dsg): Promise<DeserializedMessages[] | DeserializedDklsSignature>;
24
+ export declare function generateDKGKeyShares(retrofitDataA?: RetrofitData, retrofitDataB?: RetrofitData, retrofitDataC?: RetrofitData, seedUser?: Buffer, seedBackup?: Buffer, seedBitgo?: Buffer): Promise<[Dkg, Dkg, Dkg]>;
25
+ export declare function generate2of2KeyShares(retrofitDataA?: RetrofitData, retrofitDataB?: RetrofitData): Promise<[Dkg, Dkg]>;
26
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa-dkls/util.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGxF,OAAO,EAAc,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAK5B;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,qBAAqB,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,yBAAyB,CAgBrH;AAED;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,yBAAyB,EACxC,cAAc,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,MAAM,EACvB,IAAI,CAAC,EAAE,IAAI,EACX,UAAU,UAAO,GAChB,MAAM,CA6BR;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,GAAG,GACb,OAAO,CAAC,oBAAoB,EAAE,GAAG,yBAAyB,CAAC,CAgD7D;AAED,wBAAsB,oBAAoB,CACxC,aAAa,CAAC,EAAE,YAAY,EAC5B,aAAa,CAAC,EAAE,YAAY,EAC5B,aAAa,CAAC,EAAE,YAAY,EAC5B,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CA6E1B;AAED,wBAAsB,qBAAqB,CACzC,aAAa,CAAC,EAAE,YAAY,EAC5B,aAAa,CAAC,EAAE,YAAY,GAC3B,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAsCrB"}
@@ -0,0 +1,276 @@
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.combinePartialSignatures = combinePartialSignatures;
40
+ exports.verifyAndConvertDklsSignature = verifyAndConvertDklsSignature;
41
+ exports.executeTillRound = executeTillRound;
42
+ exports.generateDKGKeyShares = generateDKGKeyShares;
43
+ exports.generate2of2KeyShares = generate2of2KeyShares;
44
+ const secp256k1_1 = require("@noble/curves/secp256k1");
45
+ const curves_1 = require("../../curves");
46
+ const util_1 = require("../../util");
47
+ const cbor_x_1 = require("cbor-x");
48
+ const secp256k1 = __importStar(require("secp256k1"));
49
+ const crypto_1 = require("crypto");
50
+ const dkg_1 = require("./dkg");
51
+ const assert_1 = __importDefault(require("assert"));
52
+ const delimeter = ':';
53
+ /**
54
+ * Combines partial signatures from parties participating in DSG.
55
+ * @param round4MessagePayloads - round 4 message payloads from participating parties
56
+ * @param rHex - hex representation of the r value in the signature
57
+ * @returns {DeserializedMessages} - messages to send to other parties for the next round
58
+ */
59
+ function combinePartialSignatures(round4MessagePayloads, rHex) {
60
+ const r = (0, util_1.bigIntFromBufferBE)(Buffer.from(rHex, 'hex').subarray(1));
61
+ const s0Arr = round4MessagePayloads.map((p) => (0, cbor_x_1.decode)(p).s_0);
62
+ const s1Arr = round4MessagePayloads.map((p) => (0, cbor_x_1.decode)(p).s_1);
63
+ const s0BigInts = s0Arr.map((s0) => (0, util_1.bigIntFromBufferBE)(Buffer.from(s0)));
64
+ const s1BigInts = s1Arr.map((s1) => (0, util_1.bigIntFromBufferBE)(Buffer.from(s1)));
65
+ const secp256k1Curve = new curves_1.Secp256k1Curve();
66
+ const s0Sum = s0BigInts.slice(1).reduce((sumSoFar, s0) => secp256k1Curve.scalarAdd(sumSoFar, s0), s0BigInts[0]);
67
+ const s1Sum = s1BigInts.slice(1).reduce((sumSoFar, s1) => secp256k1Curve.scalarAdd(sumSoFar, s1), s1BigInts[0]);
68
+ const s = secp256k1Curve.scalarMult(s0Sum, secp256k1Curve.scalarInvert(s1Sum));
69
+ const sig = new secp256k1_1.secp256k1.Signature(r, s);
70
+ const normalizedSig = sig.normalizeS();
71
+ return {
72
+ R: new Uint8Array((0, util_1.bigIntToBufferBE)(normalizedSig.r, 32)),
73
+ S: new Uint8Array((0, util_1.bigIntToBufferBE)(normalizedSig.s, 32)),
74
+ };
75
+ }
76
+ /**
77
+ * Verify a DKLs Signature and serialize it to recid:r:s:publickey format.
78
+ * @param message - message that was signed.
79
+ * @param dklsSignature - R and S values of the ECDSA signature.
80
+ * @param commonKeychain - public key appended to chaincode in hex.
81
+ * @param derivationPath - optional derivation path to derive on the commonkeychain before verification.
82
+ * @param hash - optional hash function to apply on message before verifying. Default is sha256.
83
+ * @param shouldHash - flag to determine whether message should be hashed before verifying.
84
+ * @returns {string} - serialized signature in `recid:r:s:publickey` format
85
+ */
86
+ function verifyAndConvertDklsSignature(message, dklsSignature, commonKeychain, derivationPath, hash, shouldHash = true) {
87
+ let truePub = '';
88
+ if (derivationPath && derivationPath !== 'm') {
89
+ const hdTree = new curves_1.Secp256k1Bip32HdTree();
90
+ const derivedPub = hdTree.publicDerive({
91
+ pk: (0, util_1.bigIntFromBufferBE)(Buffer.from(commonKeychain.slice(0, 66), 'hex')),
92
+ chaincode: (0, util_1.bigIntFromBufferBE)(Buffer.from(commonKeychain.slice(66), 'hex')),
93
+ }, derivationPath);
94
+ truePub = (0, util_1.bigIntToBufferBE)(derivedPub.pk).toString('hex');
95
+ }
96
+ else {
97
+ truePub = commonKeychain.slice(0, 66);
98
+ }
99
+ const messageToVerify = shouldHash ? (hash || (0, crypto_1.createHash)('sha256')).update(message).digest() : message;
100
+ const pub0 = secp256k1.ecdsaRecover(Buffer.concat([dklsSignature.R, dklsSignature.S]), 0, messageToVerify, true);
101
+ const pub1 = secp256k1.ecdsaRecover(Buffer.concat([dklsSignature.R, dklsSignature.S]), 1, messageToVerify, true);
102
+ let recId;
103
+ if (truePub === Buffer.from(pub0).toString('hex')) {
104
+ recId = 0;
105
+ }
106
+ else if (truePub === Buffer.from(pub1).toString('hex')) {
107
+ recId = 1;
108
+ }
109
+ else {
110
+ throw Error('Invalid Signature');
111
+ }
112
+ return `${recId}${delimeter}${Buffer.from(dklsSignature.R).toString('hex')}${delimeter}${Buffer.from(dklsSignature.S).toString('hex')}${delimeter}${truePub}`;
113
+ }
114
+ async function executeTillRound(round, party1Dsg, party2Dsg) {
115
+ if (round < 1 || round > 5) {
116
+ throw Error('Invalid round number');
117
+ }
118
+ const party1Round1Message = await party1Dsg.init();
119
+ const party2Round1Message = await party2Dsg.init();
120
+ const party2Round2Messages = party2Dsg.handleIncomingMessages({
121
+ p2pMessages: [],
122
+ broadcastMessages: [party1Round1Message],
123
+ });
124
+ const party1Round2Messages = party1Dsg.handleIncomingMessages({
125
+ p2pMessages: [],
126
+ broadcastMessages: [party2Round1Message],
127
+ });
128
+ if (round === 2)
129
+ return [party1Round2Messages, party2Round2Messages];
130
+ const party1Round3Messages = party1Dsg.handleIncomingMessages({
131
+ p2pMessages: party2Round2Messages.p2pMessages,
132
+ broadcastMessages: [],
133
+ });
134
+ const party2Round3Messages = party2Dsg.handleIncomingMessages({
135
+ p2pMessages: party1Round2Messages.p2pMessages,
136
+ broadcastMessages: [],
137
+ });
138
+ if (round === 3)
139
+ return [party1Round3Messages, party2Round3Messages];
140
+ const party2Round4Messages = party2Dsg.handleIncomingMessages({
141
+ p2pMessages: party1Round3Messages.p2pMessages,
142
+ broadcastMessages: [],
143
+ });
144
+ const party1Round4Messages = party1Dsg.handleIncomingMessages({
145
+ p2pMessages: party2Round3Messages.p2pMessages,
146
+ broadcastMessages: [],
147
+ });
148
+ if (round === 4)
149
+ return [party1Round4Messages, party2Round4Messages];
150
+ party1Dsg.handleIncomingMessages({
151
+ p2pMessages: [],
152
+ broadcastMessages: party2Round4Messages.broadcastMessages,
153
+ });
154
+ party2Dsg.handleIncomingMessages({
155
+ p2pMessages: [],
156
+ broadcastMessages: party1Round4Messages.broadcastMessages,
157
+ });
158
+ (0, assert_1.default)(Buffer.from(party1Dsg.signature.R).toString('hex') === Buffer.from(party2Dsg.signature.R).toString('hex'));
159
+ (0, assert_1.default)(Buffer.from(party1Dsg.signature.S).toString('hex') === Buffer.from(party2Dsg.signature.S).toString('hex'));
160
+ return party1Dsg.signature;
161
+ }
162
+ async function generateDKGKeyShares(retrofitDataA, retrofitDataB, retrofitDataC, seedUser, seedBackup, seedBitgo) {
163
+ const user = new dkg_1.Dkg(3, 2, 0, seedUser, retrofitDataA);
164
+ const backup = new dkg_1.Dkg(3, 2, 1, seedBackup, retrofitDataB);
165
+ const bitgo = new dkg_1.Dkg(3, 2, 2, seedBitgo, retrofitDataC);
166
+ // #region round 1
167
+ const userRound1Message = await user.initDkg();
168
+ const backupRound1Message = await backup.initDkg();
169
+ const bitgoRound1Message = await bitgo.initDkg();
170
+ const bitgoRound2Messages = bitgo.handleIncomingMessages({
171
+ p2pMessages: [],
172
+ broadcastMessages: [userRound1Message, backupRound1Message],
173
+ });
174
+ // #endregion
175
+ // #region round 2
176
+ const userRound2Messages = user.handleIncomingMessages({
177
+ p2pMessages: [],
178
+ broadcastMessages: [bitgoRound1Message, backupRound1Message],
179
+ });
180
+ const backupRound2Messages = backup.handleIncomingMessages({
181
+ p2pMessages: [],
182
+ broadcastMessages: [userRound1Message, bitgoRound1Message],
183
+ });
184
+ const bitgoRound3Messages = bitgo.handleIncomingMessages({
185
+ p2pMessages: backupRound2Messages.p2pMessages
186
+ .filter((m) => m.to === 2)
187
+ .concat(userRound2Messages.p2pMessages.filter((m) => m.to === 2)),
188
+ broadcastMessages: [],
189
+ });
190
+ // #endregion
191
+ // #region round 3
192
+ const userRound3Messages = user.handleIncomingMessages({
193
+ p2pMessages: backupRound2Messages.p2pMessages
194
+ .filter((m) => m.to === 0)
195
+ .concat(bitgoRound2Messages.p2pMessages.filter((m) => m.to === 0)),
196
+ broadcastMessages: [],
197
+ });
198
+ const backupRound3Messages = backup.handleIncomingMessages({
199
+ p2pMessages: bitgoRound2Messages.p2pMessages
200
+ .filter((m) => m.to === 1)
201
+ .concat(userRound2Messages.p2pMessages.filter((m) => m.to === 1)),
202
+ broadcastMessages: [],
203
+ });
204
+ const userRound4Messages = user.handleIncomingMessages({
205
+ p2pMessages: backupRound3Messages.p2pMessages
206
+ .filter((m) => m.to === 0)
207
+ .concat(bitgoRound3Messages.p2pMessages.filter((m) => m.to === 0)),
208
+ broadcastMessages: [],
209
+ });
210
+ const backupRound4Messages = backup.handleIncomingMessages({
211
+ p2pMessages: bitgoRound3Messages.p2pMessages
212
+ .filter((m) => m.to === 1)
213
+ .concat(userRound3Messages.p2pMessages.filter((m) => m.to === 1)),
214
+ broadcastMessages: [],
215
+ });
216
+ const bitgoRound4Messages = bitgo.handleIncomingMessages({
217
+ p2pMessages: backupRound3Messages.p2pMessages
218
+ .filter((m) => m.to === 2)
219
+ .concat(userRound3Messages.p2pMessages.filter((m) => m.to === 2)),
220
+ broadcastMessages: [],
221
+ });
222
+ // #endregion
223
+ user.handleIncomingMessages({
224
+ p2pMessages: [],
225
+ broadcastMessages: bitgoRound4Messages.broadcastMessages.concat(backupRound4Messages.broadcastMessages),
226
+ });
227
+ bitgo.handleIncomingMessages({
228
+ p2pMessages: [],
229
+ broadcastMessages: backupRound4Messages.broadcastMessages.concat(userRound4Messages.broadcastMessages),
230
+ });
231
+ backup.handleIncomingMessages({
232
+ p2pMessages: [],
233
+ broadcastMessages: bitgoRound4Messages.broadcastMessages.concat(userRound4Messages.broadcastMessages),
234
+ });
235
+ return [user, backup, bitgo];
236
+ }
237
+ async function generate2of2KeyShares(retrofitDataA, retrofitDataB) {
238
+ const partyA = new dkg_1.Dkg(2, 2, 0, undefined, retrofitDataA);
239
+ const partyB = new dkg_1.Dkg(2, 2, 1, undefined, retrofitDataB);
240
+ const partyARound1Message = await partyA.initDkg();
241
+ const partyBRound1Message = await partyB.initDkg();
242
+ const partyARound2Messages = partyA.handleIncomingMessages({
243
+ p2pMessages: [],
244
+ broadcastMessages: [partyBRound1Message],
245
+ });
246
+ const partyBRound2Messages = partyB.handleIncomingMessages({
247
+ p2pMessages: [],
248
+ broadcastMessages: [partyARound1Message],
249
+ });
250
+ const partyARound3Messages = partyA.handleIncomingMessages({
251
+ p2pMessages: partyBRound2Messages.p2pMessages.filter((m) => m.to === 0),
252
+ broadcastMessages: [],
253
+ });
254
+ const partyBRound3Messages = partyB.handleIncomingMessages({
255
+ p2pMessages: partyARound2Messages.p2pMessages.filter((m) => m.to === 1),
256
+ broadcastMessages: [],
257
+ });
258
+ const partyARound4Messages = partyA.handleIncomingMessages({
259
+ p2pMessages: partyBRound3Messages.p2pMessages.filter((m) => m.to === 0),
260
+ broadcastMessages: [],
261
+ });
262
+ const partyBRound4Messages = partyB.handleIncomingMessages({
263
+ p2pMessages: partyARound3Messages.p2pMessages.filter((m) => m.to === 1),
264
+ broadcastMessages: [],
265
+ });
266
+ partyA.handleIncomingMessages({
267
+ p2pMessages: [],
268
+ broadcastMessages: partyBRound4Messages.broadcastMessages,
269
+ });
270
+ partyB.handleIncomingMessages({
271
+ p2pMessages: [],
272
+ broadcastMessages: partyARound4Messages.broadcastMessages,
273
+ });
274
+ return [partyA, partyB];
275
+ }
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZWNkc2EtZGtscy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBLDREQWdCQztBQVlELHNFQW9DQztBQUVELDRDQW9EQztBQUVELG9EQW9GQztBQUVELHNEQXlDQztBQTFRRCx1REFBNEQ7QUFDNUQseUNBQTRFO0FBQzVFLHFDQUFrRTtBQUVsRSxtQ0FBZ0M7QUFDaEMscURBQXVDO0FBQ3ZDLG1DQUEwQztBQUUxQywrQkFBNEI7QUFDNUIsb0RBQTRCO0FBRTVCLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUV0Qjs7Ozs7R0FLRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLHFCQUFtQyxFQUFFLElBQVk7SUFDeEYsTUFBTSxDQUFDLEdBQUcsSUFBQSx5QkFBa0IsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRSxNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUEsZUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlELE1BQU0sS0FBSyxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSxlQUFNLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBQSx5QkFBa0IsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxNQUFNLFNBQVMsR0FBRyxL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Q0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLHNCQUFzQixDQUFDO1FBQzVCLFdBQVcsRUFBRSxFQUFFO1FBQ2YsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUMsaUJBQWlCO0tBQzFELENBQUMsQ0FBQztJQUNILE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNlY3AyNTZrMSBhcyBzZWNwIH0gZnJvbSAnQG5vYmxlL2N1cnZlcy9zZWNwMjU2azEnO1xuaW1wb3J0IHsgSERUcmVlLCBTZWNwMjU2azFCaXAzMkhkVHJlZSwgU2VjcDI1NmsxQ3VydmUgfSBmcm9tICcuLi8uLi9jdXJ2ZXMnO1xuaW1wb3J0IHsgYmlnSW50RnJvbUJ1ZmZlckJFLCBiaWdJbnRUb0J1ZmZlckJFIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyBEZXNlcmlhbGl6ZWREa2xzU2lnbmF0dXJlLCBEZXNlcmlhbGl6ZWRNZXNzYWdlcywgUmV0cm9maXREYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBkZWNvZGUgfSBmcm9tICdjYm9yLXgnO1xuaW1wb3J0ICogYXMgc2VjcDI1NmsxIGZyb20gJ3NlY3AyNTZrMSc7XG5pbXBvcnQgeyBjcmVhdGVIYXNoLCBIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IERzZyB9IGZyb20gJy4vZHNnJztcbmltcG9ydCB7IERrZyB9IGZyb20gJy4vZGtnJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuY29uc3QgZGVsaW1ldGVyID0gJzonO1xuXG4vKipcbiAqIENvbWJpbmVzIHBhcnRpYWwgc2lnbmF0dXJlcyBmcm9tIHBhcnRpZXMgcGFydGljaXBhdGluZyBpbiBEU0cuXG4gKiBAcGFyYW0gcm91bmQ0TWVzc2FnZVBheWxvYWRzIC0gcm91bmQgNCBtZXNzYWdlIHBheWxvYWRzIGZyb20gcGFydGljaXBhdGluZyBwYXJ0aWVzXG4gKiBAcGFyYW0gckhleCAtIGhleCByZXByZXNlbnRhdGlvbiBvZiB0aGUgciB2YWx1ZSBpbiB0aGUgc2lnbmF0dXJlXG4gKiBAcmV0dXJucyB7RGVzZXJpYWxpemVkTWVzc2FnZXN9IC0gbWVzc2FnZXMgdG8gc2VuZCB0byBvdGhlciBwYXJ0aWVzIGZvciB0aGUgbmV4dCByb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZVBhcnRpYWxTaWduYXR1cmVzKHJvdW5kNE1lc3NhZ2VQYXlsb2FkczogVWludDhBcnJheVtdLCBySGV4OiBzdHJpbmcpOiBEZXNlcmlhbGl6ZWREa2xzU2lnbmF0dXJlIHtcbiAgY29uc3QgciA9IGJpZ0ludEZyb21CdWZmZXJCRShCdWZmZXIuZnJvbShySGV4LCAnaGV4Jykuc3ViYXJyYXkoMSkpO1xuICBjb25zdCBzMEFyciA9IHJvdW5kNE1lc3NhZ2VQYXlsb2Fkcy5tYXAoKHApID0+IGRlY29kZShwKS5zXzApO1xuICBjb25zdCBzMUFyciA9IHJvdW5kNE1lc3NhZ2VQYXlsb2Fkcy5tYXAoKHApID0+IGRlY29kZShwKS5zXzEpO1xuICBjb25zdCBzMEJpZ0ludHMgPSBzMEFyci5tYXAoKHMwKSA9PiBiaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oczApKSk7XG4gIGNvbnN0IHMxQmlnSW50cyA9IHMxQXJyLm1hcCgoczEpID0+IGJpZ0ludEZyb21CdWZmZXJCRShCdWZmZXIuZnJvbShzMSkpKTtcbiAgY29uc3Qgc2VjcDI1NmsxQ3VydmUgPSBuZXcgU2VjcDI1NmsxQ3VydmUoKTtcbiAgY29uc3QgczBTdW0gPSBzMEJpZ0ludHMuc2xpY2UoMSkucmVkdWNlKChzdW1Tb0ZhciwgczApID0+IHNlY3AyNTZrMUN1cnZlLnNjYWxhckFkZChzdW1Tb0ZhciwgczApLCBzMEJpZ0ludHNbMF0pO1xuICBjb25zdCBzMVN1bSA9IHMxQmlnSW50cy5zbGljZSgxKS5yZWR1Y2UoKHN1bVNvRmFyLCBzMSkgPT4gc2VjcDI1NmsxQ3VydmUuc2NhbGFyQWRkKHN1bVNvRmFyLCBzMSksIHMxQmlnSW50c1swXSk7XG4gIGNvbnN0IHMgPSBzZWNwMjU2azFDdXJ2ZS5zY2FsYXJNdWx0KHMwU3VtLCBzZWNwMjU2azFDdXJ2ZS5zY2FsYXJJbnZlcnQoczFTdW0pKTtcbiAgY29uc3Qgc2lnID0gbmV3IHNlY3AuU2lnbmF0dXJlKHIsIHMpO1xuICBjb25zdCBub3JtYWxpemVkU2lnID0gc2lnLm5vcm1hbGl6ZVMoKTtcbiAgcmV0dXJuIHtcbiAgICBSOiBuZXcgVWludDhBcnJheShiaWdJbnRUb0J1ZmZlckJFKG5vcm1hbGl6ZWRTaWcuciwgMzIpKSxcbiAgICBTOiBuZXcgVWludDhBcnJheShiaWdJbnRUb0J1ZmZlckJFKG5vcm1hbGl6ZWRTaWcucywgMzIpKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBWZXJpZnkgYSBES0xzIFNpZ25hdHVyZSBhbmQgc2VyaWFsaXplIGl0IHRvIHJlY2lkOnI6czpwdWJsaWNrZXkgZm9ybWF0LlxuICogQHBhcmFtIG1lc3NhZ2UgLSBtZXNzYWdlIHRoYXQgd2FzIHNpZ25lZC5cbiAqIEBwYXJhbSBka2xzU2lnbmF0dXJlIC0gUiBhbmQgUyB2YWx1ZXMgb2YgdGhlIEVDRFNBIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSBjb21tb25LZXljaGFpbiAtIHB1YmxpYyBrZXkgYXBwZW5kZWQgdG8gY2hhaW5jb2RlIGluIGhleC5cbiAqIEBwYXJhbSBkZXJpdmF0aW9uUGF0aCAtIG9wdGlvbmFsIGRlcml2YXRpb24gcGF0aCB0byBkZXJpdmUgb24gdGhlIGNvbW1vbmtleWNoYWluIGJlZm9yZSB2ZXJpZmljYXRpb24uXG4gKiBAcGFyYW0gaGFzaCAtIG9wdGlvbmFsIGhhc2ggZnVuY3Rpb24gdG8gYXBwbHkgb24gbWVzc2FnZSBiZWZvcmUgdmVyaWZ5aW5nLiBEZWZhdWx0IGlzIHNoYTI1Ni5cbiAqIEBwYXJhbSBzaG91bGRIYXNoIC0gZmxhZyB0byBkZXRlcm1pbmUgd2hldGhlciBtZXNzYWdlIHNob3VsZCBiZSBoYXNoZWQgYmVmb3JlIHZlcmlmeWluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gc2VyaWFsaXplZCBzaWduYXR1cmUgaW4gYHJlY2lkOnI6czpwdWJsaWNrZXlgIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5QW5kQ29udmVydERrbHNTaWduYXR1cmUoXG4gIG1lc3NhZ2U6IEJ1ZmZlcixcbiAgZGtsc1NpZ25hdHVyZTogRGVzZXJpYWxpemVkRGtsc1NpZ25hdHVyZSxcbiAgY29tbW9uS2V5Y2hhaW46IHN0cmluZyxcbiAgZGVyaXZhdGlvblBhdGg/OiBzdHJpbmcsXG4gIGhhc2g/OiBIYXNoLFxuICBzaG91bGRIYXNoID0gdHJ1ZVxuKTogc3RyaW5nIHtcbiAgbGV0IHRydWVQdWIgPSAnJztcbiAgaWYgKGRlcml2YXRpb25QYXRoICYmIGRlcml2YXRpb25QYXRoICE9PSAnbScpIHtcbiAgICBjb25zdCBoZFRyZWU6IEhEVHJlZSA9IG5ldyBTZWNwMjU2azFCaXAzMkhkVHJlZSgpO1xuICAgIGNvbnN0IGRlcml2ZWRQdWIgPSBoZFRyZWUucHVibGljRGVyaXZlKFxuICAgICAge1xuICAgICAgICBwazogYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKGNvbW1vbktleWNoYWluLnNsaWNlKDAsIDY2KSwgJ2hleCcpKSxcbiAgICAgICAgY2hhaW5jb2RlOiBiaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oY29tbW9uS2V5Y2hhaW4uc2xpY2UoNjYpLCAnaGV4JykpLFxuICAgICAgfSxcbiAgICAgIGRlcml2YXRpb25QYXRoXG4gICAgKTtcbiAgICB0cnVlUHViID0gYmlnSW50VG9CdWZmZXJCRShkZXJpdmVkUHViLnBrKS50b1N0cmluZygnaGV4Jyk7XG4gIH0gZWxzZSB7XG4gICAgdHJ1ZVB1YiA9IGNvbW1vbktleWNoYWluLnNsaWNlKDAsIDY2KTtcbiAgfVxuICBjb25zdCBtZXNzYWdlVG9WZXJpZnkgPSBzaG91bGRIYXNoID8gKGhhc2ggfHwgY3JlYXRlSGFzaCgnc2hhMjU2JykpLnVwZGF0ZShtZXNzYWdlKS5kaWdlc3QoKSA6IG1lc3NhZ2U7XG4gIGNvbnN0IHB1YjAgPSBzZWNwMjU2azEuZWNkc2FSZWNvdmVyKEJ1ZmZlci5jb25jYXQoW2RrbHNTaWduYXR1cmUuUiwgZGtsc1NpZ25hdHVyZS5TXSksIDAsIG1lc3NhZ2VUb1ZlcmlmeSwgdHJ1ZSk7XG4gIGNvbnN0IHB1YjEgPSBzZWNwMjU2azEuZWNkc2FSZWNvdmVyKEJ1ZmZlci5jb25jYXQoW2RrbHNTaWduYXR1cmUuUiwgZGtsc1NpZ25hdHVyZS5TXSksIDEsIG1lc3NhZ2VUb1ZlcmlmeSwgdHJ1ZSk7XG4gIGxldCByZWNJZDogbnVtYmVyO1xuICBpZiAodHJ1ZVB1YiA9PT0gQnVmZmVyLmZyb20ocHViMCkudG9TdHJpbmcoJ2hleCcpKSB7XG4gICAgcmVjSWQgPSAwO1xuICB9IGVsc2UgaWYgKHRydWVQdWIgPT09IEJ1ZmZlci5mcm9tKHB1YjEpLnRvU3RyaW5nKCdoZXgnKSkge1xuICAgIHJlY0lkID0gMTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcignSW52YWxpZCBTaWduYXR1cmUnKTtcbiAgfVxuICByZXR1cm4gYCR7cmVjSWR9JHtkZWxpbWV0ZXJ9JHtCdWZmZXIuZnJvbShka2xzU2lnbmF0dXJlLlIpLnRvU3RyaW5nKCdoZXgnKX0ke2RlbGltZXRlcn0ke0J1ZmZlci5mcm9tKFxuICAgIGRrbHNTaWduYXR1cmUuU1xuICApLnRvU3RyaW5nKCdoZXgnKX0ke2RlbGltZXRlcn0ke3RydWVQdWJ9YDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVUaWxsUm91bmQoXG4gIHJvdW5kOiBudW1iZXIsXG4gIHBhcnR5MURzZzogRHNnLFxuICBwYXJ0eTJEc2c6IERzZ1xuKTogUHJvbWlzZTxEZXNlcmlhbGl6ZWRNZXNzYWdlc1tdIHwgRGVzZXJpYWxpemVkRGtsc1NpZ25hdHVyZT4ge1xuICBpZiAocm91bmQgPCAxIHx8IHJvdW5kID4gNSkge1xuICAgIHRocm93IEVycm9yKCdJbnZhbGlkIHJvdW5kIG51bWJlcicpO1xuICB9XG4gIGNvbnN0IHBhcnR5MVJvdW5kMU1lc3NhZ2UgPSBhd2FpdCBwYXJ0eTFEc2cuaW5pdCgpO1xuICBjb25zdCBwYXJ0eTJSb3VuZDFNZXNzYWdlID0gYXdhaXQgcGFydHkyRHNnLmluaXQoKTtcblxuICBjb25zdCBwYXJ0eTJSb3VuZDJNZXNzYWdlcyA9IHBhcnR5MkRzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtwYXJ0eTFSb3VuZDFNZXNzYWdlXSxcbiAgfSk7XG4gIGNvbnN0IHBhcnR5MVJvdW5kMk1lc3NhZ2VzID0gcGFydHkxRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogW3BhcnR5MlJvdW5kMU1lc3NhZ2VdLFxuICB9KTtcbiAgaWYgKHJvdW5kID09PSAyKSByZXR1cm4gW3BhcnR5MVJvdW5kMk1lc3NhZ2VzLCBwYXJ0eTJSb3VuZDJNZXNzYWdlc107XG5cbiAgY29uc3QgcGFydHkxUm91bmQzTWVzc2FnZXMgPSBwYXJ0eTFEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IHBhcnR5MlJvdW5kMk1lc3NhZ2VzLnAycE1lc3NhZ2VzLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgfSk7XG4gIGNvbnN0IHBhcnR5MlJvdW5kM01lc3NhZ2VzID0gcGFydHkyRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBwYXJ0eTFSb3VuZDJNZXNzYWdlcy5wMnBNZXNzYWdlcyxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gIH0pO1xuICBpZiAocm91bmQgPT09IDMpIHJldHVybiBbcGFydHkxUm91bmQzTWVzc2FnZXMsIHBhcnR5MlJvdW5kM01lc3NhZ2VzXTtcblxuICBjb25zdCBwYXJ0eTJSb3VuZDRNZXNzYWdlcyA9IHBhcnR5MkRzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogcGFydHkxUm91bmQzTWVzc2FnZXMucDJwTWVzc2FnZXMsXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgY29uc3QgcGFydHkxUm91bmQ0TWVzc2FnZXMgPSBwYXJ0eTFEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IHBhcnR5MlJvdW5kM01lc3NhZ2VzLnAycE1lc3NhZ2VzLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgfSk7XG4gIGlmIChyb3VuZCA9PT0gNCkgcmV0dXJuIFtwYXJ0eTFSb3VuZDRNZXNzYWdlcywgcGFydHkyUm91bmQ0TWVzc2FnZXNdO1xuXG4gIHBhcnR5MURzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IHBhcnR5MlJvdW5kNE1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLFxuICB9KTtcbiAgcGFydHkyRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogcGFydHkxUm91bmQ0TWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMsXG4gIH0pO1xuICBhc3NlcnQoQnVmZmVyLmZyb20ocGFydHkxRHNnLnNpZ25hdHVyZS5SKS50b1N0cmluZygnaGV4JykgPT09IEJ1ZmZlci5mcm9tKHBhcnR5MkRzZy5zaWduYXR1cmUuUikudG9TdHJpbmcoJ2hleCcpKTtcbiAgYXNzZXJ0KEJ1ZmZlci5mcm9tKHBhcnR5MURzZy5zaWduYXR1cmUuUykudG9TdHJpbmcoJ2hleCcpID09PSBCdWZmZXIuZnJvbShwYXJ0eTJEc2cuc2lnbmF0dXJlLlMpLnRvU3RyaW5nKCdoZXgnKSk7XG4gIHJldHVybiBwYXJ0eTFEc2cuc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVES0dLZXlTaGFyZXMoXG4gIHJldHJvZml0RGF0YUE/OiBSZXRyb2ZpdERhdGEsXG4gIHJldHJvZml0RGF0YUI/OiBSZXRyb2ZpdERhdGEsXG4gIHJldHJvZml0RGF0YUM/OiBSZXRyb2ZpdERhdGEsXG4gIHNlZWRVc2VyPzogQnVmZmVyLFxuICBzZWVkQmFja3VwPzogQnVmZmVyLFxuICBzZWVkQml0Z28/OiBCdWZmZXJcbik6IFByb21pc2U8W0RrZywgRGtnLCBEa2ddPiB7XG4gIGNvbnN0IHVzZXIgPSBuZXcgRGtnKDMsIDIsIDAsIHNlZWRVc2VyLCByZXRyb2ZpdERhdGFBKTtcbiAgY29uc3QgYmFja3VwID0gbmV3IERrZygzLCAyLCAxLCBzZWVkQmFja3VwLCByZXRyb2ZpdERhdGFCKTtcbiAgY29uc3QgYml0Z28gPSBuZXcgRGtnKDMsIDIsIDIsIHNlZWRCaXRnbywgcmV0cm9maXREYXRhQyk7XG4gIC8vICNyZWdpb24gcm91bmQgMVxuICBjb25zdCB1c2VyUm91bmQxTWVzc2FnZSA9IGF3YWl0IHVzZXIuaW5pdERrZygpO1xuICBjb25zdCBiYWNrdXBSb3VuZDFNZXNzYWdlID0gYXdhaXQgYmFja3VwLmluaXREa2coKTtcbiAgY29uc3QgYml0Z29Sb3VuZDFNZXNzYWdlID0gYXdhaXQgYml0Z28uaW5pdERrZygpO1xuICBjb25zdCBiaXRnb1JvdW5kMk1lc3NhZ2VzID0gYml0Z28uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbdXNlclJvdW5kMU1lc3NhZ2UsIGJhY2t1cFJvdW5kMU1lc3NhZ2VdLFxuICB9KTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gcm91bmQgMlxuICBjb25zdCB1c2VyUm91bmQyTWVzc2FnZXMgPSB1c2VyLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogW2JpdGdvUm91bmQxTWVzc2FnZSwgYmFja3VwUm91bmQxTWVzc2FnZV0sXG4gIH0pO1xuICBjb25zdCBiYWNrdXBSb3VuZDJNZXNzYWdlcyA9IGJhY2t1cC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFt1c2VyUm91bmQxTWVzc2FnZSwgYml0Z29Sb3VuZDFNZXNzYWdlXSxcbiAgfSk7XG4gIGNvbnN0IGJpdGdvUm91bmQzTWVzc2FnZXMgPSBiaXRnby5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogYmFja3VwUm91bmQyTWVzc2FnZXMucDJwTWVzc2FnZXNcbiAgICAgIC5maWx0ZXIoKG0pID0+IG0udG8gPT09IDIpXG4gICAgICAuY29uY2F0KHVzZXJSb3VuZDJNZXNzYWdlcy5wMnBNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0udG8gPT09IDIpKSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gIH0pO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiByb3VuZCAzXG4gIGNvbnN0IHVzZXJSb3VuZDNNZXNzYWdlcyA9IHVzZXIuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IGJhY2t1cFJvdW5kMk1lc3NhZ2VzLnAycE1lc3NhZ2VzXG4gICAgICAuZmlsdGVyKChtKSA9PiBtLnRvID09PSAwKVxuICAgICAgLmNvbmNhdChiaXRnb1JvdW5kMk1lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS50byA9PT0gMCkpLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgfSk7XG4gIGNvbnN0IGJhY2t1cFJvdW5kM01lc3NhZ2VzID0gYmFja3VwLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBiaXRnb1JvdW5kMk1lc3NhZ2VzLnAycE1lc3NhZ2VzXG4gICAgICAuZmlsdGVyKChtKSA9PiBtLnRvID09PSAxKVxuICAgICAgLmNvbmNhdCh1c2VyUm91bmQyTWVzc2FnZXMucDJwTWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLnRvID09PSAxKSksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgY29uc3QgdXNlclJvdW5kNE1lc3NhZ2VzID0gdXNlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogYmFja3VwUm91bmQzTWVzc2FnZXMucDJwTWVzc2FnZXNcbiAgICAgIC5maWx0ZXIoKG0pID0+IG0udG8gPT09IDApXG4gICAgICAuY29uY2F0KGJpdGdvUm91bmQzTWVzc2FnZXMucDJwTWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLnRvID09PSAwKSksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgY29uc3QgYmFja3VwUm91bmQ0TWVzc2FnZXMgPSBiYWNrdXAuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IGJpdGdvUm91bmQzTWVzc2FnZXMucDJwTWVzc2FnZXNcbiAgICAgIC5maWx0ZXIoKG0pID0+IG0udG8gPT09IDEpXG4gICAgICAuY29uY2F0KHVzZXJSb3VuZDNNZXNzYWdlcy5wMnBNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0udG8gPT09IDEpKSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gIH0pO1xuICBjb25zdCBiaXRnb1JvdW5kNE1lc3NhZ2VzID0gYml0Z28uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IGJhY2t1cFJvdW5kM01lc3NhZ2VzLnAycE1lc3NhZ2VzXG4gICAgICAuZmlsdGVyKChtKSA9PiBtLnRvID09PSAyKVxuICAgICAgLmNvbmNhdCh1c2VyUm91bmQzTWVzc2FnZXMucDJwTWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLnRvID09PSAyKSksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIHVzZXIuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBiaXRnb1JvdW5kNE1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLmNvbmNhdChiYWNrdXBSb3VuZDRNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcyksXG4gIH0pO1xuICBiaXRnby5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IGJhY2t1cFJvdW5kNE1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLmNvbmNhdCh1c2VyUm91bmQ0TWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMpLFxuICB9KTtcbiAgYmFja3VwLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogYml0Z29Sb3VuZDRNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5jb25jYXQodXNlclJvdW5kNE1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzKSxcbiAgfSk7XG4gIHJldHVybiBbdXNlciwgYmFja3VwLCBiaXRnb107XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZTJvZjJLZXlTaGFyZXMoXG4gIHJldHJvZml0RGF0YUE/OiBSZXRyb2ZpdERhdGEsXG4gIHJldHJvZml0RGF0YUI/OiBSZXRyb2ZpdERhdGFcbik6IFByb21pc2U8W0RrZywgRGtnXT4ge1xuICBjb25zdCBwYXJ0eUEgPSBuZXcgRGtnKDIsIDIsIDAsIHVuZGVmaW5lZCwgcmV0cm9maXREYXRhQSk7XG4gIGNvbnN0IHBhcnR5QiA9IG5ldyBEa2coMiwgMiwgMSwgdW5kZWZpbmVkLCByZXRyb2ZpdERhdGFCKTtcbiAgY29uc3QgcGFydHlBUm91bmQxTWVzc2FnZSA9IGF3YWl0IHBhcnR5QS5pbml0RGtnKCk7XG4gIGNvbnN0IHBhcnR5QlJvdW5kMU1lc3NhZ2UgPSBhd2FpdCBwYXJ0eUIuaW5pdERrZygpO1xuICBjb25zdCBwYXJ0eUFSb3VuZDJNZXNzYWdlcyA9IHBhcnR5QS5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtwYXJ0eUJSb3VuZDFNZXNzYWdlXSxcbiAgfSk7XG4gIGNvbnN0IHBhcnR5QlJvdW5kMk1lc3NhZ2VzID0gcGFydHlCLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogW3BhcnR5QVJvdW5kMU1lc3NhZ2VdLFxuICB9KTtcbiAgY29uc3QgcGFydHlBUm91bmQzTWVzc2FnZXMgPSBwYXJ0eUEuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IHBhcnR5QlJvdW5kMk1lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS50byA9PT0gMCksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgY29uc3QgcGFydHlCUm91bmQzTWVzc2FnZXMgPSBwYXJ0eUIuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IHBhcnR5QVJvdW5kMk1lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS50byA9PT0gMSksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgY29uc3QgcGFydHlBUm91bmQ0TWVzc2FnZXMgPSBwYXJ0eUEuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IHBhcnR5QlJvdW5kM01lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS50byA9PT0gMCksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgY29uc3QgcGFydHlCUm91bmQ0TWVzc2FnZXMgPSBwYXJ0eUIuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IHBhcnR5QVJvdW5kM01lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS50byA9PT0gMSksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgcGFydHlBLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogcGFydHlCUm91bmQ0TWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMsXG4gIH0pO1xuICBwYXJ0eUIuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBwYXJ0eUFSb3VuZDRNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcyxcbiAgfSk7XG4gIHJldHVybiBbcGFydHlBLCBwYXJ0eUJdO1xufVxuIl19
@@ -1,2 +1,3 @@
1
1
  export * from './ecdsa';
2
+ export * from './ecdsa-dkls';
2
3
  //# 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"}
@@ -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,5 @@ 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
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBd0I7QUFDeEIsK0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9lY2RzYSc7XG5leHBvcnQgKiBmcm9tICcuL2VjZHNhLWRrbHMnO1xuIl19
@@ -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
@@ -12,7 +11,6 @@ export declare function convertHexArrToBigIntArr(values: string[]): bigint[];
12
11
  */
13
12
  export declare function convertBigIntArrToHexArr(values: bigint[], hexLength?: number): string[];
14
13
  export declare function hexToBigInt(hex: string): bigint;
15
- export declare function hexToSignedBigInt(hex: string): bigint;
16
14
  /**
17
15
  * Returns an hex string of the given bigint
18
16
  *
@@ -21,7 +19,6 @@ export declare function hexToSignedBigInt(hex: string): bigint;
21
19
  * @returns {string} - the hex value
22
20
  */
23
21
  export declare function bigIntToHex(bigint: bigint, hexLength?: number): string;
24
- export declare function signedBigIntToHex(bigint: bigint, hexLength?: number): string;
25
22
  export declare function bigIntToBufferLE(n: bigint, minBytes?: number): Buffer;
26
23
  export declare function bigIntFromBufferLE(buf: Buffer): bigint;
27
24
  export declare function bigIntToBufferBE(n: bigint, minBytes?: number): Buffer;
@@ -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,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiBrD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAOtE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAsB5E;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"}