@digitaldefiance/ecies-lib 4.8.7 → 4.9.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.
- package/package.json +8 -8
- package/src/builders/member-builder.d.ts +1 -2
- package/src/builders/member-builder.d.ts.map +1 -1
- package/src/builders/member-builder.js.map +1 -1
- package/src/constants.d.ts +1 -1
- package/src/constants.d.ts.map +1 -1
- package/src/constants.js +2 -0
- package/src/constants.js.map +1 -1
- package/src/interfaces/constants.d.ts +1 -1
- package/src/interfaces/constants.d.ts.map +1 -1
- package/src/interfaces/ecies-consts.d.ts +1 -0
- package/src/interfaces/ecies-consts.d.ts.map +1 -1
- package/src/interfaces/index.d.ts +2 -4
- package/src/interfaces/index.d.ts.map +1 -1
- package/src/interfaces/index.js +2 -5
- package/src/interfaces/index.js.map +1 -1
- package/src/interfaces/isolated-private-key-async.d.ts +13 -0
- package/src/interfaces/isolated-private-key-async.d.ts.map +1 -0
- package/src/interfaces/isolated-private-key-async.js +3 -0
- package/src/interfaces/isolated-private-key-async.js.map +1 -0
- package/src/interfaces/isolated-public-key-async.d.ts +17 -0
- package/src/interfaces/isolated-public-key-async.d.ts.map +1 -0
- package/src/interfaces/isolated-public-key-async.js +3 -0
- package/src/interfaces/isolated-public-key-async.js.map +1 -0
- package/src/interfaces/platform-buffer.d.ts +5 -5
- package/src/interfaces/platform-buffer.d.ts.map +1 -1
- package/src/interfaces/voting-service.d.ts +0 -111
- package/src/interfaces/voting-service.d.ts.map +1 -1
- package/src/interfaces/voting-service.js +0 -7
- package/src/interfaces/voting-service.js.map +1 -1
- package/src/lib/id-providers/index.d.ts +1 -0
- package/src/lib/id-providers/index.d.ts.map +1 -1
- package/src/lib/id-providers/index.js +3 -1
- package/src/lib/id-providers/index.js.map +1 -1
- package/src/lib/id-providers/uint8array-provider.d.ts +54 -0
- package/src/lib/id-providers/uint8array-provider.d.ts.map +1 -0
- package/src/lib/id-providers/uint8array-provider.js +97 -0
- package/src/lib/id-providers/uint8array-provider.js.map +1 -0
- package/src/lib/voting/audit.d.ts +4 -38
- package/src/lib/voting/audit.d.ts.map +1 -1
- package/src/lib/voting/audit.js +8 -10
- package/src/lib/voting/audit.js.map +1 -1
- package/src/lib/voting/bulletin-board.d.ts +4 -56
- package/src/lib/voting/bulletin-board.d.ts.map +1 -1
- package/src/lib/voting/bulletin-board.js.map +1 -1
- package/src/lib/voting/encoder.d.ts +2 -1
- package/src/lib/voting/encoder.d.ts.map +1 -1
- package/src/lib/voting/encoder.js +9 -9
- package/src/lib/voting/encoder.js.map +1 -1
- package/src/lib/voting/enumerations/audit-event-type.d.ts +6 -0
- package/src/lib/voting/enumerations/audit-event-type.d.ts.map +1 -0
- package/src/lib/voting/enumerations/audit-event-type.js +10 -0
- package/src/lib/voting/enumerations/audit-event-type.js.map +1 -0
- package/src/lib/voting/enumerations/event-type.d.ts +9 -0
- package/src/lib/voting/enumerations/event-type.d.ts.map +1 -0
- package/src/lib/voting/enumerations/event-type.js +13 -0
- package/src/lib/voting/enumerations/event-type.js.map +1 -0
- package/src/lib/voting/enumerations/index.d.ts +6 -0
- package/src/lib/voting/enumerations/index.d.ts.map +1 -0
- package/src/lib/voting/enumerations/index.js +9 -0
- package/src/lib/voting/enumerations/index.js.map +1 -0
- package/src/lib/voting/enumerations/jurisdictional-level.d.ts +7 -0
- package/src/lib/voting/enumerations/jurisdictional-level.d.ts.map +1 -0
- package/src/lib/voting/enumerations/jurisdictional-level.js +11 -0
- package/src/lib/voting/enumerations/jurisdictional-level.js.map +1 -0
- package/src/lib/voting/enumerations/security-level.d.ts +6 -0
- package/src/lib/voting/enumerations/security-level.d.ts.map +1 -0
- package/src/lib/voting/enumerations/security-level.js +10 -0
- package/src/lib/voting/enumerations/security-level.js.map +1 -0
- package/src/lib/voting/enumerations/voting-method.d.ts +41 -0
- package/src/lib/voting/enumerations/voting-method.d.ts.map +1 -0
- package/src/lib/voting/{types.js → enumerations/voting-method.js} +1 -1
- package/src/lib/voting/enumerations/voting-method.js.map +1 -0
- package/src/lib/voting/event-logger.d.ts +14 -65
- package/src/lib/voting/event-logger.d.ts.map +1 -1
- package/src/lib/voting/event-logger.js +32 -19
- package/src/lib/voting/event-logger.js.map +1 -1
- package/src/lib/voting/factory.d.ts +2 -2
- package/src/lib/voting/factory.d.ts.map +1 -1
- package/src/lib/voting/factory.js +6 -6
- package/src/lib/voting/factory.js.map +1 -1
- package/src/lib/voting/hierarchical-aggregator.d.ts +72 -0
- package/src/lib/voting/hierarchical-aggregator.d.ts.map +1 -0
- package/src/lib/voting/hierarchical-aggregator.js +234 -0
- package/src/lib/voting/hierarchical-aggregator.js.map +1 -0
- package/src/lib/voting/index.d.ts +8 -5
- package/src/lib/voting/index.d.ts.map +1 -1
- package/src/lib/voting/index.js +12 -7
- package/src/lib/voting/index.js.map +1 -1
- package/src/lib/voting/interfaces/aggregated-tally.d.ts +11 -0
- package/src/lib/voting/interfaces/aggregated-tally.d.ts.map +1 -0
- package/src/{interfaces/member-with-mnemonic.js → lib/voting/interfaces/aggregated-tally.js} +1 -1
- package/src/lib/voting/interfaces/aggregated-tally.js.map +1 -0
- package/src/lib/voting/interfaces/audit-entry.d.ts +25 -0
- package/src/lib/voting/interfaces/audit-entry.d.ts.map +1 -0
- package/src/lib/voting/interfaces/audit-entry.js +3 -0
- package/src/lib/voting/interfaces/audit-entry.js.map +1 -0
- package/src/lib/voting/interfaces/audit-log.d.ts +13 -0
- package/src/lib/voting/interfaces/audit-log.d.ts.map +1 -0
- package/src/lib/voting/interfaces/audit-log.js +3 -0
- package/src/lib/voting/interfaces/audit-log.js.map +1 -0
- package/src/lib/voting/interfaces/bulletin-board-entry.d.ts +20 -0
- package/src/lib/voting/interfaces/bulletin-board-entry.d.ts.map +1 -0
- package/src/lib/voting/interfaces/bulletin-board-entry.js +3 -0
- package/src/lib/voting/interfaces/bulletin-board-entry.js.map +1 -0
- package/src/lib/voting/interfaces/bulletin-board.d.ts +24 -0
- package/src/lib/voting/interfaces/bulletin-board.d.ts.map +1 -0
- package/src/lib/voting/interfaces/bulletin-board.js +3 -0
- package/src/lib/voting/interfaces/bulletin-board.js.map +1 -0
- package/src/lib/voting/interfaces/checkpoint-manager-extended.d.ts +14 -0
- package/src/lib/voting/interfaces/checkpoint-manager-extended.d.ts.map +1 -0
- package/src/lib/voting/interfaces/checkpoint-manager-extended.js +3 -0
- package/src/lib/voting/interfaces/checkpoint-manager-extended.js.map +1 -0
- package/src/lib/voting/interfaces/checkpoint-manager.d.ts +8 -0
- package/src/lib/voting/interfaces/checkpoint-manager.d.ts.map +1 -0
- package/src/lib/voting/interfaces/checkpoint-manager.js +3 -0
- package/src/lib/voting/interfaces/checkpoint-manager.js.map +1 -0
- package/src/lib/voting/interfaces/checkpoint-metadata.d.ts +9 -0
- package/src/lib/voting/interfaces/checkpoint-metadata.d.ts.map +1 -0
- package/src/lib/voting/interfaces/checkpoint-metadata.js +3 -0
- package/src/lib/voting/interfaces/checkpoint-metadata.js.map +1 -0
- package/src/lib/voting/interfaces/ecies-service-with-voting.d.ts +55 -0
- package/src/lib/voting/interfaces/ecies-service-with-voting.d.ts.map +1 -0
- package/src/lib/voting/interfaces/ecies-service-with-voting.js +3 -0
- package/src/lib/voting/interfaces/ecies-service-with-voting.js.map +1 -0
- package/src/lib/voting/interfaces/encrypted-vote.d.ts +23 -0
- package/src/lib/voting/interfaces/encrypted-vote.d.ts.map +1 -0
- package/src/lib/voting/interfaces/encrypted-vote.js +3 -0
- package/src/lib/voting/interfaces/encrypted-vote.js.map +1 -0
- package/src/lib/voting/interfaces/event-log-entry.d.ts +24 -0
- package/src/lib/voting/interfaces/event-log-entry.d.ts.map +1 -0
- package/src/lib/voting/interfaces/event-log-entry.js +3 -0
- package/src/lib/voting/interfaces/event-log-entry.js.map +1 -0
- package/src/lib/voting/interfaces/event-logger.d.ts +25 -0
- package/src/lib/voting/interfaces/event-logger.d.ts.map +1 -0
- package/src/lib/voting/interfaces/event-logger.js +3 -0
- package/src/lib/voting/interfaces/event-logger.js.map +1 -0
- package/src/lib/voting/interfaces/index.d.ts +31 -0
- package/src/lib/voting/interfaces/index.d.ts.map +1 -0
- package/src/lib/voting/interfaces/index.js +5 -0
- package/src/lib/voting/interfaces/index.js.map +1 -0
- package/src/lib/voting/interfaces/jurisdiction-config.d.ts +9 -0
- package/src/lib/voting/interfaces/jurisdiction-config.d.ts.map +1 -0
- package/src/lib/voting/interfaces/jurisdiction-config.js +3 -0
- package/src/lib/voting/interfaces/jurisdiction-config.js.map +1 -0
- package/src/lib/voting/interfaces/plaintext-vote.d.ts +18 -0
- package/src/lib/voting/interfaces/plaintext-vote.d.ts.map +1 -0
- package/src/lib/voting/interfaces/plaintext-vote.js +3 -0
- package/src/lib/voting/interfaces/plaintext-vote.js.map +1 -0
- package/src/lib/voting/interfaces/poll-configuration.d.ts +10 -0
- package/src/lib/voting/interfaces/poll-configuration.d.ts.map +1 -0
- package/src/lib/voting/interfaces/poll-configuration.js +3 -0
- package/src/lib/voting/interfaces/poll-configuration.js.map +1 -0
- package/src/lib/voting/interfaces/poll-results.d.ts +25 -0
- package/src/lib/voting/interfaces/poll-results.d.ts.map +1 -0
- package/src/lib/voting/interfaces/poll-results.js +3 -0
- package/src/lib/voting/interfaces/poll-results.js.map +1 -0
- package/src/lib/voting/interfaces/poll-tallier.d.ts +18 -0
- package/src/lib/voting/interfaces/poll-tallier.d.ts.map +1 -0
- package/src/lib/voting/interfaces/poll-tallier.js +3 -0
- package/src/lib/voting/interfaces/poll-tallier.js.map +1 -0
- package/src/lib/voting/interfaces/poll.d.ts +41 -0
- package/src/lib/voting/interfaces/poll.d.ts.map +1 -0
- package/src/lib/voting/interfaces/poll.js +3 -0
- package/src/lib/voting/interfaces/poll.js.map +1 -0
- package/src/lib/voting/interfaces/round-result.d.ts +15 -0
- package/src/lib/voting/interfaces/round-result.d.ts.map +1 -0
- package/src/lib/voting/interfaces/round-result.js +3 -0
- package/src/lib/voting/interfaces/round-result.js.map +1 -0
- package/src/lib/voting/interfaces/state-snapshot.d.ts +9 -0
- package/src/lib/voting/interfaces/state-snapshot.d.ts.map +1 -0
- package/src/lib/voting/interfaces/state-snapshot.js +3 -0
- package/src/lib/voting/interfaces/state-snapshot.js.map +1 -0
- package/src/lib/voting/interfaces/supermajority-config.d.ts +11 -0
- package/src/lib/voting/interfaces/supermajority-config.d.ts.map +1 -0
- package/src/lib/voting/interfaces/supermajority-config.js +3 -0
- package/src/lib/voting/interfaces/supermajority-config.js.map +1 -0
- package/src/lib/voting/interfaces/tally-proof.d.ts +18 -0
- package/src/lib/voting/interfaces/tally-proof.d.ts.map +1 -0
- package/src/lib/voting/interfaces/tally-proof.js +3 -0
- package/src/lib/voting/interfaces/tally-proof.js.map +1 -0
- package/src/lib/voting/interfaces/vote-encoder.d.ts +59 -0
- package/src/lib/voting/interfaces/vote-encoder.d.ts.map +1 -0
- package/src/lib/voting/interfaces/vote-encoder.js +3 -0
- package/src/lib/voting/interfaces/vote-encoder.js.map +1 -0
- package/src/lib/voting/interfaces/vote-logger-extended.d.ts +15 -0
- package/src/lib/voting/interfaces/vote-logger-extended.d.ts.map +1 -0
- package/src/lib/voting/interfaces/vote-logger-extended.js +3 -0
- package/src/lib/voting/interfaces/vote-logger-extended.js.map +1 -0
- package/src/lib/voting/interfaces/vote-logger.d.ts +11 -0
- package/src/lib/voting/interfaces/vote-logger.d.ts.map +1 -0
- package/src/lib/voting/interfaces/vote-logger.js +3 -0
- package/src/lib/voting/interfaces/vote-logger.js.map +1 -0
- package/src/lib/voting/interfaces/voting-consts.d.ts.map +1 -0
- package/src/lib/voting/interfaces/voting-consts.js.map +1 -0
- package/src/lib/voting/interfaces/voting-key-derivation-options.d.ts +26 -0
- package/src/lib/voting/interfaces/voting-key-derivation-options.d.ts.map +1 -0
- package/src/lib/voting/interfaces/voting-key-derivation-options.js +3 -0
- package/src/lib/voting/interfaces/voting-key-derivation-options.js.map +1 -0
- package/src/lib/voting/interfaces/voting-poll-results.d.ts +20 -0
- package/src/lib/voting/interfaces/voting-poll-results.d.ts.map +1 -0
- package/src/lib/voting/interfaces/voting-poll-results.js +3 -0
- package/src/lib/voting/interfaces/voting-poll-results.js.map +1 -0
- package/src/lib/voting/interfaces/voting-receipt.d.ts +18 -0
- package/src/lib/voting/interfaces/voting-receipt.d.ts.map +1 -0
- package/src/lib/voting/interfaces/voting-receipt.js +3 -0
- package/src/lib/voting/interfaces/voting-receipt.js.map +1 -0
- package/src/lib/voting/interfaces/voting-security-validator.d.ts +37 -0
- package/src/lib/voting/interfaces/voting-security-validator.d.ts.map +1 -0
- package/src/lib/voting/interfaces/voting-security-validator.js +3 -0
- package/src/lib/voting/interfaces/voting-security-validator.js.map +1 -0
- package/src/lib/voting/persistent-state.d.ts +21 -0
- package/src/lib/voting/persistent-state.d.ts.map +1 -0
- package/src/lib/voting/persistent-state.js +32 -0
- package/src/lib/voting/persistent-state.js.map +1 -0
- package/src/lib/voting/poll-core.d.ts +3 -3
- package/src/lib/voting/poll-core.d.ts.map +1 -1
- package/src/lib/voting/poll-core.js +6 -7
- package/src/lib/voting/poll-core.js.map +1 -1
- package/src/lib/voting/security.d.ts +2 -6
- package/src/lib/voting/security.d.ts.map +1 -1
- package/src/lib/voting/security.js +25 -28
- package/src/lib/voting/security.js.map +1 -1
- package/src/lib/voting/tallier.d.ts +5 -5
- package/src/lib/voting/tallier.d.ts.map +1 -1
- package/src/lib/voting/tallier.js +26 -26
- package/src/lib/voting/tallier.js.map +1 -1
- package/src/lib/voting/test-voter-pool.d.ts +16 -0
- package/src/lib/voting/test-voter-pool.d.ts.map +1 -0
- package/src/lib/voting/test-voter-pool.js +65 -0
- package/src/lib/voting/test-voter-pool.js.map +1 -0
- package/src/member.d.ts +8 -1
- package/src/member.d.ts.map +1 -1
- package/src/member.js +6 -6
- package/src/member.js.map +1 -1
- package/src/services/ecies/interfaces/decryption-result.d.ts +5 -0
- package/src/services/ecies/interfaces/decryption-result.d.ts.map +1 -0
- package/src/services/ecies/interfaces/decryption-result.js +3 -0
- package/src/services/ecies/interfaces/decryption-result.js.map +1 -0
- package/src/services/ecies/interfaces/encryption-result.d.ts +7 -0
- package/src/services/ecies/interfaces/encryption-result.d.ts.map +1 -0
- package/src/services/ecies/interfaces/encryption-result.js +3 -0
- package/src/services/ecies/interfaces/encryption-result.js.map +1 -0
- package/src/services/ecies/interfaces/index.d.ts +9 -0
- package/src/services/ecies/interfaces/index.d.ts.map +1 -0
- package/src/services/ecies/interfaces/index.js +3 -0
- package/src/services/ecies/interfaces/index.js.map +1 -0
- package/src/services/ecies/interfaces/multi-encrypted-message.d.ts +11 -0
- package/src/services/ecies/interfaces/multi-encrypted-message.d.ts.map +1 -0
- package/src/services/ecies/interfaces/multi-encrypted-message.js +3 -0
- package/src/services/ecies/interfaces/multi-encrypted-message.js.map +1 -0
- package/src/services/ecies/interfaces/multi-encrypted-parsed-header.d.ts +10 -0
- package/src/services/ecies/interfaces/multi-encrypted-parsed-header.d.ts.map +1 -0
- package/src/services/ecies/interfaces/multi-encrypted-parsed-header.js +3 -0
- package/src/services/ecies/interfaces/multi-encrypted-parsed-header.js.map +1 -0
- package/src/services/ecies/interfaces/multi-recipient.d.ts +6 -0
- package/src/services/ecies/interfaces/multi-recipient.d.ts.map +1 -0
- package/src/services/ecies/interfaces/multi-recipient.js +3 -0
- package/src/services/ecies/interfaces/multi-recipient.js.map +1 -0
- package/src/services/ecies/interfaces/simple-keypair.d.ts +5 -0
- package/src/services/ecies/interfaces/simple-keypair.d.ts.map +1 -0
- package/src/services/ecies/interfaces/simple-keypair.js +3 -0
- package/src/services/ecies/interfaces/simple-keypair.js.map +1 -0
- package/src/services/ecies/interfaces/single-encrypted-parsed-header.d.ts +11 -0
- package/src/services/ecies/interfaces/single-encrypted-parsed-header.d.ts.map +1 -0
- package/src/services/ecies/interfaces/single-encrypted-parsed-header.js +3 -0
- package/src/services/ecies/interfaces/single-encrypted-parsed-header.js.map +1 -0
- package/src/services/ecies/interfaces/wallet-seed.d.ts +6 -0
- package/src/services/ecies/interfaces/wallet-seed.d.ts.map +1 -0
- package/src/services/ecies/interfaces/wallet-seed.js +3 -0
- package/src/services/ecies/interfaces/wallet-seed.js.map +1 -0
- package/src/services/ecies/multi-recipient.d.ts.map +1 -1
- package/src/services/ecies/multi-recipient.js +14 -5
- package/src/services/ecies/multi-recipient.js.map +1 -1
- package/src/interfaces/member-with-mnemonic.d.ts +0 -8
- package/src/interfaces/member-with-mnemonic.d.ts.map +0 -1
- package/src/interfaces/member-with-mnemonic.js.map +0 -1
- package/src/interfaces/voting-consts.d.ts.map +0 -1
- package/src/interfaces/voting-consts.js.map +0 -1
- package/src/interfaces/voting-poll.d.ts +0 -455
- package/src/interfaces/voting-poll.d.ts.map +0 -1
- package/src/interfaces/voting-poll.js +0 -54
- package/src/interfaces/voting-poll.js.map +0 -1
- package/src/lib/voting/poll.d.ts +0 -125
- package/src/lib/voting/poll.d.ts.map +0 -1
- package/src/lib/voting/poll.js +0 -323
- package/src/lib/voting/poll.js.map +0 -1
- package/src/lib/voting/types.d.ts +0 -146
- package/src/lib/voting/types.d.ts.map +0 -1
- package/src/lib/voting/types.js.map +0 -1
- package/src/services/ecies/interfaces.d.ts +0 -55
- package/src/services/ecies/interfaces.d.ts.map +0 -1
- package/src/services/ecies/interfaces.js +0 -6
- package/src/services/ecies/interfaces.js.map +0 -1
- /package/src/{interfaces → lib/voting/interfaces}/voting-consts.d.ts +0 -0
- /package/src/{interfaces → lib/voting/interfaces}/voting-consts.js +0 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JurisdictionLevel = exports.NationalAggregator = exports.StateAggregator = exports.CountyAggregator = exports.PrecinctAggregator = void 0;
|
|
4
|
+
const jurisdictional_level_1 = require("./enumerations/jurisdictional-level");
|
|
5
|
+
/**
|
|
6
|
+
* Precinct-level aggregator - handles ~900 votes in memory
|
|
7
|
+
* Optional persistence via injected logger/checkpoint manager
|
|
8
|
+
*/
|
|
9
|
+
class PrecinctAggregator {
|
|
10
|
+
poll;
|
|
11
|
+
config;
|
|
12
|
+
logger;
|
|
13
|
+
checkpointMgr;
|
|
14
|
+
checkpointInterval = 100;
|
|
15
|
+
constructor(poll, config, logger, checkpointMgr) {
|
|
16
|
+
if (config.level !== jurisdictional_level_1.JurisdictionLevel.Precinct) {
|
|
17
|
+
throw new Error('PrecinctAggregator requires precinct-level config');
|
|
18
|
+
}
|
|
19
|
+
this.poll = poll;
|
|
20
|
+
this.config = config;
|
|
21
|
+
this.logger = logger;
|
|
22
|
+
this.checkpointMgr = checkpointMgr;
|
|
23
|
+
}
|
|
24
|
+
async vote(voter, vote) {
|
|
25
|
+
this.poll.vote(voter, vote);
|
|
26
|
+
if (this.logger) {
|
|
27
|
+
await this.logger.appendVote(voter.id, vote.encrypted, Date.now());
|
|
28
|
+
}
|
|
29
|
+
if (this.checkpointMgr &&
|
|
30
|
+
this.poll.voterCount % this.checkpointInterval === 0) {
|
|
31
|
+
await this.checkpointMgr.saveCheckpoint(this.getTally());
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
getTally() {
|
|
35
|
+
const votes = this.poll.getEncryptedVotes();
|
|
36
|
+
const choiceCount = this.poll.choices.length;
|
|
37
|
+
const encryptedTallies = Array(choiceCount).fill(0n);
|
|
38
|
+
for (const encryptedVote of votes.values()) {
|
|
39
|
+
for (let i = 0; i < choiceCount; i++) {
|
|
40
|
+
encryptedTallies[i] = encryptedVote[i];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
jurisdictionId: this.config.id,
|
|
45
|
+
level: jurisdictional_level_1.JurisdictionLevel.Precinct,
|
|
46
|
+
encryptedTallies,
|
|
47
|
+
voterCount: this.poll.voterCount,
|
|
48
|
+
timestamp: Date.now(),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
close() {
|
|
52
|
+
this.poll.close();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.PrecinctAggregator = PrecinctAggregator;
|
|
56
|
+
/**
|
|
57
|
+
* County-level aggregator - combines precinct tallies
|
|
58
|
+
*/
|
|
59
|
+
class CountyAggregator {
|
|
60
|
+
config;
|
|
61
|
+
precinctTallies = new Map();
|
|
62
|
+
votingPublicKey;
|
|
63
|
+
constructor(config, votingPublicKey) {
|
|
64
|
+
if (config.level !== jurisdictional_level_1.JurisdictionLevel.County) {
|
|
65
|
+
throw new Error('CountyAggregator requires county-level config');
|
|
66
|
+
}
|
|
67
|
+
this.config = config;
|
|
68
|
+
this.votingPublicKey = votingPublicKey;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Add precinct tally to county aggregate
|
|
72
|
+
*/
|
|
73
|
+
addPrecinctTally(tally) {
|
|
74
|
+
const key = this.toKey(tally.jurisdictionId);
|
|
75
|
+
this.precinctTallies.set(key, tally);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get aggregated county tally
|
|
79
|
+
*/
|
|
80
|
+
getTally() {
|
|
81
|
+
const tallies = Array.from(this.precinctTallies.values());
|
|
82
|
+
if (tallies.length === 0) {
|
|
83
|
+
throw new Error('No precinct tallies to aggregate');
|
|
84
|
+
}
|
|
85
|
+
const choiceCount = tallies[0].encryptedTallies.length;
|
|
86
|
+
const encryptedTallies = Array(choiceCount).fill(0n);
|
|
87
|
+
let totalVoters = 0;
|
|
88
|
+
for (const tally of tallies) {
|
|
89
|
+
for (let i = 0; i < choiceCount; i++) {
|
|
90
|
+
if (encryptedTallies[i] === 0n) {
|
|
91
|
+
encryptedTallies[i] = tally.encryptedTallies[i];
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// Homomorphic addition
|
|
95
|
+
encryptedTallies[i] = this.votingPublicKey.addition(encryptedTallies[i], tally.encryptedTallies[i]);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
totalVoters += tally.voterCount;
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
jurisdictionId: this.config.id,
|
|
102
|
+
level: jurisdictional_level_1.JurisdictionLevel.County,
|
|
103
|
+
encryptedTallies,
|
|
104
|
+
voterCount: totalVoters,
|
|
105
|
+
timestamp: Date.now(),
|
|
106
|
+
childJurisdictions: tallies.map((t) => t.jurisdictionId),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
toKey(id) {
|
|
110
|
+
if (id instanceof Uint8Array) {
|
|
111
|
+
return Array.from(id)
|
|
112
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
113
|
+
.join('');
|
|
114
|
+
}
|
|
115
|
+
return String(id);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.CountyAggregator = CountyAggregator;
|
|
119
|
+
/**
|
|
120
|
+
* State-level aggregator - combines county tallies
|
|
121
|
+
*/
|
|
122
|
+
class StateAggregator {
|
|
123
|
+
config;
|
|
124
|
+
countyTallies = new Map();
|
|
125
|
+
votingPublicKey;
|
|
126
|
+
constructor(config, votingPublicKey) {
|
|
127
|
+
if (config.level !== jurisdictional_level_1.JurisdictionLevel.State) {
|
|
128
|
+
throw new Error('StateAggregator requires state-level config');
|
|
129
|
+
}
|
|
130
|
+
this.config = config;
|
|
131
|
+
this.votingPublicKey = votingPublicKey;
|
|
132
|
+
}
|
|
133
|
+
addCountyTally(tally) {
|
|
134
|
+
const key = this.toKey(tally.jurisdictionId);
|
|
135
|
+
this.countyTallies.set(key, tally);
|
|
136
|
+
}
|
|
137
|
+
getTally() {
|
|
138
|
+
const tallies = Array.from(this.countyTallies.values());
|
|
139
|
+
if (tallies.length === 0) {
|
|
140
|
+
throw new Error('No county tallies to aggregate');
|
|
141
|
+
}
|
|
142
|
+
const choiceCount = tallies[0].encryptedTallies.length;
|
|
143
|
+
const encryptedTallies = Array(choiceCount).fill(0n);
|
|
144
|
+
let totalVoters = 0;
|
|
145
|
+
for (const tally of tallies) {
|
|
146
|
+
for (let i = 0; i < choiceCount; i++) {
|
|
147
|
+
if (encryptedTallies[i] === 0n) {
|
|
148
|
+
encryptedTallies[i] = tally.encryptedTallies[i];
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
encryptedTallies[i] = this.votingPublicKey.addition(encryptedTallies[i], tally.encryptedTallies[i]);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
totalVoters += tally.voterCount;
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
jurisdictionId: this.config.id,
|
|
158
|
+
level: jurisdictional_level_1.JurisdictionLevel.State,
|
|
159
|
+
encryptedTallies,
|
|
160
|
+
voterCount: totalVoters,
|
|
161
|
+
timestamp: Date.now(),
|
|
162
|
+
childJurisdictions: tallies.map((t) => t.jurisdictionId),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
toKey(id) {
|
|
166
|
+
if (id instanceof Uint8Array) {
|
|
167
|
+
return Array.from(id)
|
|
168
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
169
|
+
.join('');
|
|
170
|
+
}
|
|
171
|
+
return String(id);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.StateAggregator = StateAggregator;
|
|
175
|
+
/**
|
|
176
|
+
* National-level aggregator - combines state tallies and decrypts final result
|
|
177
|
+
*/
|
|
178
|
+
class NationalAggregator {
|
|
179
|
+
config;
|
|
180
|
+
stateTallies = new Map();
|
|
181
|
+
votingPublicKey;
|
|
182
|
+
constructor(config, votingPublicKey) {
|
|
183
|
+
if (config.level !== jurisdictional_level_1.JurisdictionLevel.National) {
|
|
184
|
+
throw new Error('NationalAggregator requires national-level config');
|
|
185
|
+
}
|
|
186
|
+
this.config = config;
|
|
187
|
+
this.votingPublicKey = votingPublicKey;
|
|
188
|
+
}
|
|
189
|
+
addStateTally(tally) {
|
|
190
|
+
const key = this.toKey(tally.jurisdictionId);
|
|
191
|
+
this.stateTallies.set(key, tally);
|
|
192
|
+
}
|
|
193
|
+
getTally() {
|
|
194
|
+
const tallies = Array.from(this.stateTallies.values());
|
|
195
|
+
if (tallies.length === 0) {
|
|
196
|
+
throw new Error('No state tallies to aggregate');
|
|
197
|
+
}
|
|
198
|
+
const choiceCount = tallies[0].encryptedTallies.length;
|
|
199
|
+
const encryptedTallies = Array(choiceCount).fill(0n);
|
|
200
|
+
let totalVoters = 0;
|
|
201
|
+
for (const tally of tallies) {
|
|
202
|
+
for (let i = 0; i < choiceCount; i++) {
|
|
203
|
+
if (encryptedTallies[i] === 0n) {
|
|
204
|
+
encryptedTallies[i] = tally.encryptedTallies[i];
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
encryptedTallies[i] = this.votingPublicKey.addition(encryptedTallies[i], tally.encryptedTallies[i]);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
totalVoters += tally.voterCount;
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
jurisdictionId: this.config.id,
|
|
214
|
+
level: jurisdictional_level_1.JurisdictionLevel.National,
|
|
215
|
+
encryptedTallies,
|
|
216
|
+
voterCount: totalVoters,
|
|
217
|
+
timestamp: Date.now(),
|
|
218
|
+
childJurisdictions: tallies.map((t) => t.jurisdictionId),
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
toKey(id) {
|
|
222
|
+
if (id instanceof Uint8Array) {
|
|
223
|
+
return Array.from(id)
|
|
224
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
225
|
+
.join('');
|
|
226
|
+
}
|
|
227
|
+
return String(id);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
exports.NationalAggregator = NationalAggregator;
|
|
231
|
+
// Re-export types and enums for convenience
|
|
232
|
+
var jurisdictional_level_2 = require("./enumerations/jurisdictional-level");
|
|
233
|
+
Object.defineProperty(exports, "JurisdictionLevel", { enumerable: true, get: function () { return jurisdictional_level_2.JurisdictionLevel; } });
|
|
234
|
+
//# sourceMappingURL=hierarchical-aggregator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchical-aggregator.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/hierarchical-aggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* - Plurality voting
|
|
10
10
|
* - Proper role separation (Poll vs Tallier)
|
|
11
11
|
* - Homomorphic encryption for privacy
|
|
12
|
+
* - U.S. scale hierarchical aggregation
|
|
12
13
|
*
|
|
13
14
|
* @example
|
|
14
15
|
* ```typescript
|
|
@@ -32,13 +33,15 @@
|
|
|
32
33
|
* ```
|
|
33
34
|
*/
|
|
34
35
|
export { Poll } from './poll-core';
|
|
35
|
-
export { VotingPoll } from './poll';
|
|
36
36
|
export { PollTallier } from './tallier';
|
|
37
37
|
export { VoteEncoder } from './encoder';
|
|
38
38
|
export { PollFactory } from './factory';
|
|
39
39
|
export { VotingSecurityValidator, VOTING_SECURITY } from './security';
|
|
40
|
-
export { ImmutableAuditLog
|
|
41
|
-
export { PublicBulletinBoard
|
|
42
|
-
export { PollEventLogger
|
|
43
|
-
export {
|
|
40
|
+
export { ImmutableAuditLog } from './audit';
|
|
41
|
+
export { PublicBulletinBoard } from './bulletin-board';
|
|
42
|
+
export { PollEventLogger } from './event-logger';
|
|
43
|
+
export { PrecinctAggregator, CountyAggregator, StateAggregator, NationalAggregator, } from './hierarchical-aggregator';
|
|
44
|
+
export { BatchVoteProcessor } from './persistent-state';
|
|
45
|
+
export * from './enumerations';
|
|
46
|
+
export type * from './interfaces';
|
|
44
47
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,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,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD,cAAc,gBAAgB,CAAC;AAG/B,mBAAmB,cAAc,CAAC"}
|
package/src/lib/voting/index.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* - Plurality voting
|
|
11
11
|
* - Proper role separation (Poll vs Tallier)
|
|
12
12
|
* - Homomorphic encryption for privacy
|
|
13
|
+
* - U.S. scale hierarchical aggregation
|
|
13
14
|
*
|
|
14
15
|
* @example
|
|
15
16
|
* ```typescript
|
|
@@ -33,11 +34,10 @@
|
|
|
33
34
|
* ```
|
|
34
35
|
*/
|
|
35
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.
|
|
37
|
+
exports.BatchVoteProcessor = exports.NationalAggregator = exports.StateAggregator = exports.CountyAggregator = exports.PrecinctAggregator = exports.PollEventLogger = exports.PublicBulletinBoard = exports.ImmutableAuditLog = exports.VOTING_SECURITY = exports.VotingSecurityValidator = exports.PollFactory = exports.VoteEncoder = exports.PollTallier = exports.Poll = void 0;
|
|
38
|
+
const tslib_1 = require("tslib");
|
|
37
39
|
var poll_core_1 = require("./poll-core");
|
|
38
40
|
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
41
|
var tallier_1 = require("./tallier");
|
|
42
42
|
Object.defineProperty(exports, "PollTallier", { enumerable: true, get: function () { return tallier_1.PollTallier; } });
|
|
43
43
|
var encoder_1 = require("./encoder");
|
|
@@ -49,12 +49,17 @@ Object.defineProperty(exports, "VotingSecurityValidator", { enumerable: true, ge
|
|
|
49
49
|
Object.defineProperty(exports, "VOTING_SECURITY", { enumerable: true, get: function () { return security_1.VOTING_SECURITY; } });
|
|
50
50
|
var audit_1 = require("./audit");
|
|
51
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
52
|
var bulletin_board_1 = require("./bulletin-board");
|
|
54
53
|
Object.defineProperty(exports, "PublicBulletinBoard", { enumerable: true, get: function () { return bulletin_board_1.PublicBulletinBoard; } });
|
|
55
54
|
var event_logger_1 = require("./event-logger");
|
|
56
55
|
Object.defineProperty(exports, "PollEventLogger", { enumerable: true, get: function () { return event_logger_1.PollEventLogger; } });
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
Object.defineProperty(exports, "
|
|
56
|
+
var hierarchical_aggregator_1 = require("./hierarchical-aggregator");
|
|
57
|
+
Object.defineProperty(exports, "PrecinctAggregator", { enumerable: true, get: function () { return hierarchical_aggregator_1.PrecinctAggregator; } });
|
|
58
|
+
Object.defineProperty(exports, "CountyAggregator", { enumerable: true, get: function () { return hierarchical_aggregator_1.CountyAggregator; } });
|
|
59
|
+
Object.defineProperty(exports, "StateAggregator", { enumerable: true, get: function () { return hierarchical_aggregator_1.StateAggregator; } });
|
|
60
|
+
Object.defineProperty(exports, "NationalAggregator", { enumerable: true, get: function () { return hierarchical_aggregator_1.NationalAggregator; } });
|
|
61
|
+
var persistent_state_1 = require("./persistent-state");
|
|
62
|
+
Object.defineProperty(exports, "BatchVoteProcessor", { enumerable: true, get: function () { return persistent_state_1.BatchVoteProcessor; } });
|
|
63
|
+
// Re-export enumerations
|
|
64
|
+
tslib_1.__exportStar(require("./enumerations"), exports);
|
|
60
65
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/index.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;;;;AAEH,yCAAmC;AAA1B,iGAAA,IAAI,OAAA;AACb,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,iCAA4C;AAAnC,0GAAA,iBAAiB,OAAA;AAC1B,mDAAuD;AAA9C,qHAAA,mBAAmB,OAAA;AAC5B,+CAAiD;AAAxC,+GAAA,eAAe,OAAA;AACxB,qEAKmC;AAJjC,6HAAA,kBAAkB,OAAA;AAClB,2HAAA,gBAAgB,OAAA;AAChB,0HAAA,eAAe,OAAA;AACf,6HAAA,kBAAkB,OAAA;AAEpB,uDAAwD;AAA/C,sHAAA,kBAAkB,OAAA;AAE3B,yBAAyB;AACzB,yDAA+B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PlatformID } from '../../../interfaces';
|
|
2
|
+
import { JurisdictionLevel } from '../enumerations/jurisdictional-level';
|
|
3
|
+
export interface AggregatedTally<TID extends PlatformID = Uint8Array> {
|
|
4
|
+
jurisdictionId: TID;
|
|
5
|
+
level: JurisdictionLevel;
|
|
6
|
+
encryptedTallies: bigint[];
|
|
7
|
+
voterCount: number;
|
|
8
|
+
timestamp: number;
|
|
9
|
+
childJurisdictions?: TID[];
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=aggregated-tally.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregated-tally.d.ts","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/aggregated-tally.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE,MAAM,WAAW,eAAe,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU;IAClE,cAAc,EAAE,GAAG,CAAC;IACpB,KAAK,EAAE,iBAAiB,CAAC;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,GAAG,EAAE,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregated-tally.js","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/aggregated-tally.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { PlatformID } from '../../../interfaces';
|
|
2
|
+
import { AuditEventType } from '../enumerations/audit-event-type';
|
|
3
|
+
export interface AuditEntry<TID extends PlatformID> {
|
|
4
|
+
/** Sequence number (monotonically increasing) */
|
|
5
|
+
readonly sequence: number;
|
|
6
|
+
/** Event type */
|
|
7
|
+
readonly eventType: AuditEventType;
|
|
8
|
+
/** Microsecond-precision timestamp */
|
|
9
|
+
readonly timestamp: number;
|
|
10
|
+
/** Poll identifier */
|
|
11
|
+
readonly pollId: TID;
|
|
12
|
+
/** Hash of voter ID (for vote events) */
|
|
13
|
+
readonly voterIdHash?: Uint8Array;
|
|
14
|
+
/** Authority/creator ID (for creation/closure events) */
|
|
15
|
+
readonly authorityId?: TID;
|
|
16
|
+
/** Hash of previous entry (chain integrity) */
|
|
17
|
+
readonly previousHash: Uint8Array;
|
|
18
|
+
/** Hash of this entry's data */
|
|
19
|
+
readonly entryHash: Uint8Array;
|
|
20
|
+
/** Cryptographic signature from authority */
|
|
21
|
+
readonly signature: Uint8Array;
|
|
22
|
+
/** Additional metadata */
|
|
23
|
+
readonly metadata?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=audit-entry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-entry.d.ts","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/audit-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,MAAM,WAAW,UAAU,CAAC,GAAG,SAAS,UAAU;IAChD,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iBAAiB;IACjB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,sCAAsC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sBAAsB;IACtB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,yCAAyC;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IAClC,yDAAyD;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;IAClC,gCAAgC;IAChC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,0BAA0B;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-entry.js","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/audit-entry.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PlatformID } from '../../../interfaces';
|
|
2
|
+
import { AuditEntry } from './audit-entry';
|
|
3
|
+
export interface AuditLog<TID extends PlatformID> {
|
|
4
|
+
/** Get all entries in chronological order */
|
|
5
|
+
getEntries(): readonly AuditEntry<TID>[];
|
|
6
|
+
/** Get entries for a specific poll */
|
|
7
|
+
getEntriesForPoll(pollId: TID): readonly AuditEntry<TID>[];
|
|
8
|
+
/** Verify the entire chain integrity */
|
|
9
|
+
verifyChain(): boolean;
|
|
10
|
+
/** Verify a specific entry's signature */
|
|
11
|
+
verifyEntry(entry: AuditEntry<TID>): boolean;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=audit-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/audit-log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,WAAW,QAAQ,CAAC,GAAG,SAAS,UAAU;IAC9C,6CAA6C;IAC7C,UAAU,IAAI,SAAS,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IACzC,sCAAsC;IACtC,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAC3D,wCAAwC;IACxC,WAAW,IAAI,OAAO,CAAC;IACvB,0CAA0C;IAC1C,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;CAC9C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/audit-log.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PlatformID } from '../../../interfaces';
|
|
2
|
+
export interface BulletinBoardEntry<TID extends PlatformID = Uint8Array> {
|
|
3
|
+
/** Sequence number (monotonically increasing) */
|
|
4
|
+
readonly sequence: number;
|
|
5
|
+
/** Microsecond-precision timestamp */
|
|
6
|
+
readonly timestamp: number;
|
|
7
|
+
/** Poll identifier */
|
|
8
|
+
readonly pollId: TID;
|
|
9
|
+
/** Encrypted vote data */
|
|
10
|
+
readonly encryptedVote: bigint[];
|
|
11
|
+
/** Hash of voter ID (anonymized) */
|
|
12
|
+
readonly voterIdHash: Uint8Array;
|
|
13
|
+
/** Merkle root of all entries up to this point */
|
|
14
|
+
readonly merkleRoot: Uint8Array;
|
|
15
|
+
/** Hash of this entry */
|
|
16
|
+
readonly entryHash: Uint8Array;
|
|
17
|
+
/** Authority signature */
|
|
18
|
+
readonly signature: Uint8Array;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=bulletin-board-entry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulletin-board-entry.d.ts","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/bulletin-board-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,kBAAkB,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU;IACrE,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,sCAAsC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sBAAsB;IACtB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,0BAA0B;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;IACjC,oCAAoC;IACpC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IACjC,kDAAkD;IAClD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,yBAAyB;IACzB,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,0BAA0B;IAC1B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulletin-board-entry.js","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/bulletin-board-entry.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { PlatformID } from '../../../interfaces';
|
|
2
|
+
import { BulletinBoardEntry } from './bulletin-board-entry';
|
|
3
|
+
import { TallyProof } from './tally-proof';
|
|
4
|
+
export interface BulletinBoard<TID extends PlatformID = Uint8Array> {
|
|
5
|
+
/** Publish encrypted vote to bulletin board */
|
|
6
|
+
publishVote(pollId: TID, encryptedVote: bigint[], voterIdHash: Uint8Array): BulletinBoardEntry<TID>;
|
|
7
|
+
/** Publish tally with cryptographic proof */
|
|
8
|
+
publishTally(pollId: TID, tallies: bigint[], choices: string[], encryptedVotes: bigint[][]): TallyProof<TID>;
|
|
9
|
+
/** Get all entries for a poll */
|
|
10
|
+
getEntries(pollId: TID): readonly BulletinBoardEntry<TID>[];
|
|
11
|
+
/** Get all entries (entire bulletin board) */
|
|
12
|
+
getAllEntries(): readonly BulletinBoardEntry<TID>[];
|
|
13
|
+
/** Get tally proof for a poll */
|
|
14
|
+
getTallyProof(pollId: TID): TallyProof<TID> | undefined;
|
|
15
|
+
/** Verify entry signature and hash */
|
|
16
|
+
verifyEntry(entry: BulletinBoardEntry<TID>): boolean;
|
|
17
|
+
/** Verify tally proof */
|
|
18
|
+
verifyTallyProof(proof: TallyProof<TID>): boolean;
|
|
19
|
+
/** Verify Merkle tree integrity */
|
|
20
|
+
verifyMerkleTree(): boolean;
|
|
21
|
+
/** Export complete bulletin board for archival */
|
|
22
|
+
export(): Uint8Array;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=bulletin-board.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulletin-board.d.ts","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/bulletin-board.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,WAAW,aAAa,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU;IAChE,+CAA+C;IAC/C,WAAW,CACT,MAAM,EAAE,GAAG,EACX,aAAa,EAAE,MAAM,EAAE,EACvB,WAAW,EAAE,UAAU,GACtB,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAE3B,6CAA6C;IAC7C,YAAY,CACV,MAAM,EAAE,GAAG,EACX,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EAAE,EACjB,cAAc,EAAE,MAAM,EAAE,EAAE,GACzB,UAAU,CAAC,GAAG,CAAC,CAAC;IACnB,iCAAiC;IACjC,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;IAE5D,8CAA8C;IAC9C,aAAa,IAAI,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;IAEpD,iCAAiC;IACjC,aAAa,CAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAExD,sCAAsC;IACtC,WAAW,CAAC,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IAErD,yBAAyB;IACzB,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IAElD,mCAAmC;IACnC,gBAAgB,IAAI,OAAO,CAAC;IAE5B,kDAAkD;IAClD,MAAM,IAAI,UAAU,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulletin-board.js","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/bulletin-board.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PlatformID } from '../../../interfaces';
|
|
2
|
+
import { AggregatedTally } from './aggregated-tally';
|
|
3
|
+
import { ICheckpointManager } from './checkpoint-manager';
|
|
4
|
+
import { CheckpointMetadata } from './checkpoint-metadata';
|
|
5
|
+
import { StateSnapshot } from './state-snapshot';
|
|
6
|
+
/**
|
|
7
|
+
* Checkpoint manager interface - implemented in node-ecies-lib
|
|
8
|
+
*/
|
|
9
|
+
export interface ICheckpointManagerExtended<TID extends PlatformID = Uint8Array> extends ICheckpointManager<TID> {
|
|
10
|
+
saveCheckpoint(tally: AggregatedTally<TID>): Promise<void>;
|
|
11
|
+
loadLatestCheckpoint(): Promise<StateSnapshot<TID> | null>;
|
|
12
|
+
listCheckpoints(): Promise<CheckpointMetadata[]>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=checkpoint-manager-extended.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-manager-extended.d.ts","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/checkpoint-manager-extended.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,0BAA0B,CACzC,GAAG,SAAS,UAAU,GAAG,UAAU,CACnC,SAAQ,kBAAkB,CAAC,GAAG,CAAC;IAC/B,cAAc,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,oBAAoB,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3D,eAAe,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;CAClD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-manager-extended.js","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/checkpoint-manager-extended.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PlatformID } from '../../../interfaces';
|
|
2
|
+
import { AggregatedTally } from './aggregated-tally';
|
|
3
|
+
export interface ICheckpointManager<TID extends PlatformID = Uint8Array> {
|
|
4
|
+
saveCheckpoint(tally: AggregatedTally<TID>): Promise<void>;
|
|
5
|
+
loadLatestCheckpoint(): Promise<unknown | null>;
|
|
6
|
+
listCheckpoints(): Promise<unknown[]>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=checkpoint-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-manager.d.ts","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/checkpoint-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,kBAAkB,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU;IACrE,cAAc,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,oBAAoB,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAChD,eAAe,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;CACvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-manager.js","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/checkpoint-manager.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { JurisdictionLevel } from '../enumerations';
|
|
2
|
+
export interface CheckpointMetadata {
|
|
3
|
+
jurisdictionId: string;
|
|
4
|
+
level: JurisdictionLevel;
|
|
5
|
+
voterCount: number;
|
|
6
|
+
timestamp: number;
|
|
7
|
+
checkpointNumber: number;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=checkpoint-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-metadata.d.ts","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/checkpoint-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,iBAAiB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-metadata.js","sourceRoot":"","sources":["../../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/interfaces/checkpoint-metadata.ts"],"names":[],"mappings":""}
|