@digitaldefiance/ecies-lib 4.6.3 → 4.7.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 (119) hide show
  1. package/README.md +420 -0
  2. package/package.json +4 -10
  3. package/src/builders/ecies-builder.d.ts +1 -1
  4. package/src/builders/ecies-builder.d.ts.map +1 -1
  5. package/src/builders/ecies-builder.js +2 -2
  6. package/src/builders/ecies-builder.js.map +1 -1
  7. package/src/email-string.js +2 -3
  8. package/src/email-string.js.map +1 -1
  9. package/src/i18n-setup.js +1 -1
  10. package/src/i18n-setup.js.map +1 -1
  11. package/src/index.d.ts +1 -0
  12. package/src/index.d.ts.map +1 -1
  13. package/src/index.js +2 -0
  14. package/src/index.js.map +1 -1
  15. package/src/interfaces/index.d.ts +1 -0
  16. package/src/interfaces/index.d.ts.map +1 -1
  17. package/src/interfaces/index.js +3 -0
  18. package/src/interfaces/index.js.map +1 -1
  19. package/src/interfaces/voting-poll.d.ts +455 -0
  20. package/src/interfaces/voting-poll.d.ts.map +1 -0
  21. package/src/interfaces/voting-poll.js +54 -0
  22. package/src/interfaces/voting-poll.js.map +1 -0
  23. package/src/isolated-private.d.ts +0 -4
  24. package/src/isolated-private.d.ts.map +1 -1
  25. package/src/isolated-private.js +0 -13
  26. package/src/isolated-private.js.map +1 -1
  27. package/src/isolated-public.d.ts +4 -2
  28. package/src/isolated-public.d.ts.map +1 -1
  29. package/src/isolated-public.js +10 -8
  30. package/src/isolated-public.js.map +1 -1
  31. package/src/lib/voting/audit.d.ts +79 -0
  32. package/src/lib/voting/audit.d.ts.map +1 -0
  33. package/src/lib/voting/audit.js +188 -0
  34. package/src/lib/voting/audit.js.map +1 -0
  35. package/src/lib/voting/bulletin-board.d.ts +94 -0
  36. package/src/lib/voting/bulletin-board.d.ts.map +1 -0
  37. package/src/lib/voting/bulletin-board.js +290 -0
  38. package/src/lib/voting/bulletin-board.js.map +1 -0
  39. package/src/lib/voting/encoder.d.ts +42 -0
  40. package/src/lib/voting/encoder.d.ts.map +1 -0
  41. package/src/lib/voting/encoder.js +157 -0
  42. package/src/lib/voting/encoder.js.map +1 -0
  43. package/src/lib/voting/event-logger.d.ts +81 -0
  44. package/src/lib/voting/event-logger.d.ts.map +1 -0
  45. package/src/lib/voting/event-logger.js +165 -0
  46. package/src/lib/voting/event-logger.js.map +1 -0
  47. package/src/lib/voting/examples.d.ts +30 -0
  48. package/src/lib/voting/examples.d.ts.map +1 -0
  49. package/src/lib/voting/examples.js +153 -0
  50. package/src/lib/voting/examples.js.map +1 -0
  51. package/src/lib/voting/factory.d.ts +35 -0
  52. package/src/lib/voting/factory.d.ts.map +1 -0
  53. package/src/lib/voting/factory.js +57 -0
  54. package/src/lib/voting/factory.js.map +1 -0
  55. package/src/lib/voting/index.d.ts +44 -0
  56. package/src/lib/voting/index.d.ts.map +1 -0
  57. package/src/lib/voting/index.js +60 -0
  58. package/src/lib/voting/index.js.map +1 -0
  59. package/src/lib/voting/poll-core.d.ts +55 -0
  60. package/src/lib/voting/poll-core.d.ts.map +1 -0
  61. package/src/lib/voting/poll-core.js +225 -0
  62. package/src/lib/voting/poll-core.js.map +1 -0
  63. package/src/lib/voting/poll.d.ts +124 -0
  64. package/src/lib/voting/poll.d.ts.map +1 -0
  65. package/src/lib/voting/poll.js +323 -0
  66. package/src/lib/voting/poll.js.map +1 -0
  67. package/src/lib/voting/security.d.ts +33 -0
  68. package/src/lib/voting/security.d.ts.map +1 -0
  69. package/src/lib/voting/security.js +68 -0
  70. package/src/lib/voting/security.js.map +1 -0
  71. package/src/lib/voting/tallier.d.ts +35 -0
  72. package/src/lib/voting/tallier.d.ts.map +1 -0
  73. package/src/lib/voting/tallier.js +415 -0
  74. package/src/lib/voting/tallier.js.map +1 -0
  75. package/src/lib/voting/types.d.ts +145 -0
  76. package/src/lib/voting/types.d.ts.map +1 -0
  77. package/src/lib/voting/types.js +48 -0
  78. package/src/lib/voting/types.js.map +1 -0
  79. package/src/member.d.ts +2 -2
  80. package/src/member.d.ts.map +1 -1
  81. package/src/member.js +2 -2
  82. package/src/member.js.map +1 -1
  83. package/src/secure-string.d.ts +2 -2
  84. package/src/secure-string.d.ts.map +1 -1
  85. package/src/secure-string.js +2 -2
  86. package/src/secure-string.js.map +1 -1
  87. package/src/services/aes-gcm.js.map +1 -1
  88. package/src/services/chunk-processor.d.ts +2 -2
  89. package/src/services/chunk-processor.d.ts.map +1 -1
  90. package/src/services/chunk-processor.js +3 -3
  91. package/src/services/chunk-processor.js.map +1 -1
  92. package/src/services/ecies/service.d.ts +3 -0
  93. package/src/services/ecies/service.d.ts.map +1 -1
  94. package/src/services/ecies/service.js +6 -0
  95. package/src/services/ecies/service.js.map +1 -1
  96. package/src/services/ecies/single-recipient.d.ts +1 -1
  97. package/src/services/ecies/single-recipient.d.ts.map +1 -1
  98. package/src/services/ecies/single-recipient.js +1 -1
  99. package/src/services/ecies/single-recipient.js.map +1 -1
  100. package/src/services/encryption-stream.d.ts +3 -3
  101. package/src/services/encryption-stream.d.ts.map +1 -1
  102. package/src/services/encryption-stream.js +7 -7
  103. package/src/services/encryption-stream.js.map +1 -1
  104. package/src/services/index.d.ts +1 -0
  105. package/src/services/index.d.ts.map +1 -1
  106. package/src/services/index.js.map +1 -1
  107. package/src/services/multi-recipient-processor.d.ts +2 -2
  108. package/src/services/multi-recipient-processor.d.ts.map +1 -1
  109. package/src/services/multi-recipient-processor.js +4 -4
  110. package/src/services/multi-recipient-processor.js.map +1 -1
  111. package/src/services/voting.service.d.ts.map +1 -1
  112. package/src/services/voting.service.js +4 -4
  113. package/src/services/voting.service.js.map +1 -1
  114. package/src/test-mocks/mock-frontend-member.d.ts +1 -1
  115. package/src/test-mocks/mock-frontend-member.d.ts.map +1 -1
  116. package/src/test-mocks/mock-frontend-member.js +1 -1
  117. package/src/test-mocks/mock-frontend-member.js.map +1 -1
  118. package/src/types.d.ts +1 -1
  119. package/src/types.d.ts.map +1 -1
@@ -0,0 +1,415 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PollTallier = void 0;
4
+ const types_1 = require("./types");
5
+ class PollTallier {
6
+ __authority;
7
+ votingPrivateKey;
8
+ __votingPublicKey;
9
+ constructor(__authority, votingPrivateKey, __votingPublicKey) {
10
+ this.__authority = __authority;
11
+ this.votingPrivateKey = votingPrivateKey;
12
+ this.__votingPublicKey = __votingPublicKey;
13
+ if (!__authority.votingPrivateKey) {
14
+ throw new Error('Authority must have private key');
15
+ }
16
+ }
17
+ /**
18
+ * Tally votes and determine winner(s)
19
+ * Can only be called after poll is closed
20
+ */
21
+ tally(poll) {
22
+ if (!poll.isClosed)
23
+ throw new Error('Poll must be closed');
24
+ const votes = poll.getEncryptedVotes();
25
+ const choiceCount = poll.choices.length;
26
+ switch (poll.method) {
27
+ case types_1.VotingMethod.Plurality:
28
+ case types_1.VotingMethod.Approval:
29
+ case types_1.VotingMethod.Weighted:
30
+ return this._tallyAdditive(poll, votes, choiceCount);
31
+ case types_1.VotingMethod.Borda:
32
+ case types_1.VotingMethod.Score:
33
+ return this._tallyScored(poll, votes, choiceCount);
34
+ case types_1.VotingMethod.YesNo:
35
+ case types_1.VotingMethod.YesNoAbstain:
36
+ case types_1.VotingMethod.Supermajority:
37
+ return this._tallyYesNo(poll, votes, choiceCount);
38
+ case types_1.VotingMethod.RankedChoice:
39
+ return this._tallyRankedChoice(poll, votes, choiceCount);
40
+ case types_1.VotingMethod.TwoRound:
41
+ return this._tallyTwoRound(poll, votes, choiceCount);
42
+ case types_1.VotingMethod.STAR:
43
+ return this._tallySTAR(poll, votes, choiceCount);
44
+ case types_1.VotingMethod.STV:
45
+ return this._tallySTV(poll, votes, choiceCount);
46
+ case types_1.VotingMethod.Quadratic:
47
+ return this._tallyQuadratic(poll, votes, choiceCount);
48
+ case types_1.VotingMethod.Consensus:
49
+ return this._tallyConsensus(poll, votes, choiceCount);
50
+ case types_1.VotingMethod.ConsentBased:
51
+ return this._tallyConsentBased(poll, votes, choiceCount);
52
+ default:
53
+ throw new Error(`Unknown voting method: ${poll.method}`);
54
+ }
55
+ }
56
+ _tallyAdditive(poll, votes, choiceCount) {
57
+ const tallies = new Array(choiceCount).fill(0n);
58
+ for (const encrypted of votes.values()) {
59
+ for (let i = 0; i < choiceCount; i++) {
60
+ tallies[i] += this.votingPrivateKey.decrypt(encrypted[i]);
61
+ }
62
+ }
63
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-return
64
+ const maxVotes = tallies.reduce((max, v) => (v > max ? v : max), 0n);
65
+ const winners = tallies
66
+ .map((v, i) => (v === maxVotes ? i : -1))
67
+ .filter((i) => i >= 0);
68
+ return {
69
+ method: poll.method,
70
+ choices: [...poll.choices],
71
+ winner: winners.length === 1 ? winners[0] : undefined,
72
+ winners: winners.length > 1 ? winners : undefined,
73
+ tallies,
74
+ voterCount: poll.voterCount,
75
+ };
76
+ }
77
+ _tallyScored(poll, votes, choiceCount) {
78
+ return this._tallyAdditive(poll, votes, choiceCount);
79
+ }
80
+ _tallyYesNo(poll, votes, choiceCount) {
81
+ return this._tallyAdditive(poll, votes, choiceCount);
82
+ }
83
+ /**
84
+ * True Ranked Choice Voting (Instant Runoff)
85
+ * Requires multiple rounds of elimination
86
+ */
87
+ _tallyRankedChoice(poll, votes, choiceCount) {
88
+ const rounds = [];
89
+ const eliminated = new Set();
90
+ const rankings = this._decryptRankings(votes, choiceCount);
91
+ let round = 0;
92
+ while (true) {
93
+ round++;
94
+ const tallies = this._countFirstChoices(rankings, eliminated, choiceCount);
95
+ const totalVotes = tallies.reduce((sum, v) => sum + v, 0n);
96
+ const majority = totalVotes / 2n;
97
+ // Find max votes among non-eliminated candidates
98
+ let maxVotes = 0n;
99
+ for (let i = 0; i < choiceCount; i++) {
100
+ if (!eliminated.has(i) && tallies[i] > maxVotes) {
101
+ maxVotes = tallies[i];
102
+ }
103
+ }
104
+ const topCandidates = tallies
105
+ .map((v, i) => (!eliminated.has(i) && v === maxVotes ? i : -1))
106
+ .filter((i) => i >= 0);
107
+ rounds.push({
108
+ round,
109
+ tallies: [...tallies],
110
+ eliminated: undefined,
111
+ winner: undefined,
112
+ });
113
+ // Check for majority winner
114
+ if (maxVotes > majority && topCandidates.length === 1) {
115
+ rounds[rounds.length - 1].winner = topCandidates[0];
116
+ return {
117
+ method: types_1.VotingMethod.RankedChoice,
118
+ choices: [...poll.choices],
119
+ winner: topCandidates[0],
120
+ eliminated: Array.from(eliminated),
121
+ rounds,
122
+ tallies,
123
+ voterCount: poll.voterCount,
124
+ };
125
+ }
126
+ // Check if only one candidate remains
127
+ const remaining = choiceCount - eliminated.size;
128
+ if (remaining === 1) {
129
+ const winner = tallies.findIndex((_, i) => !eliminated.has(i));
130
+ rounds[rounds.length - 1].winner = winner;
131
+ return {
132
+ method: types_1.VotingMethod.RankedChoice,
133
+ choices: [...poll.choices],
134
+ winner,
135
+ eliminated: Array.from(eliminated),
136
+ rounds,
137
+ tallies,
138
+ voterCount: poll.voterCount,
139
+ };
140
+ }
141
+ // Eliminate candidate with fewest votes (highest index breaks ties)
142
+ let minVotes = totalVotes;
143
+ let toEliminate = -1;
144
+ for (let i = choiceCount - 1; i >= 0; i--) {
145
+ if (!eliminated.has(i) && tallies[i] <= minVotes) {
146
+ minVotes = tallies[i];
147
+ toEliminate = i;
148
+ }
149
+ }
150
+ if (toEliminate === -1)
151
+ break; // Safety check
152
+ eliminated.add(toEliminate);
153
+ rounds[rounds.length - 1].eliminated = toEliminate;
154
+ }
155
+ // Fallback: return current leader
156
+ const finalTallies = this._countFirstChoices(rankings, eliminated, choiceCount);
157
+ let maxVotes = 0n;
158
+ let winner = 0;
159
+ for (let i = 0; i < choiceCount; i++) {
160
+ if (!eliminated.has(i) && finalTallies[i] > maxVotes) {
161
+ maxVotes = finalTallies[i];
162
+ winner = i;
163
+ }
164
+ }
165
+ return {
166
+ method: types_1.VotingMethod.RankedChoice,
167
+ choices: [...poll.choices],
168
+ winner,
169
+ eliminated: Array.from(eliminated),
170
+ rounds,
171
+ tallies: finalTallies,
172
+ voterCount: poll.voterCount,
173
+ };
174
+ }
175
+ _decryptRankings(votes, choiceCount) {
176
+ const rankings = [];
177
+ for (const encrypted of votes.values()) {
178
+ const rankedChoices = [];
179
+ for (let i = 0; i < choiceCount; i++) {
180
+ const rank = Number(this.votingPrivateKey.decrypt(encrypted[i]));
181
+ if (rank > 0) {
182
+ rankedChoices.push({ choice: i, rank });
183
+ }
184
+ }
185
+ rankedChoices.sort((a, b) => a.rank - b.rank);
186
+ rankings.push(rankedChoices.map((rc) => rc.choice));
187
+ }
188
+ return rankings;
189
+ }
190
+ _countFirstChoices(rankings, eliminated, choiceCount) {
191
+ const tallies = new Array(choiceCount).fill(0n);
192
+ for (const ranking of rankings) {
193
+ // Find first non-eliminated choice
194
+ for (const choice of ranking) {
195
+ if (!eliminated.has(choice)) {
196
+ tallies[choice]++;
197
+ break;
198
+ }
199
+ }
200
+ }
201
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
202
+ return tallies;
203
+ }
204
+ _tallyQuadratic(poll, votes, choiceCount) {
205
+ const tallies = new Array(choiceCount).fill(0n);
206
+ for (const encrypted of votes.values()) {
207
+ for (let i = 0; i < choiceCount; i++) {
208
+ const weight = this.votingPrivateKey.decrypt(encrypted[i]);
209
+ tallies[i] += weight * weight; // Quadratic: cost = votes^2
210
+ }
211
+ }
212
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-return
213
+ const maxVotes = tallies.reduce((max, v) => (v > max ? v : max), 0n);
214
+ const winners = tallies
215
+ .map((v, i) => (v === maxVotes ? i : -1))
216
+ .filter((i) => i >= 0);
217
+ return {
218
+ method: types_1.VotingMethod.Quadratic,
219
+ choices: [...poll.choices],
220
+ winner: winners.length === 1 ? winners[0] : undefined,
221
+ winners: winners.length > 1 ? winners : undefined,
222
+ tallies,
223
+ voterCount: poll.voterCount,
224
+ };
225
+ }
226
+ _tallyConsensus(poll, votes, choiceCount) {
227
+ const tallies = new Array(choiceCount).fill(0n);
228
+ const totalVoters = BigInt(votes.size);
229
+ for (const encrypted of votes.values()) {
230
+ for (let i = 0; i < choiceCount; i++) {
231
+ tallies[i] += this.votingPrivateKey.decrypt(encrypted[i]);
232
+ }
233
+ }
234
+ // Consensus requires unanimous or near-unanimous (95%+)
235
+ const threshold = (totalVoters * 95n) / 100n;
236
+ const winners = tallies
237
+ .map((v, i) => (v >= threshold ? i : -1))
238
+ .filter((i) => i >= 0);
239
+ return {
240
+ method: types_1.VotingMethod.Consensus,
241
+ choices: [...poll.choices],
242
+ winner: winners.length === 1 ? winners[0] : undefined,
243
+ winners: winners.length > 0 ? winners : undefined,
244
+ tallies,
245
+ voterCount: poll.voterCount,
246
+ };
247
+ }
248
+ _tallyConsentBased(poll, votes, choiceCount) {
249
+ const tallies = new Array(choiceCount).fill(0n);
250
+ const objections = new Array(choiceCount).fill(0n);
251
+ for (const encrypted of votes.values()) {
252
+ for (let i = 0; i < choiceCount; i++) {
253
+ const vote = this.votingPrivateKey.decrypt(encrypted[i]);
254
+ if (vote > 0n) {
255
+ tallies[i]++; // Support
256
+ }
257
+ else if (vote < 0n) {
258
+ objections[i]++; // Strong objection
259
+ }
260
+ }
261
+ }
262
+ // Consent-based: no strong objections
263
+ const winners = objections
264
+ .map((obj, i) => (obj === 0n ? i : -1))
265
+ .filter((i) => i >= 0);
266
+ return {
267
+ method: types_1.VotingMethod.ConsentBased,
268
+ choices: [...poll.choices],
269
+ winner: winners.length === 1 ? winners[0] : undefined,
270
+ winners: winners.length > 0 ? winners : undefined,
271
+ tallies,
272
+ voterCount: poll.voterCount,
273
+ };
274
+ }
275
+ _tallyTwoRound(poll, votes, choiceCount) {
276
+ const rounds = [];
277
+ const tallies = new Array(choiceCount).fill(0n);
278
+ // Round 1: Count all votes
279
+ for (const encrypted of votes.values()) {
280
+ for (let i = 0; i < choiceCount; i++) {
281
+ tallies[i] += this.votingPrivateKey.decrypt(encrypted[i]);
282
+ }
283
+ }
284
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-return
285
+ const totalVotes = tallies.reduce((sum, v) => sum + v, 0n);
286
+ const majority = totalVotes / 2n;
287
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
288
+ rounds.push({ round: 1, tallies: [...tallies] });
289
+ // Check for majority winner
290
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-return
291
+ const maxVotes = tallies.reduce((max, v) => (v > max ? v : max), 0n);
292
+ if (maxVotes > majority) {
293
+ const winner = tallies.findIndex((v) => v === maxVotes);
294
+ rounds[0].winner = winner;
295
+ return {
296
+ method: types_1.VotingMethod.TwoRound,
297
+ choices: [...poll.choices],
298
+ winner,
299
+ rounds,
300
+ tallies,
301
+ voterCount: poll.voterCount,
302
+ };
303
+ }
304
+ // Round 2: Top 2 candidates (simulated - would need actual second poll)
305
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
306
+ const sorted = tallies
307
+ .map((v, i) => ({ votes: v, index: i }))
308
+ .sort((a, b) => (b.votes > a.votes ? 1 : -1));
309
+ const top2 = [sorted[0].index, sorted[1].index];
310
+ const runoffTallies = new Array(choiceCount).fill(0n);
311
+ runoffTallies[top2[0]] = sorted[0].votes;
312
+ runoffTallies[top2[1]] = sorted[1].votes;
313
+ const winner = sorted[0].index;
314
+ rounds.push({ round: 2, tallies: runoffTallies, winner });
315
+ return {
316
+ method: types_1.VotingMethod.TwoRound,
317
+ choices: [...poll.choices],
318
+ winner,
319
+ rounds,
320
+ tallies: runoffTallies,
321
+ voterCount: poll.voterCount,
322
+ };
323
+ }
324
+ _tallySTAR(poll, votes, choiceCount) {
325
+ const rounds = [];
326
+ const scores = new Array(choiceCount).fill(0n);
327
+ // Round 1: Score voting - sum all scores
328
+ for (const encrypted of votes.values()) {
329
+ for (let i = 0; i < choiceCount; i++) {
330
+ scores[i] += this.votingPrivateKey.decrypt(encrypted[i]);
331
+ }
332
+ }
333
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
334
+ rounds.push({ round: 1, tallies: [...scores] });
335
+ // Find top 2 by score
336
+ const sorted = scores
337
+ .map((s, i) => ({ score: s, index: i }))
338
+ .sort((a, b) => (b.score > a.score ? 1 : -1));
339
+ const top2 = [sorted[0].index, sorted[1].index];
340
+ // Round 2: Automatic runoff - count preferences between top 2
341
+ const runoffTallies = new Array(choiceCount).fill(0n);
342
+ for (const encrypted of votes.values()) {
343
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
344
+ const score0 = this.votingPrivateKey.decrypt(encrypted[top2[0]]);
345
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
346
+ const score1 = this.votingPrivateKey.decrypt(encrypted[top2[1]]);
347
+ if (score0 > score1) {
348
+ runoffTallies[top2[0]]++;
349
+ }
350
+ else if (score1 > score0) {
351
+ runoffTallies[top2[1]]++;
352
+ }
353
+ }
354
+ const winner = runoffTallies[top2[0]] >= runoffTallies[top2[1]] ? top2[0] : top2[1];
355
+ rounds.push({ round: 2, tallies: runoffTallies, winner });
356
+ return {
357
+ method: types_1.VotingMethod.STAR,
358
+ choices: [...poll.choices],
359
+ winner,
360
+ rounds,
361
+ tallies: runoffTallies,
362
+ voterCount: poll.voterCount,
363
+ };
364
+ }
365
+ _tallySTV(poll, votes, choiceCount) {
366
+ const rounds = [];
367
+ const eliminated = new Set();
368
+ const winners = [];
369
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
370
+ const rankings = this._decryptRankings(votes, choiceCount);
371
+ const seatsToFill = Math.min(3, choiceCount); // Default 3 seats
372
+ const quota = BigInt(votes.size) / BigInt(seatsToFill + 1) + 1n; // Droop quota
373
+ let round = 0;
374
+ while (winners.length < seatsToFill && eliminated.size < choiceCount) {
375
+ round++;
376
+ const tallies = this._countFirstChoices(rankings, eliminated, choiceCount);
377
+ rounds.push({ round, tallies: [...tallies] });
378
+ // Check for candidates meeting quota
379
+ const meetingQuota = tallies
380
+ .map((v, i) => !eliminated.has(i) && !winners.includes(i) && v >= quota ? i : -1)
381
+ .filter((i) => i >= 0);
382
+ if (meetingQuota.length > 0) {
383
+ winners.push(...meetingQuota);
384
+ meetingQuota.forEach((i) => eliminated.add(i));
385
+ rounds[rounds.length - 1].winner = meetingQuota[0];
386
+ continue;
387
+ }
388
+ // No one meets quota - eliminate lowest
389
+ const remaining = tallies
390
+ .map((v, i) => !eliminated.has(i) && !winners.includes(i)
391
+ ? { votes: v, index: i }
392
+ : null)
393
+ .filter((x) => x !== null);
394
+ if (remaining.length === 0)
395
+ break;
396
+ const minVotes = remaining.reduce((min, x) => (x.votes < min ? x.votes : min), remaining[0].votes);
397
+ const toEliminate = remaining.find((x) => x.votes === minVotes).index;
398
+ eliminated.add(toEliminate);
399
+ rounds[rounds.length - 1].eliminated = toEliminate;
400
+ }
401
+ const finalTallies = new Array(choiceCount).fill(0n);
402
+ winners.forEach((w) => (finalTallies[w] = 1n));
403
+ return {
404
+ method: types_1.VotingMethod.STV,
405
+ choices: [...poll.choices],
406
+ winners,
407
+ eliminated: Array.from(eliminated),
408
+ rounds,
409
+ tallies: finalTallies,
410
+ voterCount: poll.voterCount,
411
+ };
412
+ }
413
+ }
414
+ exports.PollTallier = PollTallier;
415
+ //# sourceMappingURL=tallier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tallier.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/tallier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Voting system types - browser compatible
3
+ * Uses ecies-lib Member interface
4
+ */
5
+ import type { IMember } from '../../interfaces/member';
6
+ export type { IMember };
7
+ /**
8
+ * Voting methods supported by the poll system.
9
+ *
10
+ * Methods are classified by security level:
11
+ * - Fully Homomorphic: Single-round, privacy-preserving (no intermediate decryption)
12
+ * - Multi-Round: Requires decryption between rounds (less secure)
13
+ * - Insecure: Cannot be made secure with Paillier encryption
14
+ */
15
+ export declare enum VotingMethod {
16
+ /** First-past-the-post voting - most votes wins */
17
+ Plurality = "plurality",
18
+ /** Approval voting - vote for multiple candidates */
19
+ Approval = "approval",
20
+ /** Weighted voting - stakeholder voting with configurable weights */
21
+ Weighted = "weighted",
22
+ /** Borda count - ranked voting with point allocation */
23
+ Borda = "borda",
24
+ /** Score voting - rate candidates 0-10 */
25
+ Score = "score",
26
+ /** Yes/No referendum */
27
+ YesNo = "yes-no",
28
+ /** Yes/No/Abstain referendum with abstention option */
29
+ YesNoAbstain = "yes-no-abstain",
30
+ /** Supermajority - requires 2/3 or 3/4 threshold */
31
+ Supermajority = "supermajority",
32
+ /** Ranked choice voting (IRV) - instant runoff with elimination */
33
+ RankedChoice = "ranked-choice",
34
+ /** Two-round voting - top 2 runoff election */
35
+ TwoRound = "two-round",
36
+ /** STAR voting - Score Then Automatic Runoff */
37
+ STAR = "star",
38
+ /** Single Transferable Vote - proportional representation */
39
+ STV = "stv",
40
+ /** Quadratic voting - requires sqrt operation (not homomorphic) */
41
+ Quadratic = "quadratic",
42
+ /** Consensus voting - requires 95%+ agreement (no privacy) */
43
+ Consensus = "consensus",
44
+ /** Consent-based voting - sociocracy style (no privacy) */
45
+ ConsentBased = "consent-based"
46
+ }
47
+ /**
48
+ * Cryptographically signed receipt proving a vote was cast.
49
+ * Can be used to verify participation without revealing vote content.
50
+ */
51
+ export interface VoteReceipt {
52
+ /** Unique identifier of the voter */
53
+ voterId: Uint8Array;
54
+ /** Unique identifier of the poll */
55
+ pollId: Uint8Array;
56
+ /** Unix timestamp when vote was cast */
57
+ timestamp: number;
58
+ /** Cryptographic signature from poll authority */
59
+ signature: Uint8Array;
60
+ /** Random nonce for uniqueness */
61
+ nonce: Uint8Array;
62
+ }
63
+ /**
64
+ * Results of a completed poll after tallying.
65
+ * Includes winner(s), tallies, and round-by-round data for multi-round methods.
66
+ */
67
+ export interface PollResults {
68
+ /** Voting method used */
69
+ method: VotingMethod;
70
+ /** Array of choice names */
71
+ choices: string[];
72
+ /** Index of winning choice (undefined if tie) */
73
+ winner?: number;
74
+ /** Indices of tied winners (for ties or multi-winner methods) */
75
+ winners?: number[];
76
+ /** Indices of eliminated choices (for RCV) */
77
+ eliminated?: number[];
78
+ /** Round-by-round results (for multi-round methods) */
79
+ rounds?: RoundResult[];
80
+ /** Final vote tallies for each choice */
81
+ tallies: bigint[];
82
+ /** Total number of unique voters */
83
+ voterCount: number;
84
+ }
85
+ /**
86
+ * Results from a single round of multi-round voting.
87
+ * Used in RCV, Two-Round, STAR, and STV methods.
88
+ */
89
+ export interface RoundResult {
90
+ /** Round number (1-indexed) */
91
+ round: number;
92
+ /** Vote tallies for this round */
93
+ tallies: bigint[];
94
+ /** Index of choice eliminated this round (if any) */
95
+ eliminated?: number;
96
+ /** Index of winner determined this round (if any) */
97
+ winner?: number;
98
+ }
99
+ /**
100
+ * Encrypted vote data using Paillier homomorphic encryption.
101
+ * Structure varies by voting method.
102
+ */
103
+ export interface EncryptedVote {
104
+ /** Single choice index (for Plurality, Weighted, etc.) */
105
+ choiceIndex?: number;
106
+ /** Multiple choice indices (for Approval voting) */
107
+ choices?: number[];
108
+ /** Ranked choice indices in preference order (for RCV, Borda) */
109
+ rankings?: number[];
110
+ /** Vote weight (for Weighted voting) */
111
+ weight?: bigint;
112
+ /** Score value 0-10 (for Score voting) */
113
+ score?: number;
114
+ /** Array of encrypted vote values (one per choice) */
115
+ encrypted: bigint[];
116
+ /** Plaintext vote data (only for insecure methods) */
117
+ plaintext?: PlaintextVote;
118
+ }
119
+ /**
120
+ * Plaintext vote data for insecure voting methods.
121
+ * WARNING: Only use for Quadratic, Consensus, or ConsentBased methods.
122
+ */
123
+ export interface PlaintextVote {
124
+ /** Unique identifier of the voter */
125
+ voterId: Uint8Array;
126
+ /** Single choice index */
127
+ choiceIndex?: number;
128
+ /** Multiple choice indices */
129
+ choices?: number[];
130
+ /** Vote weight */
131
+ weight?: bigint;
132
+ /** Objection text (for consent-based voting) */
133
+ objection?: string;
134
+ }
135
+ /**
136
+ * Configuration for supermajority voting.
137
+ * Defines the required threshold as a fraction (e.g., 2/3, 3/4).
138
+ */
139
+ export interface SupermajorityConfig {
140
+ /** Numerator of the fraction (e.g., 2 for 2/3) */
141
+ numerator: number;
142
+ /** Denominator of the fraction (e.g., 3 for 2/3) */
143
+ denominator: number;
144
+ }
145
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VotingMethod = void 0;
4
+ /**
5
+ * Voting methods supported by the poll system.
6
+ *
7
+ * Methods are classified by security level:
8
+ * - Fully Homomorphic: Single-round, privacy-preserving (no intermediate decryption)
9
+ * - Multi-Round: Requires decryption between rounds (less secure)
10
+ * - Insecure: Cannot be made secure with Paillier encryption
11
+ */
12
+ var VotingMethod;
13
+ (function (VotingMethod) {
14
+ // ✅ Fully homomorphic (single-round, privacy-preserving)
15
+ /** First-past-the-post voting - most votes wins */
16
+ VotingMethod["Plurality"] = "plurality";
17
+ /** Approval voting - vote for multiple candidates */
18
+ VotingMethod["Approval"] = "approval";
19
+ /** Weighted voting - stakeholder voting with configurable weights */
20
+ VotingMethod["Weighted"] = "weighted";
21
+ /** Borda count - ranked voting with point allocation */
22
+ VotingMethod["Borda"] = "borda";
23
+ /** Score voting - rate candidates 0-10 */
24
+ VotingMethod["Score"] = "score";
25
+ /** Yes/No referendum */
26
+ VotingMethod["YesNo"] = "yes-no";
27
+ /** Yes/No/Abstain referendum with abstention option */
28
+ VotingMethod["YesNoAbstain"] = "yes-no-abstain";
29
+ /** Supermajority - requires 2/3 or 3/4 threshold */
30
+ VotingMethod["Supermajority"] = "supermajority";
31
+ // ⚠️ Multi-round (requires decryption between rounds)
32
+ /** Ranked choice voting (IRV) - instant runoff with elimination */
33
+ VotingMethod["RankedChoice"] = "ranked-choice";
34
+ /** Two-round voting - top 2 runoff election */
35
+ VotingMethod["TwoRound"] = "two-round";
36
+ /** STAR voting - Score Then Automatic Runoff */
37
+ VotingMethod["STAR"] = "star";
38
+ /** Single Transferable Vote - proportional representation */
39
+ VotingMethod["STV"] = "stv";
40
+ // ❌ Insecure (requires non-additive operations or reveals individual votes)
41
+ /** Quadratic voting - requires sqrt operation (not homomorphic) */
42
+ VotingMethod["Quadratic"] = "quadratic";
43
+ /** Consensus voting - requires 95%+ agreement (no privacy) */
44
+ VotingMethod["Consensus"] = "consensus";
45
+ /** Consent-based voting - sociocracy style (no privacy) */
46
+ VotingMethod["ConsentBased"] = "consent-based";
47
+ })(VotingMethod || (exports.VotingMethod = VotingMethod = {}));
48
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/types.ts"],"names":[],"mappings":";;;AASA;;;;;;;GAOG;AACH,IAAY,YAoCX;AApCD,WAAY,YAAY;IACtB,yDAAyD;IACzD,mDAAmD;IACnD,uCAAuB,CAAA;IACvB,qDAAqD;IACrD,qCAAqB,CAAA;IACrB,qEAAqE;IACrE,qCAAqB,CAAA;IACrB,wDAAwD;IACxD,+BAAe,CAAA;IACf,0CAA0C;IAC1C,+BAAe,CAAA;IACf,wBAAwB;IACxB,gCAAgB,CAAA;IAChB,uDAAuD;IACvD,+CAA+B,CAAA;IAC/B,oDAAoD;IACpD,+CAA+B,CAAA;IAE/B,sDAAsD;IACtD,mEAAmE;IACnE,8CAA8B,CAAA;IAC9B,+CAA+C;IAC/C,sCAAsB,CAAA;IACtB,gDAAgD;IAChD,6BAAa,CAAA;IACb,6DAA6D;IAC7D,2BAAW,CAAA;IAEX,4EAA4E;IAC5E,mEAAmE;IACnE,uCAAuB,CAAA;IACvB,8DAA8D;IAC9D,uCAAuB,CAAA;IACvB,2DAA2D;IAC3D,8CAA8B,CAAA;AAChC,CAAC,EApCW,YAAY,4BAAZ,YAAY,QAoCvB"}