@digitaldefiance/ecies-lib 4.6.2 → 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.
- package/README.md +420 -0
- package/package.json +4 -10
- package/src/builders/ecies-builder.d.ts +1 -1
- package/src/builders/ecies-builder.d.ts.map +1 -1
- package/src/builders/ecies-builder.js +2 -2
- package/src/builders/ecies-builder.js.map +1 -1
- package/src/email-string.js +2 -3
- package/src/email-string.js.map +1 -1
- package/src/i18n-setup.js +1 -1
- package/src/i18n-setup.js.map +1 -1
- package/src/index.d.ts +1 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +2 -0
- package/src/index.js.map +1 -1
- package/src/interfaces/index.d.ts +1 -0
- package/src/interfaces/index.d.ts.map +1 -1
- package/src/interfaces/index.js +3 -0
- package/src/interfaces/index.js.map +1 -1
- package/src/interfaces/member.d.ts.map +1 -1
- package/src/interfaces/voting-poll.d.ts +455 -0
- package/src/interfaces/voting-poll.d.ts.map +1 -0
- package/src/interfaces/voting-poll.js +54 -0
- package/src/interfaces/voting-poll.js.map +1 -0
- package/src/isolated-private.d.ts +0 -4
- package/src/isolated-private.d.ts.map +1 -1
- package/src/isolated-private.js +0 -13
- package/src/isolated-private.js.map +1 -1
- package/src/isolated-public.d.ts +4 -2
- package/src/isolated-public.d.ts.map +1 -1
- package/src/isolated-public.js +10 -8
- package/src/isolated-public.js.map +1 -1
- package/src/lib/voting/audit.d.ts +79 -0
- package/src/lib/voting/audit.d.ts.map +1 -0
- package/src/lib/voting/audit.js +188 -0
- package/src/lib/voting/audit.js.map +1 -0
- package/src/lib/voting/bulletin-board.d.ts +94 -0
- package/src/lib/voting/bulletin-board.d.ts.map +1 -0
- package/src/lib/voting/bulletin-board.js +287 -0
- package/src/lib/voting/bulletin-board.js.map +1 -0
- package/src/lib/voting/encoder.d.ts +42 -0
- package/src/lib/voting/encoder.d.ts.map +1 -0
- package/src/lib/voting/encoder.js +157 -0
- package/src/lib/voting/encoder.js.map +1 -0
- package/src/lib/voting/event-logger.d.ts +81 -0
- package/src/lib/voting/event-logger.d.ts.map +1 -0
- package/src/lib/voting/event-logger.js +162 -0
- package/src/lib/voting/event-logger.js.map +1 -0
- package/src/lib/voting/examples.d.ts +30 -0
- package/src/lib/voting/examples.d.ts.map +1 -0
- package/src/lib/voting/examples.js +153 -0
- package/src/lib/voting/examples.js.map +1 -0
- package/src/lib/voting/factory.d.ts +35 -0
- package/src/lib/voting/factory.d.ts.map +1 -0
- package/src/lib/voting/factory.js +57 -0
- package/src/lib/voting/factory.js.map +1 -0
- package/src/lib/voting/index.d.ts +44 -0
- package/src/lib/voting/index.d.ts.map +1 -0
- package/src/lib/voting/index.js +60 -0
- package/src/lib/voting/index.js.map +1 -0
- package/src/lib/voting/poll-core.d.ts +55 -0
- package/src/lib/voting/poll-core.d.ts.map +1 -0
- package/src/lib/voting/poll-core.js +225 -0
- package/src/lib/voting/poll-core.js.map +1 -0
- package/src/lib/voting/poll.d.ts +124 -0
- package/src/lib/voting/poll.d.ts.map +1 -0
- package/src/lib/voting/poll.js +322 -0
- package/src/lib/voting/poll.js.map +1 -0
- package/src/lib/voting/security.d.ts +33 -0
- package/src/lib/voting/security.d.ts.map +1 -0
- package/src/lib/voting/security.js +68 -0
- package/src/lib/voting/security.js.map +1 -0
- package/src/lib/voting/tallier.d.ts +35 -0
- package/src/lib/voting/tallier.d.ts.map +1 -0
- package/src/lib/voting/tallier.js +415 -0
- package/src/lib/voting/tallier.js.map +1 -0
- package/src/lib/voting/types.d.ts +145 -0
- package/src/lib/voting/types.d.ts.map +1 -0
- package/src/lib/voting/types.js +48 -0
- package/src/lib/voting/types.js.map +1 -0
- package/src/member.d.ts +2 -2
- package/src/member.d.ts.map +1 -1
- package/src/member.js +2 -2
- package/src/member.js.map +1 -1
- package/src/secure-string.d.ts +2 -2
- package/src/secure-string.d.ts.map +1 -1
- package/src/secure-string.js +2 -2
- package/src/secure-string.js.map +1 -1
- package/src/services/aes-gcm.js.map +1 -1
- package/src/services/chunk-processor.d.ts +2 -2
- package/src/services/chunk-processor.d.ts.map +1 -1
- package/src/services/chunk-processor.js +3 -3
- package/src/services/chunk-processor.js.map +1 -1
- package/src/services/ecies/service.d.ts +3 -0
- package/src/services/ecies/service.d.ts.map +1 -1
- package/src/services/ecies/service.js +6 -0
- package/src/services/ecies/service.js.map +1 -1
- package/src/services/ecies/single-recipient.d.ts +1 -1
- package/src/services/ecies/single-recipient.d.ts.map +1 -1
- package/src/services/ecies/single-recipient.js +1 -1
- package/src/services/ecies/single-recipient.js.map +1 -1
- package/src/services/encryption-stream.d.ts +3 -3
- package/src/services/encryption-stream.d.ts.map +1 -1
- package/src/services/encryption-stream.js +7 -7
- package/src/services/encryption-stream.js.map +1 -1
- package/src/services/index.d.ts +1 -0
- package/src/services/index.d.ts.map +1 -1
- package/src/services/index.js.map +1 -1
- package/src/services/multi-recipient-processor.d.ts +2 -2
- package/src/services/multi-recipient-processor.d.ts.map +1 -1
- package/src/services/multi-recipient-processor.js +4 -4
- package/src/services/multi-recipient-processor.js.map +1 -1
- package/src/services/voting.service.d.ts.map +1 -1
- package/src/services/voting.service.js +4 -4
- package/src/services/voting.service.js.map +1 -1
- package/src/test-mocks/mock-frontend-member.d.ts +1 -1
- package/src/test-mocks/mock-frontend-member.d.ts.map +1 -1
- package/src/test-mocks/mock-frontend-member.js +1 -1
- package/src/test-mocks/mock-frontend-member.js.map +1 -1
- package/src/types.d.ts +1 -1
- 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"}
|