@bitshard.io/bitshard-sdk 0.0.1

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 (117) hide show
  1. package/dist/BitShardSDK.d.ts +156 -0
  2. package/dist/BitShardSDK.d.ts.map +1 -0
  3. package/dist/BitShardSDK.js +350 -0
  4. package/dist/BitShardSDK.js.map +1 -0
  5. package/dist/chains/bitcoin/BitcoinChain.d.ts +6 -0
  6. package/dist/chains/bitcoin/BitcoinChain.d.ts.map +1 -0
  7. package/dist/chains/bitcoin/BitcoinChain.js +10 -0
  8. package/dist/chains/bitcoin/BitcoinChain.js.map +1 -0
  9. package/dist/chains/config.d.ts +5 -0
  10. package/dist/chains/config.d.ts.map +1 -0
  11. package/dist/chains/config.js +7 -0
  12. package/dist/chains/config.js.map +1 -0
  13. package/dist/chains/evm/EVMChain.d.ts +6 -0
  14. package/dist/chains/evm/EVMChain.d.ts.map +1 -0
  15. package/dist/chains/evm/EVMChain.js +10 -0
  16. package/dist/chains/evm/EVMChain.js.map +1 -0
  17. package/dist/core/DKLSParty.d.ts +132 -0
  18. package/dist/core/DKLSParty.d.ts.map +1 -0
  19. package/dist/core/DKLSParty.js +267 -0
  20. package/dist/core/DKLSParty.js.map +1 -0
  21. package/dist/core/DKLSService.d.ts +83 -0
  22. package/dist/core/DKLSService.d.ts.map +1 -0
  23. package/dist/core/DKLSService.js +325 -0
  24. package/dist/core/DKLSService.js.map +1 -0
  25. package/dist/core/ThresholdConfig.d.ts +76 -0
  26. package/dist/core/ThresholdConfig.d.ts.map +1 -0
  27. package/dist/core/ThresholdConfig.js +127 -0
  28. package/dist/core/ThresholdConfig.js.map +1 -0
  29. package/dist/core/types.d.ts +238 -0
  30. package/dist/core/types.d.ts.map +1 -0
  31. package/dist/core/types.js +3 -0
  32. package/dist/core/types.js.map +1 -0
  33. package/dist/crypto/addresses.d.ts +82 -0
  34. package/dist/crypto/addresses.d.ts.map +1 -0
  35. package/dist/crypto/addresses.js +242 -0
  36. package/dist/crypto/addresses.js.map +1 -0
  37. package/dist/crypto/elliptic.d.ts +19 -0
  38. package/dist/crypto/elliptic.d.ts.map +1 -0
  39. package/dist/crypto/elliptic.js +114 -0
  40. package/dist/crypto/elliptic.js.map +1 -0
  41. package/dist/crypto/encoding.d.ts +111 -0
  42. package/dist/crypto/encoding.d.ts.map +1 -0
  43. package/dist/crypto/encoding.js +224 -0
  44. package/dist/crypto/encoding.js.map +1 -0
  45. package/dist/index.d.ts +23 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +58 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/protocols/keygen.d.ts +6 -0
  50. package/dist/protocols/keygen.d.ts.map +1 -0
  51. package/dist/protocols/keygen.js +12 -0
  52. package/dist/protocols/keygen.js.map +1 -0
  53. package/dist/protocols/presignature.d.ts +68 -0
  54. package/dist/protocols/presignature.d.ts.map +1 -0
  55. package/dist/protocols/presignature.js +147 -0
  56. package/dist/protocols/presignature.js.map +1 -0
  57. package/dist/protocols/refresh.d.ts +5 -0
  58. package/dist/protocols/refresh.d.ts.map +1 -0
  59. package/dist/protocols/refresh.js +10 -0
  60. package/dist/protocols/refresh.js.map +1 -0
  61. package/dist/protocols/signing.d.ts +7 -0
  62. package/dist/protocols/signing.d.ts.map +1 -0
  63. package/dist/protocols/signing.js +12 -0
  64. package/dist/protocols/signing.js.map +1 -0
  65. package/dist/rpc/RPCProvider.d.ts +6 -0
  66. package/dist/rpc/RPCProvider.d.ts.map +1 -0
  67. package/dist/rpc/RPCProvider.js +6 -0
  68. package/dist/rpc/RPCProvider.js.map +1 -0
  69. package/dist/rpc/methods.d.ts +5 -0
  70. package/dist/rpc/methods.d.ts.map +1 -0
  71. package/dist/rpc/methods.js +10 -0
  72. package/dist/rpc/methods.js.map +1 -0
  73. package/dist/websocket/coordinator.d.ts +6 -0
  74. package/dist/websocket/coordinator.d.ts.map +1 -0
  75. package/dist/websocket/coordinator.js +10 -0
  76. package/dist/websocket/coordinator.js.map +1 -0
  77. package/dist/websocket/messages.d.ts +9 -0
  78. package/dist/websocket/messages.d.ts.map +1 -0
  79. package/dist/websocket/messages.js +7 -0
  80. package/dist/websocket/messages.js.map +1 -0
  81. package/dist/websocket/session.d.ts +5 -0
  82. package/dist/websocket/session.d.ts.map +1 -0
  83. package/dist/websocket/session.js +7 -0
  84. package/dist/websocket/session.js.map +1 -0
  85. package/dist/wire/format.d.ts +8 -0
  86. package/dist/wire/format.d.ts.map +1 -0
  87. package/dist/wire/format.js +11 -0
  88. package/dist/wire/format.js.map +1 -0
  89. package/dist/wire/validation.d.ts +6 -0
  90. package/dist/wire/validation.d.ts.map +1 -0
  91. package/dist/wire/validation.js +13 -0
  92. package/dist/wire/validation.js.map +1 -0
  93. package/package.json +67 -0
  94. package/src/BitShardSDK.ts +428 -0
  95. package/src/chains/bitcoin/BitcoinChain.ts +7 -0
  96. package/src/chains/config.ts +7 -0
  97. package/src/chains/evm/EVMChain.ts +7 -0
  98. package/src/core/DKLSParty.ts +317 -0
  99. package/src/core/DKLSService.ts +426 -0
  100. package/src/core/ThresholdConfig.ts +159 -0
  101. package/src/core/types.ts +253 -0
  102. package/src/crypto/addresses.ts +282 -0
  103. package/src/crypto/elliptic.ts +133 -0
  104. package/src/crypto/encoding.ts +227 -0
  105. package/src/index.ts +40 -0
  106. package/src/protocols/keygen.ts +8 -0
  107. package/src/protocols/presignature.ts +196 -0
  108. package/src/protocols/refresh.ts +7 -0
  109. package/src/protocols/signing.ts +9 -0
  110. package/src/rpc/RPCProvider.ts +7 -0
  111. package/src/rpc/methods.ts +7 -0
  112. package/src/websocket/coordinator.ts +7 -0
  113. package/src/websocket/messages.ts +11 -0
  114. package/src/websocket/session.ts +7 -0
  115. package/src/wire/format.ts +10 -0
  116. package/src/wire/validation.ts +14 -0
  117. package/test-sdk.js +234 -0
@@ -0,0 +1,132 @@
1
+ import { Keyshare } from '@silencelaboratories/dkls-wasm-ll-node';
2
+ import type { PartyConfig, WireMessage } from './types';
3
+ /**
4
+ * Represents a single party in the MPC protocol
5
+ */
6
+ export declare class DKLSParty {
7
+ private readonly config;
8
+ private readonly thresholdConfig;
9
+ private keygenSession?;
10
+ private signSession?;
11
+ private keyshare?;
12
+ private messageQueue;
13
+ /**
14
+ * Create a new DKLS party
15
+ * @param config Party configuration
16
+ */
17
+ constructor(config: PartyConfig);
18
+ /**
19
+ * Get party ID
20
+ */
21
+ get partyId(): number;
22
+ /**
23
+ * Get party role
24
+ */
25
+ get role(): string;
26
+ /**
27
+ * Check if this party is the coordinator
28
+ */
29
+ isCoordinator(): boolean;
30
+ /**
31
+ * Initialize key generation session
32
+ */
33
+ initializeKeygen(): void;
34
+ /**
35
+ * Initialize key rotation session
36
+ * @param existingKeyshare Existing keyshare to rotate
37
+ */
38
+ initializeKeyRotation(existingKeyshare: Keyshare): void;
39
+ /**
40
+ * Create first message for current protocol
41
+ * @returns Wire format message
42
+ */
43
+ createFirstMessage(): WireMessage;
44
+ /**
45
+ * Handle incoming messages
46
+ * @param messages Array of wire format messages
47
+ * @param commitments Optional commitments for keygen round 3
48
+ * @returns Array of response messages
49
+ */
50
+ handleMessages(messages: WireMessage[], commitments?: any[]): WireMessage[];
51
+ /**
52
+ * Calculate chain code commitment (for keygen)
53
+ * @returns Commitment data
54
+ */
55
+ calculateChainCodeCommitment(): any;
56
+ /**
57
+ * Finalize key generation and extract keyshare
58
+ * @returns The generated keyshare
59
+ */
60
+ finalizeKeygen(): Keyshare;
61
+ /**
62
+ * Finalize key rotation
63
+ * @param oldKeyshare The old keyshare being rotated
64
+ */
65
+ finalizeKeyRotation(oldKeyshare: Keyshare): void;
66
+ /**
67
+ * Initialize signing session
68
+ * @param keyshare Keyshare to use for signing
69
+ * @param derivationPath Derivation path (currently only "m" supported)
70
+ */
71
+ initializeSigning(keyshare?: Keyshare, derivationPath?: string): void;
72
+ /**
73
+ * Generate last message with actual message hash
74
+ * @param messageHash The message hash to sign
75
+ * @returns Wire format message
76
+ */
77
+ lastMessage(messageHash: Uint8Array): WireMessage;
78
+ /**
79
+ * Combine messages to produce final signature
80
+ * @param messages Final round messages
81
+ * @returns Signature components [r, s]
82
+ */
83
+ combine(messages: WireMessage[]): [Uint8Array, Uint8Array];
84
+ /**
85
+ * Get stored keyshare
86
+ */
87
+ getKeyshare(): Keyshare | undefined;
88
+ /**
89
+ * Set keyshare (for restoring from storage)
90
+ * @param keyshare Keyshare to set
91
+ */
92
+ setKeyshare(keyshare: Keyshare): void;
93
+ /**
94
+ * Serialize keyshare to base64
95
+ * @returns Base64 encoded keyshare or undefined
96
+ */
97
+ serializeKeyshare(): string | undefined;
98
+ /**
99
+ * Restore keyshare from base64
100
+ * @param data Base64 encoded keyshare
101
+ */
102
+ deserializeKeyshare(data: string): void;
103
+ /**
104
+ * Add message to queue
105
+ * @param message Wire format message
106
+ */
107
+ queueMessage(message: WireMessage): void;
108
+ /**
109
+ * Get and clear message queue
110
+ * @returns Queued messages
111
+ */
112
+ getQueuedMessages(): WireMessage[];
113
+ /**
114
+ * Get messages for this party from a list
115
+ * @param messages Array of messages
116
+ * @returns Messages intended for this party
117
+ */
118
+ filterIncomingMessages(messages: WireMessage[]): WireMessage[];
119
+ /**
120
+ * Check if party has an active session
121
+ */
122
+ hasActiveSession(): boolean;
123
+ /**
124
+ * Get current session type
125
+ */
126
+ getSessionType(): 'keygen' | 'signing' | 'none';
127
+ /**
128
+ * Clear all sessions and state
129
+ */
130
+ reset(): void;
131
+ }
132
+ //# sourceMappingURL=DKLSParty.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DKLSParty.d.ts","sourceRoot":"","sources":["../../src/core/DKLSParty.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,QAAQ,EACX,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAIxD;;GAEG;AACH,qBAAa,SAAS;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,YAAY,CAAqB;IAEzC;;;OAGG;gBACS,MAAM,EAAE,WAAW;IAc/B;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAYxB;;;OAGG;IACH,qBAAqB,CAAC,gBAAgB,EAAE,QAAQ,GAAG,IAAI;IAQvD;;;OAGG;IACH,kBAAkB,IAAI,WAAW;IAYjC;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,WAAW,EAAE;IAc3E;;;OAGG;IACH,4BAA4B,IAAI,GAAG;IAOnC;;;OAGG;IACH,cAAc,IAAI,QAAQ;IAW1B;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,QAAQ,GAAG,IAAI;IAQhD;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,cAAc,GAAE,MAAY,GAAG,IAAI;IAmB1E;;;;OAIG;IACH,WAAW,CAAC,WAAW,EAAE,UAAU,GAAG,WAAW;IASjD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC;IAmB1D;;OAEG;IACH,WAAW,IAAI,QAAQ,GAAG,SAAS;IAInC;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIrC;;;OAGG;IACH,iBAAiB,IAAI,MAAM,GAAG,SAAS;IASvC;;;OAGG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKvC;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIxC;;;OAGG;IACH,iBAAiB,IAAI,WAAW,EAAE;IAMlC;;;;OAIG;IACH,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;IAS9D;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;OAEG;IACH,cAAc,IAAI,QAAQ,GAAG,SAAS,GAAG,MAAM;IAM/C;;OAEG;IACH,KAAK,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DKLSParty = void 0;
4
+ const dkls_wasm_ll_node_1 = require("@silencelaboratories/dkls-wasm-ll-node");
5
+ const ThresholdConfig_1 = require("./ThresholdConfig");
6
+ const DKLSService_1 = require("./DKLSService");
7
+ /**
8
+ * Represents a single party in the MPC protocol
9
+ */
10
+ class DKLSParty {
11
+ /**
12
+ * Create a new DKLS party
13
+ * @param config Party configuration
14
+ */
15
+ constructor(config) {
16
+ this.messageQueue = [];
17
+ this.config = config;
18
+ this.thresholdConfig = new ThresholdConfig_1.ThresholdConfig(config.totalParties, config.threshold, Array.from({ length: config.totalParties }, (_, i) => i));
19
+ // Validate party ID
20
+ if (!this.thresholdConfig.isValidParty(config.partyId)) {
21
+ throw new Error(`Invalid party ID: ${config.partyId}`);
22
+ }
23
+ }
24
+ /**
25
+ * Get party ID
26
+ */
27
+ get partyId() {
28
+ return this.config.partyId;
29
+ }
30
+ /**
31
+ * Get party role
32
+ */
33
+ get role() {
34
+ return this.config.role ?? 'signer';
35
+ }
36
+ /**
37
+ * Check if this party is the coordinator
38
+ */
39
+ isCoordinator() {
40
+ return this.config.role === 'coordinator';
41
+ }
42
+ /**
43
+ * Initialize key generation session
44
+ */
45
+ initializeKeygen() {
46
+ if (this.keygenSession) {
47
+ throw new Error('Keygen session already initialized');
48
+ }
49
+ this.keygenSession = new dkls_wasm_ll_node_1.KeygenSession(this.config.totalParties, this.config.threshold, this.config.partyId);
50
+ }
51
+ /**
52
+ * Initialize key rotation session
53
+ * @param existingKeyshare Existing keyshare to rotate
54
+ */
55
+ initializeKeyRotation(existingKeyshare) {
56
+ if (this.keygenSession) {
57
+ throw new Error('Keygen session already initialized');
58
+ }
59
+ this.keygenSession = dkls_wasm_ll_node_1.KeygenSession.initKeyRotation(existingKeyshare);
60
+ }
61
+ /**
62
+ * Create first message for current protocol
63
+ * @returns Wire format message
64
+ */
65
+ createFirstMessage() {
66
+ if (this.keygenSession) {
67
+ const msg = this.keygenSession.createFirstMessage();
68
+ return DKLSService_1.DKLSService.toWireMessage(msg);
69
+ }
70
+ else if (this.signSession) {
71
+ const msg = this.signSession.createFirstMessage();
72
+ return DKLSService_1.DKLSService.toWireMessage(msg);
73
+ }
74
+ else {
75
+ throw new Error('No active session');
76
+ }
77
+ }
78
+ /**
79
+ * Handle incoming messages
80
+ * @param messages Array of wire format messages
81
+ * @param commitments Optional commitments for keygen round 3
82
+ * @returns Array of response messages
83
+ */
84
+ handleMessages(messages, commitments) {
85
+ const dklsMessages = messages.map(m => DKLSService_1.DKLSService.fromWireMessage(m));
86
+ if (this.keygenSession) {
87
+ const responses = this.keygenSession.handleMessages(dklsMessages, commitments);
88
+ return responses.map(m => DKLSService_1.DKLSService.toWireMessage(m));
89
+ }
90
+ else if (this.signSession) {
91
+ const responses = this.signSession.handleMessages(dklsMessages);
92
+ return responses.map(m => DKLSService_1.DKLSService.toWireMessage(m));
93
+ }
94
+ else {
95
+ throw new Error('No active session');
96
+ }
97
+ }
98
+ /**
99
+ * Calculate chain code commitment (for keygen)
100
+ * @returns Commitment data
101
+ */
102
+ calculateChainCodeCommitment() {
103
+ if (!this.keygenSession) {
104
+ throw new Error('No active keygen session');
105
+ }
106
+ return this.keygenSession.calculateChainCodeCommitment();
107
+ }
108
+ /**
109
+ * Finalize key generation and extract keyshare
110
+ * @returns The generated keyshare
111
+ */
112
+ finalizeKeygen() {
113
+ if (!this.keygenSession) {
114
+ throw new Error('No active keygen session');
115
+ }
116
+ this.keyshare = this.keygenSession.keyshare();
117
+ this.keygenSession = undefined; // Session is consumed
118
+ return this.keyshare;
119
+ }
120
+ /**
121
+ * Finalize key rotation
122
+ * @param oldKeyshare The old keyshare being rotated
123
+ */
124
+ finalizeKeyRotation(oldKeyshare) {
125
+ if (!this.keyshare) {
126
+ throw new Error('No new keyshare generated');
127
+ }
128
+ this.keyshare.finishKeyRotation(oldKeyshare);
129
+ }
130
+ /**
131
+ * Initialize signing session
132
+ * @param keyshare Keyshare to use for signing
133
+ * @param derivationPath Derivation path (currently only "m" supported)
134
+ */
135
+ initializeSigning(keyshare, derivationPath = "m") {
136
+ if (this.signSession) {
137
+ throw new Error('Sign session already initialized');
138
+ }
139
+ const shareToUse = keyshare ?? this.keyshare;
140
+ if (!shareToUse) {
141
+ throw new Error('No keyshare available for signing');
142
+ }
143
+ // SignSession consumes the keyshare
144
+ this.signSession = new dkls_wasm_ll_node_1.SignSession(shareToUse, derivationPath);
145
+ // Clear stored keyshare if it was consumed
146
+ if (!keyshare && this.keyshare) {
147
+ this.keyshare = undefined;
148
+ }
149
+ }
150
+ /**
151
+ * Generate last message with actual message hash
152
+ * @param messageHash The message hash to sign
153
+ * @returns Wire format message
154
+ */
155
+ lastMessage(messageHash) {
156
+ if (!this.signSession) {
157
+ throw new Error('No active sign session');
158
+ }
159
+ const msg = this.signSession.lastMessage(messageHash);
160
+ return DKLSService_1.DKLSService.toWireMessage(msg);
161
+ }
162
+ /**
163
+ * Combine messages to produce final signature
164
+ * @param messages Final round messages
165
+ * @returns Signature components [r, s]
166
+ */
167
+ combine(messages) {
168
+ if (!this.signSession) {
169
+ throw new Error('No active sign session');
170
+ }
171
+ const dklsMessages = messages.map(m => DKLSService_1.DKLSService.fromWireMessage(m));
172
+ const signature = this.signSession.combine(dklsMessages);
173
+ // Session is consumed after combine
174
+ this.signSession = undefined;
175
+ // Ensure we have exactly 2 components
176
+ if (!Array.isArray(signature) || signature.length !== 2) {
177
+ throw new Error('Invalid signature format');
178
+ }
179
+ return [signature[0], signature[1]];
180
+ }
181
+ /**
182
+ * Get stored keyshare
183
+ */
184
+ getKeyshare() {
185
+ return this.keyshare;
186
+ }
187
+ /**
188
+ * Set keyshare (for restoring from storage)
189
+ * @param keyshare Keyshare to set
190
+ */
191
+ setKeyshare(keyshare) {
192
+ this.keyshare = keyshare;
193
+ }
194
+ /**
195
+ * Serialize keyshare to base64
196
+ * @returns Base64 encoded keyshare or undefined
197
+ */
198
+ serializeKeyshare() {
199
+ if (!this.keyshare) {
200
+ return undefined;
201
+ }
202
+ const bytes = this.keyshare.toBytes();
203
+ return Buffer.from(bytes).toString('base64');
204
+ }
205
+ /**
206
+ * Restore keyshare from base64
207
+ * @param data Base64 encoded keyshare
208
+ */
209
+ deserializeKeyshare(data) {
210
+ const bytes = new Uint8Array(Buffer.from(data, 'base64'));
211
+ this.keyshare = dkls_wasm_ll_node_1.Keyshare.fromBytes(bytes);
212
+ }
213
+ /**
214
+ * Add message to queue
215
+ * @param message Wire format message
216
+ */
217
+ queueMessage(message) {
218
+ this.messageQueue.push(message);
219
+ }
220
+ /**
221
+ * Get and clear message queue
222
+ * @returns Queued messages
223
+ */
224
+ getQueuedMessages() {
225
+ const messages = [...this.messageQueue];
226
+ this.messageQueue = [];
227
+ return messages;
228
+ }
229
+ /**
230
+ * Get messages for this party from a list
231
+ * @param messages Array of messages
232
+ * @returns Messages intended for this party
233
+ */
234
+ filterIncomingMessages(messages) {
235
+ return messages.filter(m => m.to_id === undefined || // Broadcast message
236
+ m.to_id === this.partyId // P2P message for this party
237
+ ).filter(m => m.from_id !== this.partyId // Exclude own messages
238
+ );
239
+ }
240
+ /**
241
+ * Check if party has an active session
242
+ */
243
+ hasActiveSession() {
244
+ return !!(this.keygenSession || this.signSession);
245
+ }
246
+ /**
247
+ * Get current session type
248
+ */
249
+ getSessionType() {
250
+ if (this.keygenSession)
251
+ return 'keygen';
252
+ if (this.signSession)
253
+ return 'signing';
254
+ return 'none';
255
+ }
256
+ /**
257
+ * Clear all sessions and state
258
+ */
259
+ reset() {
260
+ this.keygenSession = undefined;
261
+ this.signSession = undefined;
262
+ this.messageQueue = [];
263
+ // Note: We don't clear keyshare as it might be needed later
264
+ }
265
+ }
266
+ exports.DKLSParty = DKLSParty;
267
+ //# sourceMappingURL=DKLSParty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DKLSParty.js","sourceRoot":"","sources":["../../src/core/DKLSParty.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import { KeygenSession, Keyshare, Message } from '@silencelaboratories/dkls-wasm-ll-node';
2
+ import type { DKGResult, FlexibleDKGResult, SignatureResult, MPCSession, BlockchainAddresses } from './types';
3
+ /**
4
+ * Core DKLS protocol service for distributed key generation and threshold signatures
5
+ */
6
+ export declare class DKLSService {
7
+ private sessions;
8
+ /**
9
+ * Wire format for DKLS Message over WS
10
+ */
11
+ static toWireMessage(msg: Message): {
12
+ from_id: number;
13
+ to_id?: number;
14
+ payload: string;
15
+ };
16
+ /**
17
+ * Reconstruct DKLS Message from wire payload
18
+ */
19
+ static fromWireMessage(w: {
20
+ from_id: number;
21
+ to_id?: number;
22
+ payload: string;
23
+ }): Message;
24
+ /**
25
+ * Generate DKG using DKLS protocol with flexible threshold
26
+ * @param totalParties Total number of parties (n)
27
+ * @param threshold Threshold required for signing (t)
28
+ * @param partyIds Optional array of party IDs (defaults to 0..n-1)
29
+ */
30
+ generateDKG(totalParties?: number, threshold?: number, partyIds?: number[]): Promise<FlexibleDKGResult>;
31
+ /**
32
+ * Legacy method for backward compatibility - generates standard 2-of-3 setup
33
+ */
34
+ generateDKGCommitments(): Promise<DKGResult>;
35
+ /**
36
+ * Execute the DKG protocol rounds
37
+ */
38
+ protected executeDKG(parties: KeygenSession[]): Keyshare[];
39
+ /**
40
+ * Sign a message using threshold signatures
41
+ * @param messageHash The message hash to sign
42
+ * @param keyshares Array of keyshares (at least threshold number required)
43
+ * @param threshold Threshold value (must match keyshare generation)
44
+ * @param publicKey Optional public key for v calculation
45
+ */
46
+ signMessage(messageHash: Uint8Array, keyshares: Keyshare[], threshold: number, publicKey?: string): Promise<SignatureResult>;
47
+ /**
48
+ * Legacy signing method for backward compatibility
49
+ */
50
+ signMessageLegacy(messageHash: Uint8Array, serverShareData: string, backupShareData: string, _chain?: 'ethereum' | 'bitcoin' | 'solana'): Promise<SignatureResult>;
51
+ /**
52
+ * Refresh shares (key rotation) while preserving the public key
53
+ */
54
+ refreshShares(existingShares: Keyshare[]): Promise<{
55
+ newShares: Keyshare[];
56
+ publicKey: string;
57
+ }>;
58
+ /**
59
+ * Filter messages for broadcast (exclude own messages)
60
+ */
61
+ protected filterMessages(msgs: Message[], party: number): Message[];
62
+ /**
63
+ * Select P2P messages for a specific party
64
+ */
65
+ protected selectMessages(msgs: Message[], party: number): Message[];
66
+ /**
67
+ * Derive all blockchain addresses from public key
68
+ */
69
+ protected deriveAllAddresses(publicKey: Uint8Array): BlockchainAddresses;
70
+ /**
71
+ * Get active session by ID
72
+ */
73
+ getSession(sessionId: string): MPCSession | undefined;
74
+ /**
75
+ * Create a new MPC session
76
+ */
77
+ createSession(session: Omit<MPCSession, 'createdAt' | 'updatedAt'>): MPCSession;
78
+ /**
79
+ * Update session status
80
+ */
81
+ updateSession(sessionId: string, updates: Partial<MPCSession>): void;
82
+ }
83
+ //# sourceMappingURL=DKLSService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DKLSService.d.ts","sourceRoot":"","sources":["../../src/core/DKLSService.ts"],"names":[],"mappings":"AACA,OAAO,EACH,aAAa,EAEb,QAAQ,EACR,OAAO,EACV,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EACR,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,UAAU,EAEV,mBAAmB,EACtB,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,QAAQ,CAAsC;IAEtD;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAQxF;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;IAMxF;;;;;OAKG;IACG,WAAW,CACb,YAAY,GAAE,MAAU,EACxB,SAAS,GAAE,MAAU,EACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,iBAAiB,CAAC;IAwE7B;;OAEG;IACG,sBAAsB,IAAI,OAAO,CAAC,SAAS,CAAC;IAsBlD;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,QAAQ,EAAE;IAoC1D;;;;;;OAMG;IACG,WAAW,CACb,WAAW,EAAE,UAAU,EACvB,SAAS,EAAE,QAAQ,EAAE,EACrB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,CAAC;IAgG3B;;OAEG;IACG,iBAAiB,CACnB,WAAW,EAAE,UAAU,EACvB,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,MAAM,GAAE,UAAU,GAAG,SAAS,GAAG,QAAqB,GACvD,OAAO,CAAC,eAAe,CAAC;IAY3B;;OAEG;IACG,aAAa,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QACrD,SAAS,EAAE,QAAQ,EAAE,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC;IAoDF;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE;IAInE;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE;IAInE;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,UAAU,GAAG,mBAAmB;IAIxE;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIrD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG,UAAU;IAU/E;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;CAMvE"}