@digitaldefiance/ecies-lib 4.6.3 → 4.7.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 (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 +287 -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 +162 -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 +322 -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,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PollEventLogger = exports.EventType = void 0;
4
+ var EventType;
5
+ (function (EventType) {
6
+ EventType["PollCreated"] = "poll_created";
7
+ EventType["VoteCast"] = "vote_cast";
8
+ EventType["PollClosed"] = "poll_closed";
9
+ EventType["VoteVerified"] = "vote_verified";
10
+ EventType["TallyComputed"] = "tally_computed";
11
+ EventType["AuditRequested"] = "audit_requested";
12
+ })(EventType || (exports.EventType = EventType = {}));
13
+ /**
14
+ * Comprehensive event logger with sequence tracking
15
+ */
16
+ class PollEventLogger {
17
+ events = [];
18
+ sequence = 0;
19
+ logPollCreated(pollId, creatorId, configuration) {
20
+ return this.appendEvent({
21
+ eventType: EventType.PollCreated,
22
+ pollId,
23
+ creatorId,
24
+ configuration,
25
+ });
26
+ }
27
+ logVoteCast(pollId, voterToken, metadata) {
28
+ return this.appendEvent({
29
+ eventType: EventType.VoteCast,
30
+ pollId,
31
+ voterToken,
32
+ metadata,
33
+ });
34
+ }
35
+ logPollClosed(pollId, tallyHash, metadata) {
36
+ return this.appendEvent({
37
+ eventType: EventType.PollClosed,
38
+ pollId,
39
+ tallyHash,
40
+ metadata,
41
+ });
42
+ }
43
+ logEvent(eventType, pollId, data) {
44
+ return this.appendEvent({
45
+ eventType,
46
+ pollId,
47
+ ...data,
48
+ });
49
+ }
50
+ getEvents() {
51
+ return Object.freeze([...this.events]);
52
+ }
53
+ getEventsForPoll(pollId) {
54
+ const pollIdStr = this.toHex(pollId);
55
+ return Object.freeze(this.events.filter((e) => this.toHex(e.pollId) === pollIdStr));
56
+ }
57
+ getEventsByType(eventType) {
58
+ return Object.freeze(this.events.filter((e) => e.eventType === eventType));
59
+ }
60
+ verifySequence() {
61
+ for (let i = 0; i < this.events.length; i++) {
62
+ if (this.events[i].sequence !== i) {
63
+ return false;
64
+ }
65
+ }
66
+ return true;
67
+ }
68
+ export() {
69
+ const parts = [];
70
+ parts.push(this.encodeNumber(this.events.length));
71
+ for (const event of this.events) {
72
+ parts.push(this.serializeEvent(event));
73
+ }
74
+ return this.concat(parts);
75
+ }
76
+ appendEvent(partial) {
77
+ const entry = {
78
+ sequence: this.sequence++,
79
+ timestamp: this.getMicrosecondTimestamp(),
80
+ ...partial,
81
+ };
82
+ this.events.push(entry);
83
+ return entry;
84
+ }
85
+ serializeEvent(event) {
86
+ const parts = [
87
+ this.encodeNumber(event.sequence),
88
+ this.encodeNumber(event.timestamp),
89
+ this.encodeString(event.eventType),
90
+ this.encodeNumber(event.pollId.length),
91
+ event.pollId,
92
+ ];
93
+ if (event.creatorId) {
94
+ parts.push(this.encodeNumber(1), this.encodeNumber(event.creatorId.length), event.creatorId);
95
+ }
96
+ else {
97
+ parts.push(this.encodeNumber(0));
98
+ }
99
+ if (event.voterToken) {
100
+ parts.push(this.encodeNumber(1), this.encodeNumber(event.voterToken.length), event.voterToken);
101
+ }
102
+ else {
103
+ parts.push(this.encodeNumber(0));
104
+ }
105
+ if (event.configuration) {
106
+ const configStr = JSON.stringify({
107
+ method: event.configuration.method,
108
+ choices: event.configuration.choices,
109
+ maxWeight: event.configuration.maxWeight?.toString(),
110
+ threshold: event.configuration.threshold,
111
+ });
112
+ const encoded = this.encodeString(configStr);
113
+ parts.push(this.encodeNumber(1), this.encodeNumber(encoded.length), encoded);
114
+ }
115
+ else {
116
+ parts.push(this.encodeNumber(0));
117
+ }
118
+ if (event.tallyHash) {
119
+ parts.push(this.encodeNumber(1), this.encodeNumber(event.tallyHash.length), event.tallyHash);
120
+ }
121
+ else {
122
+ parts.push(this.encodeNumber(0));
123
+ }
124
+ if (event.metadata) {
125
+ const metaStr = JSON.stringify(event.metadata);
126
+ const encoded = this.encodeString(metaStr);
127
+ parts.push(this.encodeNumber(1), this.encodeNumber(encoded.length), encoded);
128
+ }
129
+ else {
130
+ parts.push(this.encodeNumber(0));
131
+ }
132
+ return this.concat(parts);
133
+ }
134
+ getMicrosecondTimestamp() {
135
+ return Math.floor(performance.now() * 1000) + Date.now() * 1000;
136
+ }
137
+ encodeNumber(n) {
138
+ const buffer = new ArrayBuffer(8);
139
+ new DataView(buffer).setBigUint64(0, BigInt(n), false);
140
+ return new Uint8Array(buffer);
141
+ }
142
+ encodeString(s) {
143
+ return new TextEncoder().encode(s);
144
+ }
145
+ concat(arrays) {
146
+ const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
147
+ const result = new Uint8Array(totalLength);
148
+ let offset = 0;
149
+ for (const arr of arrays) {
150
+ result.set(arr, offset);
151
+ offset += arr.length;
152
+ }
153
+ return result;
154
+ }
155
+ toHex(arr) {
156
+ return Array.from(arr)
157
+ .map((b) => b.toString(16).padStart(2, '0'))
158
+ .join('');
159
+ }
160
+ }
161
+ exports.PollEventLogger = PollEventLogger;
162
+ //# sourceMappingURL=event-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-logger.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/event-logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Voting System Usage Examples
3
+ * Shows how to use with ecies-lib Member class
4
+ */
5
+ /**
6
+ * Example 1: Simple Plurality Vote
7
+ */
8
+ declare function examplePlurality(): Promise<void>;
9
+ /**
10
+ * Example 2: Ranked Choice Voting (True IRV)
11
+ */
12
+ declare function exampleRankedChoice(): Promise<void>;
13
+ /**
14
+ * Example 3: Weighted Voting (Stakeholder)
15
+ */
16
+ declare function exampleWeighted(): Promise<void>;
17
+ /**
18
+ * Example 4: Borda Count
19
+ */
20
+ declare function exampleBorda(): Promise<void>;
21
+ /**
22
+ * Example 5: Approval Voting
23
+ */
24
+ declare function exampleApproval(): Promise<void>;
25
+ /**
26
+ * Example 6: Receipt Verification
27
+ */
28
+ declare function exampleReceipts(): Promise<void>;
29
+ export { examplePlurality, exampleRankedChoice, exampleWeighted, exampleBorda, exampleApproval, exampleReceipts, };
30
+ //# sourceMappingURL=examples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/examples.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,iBAAe,gBAAgB,kBAiC9B;AAED;;GAEG;AACH,iBAAe,mBAAmB,kBAqCjC;AAED;;GAEG;AACH,iBAAe,eAAe,kBAgC7B;AAED;;GAEG;AACH,iBAAe,YAAY,kBA8B1B;AAED;;GAEG;AACH,iBAAe,eAAe,kBAgC7B;AAED;;GAEG;AACH,iBAAe,eAAe,kBAkB7B;AAcD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,CAAC"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ /**
3
+ * Voting System Usage Examples
4
+ * Shows how to use with ecies-lib Member class
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.examplePlurality = examplePlurality;
8
+ exports.exampleRankedChoice = exampleRankedChoice;
9
+ exports.exampleWeighted = exampleWeighted;
10
+ exports.exampleBorda = exampleBorda;
11
+ exports.exampleApproval = exampleApproval;
12
+ exports.exampleReceipts = exampleReceipts;
13
+ const index_1 = require("./index");
14
+ /**
15
+ * Example 1: Simple Plurality Vote
16
+ */
17
+ async function examplePlurality() {
18
+ // Create authority (poll creator)
19
+ const authority = await createMemberWithVotingKeys();
20
+ // Create poll
21
+ const poll = index_1.PollFactory.createPlurality(['Alice', 'Bob', 'Charlie'], authority);
22
+ // Create voters
23
+ const voter1 = await createMemberWithVotingKeys();
24
+ const voter2 = await createMemberWithVotingKeys();
25
+ const voter3 = await createMemberWithVotingKeys();
26
+ // Cast votes
27
+ const encoder = new index_1.VoteEncoder(authority.votingPublicKey);
28
+ poll.vote(voter1, encoder.encodePlurality(0, 3)); // Alice
29
+ poll.vote(voter2, encoder.encodePlurality(0, 3)); // Alice
30
+ poll.vote(voter3, encoder.encodePlurality(1, 3)); // Bob
31
+ // Close and tally
32
+ poll.close();
33
+ const tallier = new index_1.PollTallier(authority, authority.votingPrivateKey, authority.votingPublicKey);
34
+ const results = tallier.tally(poll);
35
+ console.log('Winner:', results.choices[results.winner]); // Alice
36
+ console.log('Tallies:', results.tallies); // [2n, 1n, 0n]
37
+ }
38
+ /**
39
+ * Example 2: Ranked Choice Voting (True IRV)
40
+ */
41
+ async function exampleRankedChoice() {
42
+ const authority = await createMemberWithVotingKeys();
43
+ const poll = index_1.PollFactory.createRankedChoice(['Alice', 'Bob', 'Charlie', 'Diana'], authority);
44
+ const encoder = new index_1.VoteEncoder(authority.votingPublicKey);
45
+ // Voter 1: Alice > Bob > Charlie
46
+ const voter1 = await createMemberWithVotingKeys();
47
+ poll.vote(voter1, encoder.encodeRankedChoice([0, 1, 2], 4));
48
+ // Voter 2: Bob > Alice > Diana
49
+ const voter2 = await createMemberWithVotingKeys();
50
+ poll.vote(voter2, encoder.encodeRankedChoice([1, 0, 3], 4));
51
+ // Voter 3: Charlie > Diana > Bob
52
+ const voter3 = await createMemberWithVotingKeys();
53
+ poll.vote(voter3, encoder.encodeRankedChoice([2, 3, 1], 4));
54
+ // Voter 4: Alice > Charlie
55
+ const voter4 = await createMemberWithVotingKeys();
56
+ poll.vote(voter4, encoder.encodeRankedChoice([0, 2], 4));
57
+ poll.close();
58
+ const tallier = new index_1.PollTallier(authority, authority.votingPrivateKey, authority.votingPublicKey);
59
+ const results = tallier.tally(poll);
60
+ console.log('Winner:', results.choices[results.winner]);
61
+ console.log('Rounds:', results.rounds);
62
+ console.log('Eliminated:', results.eliminated);
63
+ }
64
+ /**
65
+ * Example 3: Weighted Voting (Stakeholder)
66
+ */
67
+ async function exampleWeighted() {
68
+ const authority = await createMemberWithVotingKeys();
69
+ const poll = index_1.PollFactory.createWeighted(['Proposal A', 'Proposal B'], authority, 1000n);
70
+ const encoder = new index_1.VoteEncoder(authority.votingPublicKey);
71
+ // Large stakeholder
72
+ const whale = await createMemberWithVotingKeys();
73
+ poll.vote(whale, encoder.encodeWeighted(0, 500n, 2));
74
+ // Medium stakeholder
75
+ const dolphin = await createMemberWithVotingKeys();
76
+ poll.vote(dolphin, encoder.encodeWeighted(1, 200n, 2));
77
+ // Small stakeholder
78
+ const shrimp = await createMemberWithVotingKeys();
79
+ poll.vote(shrimp, encoder.encodeWeighted(1, 50n, 2));
80
+ poll.close();
81
+ const tallier = new index_1.PollTallier(authority, authority.votingPrivateKey, authority.votingPublicKey);
82
+ const results = tallier.tally(poll);
83
+ console.log('Results:', results.tallies); // [500n, 250n]
84
+ }
85
+ /**
86
+ * Example 4: Borda Count
87
+ */
88
+ async function exampleBorda() {
89
+ const authority = await createMemberWithVotingKeys();
90
+ const poll = index_1.PollFactory.createBorda(['Option A', 'Option B', 'Option C'], authority);
91
+ const encoder = new index_1.VoteEncoder(authority.votingPublicKey);
92
+ // Each voter ranks all options
93
+ const voter1 = await createMemberWithVotingKeys();
94
+ poll.vote(voter1, encoder.encodeBorda([0, 1, 2], 3)); // A=3, B=2, C=1
95
+ const voter2 = await createMemberWithVotingKeys();
96
+ poll.vote(voter2, encoder.encodeBorda([1, 0, 2], 3)); // B=3, A=2, C=1
97
+ const voter3 = await createMemberWithVotingKeys();
98
+ poll.vote(voter3, encoder.encodeBorda([0, 2, 1], 3)); // A=3, C=2, B=1
99
+ poll.close();
100
+ const tallier = new index_1.PollTallier(authority, authority.votingPrivateKey, authority.votingPublicKey);
101
+ const results = tallier.tally(poll);
102
+ console.log('Points:', results.tallies); // [8n, 6n, 4n]
103
+ console.log('Winner:', results.choices[results.winner]); // Option A
104
+ }
105
+ /**
106
+ * Example 5: Approval Voting
107
+ */
108
+ async function exampleApproval() {
109
+ const authority = await createMemberWithVotingKeys();
110
+ const poll = index_1.PollFactory.createApproval(['Red', 'Green', 'Blue', 'Yellow'], authority);
111
+ const encoder = new index_1.VoteEncoder(authority.votingPublicKey);
112
+ // Voter 1 approves Red and Blue
113
+ const voter1 = await createMemberWithVotingKeys();
114
+ poll.vote(voter1, encoder.encodeApproval([0, 2], 4));
115
+ // Voter 2 approves Green and Blue
116
+ const voter2 = await createMemberWithVotingKeys();
117
+ poll.vote(voter2, encoder.encodeApproval([1, 2], 4));
118
+ // Voter 3 approves only Blue
119
+ const voter3 = await createMemberWithVotingKeys();
120
+ poll.vote(voter3, encoder.encodeApproval([2], 4));
121
+ poll.close();
122
+ const tallier = new index_1.PollTallier(authority, authority.votingPrivateKey, authority.votingPublicKey);
123
+ const results = tallier.tally(poll);
124
+ console.log('Approvals:', results.tallies); // [1n, 1n, 3n, 0n]
125
+ console.log('Winner:', results.choices[results.winner]); // Blue
126
+ }
127
+ /**
128
+ * Example 6: Receipt Verification
129
+ */
130
+ async function exampleReceipts() {
131
+ const authority = await createMemberWithVotingKeys();
132
+ const poll = index_1.PollFactory.createPlurality(['Yes', 'No'], authority);
133
+ const voter = await createMemberWithVotingKeys();
134
+ const encoder = new index_1.VoteEncoder(authority.votingPublicKey);
135
+ // Cast vote and get receipt
136
+ const receipt = poll.vote(voter, encoder.encodePlurality(0, 2));
137
+ // Verify receipt
138
+ const isValid = poll.verifyReceipt(voter, receipt);
139
+ console.log('Receipt valid:', isValid); // true
140
+ // Try to verify with wrong voter
141
+ const otherVoter = await createMemberWithVotingKeys();
142
+ const isInvalid = poll.verifyReceipt(otherVoter, receipt);
143
+ console.log('Wrong voter:', isInvalid); // false
144
+ }
145
+ /**
146
+ * Helper: Create member with voting keys derived from ECDH
147
+ */
148
+ async function createMemberWithVotingKeys() {
149
+ // This would use ecies-lib's Member.newMember() and deriveVotingKeys()
150
+ // Placeholder for example purposes
151
+ throw new Error('Use ecies-lib Member.newMember() and member.deriveVotingKeys()');
152
+ }
153
+ //# sourceMappingURL=examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/examples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Poll Factory - Convenient poll creation
3
+ * Browser compatible
4
+ */
5
+ import { Poll } from './poll-core';
6
+ import { VotingMethod, type IMember } from './types';
7
+ export declare class PollFactory {
8
+ /**
9
+ * Create a new poll with specified method
10
+ */
11
+ static create(choices: string[], method: VotingMethod, authority: IMember, options?: {
12
+ maxWeight?: bigint;
13
+ }): Poll;
14
+ /**
15
+ * Create a plurality poll (simple majority)
16
+ */
17
+ static createPlurality(choices: string[], authority: IMember): Poll;
18
+ /**
19
+ * Create an approval voting poll
20
+ */
21
+ static createApproval(choices: string[], authority: IMember): Poll;
22
+ /**
23
+ * Create a weighted voting poll
24
+ */
25
+ static createWeighted(choices: string[], authority: IMember, maxWeight: bigint): Poll;
26
+ /**
27
+ * Create a Borda count poll
28
+ */
29
+ static createBorda(choices: string[], authority: IMember): Poll;
30
+ /**
31
+ * Create a ranked choice (IRV) poll
32
+ */
33
+ static createRankedChoice(choices: string[], authority: IMember): Poll;
34
+ }
35
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAErD,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GACA,IAAI;IAmBP;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAInE;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAIlE;;OAEG;IACH,MAAM,CAAC,cAAc,CACnB,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,MAAM,GAChB,IAAI;IAMP;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAI/D;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;CAGvE"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PollFactory = void 0;
4
+ /**
5
+ * Poll Factory - Convenient poll creation
6
+ * Browser compatible
7
+ */
8
+ const poll_core_1 = require("./poll-core");
9
+ const types_1 = require("./types");
10
+ class PollFactory {
11
+ /**
12
+ * Create a new poll with specified method
13
+ */
14
+ static create(choices, method, authority, options) {
15
+ if (!authority.votingPublicKey) {
16
+ throw new Error('Authority must have voting public key');
17
+ }
18
+ // Generate poll ID
19
+ const id = new Uint8Array(16);
20
+ crypto.getRandomValues(id);
21
+ return new poll_core_1.Poll(id, choices, method, authority, authority.votingPublicKey, options?.maxWeight);
22
+ }
23
+ /**
24
+ * Create a plurality poll (simple majority)
25
+ */
26
+ static createPlurality(choices, authority) {
27
+ return this.create(choices, types_1.VotingMethod.Plurality, authority);
28
+ }
29
+ /**
30
+ * Create an approval voting poll
31
+ */
32
+ static createApproval(choices, authority) {
33
+ return this.create(choices, types_1.VotingMethod.Approval, authority);
34
+ }
35
+ /**
36
+ * Create a weighted voting poll
37
+ */
38
+ static createWeighted(choices, authority, maxWeight) {
39
+ return this.create(choices, types_1.VotingMethod.Weighted, authority, {
40
+ maxWeight,
41
+ });
42
+ }
43
+ /**
44
+ * Create a Borda count poll
45
+ */
46
+ static createBorda(choices, authority) {
47
+ return this.create(choices, types_1.VotingMethod.Borda, authority);
48
+ }
49
+ /**
50
+ * Create a ranked choice (IRV) poll
51
+ */
52
+ static createRankedChoice(choices, authority) {
53
+ return this.create(choices, types_1.VotingMethod.RankedChoice, authority);
54
+ }
55
+ }
56
+ exports.PollFactory = PollFactory;
57
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/factory.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,2CAAmC;AACnC,mCAAqD;AAErD,MAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,OAAiB,EACjB,MAAoB,EACpB,SAAkB,EAClB,OAEC;QAED,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,mBAAmB;QACnB,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAE3B,OAAO,IAAI,gBAAI,CACb,EAAE,EACF,OAAO,EACP,MAAM,EACN,SAAS,EACT,SAAS,CAAC,eAAe,EACzB,OAAO,EAAE,SAAS,CACnB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,SAAkB;QAC1D,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,oBAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,OAAiB,EAAE,SAAkB;QACzD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,oBAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CACnB,OAAiB,EACjB,SAAkB,EAClB,SAAiB;QAEjB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,oBAAY,CAAC,QAAQ,EAAE,SAAS,EAAE;YAC5D,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAiB,EAAE,SAAkB;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,oBAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAiB,EAAE,SAAkB;QAC7D,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,oBAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IACpE,CAAC;CACF;AAtED,kCAsEC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Secure Voting System
3
+ *
4
+ * Browser-compatible voting system built on ecies-lib with:
5
+ * - True Ranked Choice Voting (IRV)
6
+ * - Weighted voting
7
+ * - Borda count
8
+ * - Approval voting
9
+ * - Plurality voting
10
+ * - Proper role separation (Poll vs Tallier)
11
+ * - Homomorphic encryption for privacy
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { PollFactory, VoteEncoder, PollTallier } from './voting';
16
+ *
17
+ * // Authority creates poll
18
+ * const poll = PollFactory.createRankedChoice(
19
+ * ['Alice', 'Bob', 'Charlie'],
20
+ * authority
21
+ * );
22
+ *
23
+ * // Voters cast votes
24
+ * const encoder = new VoteEncoder(authority.votingPublicKey);
25
+ * const vote = encoder.encodeRankedChoice([1, 0, 2], 3);
26
+ * const receipt = poll.vote(voter, vote);
27
+ *
28
+ * // Close and tally
29
+ * poll.close();
30
+ * const tallier = new PollTallier(authority, privateKey, publicKey);
31
+ * const results = tallier.tally(poll);
32
+ * ```
33
+ */
34
+ export { Poll } from './poll-core';
35
+ export { VotingPoll } from './poll';
36
+ export { PollTallier } from './tallier';
37
+ export { VoteEncoder } from './encoder';
38
+ export { PollFactory } from './factory';
39
+ export { VotingSecurityValidator, VOTING_SECURITY } from './security';
40
+ export { ImmutableAuditLog, AuditEventType, type AuditEntry, type AuditLog, } from './audit';
41
+ export { PublicBulletinBoard, type BulletinBoard, type BulletinBoardEntry, type TallyProof, } from './bulletin-board';
42
+ export { PollEventLogger, EventType, type EventLogger, type EventLogEntry, type PollConfiguration, } from './event-logger';
43
+ export { VotingMethod, type VoteReceipt, type PollResults, type RoundResult, type EncryptedVote, type SupermajorityConfig, } from './types';
44
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,KAAK,UAAU,EACf,KAAK,QAAQ,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,SAAS,EACT,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,aAAa,EAElB,KAAK,mBAAmB,GACzB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /**
3
+ * Secure Voting System
4
+ *
5
+ * Browser-compatible voting system built on ecies-lib with:
6
+ * - True Ranked Choice Voting (IRV)
7
+ * - Weighted voting
8
+ * - Borda count
9
+ * - Approval voting
10
+ * - Plurality voting
11
+ * - Proper role separation (Poll vs Tallier)
12
+ * - Homomorphic encryption for privacy
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { PollFactory, VoteEncoder, PollTallier } from './voting';
17
+ *
18
+ * // Authority creates poll
19
+ * const poll = PollFactory.createRankedChoice(
20
+ * ['Alice', 'Bob', 'Charlie'],
21
+ * authority
22
+ * );
23
+ *
24
+ * // Voters cast votes
25
+ * const encoder = new VoteEncoder(authority.votingPublicKey);
26
+ * const vote = encoder.encodeRankedChoice([1, 0, 2], 3);
27
+ * const receipt = poll.vote(voter, vote);
28
+ *
29
+ * // Close and tally
30
+ * poll.close();
31
+ * const tallier = new PollTallier(authority, privateKey, publicKey);
32
+ * const results = tallier.tally(poll);
33
+ * ```
34
+ */
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.VotingMethod = exports.EventType = exports.PollEventLogger = exports.PublicBulletinBoard = exports.AuditEventType = exports.ImmutableAuditLog = exports.VOTING_SECURITY = exports.VotingSecurityValidator = exports.PollFactory = exports.VoteEncoder = exports.PollTallier = exports.VotingPoll = exports.Poll = void 0;
37
+ var poll_core_1 = require("./poll-core");
38
+ Object.defineProperty(exports, "Poll", { enumerable: true, get: function () { return poll_core_1.Poll; } });
39
+ var poll_1 = require("./poll");
40
+ Object.defineProperty(exports, "VotingPoll", { enumerable: true, get: function () { return poll_1.VotingPoll; } });
41
+ var tallier_1 = require("./tallier");
42
+ Object.defineProperty(exports, "PollTallier", { enumerable: true, get: function () { return tallier_1.PollTallier; } });
43
+ var encoder_1 = require("./encoder");
44
+ Object.defineProperty(exports, "VoteEncoder", { enumerable: true, get: function () { return encoder_1.VoteEncoder; } });
45
+ var factory_1 = require("./factory");
46
+ Object.defineProperty(exports, "PollFactory", { enumerable: true, get: function () { return factory_1.PollFactory; } });
47
+ var security_1 = require("./security");
48
+ Object.defineProperty(exports, "VotingSecurityValidator", { enumerable: true, get: function () { return security_1.VotingSecurityValidator; } });
49
+ Object.defineProperty(exports, "VOTING_SECURITY", { enumerable: true, get: function () { return security_1.VOTING_SECURITY; } });
50
+ var audit_1 = require("./audit");
51
+ Object.defineProperty(exports, "ImmutableAuditLog", { enumerable: true, get: function () { return audit_1.ImmutableAuditLog; } });
52
+ Object.defineProperty(exports, "AuditEventType", { enumerable: true, get: function () { return audit_1.AuditEventType; } });
53
+ var bulletin_board_1 = require("./bulletin-board");
54
+ Object.defineProperty(exports, "PublicBulletinBoard", { enumerable: true, get: function () { return bulletin_board_1.PublicBulletinBoard; } });
55
+ var event_logger_1 = require("./event-logger");
56
+ Object.defineProperty(exports, "PollEventLogger", { enumerable: true, get: function () { return event_logger_1.PollEventLogger; } });
57
+ Object.defineProperty(exports, "EventType", { enumerable: true, get: function () { return event_logger_1.EventType; } });
58
+ var types_1 = require("./types");
59
+ Object.defineProperty(exports, "VotingMethod", { enumerable: true, get: function () { return types_1.VotingMethod; } });
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;;;AAEH,yCAAmC;AAA1B,iGAAA,IAAI,OAAA;AACb,+BAAoC;AAA3B,kGAAA,UAAU,OAAA;AACnB,qCAAwC;AAA/B,sGAAA,WAAW,OAAA;AACpB,qCAAwC;AAA/B,sGAAA,WAAW,OAAA;AACpB,qCAAwC;AAA/B,sGAAA,WAAW,OAAA;AACpB,uCAAsE;AAA7D,mHAAA,uBAAuB,OAAA;AAAE,2GAAA,eAAe,OAAA;AACjD,iCAKiB;AAJf,0GAAA,iBAAiB,OAAA;AACjB,uGAAA,cAAc,OAAA;AAIhB,mDAK0B;AAJxB,qHAAA,mBAAmB,OAAA;AAKrB,+CAMwB;AALtB,+GAAA,eAAe,OAAA;AACf,yGAAA,SAAS,OAAA;AAKX,iCAQiB;AAPf,qGAAA,YAAY,OAAA"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Secure Voting Poll - Browser Compatible
3
+ * Sits on top of ecies-lib with proper role separation
4
+ */
5
+ import type { PublicKey } from 'paillier-bigint';
6
+ import { type AuditLog } from './audit';
7
+ import { VotingMethod, type IMember, type VoteReceipt, type EncryptedVote } from './types';
8
+ /**
9
+ * Poll aggregates encrypted votes using only public key.
10
+ * Cannot decrypt votes - requires separate Tallier with private key.
11
+ */
12
+ export declare class Poll {
13
+ private readonly _id;
14
+ private readonly _choices;
15
+ private readonly _method;
16
+ private readonly _authority;
17
+ private readonly ___votingPublicKey;
18
+ private readonly _votes;
19
+ private readonly _receipts;
20
+ private readonly _createdAt;
21
+ private _closedAt?;
22
+ private _maxWeight?;
23
+ private readonly _auditLog;
24
+ constructor(id: Uint8Array, choices: string[], method: VotingMethod, authority: IMember, votingPublicKey: PublicKey, maxWeight?: bigint, allowInsecure?: boolean);
25
+ get id(): Uint8Array;
26
+ get choices(): ReadonlyArray<string>;
27
+ get method(): VotingMethod;
28
+ get isClosed(): boolean;
29
+ get voterCount(): number;
30
+ get createdAt(): number;
31
+ get closedAt(): number | undefined;
32
+ get auditLog(): AuditLog;
33
+ /**
34
+ * Cast a vote - validates and encrypts based on method
35
+ */
36
+ vote(voter: IMember, vote: EncryptedVote): VoteReceipt;
37
+ /**
38
+ * Verify a receipt is valid for this poll
39
+ */
40
+ verifyReceipt(voter: IMember, receipt: VoteReceipt): boolean;
41
+ /**
42
+ * Close the poll - no more votes accepted
43
+ */
44
+ close(): void;
45
+ /**
46
+ * Get encrypted votes for tallying (read-only)
47
+ */
48
+ getEncryptedVotes(): ReadonlyMap<string, readonly bigint[]>;
49
+ private _validateVote;
50
+ private _generateReceipt;
51
+ private _receiptData;
52
+ private _toKey;
53
+ private _hashVoterId;
54
+ }
55
+ //# sourceMappingURL=poll-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll-core.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/poll-core.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EACL,YAAY,EACZ,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAY;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;gBAG5C,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,OAAO,EAClB,eAAe,EAAE,SAAS,EAC1B,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,OAAO;IAyBzB,IAAI,EAAE,IAAI,UAAU,CAEnB;IACD,IAAI,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAEnC;IACD,IAAI,MAAM,IAAI,YAAY,CAEzB;IACD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,UAAU,IAAI,MAAM,CAEvB;IACD,IAAI,SAAS,IAAI,MAAM,CAEtB;IACD,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,GAAG,WAAW;IAuBtD;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO;IAU5D;;OAEG;IACH,KAAK,IAAI,IAAI;IAWb;;OAEG;IACH,iBAAiB,IAAI,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAqB3D,OAAO,CAAC,aAAa;IA2CrB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,YAAY;CAUrB"}