@digitaldefiance/ecies-lib 4.10.5 → 4.10.7
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
CHANGED
|
@@ -8,9 +8,9 @@ Production-ready, browser-compatible ECIES (Elliptic Curve Integrated Encryption
|
|
|
8
8
|
|
|
9
9
|
Part of [Express Suite](https://github.com/Digital-Defiance/express-suite)
|
|
10
10
|
|
|
11
|
-
**Current Version: v4.
|
|
11
|
+
**Current Version: v4.10.6**
|
|
12
12
|
|
|
13
|
-
This library implements a modern, enterprise-grade ECIES protocol (v4.0) featuring HKDF key derivation, AAD binding, and optimized multi-recipient encryption. It includes a pluggable ID provider system, memory-efficient streaming encryption, and
|
|
13
|
+
This library implements a modern, enterprise-grade ECIES protocol (v4.0) featuring HKDF key derivation, AAD binding, and optimized multi-recipient encryption. It includes a pluggable ID provider system with PlatformID support, memory-efficient streaming encryption, comprehensive internationalization, and a complete cryptographic voting system with 15+ voting methods.
|
|
14
14
|
|
|
15
15
|
## Features
|
|
16
16
|
|
|
@@ -30,12 +30,23 @@ This library implements a modern, enterprise-grade ECIES protocol (v4.0) featuri
|
|
|
30
30
|
- **Single**: Includes data length prefix.
|
|
31
31
|
- **Multiple**: Efficient encryption for up to 65,535 recipients.
|
|
32
32
|
|
|
33
|
-
###
|
|
33
|
+
### 🗳️ Cryptographic Voting System
|
|
34
|
+
|
|
35
|
+
- **15+ Voting Methods**: Plurality, Approval, Weighted, Borda Count, Score, Ranked Choice (IRV), STAR, STV, Yes/No, Supermajority, and more
|
|
36
|
+
- **Government-Grade Security**: Homomorphic encryption, verifiable receipts, immutable audit logs, public bulletin board
|
|
37
|
+
- **Role Separation**: Poll aggregators cannot decrypt votes until closure (separate PollTallier)
|
|
38
|
+
- **Multi-Round Support**: True IRV, STAR voting, STV with intermediate decryption
|
|
39
|
+
- **Hierarchical Aggregation**: Precinct → County → State → National vote aggregation
|
|
40
|
+
- **Event Logging**: Comprehensive audit trail with microsecond timestamps
|
|
41
|
+
- **Browser Compatible**: Works in Node.js and modern browsers
|
|
42
|
+
|
|
43
|
+
### 🆔 Enhanced Identity & Management
|
|
34
44
|
|
|
35
45
|
- **Pluggable ID Providers**:
|
|
36
|
-
- **Flexible IDs**: Support for `ObjectId` (12 bytes), `GUID`/`UUID` (16 bytes), or custom formats (1-255 bytes)
|
|
37
|
-
- **
|
|
38
|
-
- **
|
|
46
|
+
- **Flexible IDs**: Support for `ObjectId` (12 bytes), `GUID`/`UUID` (16 bytes), or custom formats (1-255 bytes)
|
|
47
|
+
- **PlatformID Type**: Generic type system supporting `Uint8Array | GuidV4 | ObjectId | string`
|
|
48
|
+
- **Auto-Sync**: Configuration automatically adapts all cryptographic constants to the selected ID provider
|
|
49
|
+
- **Member System**: User abstraction with cryptographic operations, fully integrated with the configured ID provider
|
|
39
50
|
- **Key Management**:
|
|
40
51
|
- **BIP39**: Mnemonic phrase generation (12-24 words).
|
|
41
52
|
- **HD Wallets**: BIP32/BIP44 hierarchical deterministic derivation.
|
|
@@ -43,10 +54,11 @@ This library implements a modern, enterprise-grade ECIES protocol (v4.0) featuri
|
|
|
43
54
|
|
|
44
55
|
### 🚀 Advanced Capabilities
|
|
45
56
|
|
|
46
|
-
- **Streaming Encryption**: Memory-efficient processing for large files (<10MB RAM usage for any file size)
|
|
47
|
-
- **Internationalization (i18n)**: Automatic error translation in 8 languages (en-US, en-GB, fr, es, de, zh-CN, ja, uk)
|
|
48
|
-
- **Runtime Configuration**: Injectable configuration profiles via `ConstantsRegistry` for dependency injection and testing
|
|
49
|
-
- **Cross-Platform**: Fully compatible with Node.js 18+ and modern browsers (Chrome, Edge, Firefox, Safari)
|
|
57
|
+
- **Streaming Encryption**: Memory-efficient processing for large files (<10MB RAM usage for any file size)
|
|
58
|
+
- **Internationalization (i18n)**: Automatic error translation in 8 languages (en-US, en-GB, fr, es, de, zh-CN, ja, uk)
|
|
59
|
+
- **Runtime Configuration**: Injectable configuration profiles via `ConstantsRegistry` for dependency injection and testing
|
|
60
|
+
- **Cross-Platform**: Fully compatible with Node.js 18+ and modern browsers (Chrome, Edge, Firefox, Safari)
|
|
61
|
+
- **Voting System**: Complete cryptographic voting implementation with government-grade security requirements
|
|
50
62
|
|
|
51
63
|
## Installation
|
|
52
64
|
|
|
@@ -160,18 +172,25 @@ The library implements a robust ECIES variant designed for security and efficien
|
|
|
160
172
|
|
|
161
173
|
### ID Provider System
|
|
162
174
|
|
|
163
|
-
The library is agnostic to the format of unique identifiers. The `IdProvider` system drives the entire configuration:
|
|
175
|
+
The library is agnostic to the format of unique identifiers. The `IdProvider` system drives the entire configuration and now supports the `PlatformID` type for enhanced cross-platform compatibility:
|
|
164
176
|
|
|
165
177
|
- **ObjectIdProvider** (Default): 12-byte MongoDB-style IDs.
|
|
166
178
|
- **GuidV4Provider**: 16-byte raw GUIDs.
|
|
167
179
|
- **UuidProvider**: 16-byte UUIDs (string representation handles dashes).
|
|
168
180
|
- **CustomIdProvider**: Define your own size (1-255 bytes).
|
|
169
181
|
|
|
182
|
+
The `PlatformID` type supports multiple ID formats:
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
export type PlatformID = Uint8Array | GuidV4 | ObjectId | string;
|
|
186
|
+
```
|
|
187
|
+
|
|
170
188
|
When you configure an ID provider, the library automatically:
|
|
171
189
|
|
|
172
190
|
- Updates `MEMBER_ID_LENGTH`.
|
|
173
191
|
- Updates `ECIES.MULTIPLE.RECIPIENT_ID_SIZE`.
|
|
174
192
|
- Validates that all internal constants are consistent.
|
|
193
|
+
- Provides seamless integration with the voting system through generic type parameters.
|
|
175
194
|
|
|
176
195
|
## Quick Start
|
|
177
196
|
|
|
@@ -210,6 +229,171 @@ const decrypted = await ecies.decryptSimpleOrSingleWithHeader(false, privateKey,
|
|
|
210
229
|
console.log(new TextDecoder().decode(decrypted)); // "Hello, Secure World!"
|
|
211
230
|
```
|
|
212
231
|
|
|
232
|
+
## Cryptographic Voting System
|
|
233
|
+
|
|
234
|
+
The library includes a complete cryptographic voting system with government-grade security features, supporting 15+ voting methods from simple plurality to complex ranked choice voting.
|
|
235
|
+
|
|
236
|
+
### Quick Start - Voting
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
import {
|
|
240
|
+
ECIESService,
|
|
241
|
+
Member,
|
|
242
|
+
MemberType,
|
|
243
|
+
EmailString
|
|
244
|
+
} from '@digitaldefiance/ecies-lib';
|
|
245
|
+
import {
|
|
246
|
+
PollFactory,
|
|
247
|
+
VoteEncoder,
|
|
248
|
+
PollTallier,
|
|
249
|
+
VotingMethod
|
|
250
|
+
} from '@digitaldefiance/ecies-lib/voting';
|
|
251
|
+
|
|
252
|
+
// 1. Create authority with voting keys
|
|
253
|
+
const ecies = new ECIESService();
|
|
254
|
+
const { member: authority } = Member.newMember(
|
|
255
|
+
ecies,
|
|
256
|
+
MemberType.System,
|
|
257
|
+
'Election Authority',
|
|
258
|
+
new EmailString('authority@example.com')
|
|
259
|
+
);
|
|
260
|
+
await authority.deriveVotingKeys();
|
|
261
|
+
|
|
262
|
+
// 2. Create poll
|
|
263
|
+
const poll = PollFactory.createPlurality(
|
|
264
|
+
['Alice', 'Bob', 'Charlie'],
|
|
265
|
+
authority
|
|
266
|
+
);
|
|
267
|
+
|
|
268
|
+
// 3. Create voter and cast vote
|
|
269
|
+
const { member: voter } = Member.newMember(
|
|
270
|
+
ecies,
|
|
271
|
+
MemberType.User,
|
|
272
|
+
'Voter',
|
|
273
|
+
new EmailString('voter@example.com')
|
|
274
|
+
);
|
|
275
|
+
await voter.deriveVotingKeys();
|
|
276
|
+
|
|
277
|
+
const encoder = new VoteEncoder(authority.votingPublicKey!);
|
|
278
|
+
const vote = encoder.encodePlurality(0, 3); // Vote for Alice
|
|
279
|
+
const receipt = poll.vote(voter, vote);
|
|
280
|
+
|
|
281
|
+
// 4. Close and tally
|
|
282
|
+
poll.close();
|
|
283
|
+
const tallier = new PollTallier(
|
|
284
|
+
authority,
|
|
285
|
+
authority.votingPrivateKey!,
|
|
286
|
+
authority.votingPublicKey!
|
|
287
|
+
);
|
|
288
|
+
const results = tallier.tally(poll);
|
|
289
|
+
|
|
290
|
+
console.log('Winner:', results.choices[results.winner!]);
|
|
291
|
+
console.log('Tallies:', results.tallies);
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Supported Voting Methods
|
|
295
|
+
|
|
296
|
+
The system supports 15+ voting methods classified by security level:
|
|
297
|
+
|
|
298
|
+
#### ✅ Fully Secure (Single-round, Privacy-preserving)
|
|
299
|
+
- **Plurality** - First-past-the-post (most common) ✅ **Fully Implemented**
|
|
300
|
+
- **Approval** - Vote for multiple candidates ✅ **Fully Implemented**
|
|
301
|
+
- **Weighted** - Stakeholder voting with configurable limits ✅ **Fully Implemented**
|
|
302
|
+
- **Borda Count** - Ranked voting with point allocation ✅ **Fully Implemented**
|
|
303
|
+
- **Score Voting** - Rate candidates 0-10 ✅ **Fully Implemented**
|
|
304
|
+
- **Yes/No** - Referendums and ballot measures ✅ **Fully Implemented**
|
|
305
|
+
- **Yes/No/Abstain** - With abstention option ✅ **Fully Implemented**
|
|
306
|
+
- **Supermajority** - Requires 2/3 or 3/4 threshold ✅ **Fully Implemented**
|
|
307
|
+
|
|
308
|
+
#### ⚠️ Multi-Round (Requires intermediate decryption)
|
|
309
|
+
- **Ranked Choice (IRV)** - Instant runoff with elimination ✅ **Fully Implemented**
|
|
310
|
+
- **Two-Round** - Top 2 runoff election ✅ **Fully Implemented**
|
|
311
|
+
- **STAR** - Score Then Automatic Runoff ✅ **Fully Implemented**
|
|
312
|
+
- **STV** - Single Transferable Vote (proportional representation) ✅ **Fully Implemented**
|
|
313
|
+
|
|
314
|
+
#### ❌ Insecure (No privacy - for special cases only)
|
|
315
|
+
- **Quadratic** - Quadratic voting (requires non-homomorphic operations) ✅ **Fully Implemented**
|
|
316
|
+
- **Consensus** - Requires 95%+ agreement ✅ **Fully Implemented**
|
|
317
|
+
- **Consent-Based** - Sociocracy-style (no strong objections) ✅ **Fully Implemented**
|
|
318
|
+
|
|
319
|
+
### Voting System Architecture
|
|
320
|
+
|
|
321
|
+
```
|
|
322
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
323
|
+
│ SECURE ARCHITECTURE │
|
|
324
|
+
├─────────────────────────────────────────────────────────────┤
|
|
325
|
+
│ │
|
|
326
|
+
│ Poll (Vote Aggregator) │
|
|
327
|
+
│ ├─ Paillier PUBLIC key only ← encrypts & aggregates │
|
|
328
|
+
│ ├─ Authority's EC keys ← signs receipts │
|
|
329
|
+
│ └─ Cannot decrypt votes │
|
|
330
|
+
│ │
|
|
331
|
+
│ PollTallier (Separate Entity) │
|
|
332
|
+
│ ├─ Paillier PRIVATE key ← decrypts ONLY after close │
|
|
333
|
+
│ └─ Computes results │
|
|
334
|
+
│ │
|
|
335
|
+
│ Voter (Member) │
|
|
336
|
+
│ ├─ EC keypair ← verifies receipts │
|
|
337
|
+
│ └─ Voting public key ← encrypts votes │
|
|
338
|
+
│ │
|
|
339
|
+
└─────────────────────────────────────────────────────────────┘
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### Government Requirements
|
|
343
|
+
|
|
344
|
+
The voting system meets government-grade requirements:
|
|
345
|
+
|
|
346
|
+
- **✅ Immutable Audit Log** - Cryptographic hash chain for all operations
|
|
347
|
+
- **✅ Public Bulletin Board** - Transparent, append-only vote publication with Merkle tree integrity
|
|
348
|
+
- **✅ Event Logger** - Comprehensive event tracking with microsecond timestamps
|
|
349
|
+
- **✅ Verifiable Receipts** - Cryptographically signed confirmations
|
|
350
|
+
- **✅ Role Separation** - Poll aggregator cannot decrypt votes
|
|
351
|
+
- **✅ Homomorphic Encryption** - Votes remain encrypted until tally
|
|
352
|
+
|
|
353
|
+
### Example: Ranked Choice Voting
|
|
354
|
+
|
|
355
|
+
```typescript
|
|
356
|
+
import { PollFactory, VoteEncoder, PollTallier } from '@digitaldefiance/ecies-lib/voting';
|
|
357
|
+
|
|
358
|
+
// Create ranked choice poll
|
|
359
|
+
const poll = PollFactory.createRankedChoice(
|
|
360
|
+
['Alice', 'Bob', 'Charlie', 'Diana'],
|
|
361
|
+
authority
|
|
362
|
+
);
|
|
363
|
+
|
|
364
|
+
const encoder = new VoteEncoder(authority.votingPublicKey!);
|
|
365
|
+
|
|
366
|
+
// Voter ranks: Alice > Bob > Charlie (Diana not ranked)
|
|
367
|
+
const vote = encoder.encodeRankedChoice([0, 1, 2], 4);
|
|
368
|
+
const receipt = poll.vote(voter, vote);
|
|
369
|
+
|
|
370
|
+
// Verify receipt
|
|
371
|
+
const isValid = poll.verifyReceipt(voter, receipt);
|
|
372
|
+
|
|
373
|
+
// Close and tally with IRV elimination
|
|
374
|
+
poll.close();
|
|
375
|
+
const results = tallier.tally(poll);
|
|
376
|
+
|
|
377
|
+
console.log('Winner:', results.choices[results.winner!]);
|
|
378
|
+
console.log('Elimination rounds:', results.rounds);
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### Security Validation
|
|
382
|
+
|
|
383
|
+
```typescript
|
|
384
|
+
import { VotingSecurityValidator, SecurityLevel } from '@digitaldefiance/ecies-lib/voting';
|
|
385
|
+
|
|
386
|
+
// Check security level
|
|
387
|
+
const level = VotingSecurityValidator.getSecurityLevel(VotingMethod.Plurality);
|
|
388
|
+
console.log(level); // SecurityLevel.FullyHomomorphic
|
|
389
|
+
|
|
390
|
+
// Validate before use (throws if insecure)
|
|
391
|
+
VotingSecurityValidator.validate(VotingMethod.Quadratic); // Throws error
|
|
392
|
+
|
|
393
|
+
// Allow insecure methods explicitly
|
|
394
|
+
VotingSecurityValidator.validate(VotingMethod.Quadratic, { allowInsecure: true });
|
|
395
|
+
```
|
|
396
|
+
|
|
213
397
|
### 2. Using Custom ID Providers (e.g., GUID)
|
|
214
398
|
|
|
215
399
|
```typescript
|
|
@@ -713,6 +897,19 @@ class MemberService {
|
|
|
713
897
|
- **`EciesFileService`**: Helper for chunked file encryption.
|
|
714
898
|
- **`PasswordLoginService`**: Secure authentication using PBKDF2 and encrypted key bundles.
|
|
715
899
|
|
|
900
|
+
### Voting System Services
|
|
901
|
+
|
|
902
|
+
- **`Poll`**: Core poll with vote aggregation and receipt generation
|
|
903
|
+
- **`PollTallier`**: Decrypts and tallies votes (separate from Poll for security)
|
|
904
|
+
- **`VoteEncoder`**: Encrypts votes using Paillier homomorphic encryption
|
|
905
|
+
- **`PollFactory`**: Convenient poll creation with method-specific configurations
|
|
906
|
+
- **`VotingSecurityValidator`**: Security level validation and enforcement
|
|
907
|
+
- **`ImmutableAuditLog`**: Hash-chained audit trail for government compliance
|
|
908
|
+
- **`PublicBulletinBoard`**: Append-only vote publication with Merkle tree integrity
|
|
909
|
+
- **`PollEventLogger`**: Event tracking with microsecond timestamps
|
|
910
|
+
- **Hierarchical Aggregators**: `PrecinctAggregator`, `CountyAggregator`, `StateAggregator`, `NationalAggregator`
|
|
911
|
+
- **`BatchVoteProcessor`**: Batch processing and checkpoint management
|
|
912
|
+
|
|
716
913
|
### ID Providers
|
|
717
914
|
|
|
718
915
|
- **`IIdProvider`**: Interface that all ID providers implement
|
|
@@ -737,6 +934,9 @@ class MemberService {
|
|
|
737
934
|
- `id`: Unique identifier (format determined by ID provider)
|
|
738
935
|
- `publicKey`: Member's public key
|
|
739
936
|
- `privateKey`: Member's private key (optional, can be loaded/unloaded)
|
|
937
|
+
- `votingPublicKey`: Paillier public key for voting (optional)
|
|
938
|
+
- `votingPrivateKey`: Paillier private key for voting (optional)
|
|
939
|
+
- `deriveVotingKeys()`: Generate Paillier keypair for voting
|
|
740
940
|
- `encryptData(data, recipientPublicKey?)`: Encrypt data
|
|
741
941
|
- `decryptData(encryptedData)`: Decrypt data
|
|
742
942
|
- `sign(data)`: Sign data with private key
|
|
@@ -746,6 +946,25 @@ class MemberService {
|
|
|
746
946
|
- `newMember(...)`: Static factory method
|
|
747
947
|
- `fromMnemonic(...)`: Create from BIP39 mnemonic
|
|
748
948
|
|
|
949
|
+
### Voting System Types & Enumerations
|
|
950
|
+
|
|
951
|
+
- **`VotingMethod`**: Enum with 15+ voting methods (Plurality, Approval, Weighted, Borda, Score, RankedChoice, STAR, STV, etc.)
|
|
952
|
+
- **`SecurityLevel`**: Enum classifying voting methods (FullyHomomorphic, MultiRound, Insecure)
|
|
953
|
+
- **`EventType`**: Enum for event logging (PollCreated, VoteCast, PollClosed, etc.)
|
|
954
|
+
- **`AuditEventType`**: Enum for audit events
|
|
955
|
+
- **`JurisdictionalLevel`**: Enum for hierarchical aggregation (Precinct, County, State, National)
|
|
956
|
+
|
|
957
|
+
### Voting System Interfaces
|
|
958
|
+
|
|
959
|
+
- **`EncryptedVote<TID extends PlatformID>`**: Encrypted vote structure with generic ID support
|
|
960
|
+
- **`PollResults<TID extends PlatformID>`**: Tally results with winner(s) and generic ID support
|
|
961
|
+
- **`VoteReceipt`**: Cryptographic vote receipt with signature verification
|
|
962
|
+
- **`PollConfiguration`**: Poll setup parameters
|
|
963
|
+
- **`SupermajorityConfig`**: Threshold configuration for supermajority voting
|
|
964
|
+
- **`AuditEntry`**: Immutable audit log entry
|
|
965
|
+
- **`BulletinBoardEntry`**: Public bulletin board entry
|
|
966
|
+
- **`EventLogEntry`**: Event log entry with timestamps
|
|
967
|
+
|
|
749
968
|
### Configuration & Registry
|
|
750
969
|
|
|
751
970
|
- **`Constants`**: The default, immutable configuration object.
|
|
@@ -962,6 +1181,135 @@ The library maintains **100% test coverage** with over 1,200 tests, including:
|
|
|
962
1181
|
|
|
963
1182
|
## ChangeLog
|
|
964
1183
|
|
|
1184
|
+
### v4.10.6 - Voting System & PlatformID Integration
|
|
1185
|
+
|
|
1186
|
+
**Major Features:**
|
|
1187
|
+
- **Complete Cryptographic Voting System**: Added comprehensive voting system with 15+ methods
|
|
1188
|
+
- Fully secure methods: Plurality, Approval, Weighted, Borda, Score, Yes/No, Supermajority
|
|
1189
|
+
- Multi-round methods: Ranked Choice (IRV), STAR, STV, Two-Round
|
|
1190
|
+
- Government-grade security: Immutable audit logs, public bulletin board, event logging
|
|
1191
|
+
- Role separation: Poll aggregators cannot decrypt votes until closure
|
|
1192
|
+
- **PlatformID Type System**: Enhanced ID provider system with generic type support
|
|
1193
|
+
- `PlatformID = Uint8Array | GuidV4 | ObjectId | string`
|
|
1194
|
+
- Generic interfaces: `EncryptedVote<TID extends PlatformID>`, `PollResults<TID extends PlatformID>`
|
|
1195
|
+
- Seamless integration between voting system and ID providers
|
|
1196
|
+
- **Enhanced Member System**: Added voting key derivation and management
|
|
1197
|
+
- `deriveVotingKeys()`: Generate Paillier keypairs for homomorphic encryption
|
|
1198
|
+
- `votingPublicKey` and `votingPrivateKey` properties for voting operations
|
|
1199
|
+
- Full integration with voting system interfaces
|
|
1200
|
+
|
|
1201
|
+
**Voting System Components:**
|
|
1202
|
+
- `Poll`: Core vote aggregation with receipt generation
|
|
1203
|
+
- `PollTallier`: Secure vote decryption and tallying (separate entity)
|
|
1204
|
+
- `VoteEncoder`: Paillier homomorphic encryption for all voting methods
|
|
1205
|
+
- `PollFactory`: Convenient poll creation with method-specific configurations
|
|
1206
|
+
- `VotingSecurityValidator`: Security level validation and enforcement
|
|
1207
|
+
- `ImmutableAuditLog`: Cryptographic hash chain for audit compliance
|
|
1208
|
+
- `PublicBulletinBoard`: Transparent vote publication with Merkle tree integrity
|
|
1209
|
+
- `PollEventLogger`: Comprehensive event tracking with microsecond timestamps
|
|
1210
|
+
- Hierarchical aggregators: Precinct → County → State → National
|
|
1211
|
+
|
|
1212
|
+
**Breaking Changes:**
|
|
1213
|
+
- Voting interfaces now use generic `PlatformID` types
|
|
1214
|
+
- Member interface extended with voting key properties
|
|
1215
|
+
- New voting system exports in main package
|
|
1216
|
+
|
|
1217
|
+
**Compatibility:**
|
|
1218
|
+
- Fully backward compatible for existing ECIES operations
|
|
1219
|
+
- New voting system is opt-in and doesn't affect existing functionality
|
|
1220
|
+
- Cross-platform compatible with `@digitaldefiance/node-ecies-lib`
|
|
1221
|
+
|
|
1222
|
+
### v4.10.5 - Voting System Enhancements
|
|
1223
|
+
|
|
1224
|
+
**Improvements:**
|
|
1225
|
+
- Enhanced voting system test coverage
|
|
1226
|
+
- Updated showcase application with improved voting demos
|
|
1227
|
+
- Bug fixes and stability improvements
|
|
1228
|
+
|
|
1229
|
+
### v4.10.0 - Complete Voting System Implementation
|
|
1230
|
+
|
|
1231
|
+
**Major Features:**
|
|
1232
|
+
- **All 15 Voting Methods Fully Implemented**: Complete implementation of all voting methods with both encoding and showcase demos
|
|
1233
|
+
- **Interactive Showcase Application**: React-based demos for all voting methods
|
|
1234
|
+
- Plurality, Approval, Weighted, Borda Count demos
|
|
1235
|
+
- Score Voting, Yes/No, Yes/No/Abstain, Supermajority demos
|
|
1236
|
+
- Ranked Choice (IRV), Two-Round, STAR, STV demos
|
|
1237
|
+
- Quadratic, Consensus, Consent-Based demos (marked as insecure)
|
|
1238
|
+
- **Enhanced Vote Encoding**: Generic `encode()` method supports all voting methods
|
|
1239
|
+
- **Comprehensive Testing**: Full test coverage for all voting methods and security levels
|
|
1240
|
+
|
|
1241
|
+
### v4.9.1 - Voting System Refinements
|
|
1242
|
+
|
|
1243
|
+
**Improvements:**
|
|
1244
|
+
- Enhanced voting system test suite
|
|
1245
|
+
- Improved showcase application stability
|
|
1246
|
+
- Bug fixes in voting method implementations
|
|
1247
|
+
|
|
1248
|
+
### v4.9.0 - Voting System Core Implementation
|
|
1249
|
+
|
|
1250
|
+
**Major Features:**
|
|
1251
|
+
- **Core Voting Infrastructure**: Implemented foundational voting system components
|
|
1252
|
+
- **Security Classifications**: Proper security level validation for all voting methods
|
|
1253
|
+
- **Homomorphic Encryption**: Paillier encryption for privacy-preserving vote aggregation
|
|
1254
|
+
- **Government Compliance**: Audit logging, bulletin board, and event tracking systems
|
|
1255
|
+
|
|
1256
|
+
### v4.8.7 - Showcase Application Development
|
|
1257
|
+
|
|
1258
|
+
**Improvements:**
|
|
1259
|
+
- Continued development of interactive voting demos
|
|
1260
|
+
- Enhanced user interface for voting demonstrations
|
|
1261
|
+
- Improved cryptographic visualization components
|
|
1262
|
+
|
|
1263
|
+
### v4.8.6 - Voting System Testing & Refinements
|
|
1264
|
+
|
|
1265
|
+
**Improvements:**
|
|
1266
|
+
- Enhanced test coverage for voting system components
|
|
1267
|
+
- Bug fixes in voting method implementations
|
|
1268
|
+
- Improved error handling and validation
|
|
1269
|
+
|
|
1270
|
+
### v4.8.5 - Voting System Expansion
|
|
1271
|
+
|
|
1272
|
+
**Features:**
|
|
1273
|
+
- Additional voting method implementations
|
|
1274
|
+
- Enhanced showcase application with more interactive demos
|
|
1275
|
+
- Improved voting system documentation
|
|
1276
|
+
|
|
1277
|
+
### v4.8.3 - Voting System Development
|
|
1278
|
+
|
|
1279
|
+
**Features:**
|
|
1280
|
+
- Continued voting system implementation
|
|
1281
|
+
- Enhanced cryptographic voting components
|
|
1282
|
+
- Improved test coverage
|
|
1283
|
+
|
|
1284
|
+
### v4.8.2 - Voting System Foundation
|
|
1285
|
+
|
|
1286
|
+
**Features:**
|
|
1287
|
+
- Initial voting system architecture
|
|
1288
|
+
- Core voting method implementations
|
|
1289
|
+
- Basic showcase application structure
|
|
1290
|
+
|
|
1291
|
+
### v4.8.1 - Voting System Initialization
|
|
1292
|
+
|
|
1293
|
+
**Features:**
|
|
1294
|
+
- Foundation for cryptographic voting system
|
|
1295
|
+
- Initial voting method definitions
|
|
1296
|
+
- Enhanced Member system for voting key management
|
|
1297
|
+
|
|
1298
|
+
### v4.8.0 - Voting System Introduction
|
|
1299
|
+
|
|
1300
|
+
**Major Features:**
|
|
1301
|
+
- **Initial Voting System**: Introduced cryptographic voting system architecture
|
|
1302
|
+
- **Voting Method Enumerations**: Defined all 15+ voting methods with security classifications
|
|
1303
|
+
- **Enhanced Member System**: Added voting key derivation capabilities
|
|
1304
|
+
- **Showcase Application**: Started development of interactive voting demos
|
|
1305
|
+
|
|
1306
|
+
### v4.7.14 - Pre-Voting System Enhancements
|
|
1307
|
+
|
|
1308
|
+
**Improvements:**
|
|
1309
|
+
- Enhanced core ECIES functionality
|
|
1310
|
+
- Improved ID provider system
|
|
1311
|
+
- Bug fixes and stability improvements
|
|
1312
|
+
|
|
965
1313
|
### v4.7.12
|
|
966
1314
|
|
|
967
1315
|
**Bug Fix: idProvider Configuration Now Respected by Member.newMember()**
|
|
@@ -1367,7 +1715,18 @@ tests/
|
|
|
1367
1715
|
├── e2e/ # End-to-end encryption/decryption tests
|
|
1368
1716
|
├── property/ # Property-based tests for cryptographic properties
|
|
1369
1717
|
├── compatibility/ # Cross-platform compatibility tests
|
|
1370
|
-
|
|
1718
|
+
├── vectors/ # Test vectors for protocol validation
|
|
1719
|
+
└── voting/ # Voting system tests
|
|
1720
|
+
├── voting.spec.ts # Core voting functionality (900+ tests)
|
|
1721
|
+
├── voting-stress.spec.ts # Stress tests with large datasets
|
|
1722
|
+
├── poll-core.spec.ts # Poll core functionality
|
|
1723
|
+
├── poll-audit.spec.ts # Audit log integration
|
|
1724
|
+
├── factory.spec.ts # Poll factory methods
|
|
1725
|
+
├── encoder.spec.ts # Vote encoding for all methods
|
|
1726
|
+
├── security.spec.ts # Security validation
|
|
1727
|
+
├── audit.spec.ts # Immutable audit log
|
|
1728
|
+
├── bulletin-board.spec.ts # Public bulletin board
|
|
1729
|
+
└── event-logger.spec.ts # Event logging system
|
|
1371
1730
|
```
|
|
1372
1731
|
|
|
1373
1732
|
### Running Tests
|
|
@@ -1382,6 +1741,11 @@ npm test -- --coverage
|
|
|
1382
1741
|
# Run specific test suite
|
|
1383
1742
|
npm test -- ecies-service.spec.ts
|
|
1384
1743
|
|
|
1744
|
+
# Run voting system tests
|
|
1745
|
+
npm test -- voting.spec.ts
|
|
1746
|
+
npm test -- voting-stress.spec.ts
|
|
1747
|
+
npm test -- poll-core.spec.ts
|
|
1748
|
+
|
|
1385
1749
|
# Run compatibility tests
|
|
1386
1750
|
npm test -- cross-platform-compatibility.spec.ts
|
|
1387
1751
|
|
|
@@ -1459,6 +1823,68 @@ describe('Multi-Recipient Encryption', () => {
|
|
|
1459
1823
|
});
|
|
1460
1824
|
```
|
|
1461
1825
|
|
|
1826
|
+
#### Testing Voting System
|
|
1827
|
+
|
|
1828
|
+
```typescript
|
|
1829
|
+
import { ECIESService, Member, MemberType, EmailString } from '@digitaldefiance/ecies-lib';
|
|
1830
|
+
import { PollFactory, VoteEncoder, PollTallier, VotingMethod } from '@digitaldefiance/ecies-lib/voting';
|
|
1831
|
+
|
|
1832
|
+
describe('Voting System', () => {
|
|
1833
|
+
it('should conduct a complete ranked choice election', async () => {
|
|
1834
|
+
const ecies = new ECIESService();
|
|
1835
|
+
|
|
1836
|
+
// Create authority
|
|
1837
|
+
const { member: authority } = Member.newMember(
|
|
1838
|
+
ecies,
|
|
1839
|
+
MemberType.System,
|
|
1840
|
+
'Authority',
|
|
1841
|
+
new EmailString('authority@example.com')
|
|
1842
|
+
);
|
|
1843
|
+
await authority.deriveVotingKeys();
|
|
1844
|
+
|
|
1845
|
+
// Create poll
|
|
1846
|
+
const poll = PollFactory.createRankedChoice(
|
|
1847
|
+
['Alice', 'Bob', 'Charlie'],
|
|
1848
|
+
authority
|
|
1849
|
+
);
|
|
1850
|
+
|
|
1851
|
+
// Create voters and cast votes
|
|
1852
|
+
const { member: voter1 } = Member.newMember(ecies, MemberType.User, 'Voter1', new EmailString('v1@example.com'));
|
|
1853
|
+
await voter1.deriveVotingKeys();
|
|
1854
|
+
|
|
1855
|
+
const encoder = new VoteEncoder(authority.votingPublicKey!);
|
|
1856
|
+
const vote = encoder.encodeRankedChoice([0, 1, 2], 3); // Alice > Bob > Charlie
|
|
1857
|
+
const receipt = poll.vote(voter1, vote);
|
|
1858
|
+
|
|
1859
|
+
// Verify receipt
|
|
1860
|
+
expect(poll.verifyReceipt(voter1, receipt)).toBe(true);
|
|
1861
|
+
|
|
1862
|
+
// Close and tally
|
|
1863
|
+
poll.close();
|
|
1864
|
+
const tallier = new PollTallier(
|
|
1865
|
+
authority,
|
|
1866
|
+
authority.votingPrivateKey!,
|
|
1867
|
+
authority.votingPublicKey!
|
|
1868
|
+
);
|
|
1869
|
+
const results = tallier.tally(poll);
|
|
1870
|
+
|
|
1871
|
+
expect(results.winner).toBeDefined();
|
|
1872
|
+
expect(results.choices[results.winner!]).toBe('Alice');
|
|
1873
|
+
});
|
|
1874
|
+
|
|
1875
|
+
it('should prevent double voting', async () => {
|
|
1876
|
+
const poll = PollFactory.createPlurality(['A', 'B'], authority);
|
|
1877
|
+
const encoder = new VoteEncoder(authority.votingPublicKey!);
|
|
1878
|
+
|
|
1879
|
+
poll.vote(voter, encoder.encodePlurality(0, 2));
|
|
1880
|
+
|
|
1881
|
+
expect(() => {
|
|
1882
|
+
poll.vote(voter, encoder.encodePlurality(1, 2));
|
|
1883
|
+
}).toThrow('Already voted');
|
|
1884
|
+
});
|
|
1885
|
+
});
|
|
1886
|
+
```
|
|
1887
|
+
|
|
1462
1888
|
#### Testing ID Providers
|
|
1463
1889
|
|
|
1464
1890
|
```typescript
|
|
@@ -1520,6 +1946,10 @@ describe('Cryptographic Properties', () => {
|
|
|
1520
1946
|
4. **Use property-based tests** for cryptographic invariants
|
|
1521
1947
|
5. **Test error conditions** like invalid keys, corrupted data, and wrong recipients
|
|
1522
1948
|
6. **Verify binary compatibility** with node-ecies-lib
|
|
1949
|
+
7. **Test all voting methods** across security levels (fully secure, multi-round, insecure)
|
|
1950
|
+
8. **Verify voting security** (double-vote prevention, receipt verification, role separation)
|
|
1951
|
+
9. **Test government requirements** (audit logs, bulletin board, event logging)
|
|
1952
|
+
10. **Stress test large elections** (1000+ voters, complex elimination rounds)
|
|
1523
1953
|
|
|
1524
1954
|
### Cross-Platform Testing
|
|
1525
1955
|
|
|
@@ -1555,5 +1985,5 @@ MIT © Digital Defiance
|
|
|
1555
1985
|
|
|
1556
1986
|
- **Repository:** <https://github.com/Digital-Defiance/ecies-lib>
|
|
1557
1987
|
- **npm:** <https://www.npmjs.com/package/@digitaldefiance/ecies-lib>
|
|
1558
|
-
- **Companion:** @digitaldefiance/node-ecies-lib (binary compatible)
|
|
1988
|
+
- **Companion:** @digitaldefiance/node-ecies-lib (binary compatible, extends this library with Buffer support and Node.js-specific features)
|
|
1559
1989
|
|
package/package.json
CHANGED
|
@@ -29,8 +29,13 @@ export declare class PublicBulletinBoard<TID extends PlatformID = Uint8Array> im
|
|
|
29
29
|
verifyEntry(entry: BulletinBoardEntry<TID>): boolean;
|
|
30
30
|
verifyTallyProof(proof: TallyProof<TID>): boolean;
|
|
31
31
|
verifyMerkleTree(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Get the current merkle root as a hex string
|
|
34
|
+
* Returns the merkle root of all entries currently in the bulletin board
|
|
35
|
+
*/
|
|
36
|
+
computeMerkleRoot(): string;
|
|
32
37
|
export(): Uint8Array;
|
|
33
|
-
private
|
|
38
|
+
private computeMerkleRootInternal;
|
|
34
39
|
private hashEncryptedVotes;
|
|
35
40
|
private generateDecryptionProof;
|
|
36
41
|
private serializeEntryData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bulletin-board.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/bulletin-board.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD;;GAEG;AACH,qBAAa,mBAAmB,CAC9B,GAAG,SAAS,UAAU,GAAG,UAAU,CACnC,YAAW,aAAa,CAAC,GAAG,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,QAAQ,CAAK;gBAET,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC;IASlE;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,GAAG,SAAS,UAAU,EACzC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,GACtB,mBAAmB,CAAC,GAAG,CAAC;IAI3B,WAAW,CACT,MAAM,EAAE,GAAG,EACX,aAAa,EAAE,MAAM,EAAE,EACvB,WAAW,EAAE,UAAU,GACtB,kBAAkB,CAAC,GAAG,CAAC;IA+B1B,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;IAkClB,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE;IAI3D,aAAa,IAAI,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE;IAInD,aAAa,CAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,SAAS;IAIvD,WAAW,CAAC,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,OAAO;IAkBpD,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO;IAajD,gBAAgB,IAAI,OAAO;
|
|
1
|
+
{"version":3,"file":"bulletin-board.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/bulletin-board.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD;;GAEG;AACH,qBAAa,mBAAmB,CAC9B,GAAG,SAAS,UAAU,GAAG,UAAU,CACnC,YAAW,aAAa,CAAC,GAAG,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,QAAQ,CAAK;gBAET,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC;IASlE;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,GAAG,SAAS,UAAU,EACzC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,GACtB,mBAAmB,CAAC,GAAG,CAAC;IAI3B,WAAW,CACT,MAAM,EAAE,GAAG,EACX,aAAa,EAAE,MAAM,EAAE,EACvB,WAAW,EAAE,UAAU,GACtB,kBAAkB,CAAC,GAAG,CAAC;IA+B1B,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;IAkClB,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE;IAI3D,aAAa,IAAI,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE;IAInD,aAAa,CAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,SAAS;IAIvD,WAAW,CAAC,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,OAAO;IAkBpD,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO;IAajD,gBAAgB,IAAI,OAAO;IAc3B;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAU3B,MAAM,IAAI,UAAU;IAkBpB,OAAO,CAAC,yBAAyB;IAwBjC,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,uBAAuB;IAkB/B,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,cAAc;IA4BtB,OAAO,CAAC,uBAAuB;IA+B/B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,MAAM;IAoBd,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,KAAK;CAKd"}
|
|
@@ -26,7 +26,7 @@ class PublicBulletinBoard {
|
|
|
26
26
|
}
|
|
27
27
|
publishVote(pollId, encryptedVote, voterIdHash) {
|
|
28
28
|
const timestamp = this.getMicrosecondTimestamp();
|
|
29
|
-
const merkleRoot = this.
|
|
29
|
+
const merkleRoot = this.computeMerkleRootInternal([...this.entries]);
|
|
30
30
|
const entryData = this.serializeEntryData({
|
|
31
31
|
sequence: this.sequence,
|
|
32
32
|
timestamp,
|
|
@@ -114,13 +114,25 @@ class PublicBulletinBoard {
|
|
|
114
114
|
verifyMerkleTree() {
|
|
115
115
|
for (let i = 0; i < this.entries.length; i++) {
|
|
116
116
|
const entry = this.entries[i];
|
|
117
|
-
const expectedRoot = this.
|
|
117
|
+
const expectedRoot = this.computeMerkleRootInternal(this.entries.slice(0, i));
|
|
118
118
|
if (!this.arraysEqual(entry.merkleRoot, expectedRoot)) {
|
|
119
119
|
return false;
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
return true;
|
|
123
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Get the current merkle root as a hex string
|
|
126
|
+
* Returns the merkle root of all entries currently in the bulletin board
|
|
127
|
+
*/
|
|
128
|
+
computeMerkleRoot() {
|
|
129
|
+
if (this.entries.length === 0) {
|
|
130
|
+
return '0'.repeat(64); // 32 bytes of zeros as hex
|
|
131
|
+
}
|
|
132
|
+
// Get the merkle root from the latest entry
|
|
133
|
+
const latestEntry = this.entries[this.entries.length - 1];
|
|
134
|
+
return this.toHex(latestEntry.merkleRoot);
|
|
135
|
+
}
|
|
124
136
|
export() {
|
|
125
137
|
const parts = [];
|
|
126
138
|
// Export entries
|
|
@@ -135,7 +147,7 @@ class PublicBulletinBoard {
|
|
|
135
147
|
}
|
|
136
148
|
return this.concat(parts);
|
|
137
149
|
}
|
|
138
|
-
|
|
150
|
+
computeMerkleRootInternal(entries) {
|
|
139
151
|
if (entries.length === 0) {
|
|
140
152
|
return new Uint8Array(32);
|
|
141
153
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bulletin-board.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/bulletin-board.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bulletin-board.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/voting/bulletin-board.ts"],"names":[],"mappings":"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"}
|