@digitaldefiance/ecies-lib 4.17.10 → 4.18.0

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 (62) hide show
  1. package/README.md +3 -2
  2. package/package.json +2 -2
  3. package/src/lib/voting/threshold/ceremony-coordinator.d.ts +152 -0
  4. package/src/lib/voting/threshold/ceremony-coordinator.d.ts.map +1 -0
  5. package/src/lib/voting/threshold/ceremony-coordinator.js +316 -0
  6. package/src/lib/voting/threshold/ceremony-coordinator.js.map +1 -0
  7. package/src/lib/voting/threshold/decryption-combiner.d.ts.map +1 -1
  8. package/src/lib/voting/threshold/decryption-combiner.js +3 -3
  9. package/src/lib/voting/threshold/decryption-combiner.js.map +1 -1
  10. package/src/lib/voting/threshold/guardian-registry.d.ts +1 -1
  11. package/src/lib/voting/threshold/guardian-registry.d.ts.map +1 -1
  12. package/src/lib/voting/threshold/index.d.ts +11 -0
  13. package/src/lib/voting/threshold/index.d.ts.map +1 -1
  14. package/src/lib/voting/threshold/index.js +32 -1
  15. package/src/lib/voting/threshold/index.js.map +1 -1
  16. package/src/lib/voting/threshold/interfaces/partial-decryption.d.ts +2 -2
  17. package/src/lib/voting/threshold/interfaces/partial-decryption.d.ts.map +1 -1
  18. package/src/lib/voting/threshold/interval-scheduler.d.ts +123 -0
  19. package/src/lib/voting/threshold/interval-scheduler.d.ts.map +1 -0
  20. package/src/lib/voting/threshold/interval-scheduler.js +281 -0
  21. package/src/lib/voting/threshold/interval-scheduler.js.map +1 -0
  22. package/src/lib/voting/threshold/partial-decryption-service.d.ts.map +1 -1
  23. package/src/lib/voting/threshold/partial-decryption-service.js +16 -15
  24. package/src/lib/voting/threshold/partial-decryption-service.js.map +1 -1
  25. package/src/lib/voting/threshold/public-tally-feed.d.ts +100 -0
  26. package/src/lib/voting/threshold/public-tally-feed.d.ts.map +1 -0
  27. package/src/lib/voting/threshold/public-tally-feed.js +202 -0
  28. package/src/lib/voting/threshold/public-tally-feed.js.map +1 -0
  29. package/src/lib/voting/threshold/tally-verifier.d.ts +85 -0
  30. package/src/lib/voting/threshold/tally-verifier.d.ts.map +1 -0
  31. package/src/lib/voting/threshold/tally-verifier.js +169 -0
  32. package/src/lib/voting/threshold/tally-verifier.js.map +1 -0
  33. package/src/lib/voting/threshold/threshold-audit-log.d.ts +71 -0
  34. package/src/lib/voting/threshold/threshold-audit-log.d.ts.map +1 -0
  35. package/src/lib/voting/threshold/threshold-audit-log.js +243 -0
  36. package/src/lib/voting/threshold/threshold-audit-log.js.map +1 -0
  37. package/src/lib/voting/threshold/threshold-county-aggregator.d.ts +81 -0
  38. package/src/lib/voting/threshold/threshold-county-aggregator.d.ts.map +1 -0
  39. package/src/lib/voting/threshold/threshold-county-aggregator.js +154 -0
  40. package/src/lib/voting/threshold/threshold-county-aggregator.js.map +1 -0
  41. package/src/lib/voting/threshold/threshold-key-generator.d.ts.map +1 -1
  42. package/src/lib/voting/threshold/threshold-key-generator.js.map +1 -1
  43. package/src/lib/voting/threshold/threshold-national-aggregator.d.ts +95 -0
  44. package/src/lib/voting/threshold/threshold-national-aggregator.d.ts.map +1 -0
  45. package/src/lib/voting/threshold/threshold-national-aggregator.js +210 -0
  46. package/src/lib/voting/threshold/threshold-national-aggregator.js.map +1 -0
  47. package/src/lib/voting/threshold/threshold-poll-factory.d.ts +88 -0
  48. package/src/lib/voting/threshold/threshold-poll-factory.d.ts.map +1 -0
  49. package/src/lib/voting/threshold/threshold-poll-factory.js +156 -0
  50. package/src/lib/voting/threshold/threshold-poll-factory.js.map +1 -0
  51. package/src/lib/voting/threshold/threshold-poll.d.ts +76 -0
  52. package/src/lib/voting/threshold/threshold-poll.d.ts.map +1 -0
  53. package/src/lib/voting/threshold/threshold-poll.js +144 -0
  54. package/src/lib/voting/threshold/threshold-poll.js.map +1 -0
  55. package/src/lib/voting/threshold/threshold-precinct-aggregator.d.ts +86 -0
  56. package/src/lib/voting/threshold/threshold-precinct-aggregator.d.ts.map +1 -0
  57. package/src/lib/voting/threshold/threshold-precinct-aggregator.js +156 -0
  58. package/src/lib/voting/threshold/threshold-precinct-aggregator.js.map +1 -0
  59. package/src/lib/voting/threshold/threshold-state-aggregator.d.ts +85 -0
  60. package/src/lib/voting/threshold/threshold-state-aggregator.d.ts.map +1 -0
  61. package/src/lib/voting/threshold/threshold-state-aggregator.js +164 -0
  62. package/src/lib/voting/threshold/threshold-state-aggregator.js.map +1 -0
package/README.md CHANGED
@@ -33,6 +33,7 @@ This library implements a modern, enterprise-grade ECIES protocol (v4.0) featuri
33
33
  ### 🗳️ Cryptographic Voting System
34
34
 
35
35
  - **15+ Voting Methods**: Plurality, Approval, Weighted, Borda Count, Score, Ranked Choice (IRV), STAR, STV, Yes/No, Supermajority, and more
36
+ - **Threshold Decryption**: Distributed trust with k-of-n Guardians, real-time interval tallies, and zero-knowledge proofs ([details](src/lib/voting/README.md#threshold-voting))
36
37
  - **Government-Grade Security**: Homomorphic encryption, verifiable receipts, immutable audit logs, public bulletin board
37
38
  - **Role Separation**: Poll aggregators cannot decrypt votes until closure (separate PollTallier)
38
39
  - **Multi-Round Support**: True IRV, STAR voting, STV with intermediate decryption
@@ -1075,6 +1076,7 @@ class MemberService {
1075
1076
  - **`PollEventLogger`**: Event tracking with microsecond timestamps
1076
1077
  - **Hierarchical Aggregators**: `PrecinctAggregator`, `CountyAggregator`, `StateAggregator`, `NationalAggregator`
1077
1078
  - **`BatchVoteProcessor`**: Batch processing and checkpoint management
1079
+ - **Threshold Voting**: `ThresholdKeyGenerator`, `GuardianRegistry`, `CeremonyCoordinator`, `DecryptionCombiner`, `IntervalScheduler`, `PublicTallyFeed`, `TallyVerifier`, `ThresholdPoll`, `ThresholdPollFactory`, `ThresholdAuditLog` — see [Threshold Voting docs](src/lib/voting/README.md#threshold-voting)
1078
1080
 
1079
1081
  ### ID Providers
1080
1082
 
@@ -1530,8 +1532,7 @@ A: Yes. Use `EncryptionStream` for memory-efficient processing of files of any s
1530
1532
 
1531
1533
  ### Recent Versions
1532
1534
 
1533
- For detailed changelog, see [CHANGELOG.md](CHANGELOG.md) in the repository.
1534
-
1535
+ **v4.18.0** - Threshold voting
1535
1536
  **v4.16.x** - Voting key derivation security improvements, HKDF RFC 5869 compliance
1536
1537
  **v4.13.0** - API naming improvements (SIMPLE→BASIC, SINGLE→WITH_LENGTH)
1537
1538
  **v4.12.0** - AESGCMService refactoring, JSON encryption
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitaldefiance/ecies-lib",
3
- "version": "4.17.10",
3
+ "version": "4.18.0",
4
4
  "description": "Digital Defiance ECIES Library",
5
5
  "homepage": "https://github.com/Digital-Defiance/ecies-lib",
6
6
  "repository": {
@@ -62,7 +62,7 @@
62
62
  "license": "MIT",
63
63
  "packageManager": "yarn@4.11.0",
64
64
  "dependencies": {
65
- "@digitaldefiance/i18n-lib": "4.4.0",
65
+ "@digitaldefiance/i18n-lib": "4.5.0",
66
66
  "@ethereumjs/wallet": "^2.0.4",
67
67
  "@noble/curves": "^1.4.2",
68
68
  "@noble/hashes": "^1.4.0",
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Ceremony Coordinator
3
+ *
4
+ * Orchestrates threshold decryption ceremonies by collecting partial
5
+ * decryptions from Guardians, validating ZK proofs, preventing duplicate
6
+ * submissions, and combining results when the threshold is met.
7
+ *
8
+ * @module voting/threshold
9
+ */
10
+ import type { PublicKey } from 'paillier-bigint';
11
+ import type { PlatformID } from '../../../interfaces/platform-id';
12
+ import type { Ceremony } from './interfaces/ceremony';
13
+ import type { ICeremonyCoordinator } from './interfaces/ceremony-coordinator';
14
+ import type { PartialDecryption } from './interfaces/partial-decryption';
15
+ import type { ThresholdKeyConfig } from './interfaces/threshold-key-config';
16
+ /**
17
+ * Error thrown when a ceremony is not found.
18
+ */
19
+ export declare class CeremonyNotFoundError extends Error {
20
+ constructor(message: string);
21
+ }
22
+ /**
23
+ * Error thrown when submitting to a ceremony that is already complete.
24
+ */
25
+ export declare class CeremonyAlreadyCompleteError extends Error {
26
+ constructor(message: string);
27
+ }
28
+ /**
29
+ * Error thrown when a Guardian submits a duplicate partial decryption.
30
+ */
31
+ export declare class DuplicatePartialSubmissionError extends Error {
32
+ constructor(message: string);
33
+ }
34
+ /**
35
+ * Error thrown when a partial decryption's ZK proof is invalid.
36
+ */
37
+ export declare class InvalidCeremonyPartialProofError extends Error {
38
+ constructor(message: string);
39
+ }
40
+ /**
41
+ * Coordinates threshold decryption ceremonies.
42
+ *
43
+ * Manages the lifecycle of decryption ceremonies:
44
+ * 1. Start a ceremony with a unique nonce
45
+ * 2. Collect partial decryptions from Guardians (with duplicate prevention)
46
+ * 3. Validate ZK proofs on each submission
47
+ * 4. Combine partials when threshold k is reached
48
+ * 5. Handle timeout and notify subscribers on completion
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * const coordinator = new CeremonyCoordinator<string>(
53
+ * publicKey,
54
+ * verificationKeys,
55
+ * theta,
56
+ * { totalShares: 5, threshold: 3 },
57
+ * 60_000, // 60s timeout
58
+ * );
59
+ *
60
+ * const ceremony = coordinator.startCeremony('poll-1', 1, encryptedTally);
61
+ *
62
+ * coordinator.onCeremonyComplete((c) => {
63
+ * console.log('Ceremony completed:', c.result?.tallies);
64
+ * });
65
+ *
66
+ * // Guardians submit their partials
67
+ * coordinator.submitPartial(ceremony.id, partial1);
68
+ * coordinator.submitPartial(ceremony.id, partial2);
69
+ * coordinator.submitPartial(ceremony.id, partial3); // triggers combine
70
+ * ```
71
+ */
72
+ export declare class CeremonyCoordinator<TID extends PlatformID = Uint8Array> implements ICeremonyCoordinator<TID> {
73
+ private readonly _ceremonies;
74
+ private readonly _pollCeremonies;
75
+ private readonly _completionListeners;
76
+ private readonly _timeoutTimers;
77
+ private readonly _publicKey;
78
+ private readonly _verificationKeys;
79
+ private readonly _theta;
80
+ private readonly _config;
81
+ private readonly _ceremonyTimeoutMs;
82
+ private readonly _partialService;
83
+ private readonly _combiner;
84
+ /**
85
+ * Create a new CeremonyCoordinator.
86
+ *
87
+ * @param publicKey - The Paillier public key
88
+ * @param verificationKeys - Verification keys for each Guardian (indexed 0..n-1)
89
+ * @param theta - The theta value from key generation (for combining)
90
+ * @param config - Threshold configuration (k, n)
91
+ * @param ceremonyTimeoutMs - Timeout in ms for each ceremony (0 = no timeout)
92
+ */
93
+ constructor(publicKey: PublicKey, verificationKeys: readonly Uint8Array[], theta: bigint, config: ThresholdKeyConfig, ceremonyTimeoutMs?: number);
94
+ /**
95
+ * Start a new decryption ceremony.
96
+ *
97
+ * Generates a unique nonce for replay protection and sets up
98
+ * timeout handling if configured.
99
+ *
100
+ * @param pollId - The poll this ceremony is for
101
+ * @param intervalNumber - The interval number triggering this ceremony
102
+ * @param encryptedTally - The encrypted tally ciphertexts to decrypt
103
+ * @returns The newly created ceremony
104
+ */
105
+ startCeremony(pollId: TID, intervalNumber: number, encryptedTally: bigint[]): Ceremony<TID>;
106
+ /**
107
+ * Submit a partial decryption to a ceremony.
108
+ *
109
+ * Validates:
110
+ * - Ceremony exists and is in progress
111
+ * - Guardian has not already submitted (duplicate prevention)
112
+ * - Ceremony nonce matches (replay protection)
113
+ * - ZK proof is valid
114
+ *
115
+ * When k valid partials are collected, automatically combines them
116
+ * and marks the ceremony as completed.
117
+ *
118
+ * @param ceremonyId - The ceremony to submit to
119
+ * @param partial - The partial decryption with ZK proof
120
+ * @returns true if the submission was accepted
121
+ * @throws CeremonyNotFoundError if the ceremony doesn't exist
122
+ * @throws CeremonyAlreadyCompleteError if the ceremony is not in progress
123
+ * @throws DuplicatePartialSubmissionError if the Guardian already submitted
124
+ * @throws InvalidCeremonyPartialProofError if the ZK proof is invalid
125
+ */
126
+ submitPartial(ceremonyId: string, partial: PartialDecryption): boolean;
127
+ /**
128
+ * Get a ceremony by ID.
129
+ */
130
+ getCeremony(ceremonyId: string): Ceremony<TID> | undefined;
131
+ /**
132
+ * Get all ceremonies for a poll.
133
+ */
134
+ getCeremoniesForPoll(pollId: TID): readonly Ceremony<TID>[];
135
+ /**
136
+ * Subscribe to ceremony completion events.
137
+ */
138
+ onCeremonyComplete(callback: (ceremony: Ceremony<TID>) => void): void;
139
+ /**
140
+ * Complete a ceremony by combining partial decryptions.
141
+ */
142
+ private completeCeremony;
143
+ /**
144
+ * Handle ceremony timeout.
145
+ */
146
+ private handleTimeout;
147
+ /**
148
+ * Compare two Uint8Arrays for equality.
149
+ */
150
+ private uint8ArrayEquals;
151
+ }
152
+ //# sourceMappingURL=ceremony-coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ceremony-coordinator.d.ts","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/threshold/ceremony-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAGlE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAG5E;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,+BAAgC,SAAQ,KAAK;gBAC5C,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,gCAAiC,SAAQ,KAAK;gBAC7C,OAAO,EAAE,MAAM;CAI5B;AAgCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,mBAAmB,CAC9B,GAAG,SAAS,UAAU,GAAG,UAAU,CACnC,YAAW,oBAAoB,CAAC,GAAG,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyC;IACrE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;IACpE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAE9B;IACP,OAAO,CAAC,QAAQ,CAAC,cAAc,CACnB;IAEZ,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwB;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2B;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAE/C;;;;;;;;OAQG;gBAED,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,SAAS,UAAU,EAAE,EACvC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,SAAI;IAWvB;;;;;;;;;;OAUG;IACH,aAAa,CACX,MAAM,EAAE,GAAG,EACX,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EAAE,GACvB,QAAQ,CAAC,GAAG,CAAC;IAkChB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO;IA0DtE;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS;IAI1D;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS,QAAQ,CAAC,GAAG,CAAC,EAAE;IAa3D;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI;IAIrE;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAOzB"}
@@ -0,0 +1,316 @@
1
+ "use strict";
2
+ /**
3
+ * Ceremony Coordinator
4
+ *
5
+ * Orchestrates threshold decryption ceremonies by collecting partial
6
+ * decryptions from Guardians, validating ZK proofs, preventing duplicate
7
+ * submissions, and combining results when the threshold is met.
8
+ *
9
+ * @module voting/threshold
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CeremonyCoordinator = exports.InvalidCeremonyPartialProofError = exports.DuplicatePartialSubmissionError = exports.CeremonyAlreadyCompleteError = exports.CeremonyNotFoundError = void 0;
13
+ const decryption_combiner_1 = require("./decryption-combiner");
14
+ const ceremony_status_1 = require("./enumerations/ceremony-status");
15
+ const partial_decryption_service_1 = require("./partial-decryption-service");
16
+ /**
17
+ * Error thrown when a ceremony is not found.
18
+ */
19
+ class CeremonyNotFoundError extends Error {
20
+ constructor(message) {
21
+ super(message);
22
+ this.name = 'CeremonyNotFoundError';
23
+ }
24
+ }
25
+ exports.CeremonyNotFoundError = CeremonyNotFoundError;
26
+ /**
27
+ * Error thrown when submitting to a ceremony that is already complete.
28
+ */
29
+ class CeremonyAlreadyCompleteError extends Error {
30
+ constructor(message) {
31
+ super(message);
32
+ this.name = 'CeremonyAlreadyCompleteError';
33
+ }
34
+ }
35
+ exports.CeremonyAlreadyCompleteError = CeremonyAlreadyCompleteError;
36
+ /**
37
+ * Error thrown when a Guardian submits a duplicate partial decryption.
38
+ */
39
+ class DuplicatePartialSubmissionError extends Error {
40
+ constructor(message) {
41
+ super(message);
42
+ this.name = 'DuplicatePartialSubmissionError';
43
+ }
44
+ }
45
+ exports.DuplicatePartialSubmissionError = DuplicatePartialSubmissionError;
46
+ /**
47
+ * Error thrown when a partial decryption's ZK proof is invalid.
48
+ */
49
+ class InvalidCeremonyPartialProofError extends Error {
50
+ constructor(message) {
51
+ super(message);
52
+ this.name = 'InvalidCeremonyPartialProofError';
53
+ }
54
+ }
55
+ exports.InvalidCeremonyPartialProofError = InvalidCeremonyPartialProofError;
56
+ /**
57
+ * Converts a PlatformID to a string key for Map lookups.
58
+ */
59
+ function toKey(id) {
60
+ if (id instanceof Uint8Array) {
61
+ return Array.from(id)
62
+ .map((b) => b.toString(16).padStart(2, '0'))
63
+ .join('');
64
+ }
65
+ return String(id);
66
+ }
67
+ /**
68
+ * Generate a cryptographically random nonce.
69
+ */
70
+ function generateNonce(length = 32) {
71
+ const nonce = new Uint8Array(length);
72
+ crypto.getRandomValues(nonce);
73
+ return nonce;
74
+ }
75
+ /**
76
+ * Generate a unique ceremony ID from a nonce.
77
+ */
78
+ function nonceToId(nonce) {
79
+ return Array.from(nonce)
80
+ .map((b) => b.toString(16).padStart(2, '0'))
81
+ .join('');
82
+ }
83
+ /**
84
+ * Coordinates threshold decryption ceremonies.
85
+ *
86
+ * Manages the lifecycle of decryption ceremonies:
87
+ * 1. Start a ceremony with a unique nonce
88
+ * 2. Collect partial decryptions from Guardians (with duplicate prevention)
89
+ * 3. Validate ZK proofs on each submission
90
+ * 4. Combine partials when threshold k is reached
91
+ * 5. Handle timeout and notify subscribers on completion
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * const coordinator = new CeremonyCoordinator<string>(
96
+ * publicKey,
97
+ * verificationKeys,
98
+ * theta,
99
+ * { totalShares: 5, threshold: 3 },
100
+ * 60_000, // 60s timeout
101
+ * );
102
+ *
103
+ * const ceremony = coordinator.startCeremony('poll-1', 1, encryptedTally);
104
+ *
105
+ * coordinator.onCeremonyComplete((c) => {
106
+ * console.log('Ceremony completed:', c.result?.tallies);
107
+ * });
108
+ *
109
+ * // Guardians submit their partials
110
+ * coordinator.submitPartial(ceremony.id, partial1);
111
+ * coordinator.submitPartial(ceremony.id, partial2);
112
+ * coordinator.submitPartial(ceremony.id, partial3); // triggers combine
113
+ * ```
114
+ */
115
+ class CeremonyCoordinator {
116
+ _ceremonies = new Map();
117
+ _pollCeremonies = new Map();
118
+ _completionListeners = [];
119
+ _timeoutTimers = new Map();
120
+ _publicKey;
121
+ _verificationKeys;
122
+ _theta;
123
+ _config;
124
+ _ceremonyTimeoutMs;
125
+ _partialService;
126
+ _combiner;
127
+ /**
128
+ * Create a new CeremonyCoordinator.
129
+ *
130
+ * @param publicKey - The Paillier public key
131
+ * @param verificationKeys - Verification keys for each Guardian (indexed 0..n-1)
132
+ * @param theta - The theta value from key generation (for combining)
133
+ * @param config - Threshold configuration (k, n)
134
+ * @param ceremonyTimeoutMs - Timeout in ms for each ceremony (0 = no timeout)
135
+ */
136
+ constructor(publicKey, verificationKeys, theta, config, ceremonyTimeoutMs = 0) {
137
+ this._publicKey = publicKey;
138
+ this._verificationKeys = verificationKeys;
139
+ this._theta = theta;
140
+ this._config = config;
141
+ this._ceremonyTimeoutMs = ceremonyTimeoutMs;
142
+ this._partialService = new partial_decryption_service_1.PartialDecryptionService(publicKey);
143
+ this._combiner = new decryption_combiner_1.DecryptionCombiner(publicKey, verificationKeys, theta);
144
+ }
145
+ /**
146
+ * Start a new decryption ceremony.
147
+ *
148
+ * Generates a unique nonce for replay protection and sets up
149
+ * timeout handling if configured.
150
+ *
151
+ * @param pollId - The poll this ceremony is for
152
+ * @param intervalNumber - The interval number triggering this ceremony
153
+ * @param encryptedTally - The encrypted tally ciphertexts to decrypt
154
+ * @returns The newly created ceremony
155
+ */
156
+ startCeremony(pollId, intervalNumber, encryptedTally) {
157
+ const nonce = generateNonce();
158
+ const id = nonceToId(nonce);
159
+ const ceremony = {
160
+ id,
161
+ pollId,
162
+ intervalNumber,
163
+ nonce,
164
+ encryptedTally: [...encryptedTally],
165
+ status: ceremony_status_1.CeremonyStatus.InProgress,
166
+ partials: new Map(),
167
+ startedAt: Date.now(),
168
+ };
169
+ this._ceremonies.set(id, ceremony);
170
+ // Track ceremony under its poll
171
+ const pollKey = toKey(pollId);
172
+ const existing = this._pollCeremonies.get(pollKey) ?? [];
173
+ existing.push(id);
174
+ this._pollCeremonies.set(pollKey, existing);
175
+ // Set up timeout if configured
176
+ if (this._ceremonyTimeoutMs > 0) {
177
+ const timer = setTimeout(() => {
178
+ this.handleTimeout(id);
179
+ }, this._ceremonyTimeoutMs);
180
+ this._timeoutTimers.set(id, timer);
181
+ }
182
+ return ceremony;
183
+ }
184
+ /**
185
+ * Submit a partial decryption to a ceremony.
186
+ *
187
+ * Validates:
188
+ * - Ceremony exists and is in progress
189
+ * - Guardian has not already submitted (duplicate prevention)
190
+ * - Ceremony nonce matches (replay protection)
191
+ * - ZK proof is valid
192
+ *
193
+ * When k valid partials are collected, automatically combines them
194
+ * and marks the ceremony as completed.
195
+ *
196
+ * @param ceremonyId - The ceremony to submit to
197
+ * @param partial - The partial decryption with ZK proof
198
+ * @returns true if the submission was accepted
199
+ * @throws CeremonyNotFoundError if the ceremony doesn't exist
200
+ * @throws CeremonyAlreadyCompleteError if the ceremony is not in progress
201
+ * @throws DuplicatePartialSubmissionError if the Guardian already submitted
202
+ * @throws InvalidCeremonyPartialProofError if the ZK proof is invalid
203
+ */
204
+ submitPartial(ceremonyId, partial) {
205
+ const ceremony = this._ceremonies.get(ceremonyId);
206
+ if (!ceremony) {
207
+ throw new CeremonyNotFoundError(`Ceremony '${ceremonyId}' not found`);
208
+ }
209
+ if (ceremony.status !== ceremony_status_1.CeremonyStatus.InProgress) {
210
+ throw new CeremonyAlreadyCompleteError(`Ceremony '${ceremonyId}' is not in progress (status: ${ceremony.status})`);
211
+ }
212
+ // Duplicate prevention: check if this Guardian already submitted
213
+ if (ceremony.partials.has(partial.guardianIndex)) {
214
+ throw new DuplicatePartialSubmissionError(`Guardian ${partial.guardianIndex} has already submitted a partial decryption for ceremony '${ceremonyId}'`);
215
+ }
216
+ // Validate ceremony nonce matches (replay protection)
217
+ if (!this.uint8ArrayEquals(partial.ceremonyNonce, ceremony.nonce)) {
218
+ throw new InvalidCeremonyPartialProofError(`Ceremony nonce mismatch for Guardian ${partial.guardianIndex} in ceremony '${ceremonyId}'`);
219
+ }
220
+ // Validate ZK proof
221
+ const vkIndex = partial.guardianIndex - 1; // 1-indexed to 0-indexed
222
+ if (vkIndex < 0 || vkIndex >= this._verificationKeys.length) {
223
+ throw new InvalidCeremonyPartialProofError(`Guardian index ${partial.guardianIndex} is out of range [1, ${this._verificationKeys.length}]`);
224
+ }
225
+ const isValid = this._partialService.verifyPartial(partial, ceremony.encryptedTally, this._verificationKeys[vkIndex], this._publicKey);
226
+ if (!isValid) {
227
+ throw new InvalidCeremonyPartialProofError(`ZK proof verification failed for Guardian ${partial.guardianIndex} in ceremony '${ceremonyId}'`);
228
+ }
229
+ // Accept the partial
230
+ ceremony.partials.set(partial.guardianIndex, partial);
231
+ // Check if we have enough partials to combine
232
+ if (ceremony.partials.size >= this._config.threshold) {
233
+ this.completeCeremony(ceremony);
234
+ }
235
+ return true;
236
+ }
237
+ /**
238
+ * Get a ceremony by ID.
239
+ */
240
+ getCeremony(ceremonyId) {
241
+ return this._ceremonies.get(ceremonyId);
242
+ }
243
+ /**
244
+ * Get all ceremonies for a poll.
245
+ */
246
+ getCeremoniesForPoll(pollId) {
247
+ const pollKey = toKey(pollId);
248
+ const ceremonyIds = this._pollCeremonies.get(pollKey) ?? [];
249
+ const ceremonies = [];
250
+ for (const id of ceremonyIds) {
251
+ const ceremony = this._ceremonies.get(id);
252
+ if (ceremony) {
253
+ ceremonies.push(ceremony);
254
+ }
255
+ }
256
+ return ceremonies;
257
+ }
258
+ /**
259
+ * Subscribe to ceremony completion events.
260
+ */
261
+ onCeremonyComplete(callback) {
262
+ this._completionListeners.push(callback);
263
+ }
264
+ /**
265
+ * Complete a ceremony by combining partial decryptions.
266
+ */
267
+ completeCeremony(ceremony) {
268
+ // Clear timeout timer
269
+ const timer = this._timeoutTimers.get(ceremony.id);
270
+ if (timer !== undefined) {
271
+ clearTimeout(timer);
272
+ this._timeoutTimers.delete(ceremony.id);
273
+ }
274
+ try {
275
+ const partials = Array.from(ceremony.partials.values());
276
+ const result = this._combiner.combine(partials, ceremony.encryptedTally, this._publicKey, this._config);
277
+ ceremony.result = result;
278
+ ceremony.status = ceremony_status_1.CeremonyStatus.Completed;
279
+ ceremony.completedAt = Date.now();
280
+ // Notify listeners
281
+ for (const listener of this._completionListeners) {
282
+ listener(ceremony);
283
+ }
284
+ }
285
+ catch {
286
+ ceremony.status = ceremony_status_1.CeremonyStatus.Failed;
287
+ ceremony.completedAt = Date.now();
288
+ }
289
+ }
290
+ /**
291
+ * Handle ceremony timeout.
292
+ */
293
+ handleTimeout(ceremonyId) {
294
+ this._timeoutTimers.delete(ceremonyId);
295
+ const ceremony = this._ceremonies.get(ceremonyId);
296
+ if (!ceremony || ceremony.status !== ceremony_status_1.CeremonyStatus.InProgress) {
297
+ return;
298
+ }
299
+ ceremony.status = ceremony_status_1.CeremonyStatus.TimedOut;
300
+ ceremony.completedAt = Date.now();
301
+ }
302
+ /**
303
+ * Compare two Uint8Arrays for equality.
304
+ */
305
+ uint8ArrayEquals(a, b) {
306
+ if (a.length !== b.length)
307
+ return false;
308
+ for (let i = 0; i < a.length; i++) {
309
+ if (a[i] !== b[i])
310
+ return false;
311
+ }
312
+ return true;
313
+ }
314
+ }
315
+ exports.CeremonyCoordinator = CeremonyCoordinator;
316
+ //# sourceMappingURL=ceremony-coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ceremony-coordinator.js","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/threshold/ceremony-coordinator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"decryption-combiner.d.ts","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/threshold/decryption-combiner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EACV,kBAAkB,EAElB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAGtB;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,kBAAmB,YAAW,mBAAmB;IAC5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwB;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAC1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAG7B,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,SAAS,UAAU,EAAE,EACvC,KAAK,EAAE,MAAM;IAOf;;;;;;;;;;;OAWG;IACH,OAAO,CACL,QAAQ,EAAE,SAAS,iBAAiB,EAAE,EACtC,cAAc,EAAE,MAAM,EAAE,EACxB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,kBAAkB,GACzB,kBAAkB;IAmFrB;;;;;;;OAOG;IACH,cAAc,CACZ,QAAQ,EAAE,kBAAkB,EAC5B,cAAc,EAAE,MAAM,EAAE,EACxB,gBAAgB,EAAE,SAAS,UAAU,EAAE,EACvC,SAAS,EAAE,SAAS,GACnB,OAAO;IAoCV;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,uBAAuB;IAmD/B;;;;;;OAMG;IACH,OAAO,CAAC,0BAA0B;IAmBlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,SAAS;IAQjB;;OAEG;IACH,OAAO,CAAC,GAAG;IAKX;;OAEG;IACH,OAAO,CAAC,MAAM;IAcd;;OAEG;IACH,OAAO,CAAC,UAAU;IAqBlB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAOzB"}
1
+ {"version":3,"file":"decryption-combiner.d.ts","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/threshold/decryption-combiner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EACV,kBAAkB,EAElB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAGtB;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,kBAAmB,YAAW,mBAAmB;IAC5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwB;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAC1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAG7B,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,SAAS,UAAU,EAAE,EACvC,KAAK,EAAE,MAAM;IAOf;;;;;;;;;;;OAWG;IACH,OAAO,CACL,QAAQ,EAAE,SAAS,iBAAiB,EAAE,EACtC,cAAc,EAAE,MAAM,EAAE,EACxB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,kBAAkB,GACzB,kBAAkB;IAmFrB;;;;;;;OAOG;IACH,cAAc,CACZ,QAAQ,EAAE,kBAAkB,EAC5B,cAAc,EAAE,MAAM,EAAE,EACxB,gBAAgB,EAAE,SAAS,UAAU,EAAE,EACvC,SAAS,EAAE,SAAS,GACnB,OAAO;IAyCV;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,uBAAuB;IAmD/B;;;;;;OAMG;IACH,OAAO,CAAC,0BAA0B;IAmBlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,SAAS;IAQjB;;OAEG;IACH,OAAO,CAAC,GAAG;IAKX;;OAEG;IACH,OAAO,CAAC,MAAM;IAcd;;OAEG;IACH,OAAO,CAAC,UAAU;IAqBlB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAOzB"}
@@ -98,7 +98,7 @@ class DecryptionCombiner {
98
98
  const n = publicKey.n;
99
99
  const n2 = n * n;
100
100
  // Compute the tallies by combining partial decryptions for each ciphertext
101
- const tallies = encryptedTally.map((ciphertext) => this.combineSingleCiphertext(ciphertext, usedPartials, n, n2, config));
101
+ const tallies = encryptedTally.map((_ciphertext, ciphertextIndex) => this.combineSingleCiphertext(ciphertextIndex, usedPartials, n, n2, config));
102
102
  // Build the combined ZK proof
103
103
  const combinedProof = this.buildCombinedProof(usedPartials, encryptedTally, n2);
104
104
  return {
@@ -167,7 +167,7 @@ class DecryptionCombiner {
167
167
  * By the Paillier L-function property: L(c^(4·Δ·λ)) = 4·Δ·λ·m mod n
168
168
  * So: plaintext = L(combined) · (4·Δ)^(-1) mod n
169
169
  */
170
- combineSingleCiphertext(_ciphertext, partials, n, n2, config) {
170
+ combineSingleCiphertext(ciphertextIndex, partials, n, n2, config) {
171
171
  const indices = partials.map((p) => p.guardianIndex);
172
172
  const delta = this.factorial(BigInt(config.totalShares));
173
173
  // Compute combined value using Lagrange interpolation in the exponent:
@@ -175,7 +175,7 @@ class DecryptionCombiner {
175
175
  // where λ_i' = Δ · Π_{j≠i} j/(j-i) are integer Lagrange coefficients
176
176
  let combined = 1n;
177
177
  for (const partial of partials) {
178
- const partialValue = partial.value;
178
+ const partialValue = partial.values[ciphertextIndex];
179
179
  const lambda = this.lagrangeCoefficientInteger(partial.guardianIndex, indices, delta);
180
180
  // combined *= partial_i^(2·lambda) mod n²
181
181
  // The exponent can be negative, so we handle that with modular inverse
@@ -1 +1 @@
1
- {"version":3,"file":"decryption-combiner.js","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/threshold/decryption-combiner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decryption-combiner.js","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/threshold/decryption-combiner.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,8 @@
10
10
  import type { PlatformID } from '../../../interfaces/platform-id';
11
11
  import { GuardianStatus } from './enumerations/guardian-status';
12
12
  import type { Guardian } from './interfaces/guardian';
13
- import type { GuardianStatusChangeEvent } from './interfaces/guardian-status-change-event';
14
13
  import type { IGuardianRegistry } from './interfaces/guardian-registry';
14
+ import type { GuardianStatusChangeEvent } from './interfaces/guardian-status-change-event';
15
15
  /**
16
16
  * Error thrown when attempting to register a Guardian with a duplicate ID.
17
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"guardian-registry.d.ts","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/threshold/guardian-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE;;GAEG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;gBAC3C,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAeD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,gBAAgB,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU,CAC/D,YAAW,iBAAiB,CAAC,GAAG,CAAC;IAEjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyC;IACpE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAC5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAE1B;IACP,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC;;;;OAIG;gBACS,WAAW,EAAE,MAAM;IAS/B,mDAAmD;IACnD,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,+CAA+C;IAC/C,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI;IAqCvC;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS;IAI/C;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS;IAM5D;;OAEG;IACH,eAAe,IAAI,SAAS,QAAQ,CAAC,GAAG,CAAC,EAAE;IAI3C;;OAEG;IACH,kBAAkB,IAAI,SAAS,QAAQ,CAAC,GAAG,CAAC,EAAE;IAM9C;;;;OAIG;IACH,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IA0BnD;;;;;;;OAOG;IACH,eAAe,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;IA2BrD;;OAEG;IACH,cAAc,CACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,yBAAyB,CAAC,GAAG,CAAC,KAAK,IAAI,GACxD,IAAI;CAGR"}
1
+ {"version":3,"file":"guardian-registry.d.ts","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/threshold/guardian-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AAE3F;;GAEG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;gBAC3C,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAeD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,gBAAgB,CAC3B,GAAG,SAAS,UAAU,GAAG,UAAU,CACnC,YAAW,iBAAiB,CAAC,GAAG,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyC;IACpE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAC5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAE1B;IACP,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC;;;;OAIG;gBACS,WAAW,EAAE,MAAM;IAS/B,mDAAmD;IACnD,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,+CAA+C;IAC/C,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI;IAqCvC;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS;IAI/C;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS;IAM5D;;OAEG;IACH,eAAe,IAAI,SAAS,QAAQ,CAAC,GAAG,CAAC,EAAE;IAI3C;;OAEG;IACH,kBAAkB,IAAI,SAAS,QAAQ,CAAC,GAAG,CAAC,EAAE;IAM9C;;;;OAIG;IACH,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IA0BnD;;;;;;;OAOG;IACH,eAAe,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;IA2BrD;;OAEG;IACH,cAAc,CACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,yBAAyB,CAAC,GAAG,CAAC,KAAK,IAAI,GACxD,IAAI;CAGR"}
@@ -46,4 +46,15 @@ export { ThresholdKeyGenerator, InvalidThresholdConfigError, KeyGenerationFailed
46
46
  export { PartialDecryptionService, InvalidPartialProofError, DeserializationError, } from './partial-decryption-service';
47
47
  export { DecryptionCombiner, InsufficientPartialsError, InvalidPartialInCombineError, CombineFailedError, } from './decryption-combiner';
48
48
  export { GuardianRegistry, GuardianAlreadyRegisteredError, GuardianNotFoundError, InvalidShareIndexError, RegistryFullError, } from './guardian-registry';
49
+ export { IntervalScheduler, PollNotConfiguredError, InvalidIntervalConfigError, PollSchedulingStateError, } from './interval-scheduler';
50
+ export { CeremonyCoordinator, CeremonyNotFoundError, CeremonyAlreadyCompleteError, DuplicatePartialSubmissionError, InvalidCeremonyPartialProofError, } from './ceremony-coordinator';
51
+ export { PublicTallyFeed } from './public-tally-feed';
52
+ export { TallyVerifier } from './tally-verifier';
53
+ export { ThresholdPoll } from './threshold-poll';
54
+ export { ThresholdPollFactory, InsufficientGuardiansError, InvalidThresholdPollConfigError, } from './threshold-poll-factory';
55
+ export { ThresholdPrecinctAggregator } from './threshold-precinct-aggregator';
56
+ export { ThresholdCountyAggregator } from './threshold-county-aggregator';
57
+ export { ThresholdStateAggregator } from './threshold-state-aggregator';
58
+ export { ThresholdNationalAggregator } from './threshold-national-aggregator';
59
+ export { ThresholdAuditLog } from './threshold-audit-log';
49
60
  //# sourceMappingURL=index.d.ts.map