@digitaldefiance/ecies-lib 4.4.25 → 4.5.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 +9 -1
- package/src/index.d.ts +2 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/interfaces/member.d.ts +7 -0
- package/src/interfaces/member.d.ts.map +1 -1
- package/src/member.d.ts +11 -0
- package/src/member.d.ts.map +1 -1
- package/src/member.js +29 -0
- package/src/member.js.map +1 -1
- package/src/services/aes-gcm.js +3 -3
- package/src/services/aes-gcm.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 +3 -0
- package/src/services/index.js.map +1 -1
- package/src/services/voting.service.d.ts +196 -0
- package/src/services/voting.service.d.ts.map +1 -0
- package/src/services/voting.service.js +537 -0
- package/src/services/voting.service.js.map +1 -0
- package/src/voting-utils.d.ts +86 -0
- package/src/voting-utils.d.ts.map +1 -0
- package/src/voting-utils.js +148 -0
- package/src/voting-utils.js.map +1 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Voting utilities for deriving Paillier keys from ECDH keys.
|
|
4
|
+
* This module provides cryptographic bridge functions to derive
|
|
5
|
+
* homomorphic encryption keys from ECDSA/ECDH key pairs.
|
|
6
|
+
*
|
|
7
|
+
* Note: Requires paillier-bigint as an optional peer dependency.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.hkdf = hkdf;
|
|
11
|
+
exports.millerRabinTest = millerRabinTest;
|
|
12
|
+
exports.modPow = modPow;
|
|
13
|
+
exports.modInverse = modInverse;
|
|
14
|
+
exports.gcd = gcd;
|
|
15
|
+
exports.lcm = lcm;
|
|
16
|
+
exports.deriveVotingKeysFromECDH = deriveVotingKeysFromECDH;
|
|
17
|
+
/**
|
|
18
|
+
* HKDF implementation following RFC 5869
|
|
19
|
+
*
|
|
20
|
+
* SECURITY: This is a cryptographically secure key derivation function.
|
|
21
|
+
* - Platform-specific implementations (Web Crypto API for browser, Node crypto for server)
|
|
22
|
+
* - Provides pseudorandomness indistinguishable from random
|
|
23
|
+
* - One-way: computationally infeasible to recover IKM from OKM
|
|
24
|
+
* - Domain separation via 'info' parameter
|
|
25
|
+
*
|
|
26
|
+
* @param secret - The input key material
|
|
27
|
+
* @param salt - Optional salt value (non-secret random value)
|
|
28
|
+
* @param info - Optional context and application specific information
|
|
29
|
+
* @param length - Length of output keying material in bytes
|
|
30
|
+
* @param hmacAlgorithm - HMAC algorithm to use (default: 'sha512')
|
|
31
|
+
* @returns Derived key material
|
|
32
|
+
*/
|
|
33
|
+
function hkdf(secret, salt, info, length, hmacAlgorithm = 'sha512') {
|
|
34
|
+
// This needs to be implemented in the platform-specific libraries
|
|
35
|
+
// (node-ecies-lib will use crypto.createHmac, browser version will use Web Crypto API)
|
|
36
|
+
throw new Error('hkdf must be implemented in platform-specific library');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Miller-Rabin primality test with deterministic witnesses
|
|
40
|
+
*
|
|
41
|
+
* SECURITY: With k=256 rounds, probability of false positive is < 2^-512
|
|
42
|
+
* (more likely: cosmic ray bit flip or hardware failure)
|
|
43
|
+
*
|
|
44
|
+
* @param n - Number to test for primality
|
|
45
|
+
* @param k - Number of rounds (witnesses to test)
|
|
46
|
+
* @returns true if n is probably prime, false if definitely composite
|
|
47
|
+
*/
|
|
48
|
+
function millerRabinTest(n, k) {
|
|
49
|
+
if (n <= 1n || n === 4n)
|
|
50
|
+
return false;
|
|
51
|
+
if (n <= 3n)
|
|
52
|
+
return true;
|
|
53
|
+
// Write n-1 as 2^r * d
|
|
54
|
+
let d = n - 1n;
|
|
55
|
+
let r = 0;
|
|
56
|
+
while (d % 2n === 0n) {
|
|
57
|
+
d /= 2n;
|
|
58
|
+
r++;
|
|
59
|
+
}
|
|
60
|
+
// Use first k prime numbers as witnesses
|
|
61
|
+
const witnesses = [2n, 3n, 5n, 7n, 11n, 13n, 17n, 19n, 23n, 29n, 31n, 37n];
|
|
62
|
+
// Witness loop
|
|
63
|
+
const witnessLoop = (a) => {
|
|
64
|
+
let x = modPow(a, d, n);
|
|
65
|
+
if (x === 1n || x === n - 1n)
|
|
66
|
+
return true;
|
|
67
|
+
for (let i = 1; i < r; i++) {
|
|
68
|
+
x = (x * x) % n;
|
|
69
|
+
if (x === 1n)
|
|
70
|
+
return false;
|
|
71
|
+
if (x === n - 1n)
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
};
|
|
76
|
+
// Test with deterministic witnesses
|
|
77
|
+
for (let i = 0; i < Math.min(k, witnesses.length); i++) {
|
|
78
|
+
const a = (witnesses[i] % (n - 2n)) + 2n;
|
|
79
|
+
if (!witnessLoop(a))
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Modular exponentiation: (base^exp) mod mod
|
|
86
|
+
*/
|
|
87
|
+
function modPow(base, exp, mod) {
|
|
88
|
+
if (mod === 1n)
|
|
89
|
+
return 0n;
|
|
90
|
+
let result = 1n;
|
|
91
|
+
base = base % mod;
|
|
92
|
+
while (exp > 0n) {
|
|
93
|
+
if (exp % 2n === 1n) {
|
|
94
|
+
result = (result * base) % mod;
|
|
95
|
+
}
|
|
96
|
+
exp = exp >> 1n;
|
|
97
|
+
base = (base * base) % mod;
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Extended Euclidean algorithm to find modular multiplicative inverse
|
|
103
|
+
*/
|
|
104
|
+
function modInverse(a, m) {
|
|
105
|
+
if (m === 1n)
|
|
106
|
+
return 0n;
|
|
107
|
+
const m0 = m;
|
|
108
|
+
let x0 = 0n;
|
|
109
|
+
let x1 = 1n;
|
|
110
|
+
let a0 = a;
|
|
111
|
+
while (a0 > 1n) {
|
|
112
|
+
const q = a0 / m;
|
|
113
|
+
let t = m;
|
|
114
|
+
m = a0 % m;
|
|
115
|
+
a0 = t;
|
|
116
|
+
t = x0;
|
|
117
|
+
x0 = x1 - q * x0;
|
|
118
|
+
x1 = t;
|
|
119
|
+
}
|
|
120
|
+
if (x1 < 0n)
|
|
121
|
+
x1 += m0;
|
|
122
|
+
return x1;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Greatest common divisor using Euclidean algorithm
|
|
126
|
+
*/
|
|
127
|
+
function gcd(a, b) {
|
|
128
|
+
a = a < 0n ? -a : a;
|
|
129
|
+
b = b < 0n ? -b : b;
|
|
130
|
+
while (b !== 0n) {
|
|
131
|
+
const t = b;
|
|
132
|
+
b = a % b;
|
|
133
|
+
a = t;
|
|
134
|
+
}
|
|
135
|
+
return a;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Least common multiple
|
|
139
|
+
*/
|
|
140
|
+
function lcm(a, b) {
|
|
141
|
+
return (a * b) / gcd(a, b);
|
|
142
|
+
}
|
|
143
|
+
function deriveVotingKeysFromECDH(ecdhPrivKey, ecdhPubKey, options = {}) {
|
|
144
|
+
// This function signature is defined here, but the implementation
|
|
145
|
+
// must be in platform-specific libraries due to crypto API differences
|
|
146
|
+
throw new Error('deriveVotingKeysFromECDH must be implemented in platform-specific library');
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=voting-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voting-utils.js","sourceRoot":"","sources":["../../../../packages/digitaldefiance-ecies-lib/src/voting-utils.ts"],"names":[],"mappings":"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"}
|