quarkdash 1.0.7 → 1.0.8
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/dist/cjs/ringlwe.js +122 -88
- package/dist/cjs/ringlwe.js.map +1 -1
- package/dist/esm/ringlwe.js +122 -88
- package/dist/esm/ringlwe.js.map +1 -1
- package/dist/types/ringlwe.d.ts +49 -43
- package/docutil.ts +84 -0
- package/package.json +4 -2
- package/src/ringlwe.ts +183 -132
package/dist/cjs/ringlwe.js
CHANGED
|
@@ -8,6 +8,87 @@ const sha_1 = require("./sha");
|
|
|
8
8
|
* Ring-LWE based key exchange implementation
|
|
9
9
|
*/
|
|
10
10
|
class QuarkDashKeyExchange {
|
|
11
|
+
/**
|
|
12
|
+
* Generate crypto key pair async
|
|
13
|
+
* @returns {ICryptoKeyPair} Crypto key pair
|
|
14
|
+
* TODO: GPU Calculations
|
|
15
|
+
*/
|
|
16
|
+
async generateKeyPair() {
|
|
17
|
+
return this.generateKeyPairSync();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generate crypto key pair sync
|
|
21
|
+
* @returns {ICryptoKeyPair} Crypto key pair
|
|
22
|
+
*/
|
|
23
|
+
generateKeyPairSync() {
|
|
24
|
+
const a = _a.uniformPoly();
|
|
25
|
+
const s = _a.smallPoly();
|
|
26
|
+
const e = _a.errorPoly();
|
|
27
|
+
const as = _a.multiply(a, s);
|
|
28
|
+
const b = new Array(_a.N);
|
|
29
|
+
for (let i = 0; i < _a.N; i++) {
|
|
30
|
+
b[i] = (as[i] + e[i]) % _a.Q;
|
|
31
|
+
}
|
|
32
|
+
const publicKey = utils_1.QuarkDashUtils.concatBytes(_a.serializePoly(a), _a.serializePoly(b));
|
|
33
|
+
const privateKey = _a.serializePoly(s);
|
|
34
|
+
return { publicKey, privateKey };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Encapsulate async
|
|
38
|
+
* @param publicKey {Uint8Array} Public key buffer
|
|
39
|
+
* @returns {Promise<ICryptoEncapsulated>} Encapsulated data
|
|
40
|
+
* TODO: GPU Calculations
|
|
41
|
+
*/
|
|
42
|
+
async encapsulate(publicKey) {
|
|
43
|
+
return this.encapsulateSync(publicKey);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Encapsulate sync
|
|
47
|
+
* @param publicKey {Uint8Array} Public key buffer
|
|
48
|
+
* @returns {ICryptoEncapsulated} Encapsulated data
|
|
49
|
+
*/
|
|
50
|
+
encapsulateSync(publicKey) {
|
|
51
|
+
const aBytes = publicKey.slice(0, _a.N * 2);
|
|
52
|
+
const bBytes = publicKey.slice(_a.N * 2);
|
|
53
|
+
const a = _a.deserializePoly(aBytes);
|
|
54
|
+
const b = _a.deserializePoly(bBytes);
|
|
55
|
+
const sp = _a.smallPoly();
|
|
56
|
+
const ep = _a.errorPoly();
|
|
57
|
+
const uArr = _a.multiply(a, sp);
|
|
58
|
+
for (let i = 0; i < _a.N; i++) {
|
|
59
|
+
uArr[i] = (uArr[i] + ep[i]) % _a.Q;
|
|
60
|
+
}
|
|
61
|
+
const w = _a.multiply(b, sp);
|
|
62
|
+
const rawSecret = _a.roundToBits(w);
|
|
63
|
+
const ciphertext = _a.serializePoly(uArr);
|
|
64
|
+
const sharedSecret = _a.hashSharedSecret(rawSecret, publicKey, ciphertext);
|
|
65
|
+
return { ciphertext, sharedSecret };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Decapsulate async
|
|
69
|
+
* @param privateKey {Uint8Array} Private key buffer
|
|
70
|
+
* @param peerPublicKey {Uint8Array} Peer public key
|
|
71
|
+
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
72
|
+
* @returns {Promise<Uint8Array>} Buffer data
|
|
73
|
+
* TODO: GPU Calculations
|
|
74
|
+
*/
|
|
75
|
+
async decapsulate(privateKey, peerPublicKey, ciphertext) {
|
|
76
|
+
return this.decapsulateSync(privateKey, peerPublicKey, ciphertext);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Decapsulate sync
|
|
80
|
+
* @param privateKey {Uint8Array} Private key buffer
|
|
81
|
+
* @param peerPublicKey{Uint8Array} Peer public key buffer
|
|
82
|
+
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
83
|
+
* @returns {Uint8Array} Buffer data
|
|
84
|
+
*/
|
|
85
|
+
decapsulateSync(privateKey, peerPublicKey, ciphertext) {
|
|
86
|
+
const s = _a.deserializePoly(privateKey);
|
|
87
|
+
const u = _a.deserializePoly(ciphertext);
|
|
88
|
+
const w = _a.multiply(u, s);
|
|
89
|
+
const rawSecret = _a.roundToBits(w);
|
|
90
|
+
return _a.hashSharedSecret(rawSecret, peerPublicKey, ciphertext);
|
|
91
|
+
}
|
|
11
92
|
/**
|
|
12
93
|
* Get small polygon
|
|
13
94
|
* @returns {bigint[]} Small polygon
|
|
@@ -15,14 +96,21 @@ class QuarkDashKeyExchange {
|
|
|
15
96
|
*/
|
|
16
97
|
static smallPoly() {
|
|
17
98
|
const poly = new Array(this.N);
|
|
99
|
+
const bytesNeeded = Math.ceil(this.N * 2 / 8);
|
|
100
|
+
const randomBytes = utils_1.QuarkDashUtils.randomBytes(bytesNeeded);
|
|
18
101
|
for (let i = 0; i < this.N; i++) {
|
|
19
|
-
const
|
|
20
|
-
|
|
102
|
+
const byteIdx = Math.floor(i * 2 / 8);
|
|
103
|
+
const bitShift = (i * 2) % 8;
|
|
104
|
+
const val = (randomBytes[byteIdx] >> bitShift) & 0x03; // 0..3
|
|
105
|
+
if (val === 0)
|
|
21
106
|
poly[i] = -1n;
|
|
22
|
-
else if (
|
|
107
|
+
else if (val === 1)
|
|
23
108
|
poly[i] = 0n;
|
|
24
|
-
else
|
|
109
|
+
else if (val === 2)
|
|
110
|
+
poly[i] = 1n;
|
|
111
|
+
else {
|
|
25
112
|
poly[i] = 1n;
|
|
113
|
+
}
|
|
26
114
|
}
|
|
27
115
|
return poly;
|
|
28
116
|
}
|
|
@@ -40,6 +128,26 @@ class QuarkDashKeyExchange {
|
|
|
40
128
|
}
|
|
41
129
|
return poly;
|
|
42
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Error polygon
|
|
133
|
+
* @private
|
|
134
|
+
*/
|
|
135
|
+
static errorPoly() {
|
|
136
|
+
const poly = new Array(this.N);
|
|
137
|
+
const SIGMA = 3.19;
|
|
138
|
+
for (let i = 0; i < this.N; i++) {
|
|
139
|
+
let sum = 0;
|
|
140
|
+
const randBytes = utils_1.QuarkDashUtils.randomBytes(12);
|
|
141
|
+
for (let j = 0; j < 12; j++) {
|
|
142
|
+
sum += randBytes[j];
|
|
143
|
+
}
|
|
144
|
+
// Центрируем и масштабируем к [-6,6]
|
|
145
|
+
const centered = (sum / 255) - 6;
|
|
146
|
+
const error = Math.floor(centered * SIGMA);
|
|
147
|
+
poly[i] = BigInt(Math.max(-Number(this.Q), Math.min(Number(this.Q) - 1, error)));
|
|
148
|
+
}
|
|
149
|
+
return poly;
|
|
150
|
+
}
|
|
43
151
|
/**
|
|
44
152
|
* NTT Operation
|
|
45
153
|
* @param poly {bigint[]} Polygon
|
|
@@ -86,8 +194,9 @@ class QuarkDashKeyExchange {
|
|
|
86
194
|
}
|
|
87
195
|
len >>= 1;
|
|
88
196
|
}
|
|
89
|
-
for (let i = 0; i < this.N; i++)
|
|
197
|
+
for (let i = 0; i < this.N; i++) {
|
|
90
198
|
res[i] = (res[i] * this.INV_N) % this.Q;
|
|
199
|
+
}
|
|
91
200
|
return res;
|
|
92
201
|
}
|
|
93
202
|
/**
|
|
@@ -100,8 +209,9 @@ class QuarkDashKeyExchange {
|
|
|
100
209
|
const aNTT = this.ntt(a);
|
|
101
210
|
const bNTT = this.ntt(b);
|
|
102
211
|
const prod = new Array(this.N);
|
|
103
|
-
for (let i = 0; i < this.N; i++)
|
|
212
|
+
for (let i = 0; i < this.N; i++) {
|
|
104
213
|
prod[i] = (aNTT[i] * bNTT[i]) % this.Q;
|
|
214
|
+
}
|
|
105
215
|
return this.invNTT(prod);
|
|
106
216
|
}
|
|
107
217
|
/**
|
|
@@ -157,7 +267,9 @@ class QuarkDashKeyExchange {
|
|
|
157
267
|
* @private
|
|
158
268
|
*/
|
|
159
269
|
static powMod(base, exp, mod) {
|
|
160
|
-
let result = 1n
|
|
270
|
+
let result = 1n;
|
|
271
|
+
let b = base % mod;
|
|
272
|
+
let e = exp;
|
|
161
273
|
while (e > 0n) {
|
|
162
274
|
if (e & 1n)
|
|
163
275
|
result = (result * b) % mod;
|
|
@@ -174,7 +286,8 @@ class QuarkDashKeyExchange {
|
|
|
174
286
|
* @private
|
|
175
287
|
*/
|
|
176
288
|
static modInverse(a, m) {
|
|
177
|
-
let [old_r, r] = [a, m]
|
|
289
|
+
let [old_r, r] = [a, m];
|
|
290
|
+
let [old_s, s] = [1n, 0n];
|
|
178
291
|
while (r !== 0n) {
|
|
179
292
|
const q = old_r / r;
|
|
180
293
|
[old_r, r] = [r, old_r - q * r];
|
|
@@ -182,85 +295,6 @@ class QuarkDashKeyExchange {
|
|
|
182
295
|
}
|
|
183
296
|
return (old_s % m + m) % m;
|
|
184
297
|
}
|
|
185
|
-
/**
|
|
186
|
-
* Generate crypto key pair async
|
|
187
|
-
* @returns {ICryptoKeyPair} Crypto key pair
|
|
188
|
-
* TODO: GPU Calculations
|
|
189
|
-
*/
|
|
190
|
-
async generateKeyPair() {
|
|
191
|
-
return this.generateKeyPairSync();
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Generate crypto key pair sync
|
|
195
|
-
* @returns {ICryptoKeyPair} Crypto key pair
|
|
196
|
-
*/
|
|
197
|
-
generateKeyPairSync() {
|
|
198
|
-
const a = _a.uniformPoly();
|
|
199
|
-
const s = _a.smallPoly();
|
|
200
|
-
const e = _a.smallPoly();
|
|
201
|
-
const as = _a.multiply(a, s);
|
|
202
|
-
const b = new Array(_a.N);
|
|
203
|
-
for (let i = 0; i < _a.N; i++)
|
|
204
|
-
b[i] = (as[i] + e[i]) % _a.Q;
|
|
205
|
-
const pub = utils_1.QuarkDashUtils.concatBytes(_a.serializePoly(a), _a.serializePoly(b));
|
|
206
|
-
const priv = _a.serializePoly(s);
|
|
207
|
-
return { publicKey: pub, privateKey: priv };
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Encapsulate async
|
|
211
|
-
* @param publicKey {Uint8Array} Public key buffer
|
|
212
|
-
* @returns {Promise<ICryptoEncapsulated>} Encapsulated data
|
|
213
|
-
* TODO: GPU Calculations
|
|
214
|
-
*/
|
|
215
|
-
async encapsulate(publicKey) {
|
|
216
|
-
return this.encapsulateSync(publicKey);
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Encapsulate sync
|
|
220
|
-
* @param publicKey {Uint8Array} Public key buffer
|
|
221
|
-
* @returns {ICryptoEncapsulated} Encapsulated data
|
|
222
|
-
*/
|
|
223
|
-
encapsulateSync(publicKey) {
|
|
224
|
-
const aBytes = publicKey.slice(0, _a.N * 2);
|
|
225
|
-
const bBytes = publicKey.slice(_a.N * 2);
|
|
226
|
-
const a = _a.deserializePoly(aBytes);
|
|
227
|
-
const b = _a.deserializePoly(bBytes);
|
|
228
|
-
const sp = _a.smallPoly();
|
|
229
|
-
const ep = _a.smallPoly();
|
|
230
|
-
const uArr = _a.multiply(a, sp);
|
|
231
|
-
for (let i = 0; i < _a.N; i++)
|
|
232
|
-
uArr[i] = (uArr[i] + ep[i]) % _a.Q;
|
|
233
|
-
const w = _a.multiply(b, sp);
|
|
234
|
-
const rawSecret = _a.roundToBits(w);
|
|
235
|
-
const ciphertext = _a.serializePoly(uArr);
|
|
236
|
-
const sharedSecret = this.hashSharedSecret(rawSecret, publicKey, ciphertext);
|
|
237
|
-
return { ciphertext, sharedSecret };
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* Decapsulate async
|
|
241
|
-
* @param privateKey {Uint8Array} Private key buffer
|
|
242
|
-
* @param peerPublicKey {Uint8Array} Peer public key
|
|
243
|
-
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
244
|
-
* @returns {Promise<Uint8Array>} Buffer data
|
|
245
|
-
* TODO: GPU Calculations
|
|
246
|
-
*/
|
|
247
|
-
async decapsulate(privateKey, peerPublicKey, ciphertext) {
|
|
248
|
-
return this.decapsulateSync(privateKey, peerPublicKey, ciphertext);
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Decapsulate sync
|
|
252
|
-
* @param privateKey {Uint8Array} Private key buffer
|
|
253
|
-
* @param peerPublicKey{Uint8Array} Peer public key buffer
|
|
254
|
-
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
255
|
-
* @returns {Uint8Array} Buffer data
|
|
256
|
-
*/
|
|
257
|
-
decapsulateSync(privateKey, peerPublicKey, ciphertext) {
|
|
258
|
-
const s = _a.deserializePoly(privateKey);
|
|
259
|
-
const u = _a.deserializePoly(ciphertext);
|
|
260
|
-
const w = _a.multiply(u, s);
|
|
261
|
-
const rawSecret = _a.roundToBits(w);
|
|
262
|
-
return this.hashSharedSecret(rawSecret, peerPublicKey, ciphertext);
|
|
263
|
-
}
|
|
264
298
|
/**
|
|
265
299
|
* Hash shared secret
|
|
266
300
|
* @param ss {Uint8Array} Shared secret buffer
|
|
@@ -269,7 +303,7 @@ class QuarkDashKeyExchange {
|
|
|
269
303
|
* @returns {Uint8Array} Shared secret hash
|
|
270
304
|
* @private
|
|
271
305
|
*/
|
|
272
|
-
hashSharedSecret(ss, publicKey, ciphertext) {
|
|
306
|
+
static hashSharedSecret(ss, publicKey, ciphertext) {
|
|
273
307
|
const data = utils_1.QuarkDashUtils.concatBytes(ss, publicKey, ciphertext);
|
|
274
308
|
return sha_1.SHA256.hash(data, true);
|
|
275
309
|
}
|
package/dist/cjs/ringlwe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ringlwe.js","sourceRoot":"","sources":["../../src/ringlwe.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ringlwe.js","sourceRoot":"","sources":["../../src/ringlwe.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/ringlwe.js
CHANGED
|
@@ -5,6 +5,87 @@ import { SHA256 } from "./sha";
|
|
|
5
5
|
* Ring-LWE based key exchange implementation
|
|
6
6
|
*/
|
|
7
7
|
export class QuarkDashKeyExchange {
|
|
8
|
+
/**
|
|
9
|
+
* Generate crypto key pair async
|
|
10
|
+
* @returns {ICryptoKeyPair} Crypto key pair
|
|
11
|
+
* TODO: GPU Calculations
|
|
12
|
+
*/
|
|
13
|
+
async generateKeyPair() {
|
|
14
|
+
return this.generateKeyPairSync();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Generate crypto key pair sync
|
|
18
|
+
* @returns {ICryptoKeyPair} Crypto key pair
|
|
19
|
+
*/
|
|
20
|
+
generateKeyPairSync() {
|
|
21
|
+
const a = _a.uniformPoly();
|
|
22
|
+
const s = _a.smallPoly();
|
|
23
|
+
const e = _a.errorPoly();
|
|
24
|
+
const as = _a.multiply(a, s);
|
|
25
|
+
const b = new Array(_a.N);
|
|
26
|
+
for (let i = 0; i < _a.N; i++) {
|
|
27
|
+
b[i] = (as[i] + e[i]) % _a.Q;
|
|
28
|
+
}
|
|
29
|
+
const publicKey = QuarkDashUtils.concatBytes(_a.serializePoly(a), _a.serializePoly(b));
|
|
30
|
+
const privateKey = _a.serializePoly(s);
|
|
31
|
+
return { publicKey, privateKey };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Encapsulate async
|
|
35
|
+
* @param publicKey {Uint8Array} Public key buffer
|
|
36
|
+
* @returns {Promise<ICryptoEncapsulated>} Encapsulated data
|
|
37
|
+
* TODO: GPU Calculations
|
|
38
|
+
*/
|
|
39
|
+
async encapsulate(publicKey) {
|
|
40
|
+
return this.encapsulateSync(publicKey);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Encapsulate sync
|
|
44
|
+
* @param publicKey {Uint8Array} Public key buffer
|
|
45
|
+
* @returns {ICryptoEncapsulated} Encapsulated data
|
|
46
|
+
*/
|
|
47
|
+
encapsulateSync(publicKey) {
|
|
48
|
+
const aBytes = publicKey.slice(0, _a.N * 2);
|
|
49
|
+
const bBytes = publicKey.slice(_a.N * 2);
|
|
50
|
+
const a = _a.deserializePoly(aBytes);
|
|
51
|
+
const b = _a.deserializePoly(bBytes);
|
|
52
|
+
const sp = _a.smallPoly();
|
|
53
|
+
const ep = _a.errorPoly();
|
|
54
|
+
const uArr = _a.multiply(a, sp);
|
|
55
|
+
for (let i = 0; i < _a.N; i++) {
|
|
56
|
+
uArr[i] = (uArr[i] + ep[i]) % _a.Q;
|
|
57
|
+
}
|
|
58
|
+
const w = _a.multiply(b, sp);
|
|
59
|
+
const rawSecret = _a.roundToBits(w);
|
|
60
|
+
const ciphertext = _a.serializePoly(uArr);
|
|
61
|
+
const sharedSecret = _a.hashSharedSecret(rawSecret, publicKey, ciphertext);
|
|
62
|
+
return { ciphertext, sharedSecret };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Decapsulate async
|
|
66
|
+
* @param privateKey {Uint8Array} Private key buffer
|
|
67
|
+
* @param peerPublicKey {Uint8Array} Peer public key
|
|
68
|
+
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
69
|
+
* @returns {Promise<Uint8Array>} Buffer data
|
|
70
|
+
* TODO: GPU Calculations
|
|
71
|
+
*/
|
|
72
|
+
async decapsulate(privateKey, peerPublicKey, ciphertext) {
|
|
73
|
+
return this.decapsulateSync(privateKey, peerPublicKey, ciphertext);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Decapsulate sync
|
|
77
|
+
* @param privateKey {Uint8Array} Private key buffer
|
|
78
|
+
* @param peerPublicKey{Uint8Array} Peer public key buffer
|
|
79
|
+
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
80
|
+
* @returns {Uint8Array} Buffer data
|
|
81
|
+
*/
|
|
82
|
+
decapsulateSync(privateKey, peerPublicKey, ciphertext) {
|
|
83
|
+
const s = _a.deserializePoly(privateKey);
|
|
84
|
+
const u = _a.deserializePoly(ciphertext);
|
|
85
|
+
const w = _a.multiply(u, s);
|
|
86
|
+
const rawSecret = _a.roundToBits(w);
|
|
87
|
+
return _a.hashSharedSecret(rawSecret, peerPublicKey, ciphertext);
|
|
88
|
+
}
|
|
8
89
|
/**
|
|
9
90
|
* Get small polygon
|
|
10
91
|
* @returns {bigint[]} Small polygon
|
|
@@ -12,14 +93,21 @@ export class QuarkDashKeyExchange {
|
|
|
12
93
|
*/
|
|
13
94
|
static smallPoly() {
|
|
14
95
|
const poly = new Array(this.N);
|
|
96
|
+
const bytesNeeded = Math.ceil(this.N * 2 / 8);
|
|
97
|
+
const randomBytes = QuarkDashUtils.randomBytes(bytesNeeded);
|
|
15
98
|
for (let i = 0; i < this.N; i++) {
|
|
16
|
-
const
|
|
17
|
-
|
|
99
|
+
const byteIdx = Math.floor(i * 2 / 8);
|
|
100
|
+
const bitShift = (i * 2) % 8;
|
|
101
|
+
const val = (randomBytes[byteIdx] >> bitShift) & 0x03; // 0..3
|
|
102
|
+
if (val === 0)
|
|
18
103
|
poly[i] = -1n;
|
|
19
|
-
else if (
|
|
104
|
+
else if (val === 1)
|
|
20
105
|
poly[i] = 0n;
|
|
21
|
-
else
|
|
106
|
+
else if (val === 2)
|
|
107
|
+
poly[i] = 1n;
|
|
108
|
+
else {
|
|
22
109
|
poly[i] = 1n;
|
|
110
|
+
}
|
|
23
111
|
}
|
|
24
112
|
return poly;
|
|
25
113
|
}
|
|
@@ -37,6 +125,26 @@ export class QuarkDashKeyExchange {
|
|
|
37
125
|
}
|
|
38
126
|
return poly;
|
|
39
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Error polygon
|
|
130
|
+
* @private
|
|
131
|
+
*/
|
|
132
|
+
static errorPoly() {
|
|
133
|
+
const poly = new Array(this.N);
|
|
134
|
+
const SIGMA = 3.19;
|
|
135
|
+
for (let i = 0; i < this.N; i++) {
|
|
136
|
+
let sum = 0;
|
|
137
|
+
const randBytes = QuarkDashUtils.randomBytes(12);
|
|
138
|
+
for (let j = 0; j < 12; j++) {
|
|
139
|
+
sum += randBytes[j];
|
|
140
|
+
}
|
|
141
|
+
// Центрируем и масштабируем к [-6,6]
|
|
142
|
+
const centered = (sum / 255) - 6;
|
|
143
|
+
const error = Math.floor(centered * SIGMA);
|
|
144
|
+
poly[i] = BigInt(Math.max(-Number(this.Q), Math.min(Number(this.Q) - 1, error)));
|
|
145
|
+
}
|
|
146
|
+
return poly;
|
|
147
|
+
}
|
|
40
148
|
/**
|
|
41
149
|
* NTT Operation
|
|
42
150
|
* @param poly {bigint[]} Polygon
|
|
@@ -83,8 +191,9 @@ export class QuarkDashKeyExchange {
|
|
|
83
191
|
}
|
|
84
192
|
len >>= 1;
|
|
85
193
|
}
|
|
86
|
-
for (let i = 0; i < this.N; i++)
|
|
194
|
+
for (let i = 0; i < this.N; i++) {
|
|
87
195
|
res[i] = (res[i] * this.INV_N) % this.Q;
|
|
196
|
+
}
|
|
88
197
|
return res;
|
|
89
198
|
}
|
|
90
199
|
/**
|
|
@@ -97,8 +206,9 @@ export class QuarkDashKeyExchange {
|
|
|
97
206
|
const aNTT = this.ntt(a);
|
|
98
207
|
const bNTT = this.ntt(b);
|
|
99
208
|
const prod = new Array(this.N);
|
|
100
|
-
for (let i = 0; i < this.N; i++)
|
|
209
|
+
for (let i = 0; i < this.N; i++) {
|
|
101
210
|
prod[i] = (aNTT[i] * bNTT[i]) % this.Q;
|
|
211
|
+
}
|
|
102
212
|
return this.invNTT(prod);
|
|
103
213
|
}
|
|
104
214
|
/**
|
|
@@ -154,7 +264,9 @@ export class QuarkDashKeyExchange {
|
|
|
154
264
|
* @private
|
|
155
265
|
*/
|
|
156
266
|
static powMod(base, exp, mod) {
|
|
157
|
-
let result = 1n
|
|
267
|
+
let result = 1n;
|
|
268
|
+
let b = base % mod;
|
|
269
|
+
let e = exp;
|
|
158
270
|
while (e > 0n) {
|
|
159
271
|
if (e & 1n)
|
|
160
272
|
result = (result * b) % mod;
|
|
@@ -171,7 +283,8 @@ export class QuarkDashKeyExchange {
|
|
|
171
283
|
* @private
|
|
172
284
|
*/
|
|
173
285
|
static modInverse(a, m) {
|
|
174
|
-
let [old_r, r] = [a, m]
|
|
286
|
+
let [old_r, r] = [a, m];
|
|
287
|
+
let [old_s, s] = [1n, 0n];
|
|
175
288
|
while (r !== 0n) {
|
|
176
289
|
const q = old_r / r;
|
|
177
290
|
[old_r, r] = [r, old_r - q * r];
|
|
@@ -179,85 +292,6 @@ export class QuarkDashKeyExchange {
|
|
|
179
292
|
}
|
|
180
293
|
return (old_s % m + m) % m;
|
|
181
294
|
}
|
|
182
|
-
/**
|
|
183
|
-
* Generate crypto key pair async
|
|
184
|
-
* @returns {ICryptoKeyPair} Crypto key pair
|
|
185
|
-
* TODO: GPU Calculations
|
|
186
|
-
*/
|
|
187
|
-
async generateKeyPair() {
|
|
188
|
-
return this.generateKeyPairSync();
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Generate crypto key pair sync
|
|
192
|
-
* @returns {ICryptoKeyPair} Crypto key pair
|
|
193
|
-
*/
|
|
194
|
-
generateKeyPairSync() {
|
|
195
|
-
const a = _a.uniformPoly();
|
|
196
|
-
const s = _a.smallPoly();
|
|
197
|
-
const e = _a.smallPoly();
|
|
198
|
-
const as = _a.multiply(a, s);
|
|
199
|
-
const b = new Array(_a.N);
|
|
200
|
-
for (let i = 0; i < _a.N; i++)
|
|
201
|
-
b[i] = (as[i] + e[i]) % _a.Q;
|
|
202
|
-
const pub = QuarkDashUtils.concatBytes(_a.serializePoly(a), _a.serializePoly(b));
|
|
203
|
-
const priv = _a.serializePoly(s);
|
|
204
|
-
return { publicKey: pub, privateKey: priv };
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Encapsulate async
|
|
208
|
-
* @param publicKey {Uint8Array} Public key buffer
|
|
209
|
-
* @returns {Promise<ICryptoEncapsulated>} Encapsulated data
|
|
210
|
-
* TODO: GPU Calculations
|
|
211
|
-
*/
|
|
212
|
-
async encapsulate(publicKey) {
|
|
213
|
-
return this.encapsulateSync(publicKey);
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Encapsulate sync
|
|
217
|
-
* @param publicKey {Uint8Array} Public key buffer
|
|
218
|
-
* @returns {ICryptoEncapsulated} Encapsulated data
|
|
219
|
-
*/
|
|
220
|
-
encapsulateSync(publicKey) {
|
|
221
|
-
const aBytes = publicKey.slice(0, _a.N * 2);
|
|
222
|
-
const bBytes = publicKey.slice(_a.N * 2);
|
|
223
|
-
const a = _a.deserializePoly(aBytes);
|
|
224
|
-
const b = _a.deserializePoly(bBytes);
|
|
225
|
-
const sp = _a.smallPoly();
|
|
226
|
-
const ep = _a.smallPoly();
|
|
227
|
-
const uArr = _a.multiply(a, sp);
|
|
228
|
-
for (let i = 0; i < _a.N; i++)
|
|
229
|
-
uArr[i] = (uArr[i] + ep[i]) % _a.Q;
|
|
230
|
-
const w = _a.multiply(b, sp);
|
|
231
|
-
const rawSecret = _a.roundToBits(w);
|
|
232
|
-
const ciphertext = _a.serializePoly(uArr);
|
|
233
|
-
const sharedSecret = this.hashSharedSecret(rawSecret, publicKey, ciphertext);
|
|
234
|
-
return { ciphertext, sharedSecret };
|
|
235
|
-
}
|
|
236
|
-
/**
|
|
237
|
-
* Decapsulate async
|
|
238
|
-
* @param privateKey {Uint8Array} Private key buffer
|
|
239
|
-
* @param peerPublicKey {Uint8Array} Peer public key
|
|
240
|
-
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
241
|
-
* @returns {Promise<Uint8Array>} Buffer data
|
|
242
|
-
* TODO: GPU Calculations
|
|
243
|
-
*/
|
|
244
|
-
async decapsulate(privateKey, peerPublicKey, ciphertext) {
|
|
245
|
-
return this.decapsulateSync(privateKey, peerPublicKey, ciphertext);
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Decapsulate sync
|
|
249
|
-
* @param privateKey {Uint8Array} Private key buffer
|
|
250
|
-
* @param peerPublicKey{Uint8Array} Peer public key buffer
|
|
251
|
-
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
252
|
-
* @returns {Uint8Array} Buffer data
|
|
253
|
-
*/
|
|
254
|
-
decapsulateSync(privateKey, peerPublicKey, ciphertext) {
|
|
255
|
-
const s = _a.deserializePoly(privateKey);
|
|
256
|
-
const u = _a.deserializePoly(ciphertext);
|
|
257
|
-
const w = _a.multiply(u, s);
|
|
258
|
-
const rawSecret = _a.roundToBits(w);
|
|
259
|
-
return this.hashSharedSecret(rawSecret, peerPublicKey, ciphertext);
|
|
260
|
-
}
|
|
261
295
|
/**
|
|
262
296
|
* Hash shared secret
|
|
263
297
|
* @param ss {Uint8Array} Shared secret buffer
|
|
@@ -266,7 +300,7 @@ export class QuarkDashKeyExchange {
|
|
|
266
300
|
* @returns {Uint8Array} Shared secret hash
|
|
267
301
|
* @private
|
|
268
302
|
*/
|
|
269
|
-
hashSharedSecret(ss, publicKey, ciphertext) {
|
|
303
|
+
static hashSharedSecret(ss, publicKey, ciphertext) {
|
|
270
304
|
const data = QuarkDashUtils.concatBytes(ss, publicKey, ciphertext);
|
|
271
305
|
return SHA256.hash(data, true);
|
|
272
306
|
}
|
package/dist/esm/ringlwe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ringlwe.js","sourceRoot":"","sources":["../../src/ringlwe.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ringlwe.js","sourceRoot":"","sources":["../../src/ringlwe.ts"],"names":[],"mappings":"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"}
|
package/dist/types/ringlwe.d.ts
CHANGED
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* @git https://github.com/devsdaddy/quarkdash
|
|
5
5
|
* @version 1.0.0
|
|
6
6
|
* @author Elijah Rastorguev
|
|
7
|
-
* @build
|
|
7
|
+
* @build 1002
|
|
8
8
|
* @website https://dev.to/devsdaddy
|
|
9
|
+
* @updated 12.04.2026
|
|
9
10
|
*/
|
|
10
11
|
import { ICryptoEncapsulated, ICryptoKeyPair, IKeyExchange } from "./types";
|
|
11
12
|
/**
|
|
@@ -16,6 +17,47 @@ export declare class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
16
17
|
private static readonly Q;
|
|
17
18
|
private static readonly ROOT;
|
|
18
19
|
private static readonly INV_N;
|
|
20
|
+
/**
|
|
21
|
+
* Generate crypto key pair async
|
|
22
|
+
* @returns {ICryptoKeyPair} Crypto key pair
|
|
23
|
+
* TODO: GPU Calculations
|
|
24
|
+
*/
|
|
25
|
+
generateKeyPair(): Promise<ICryptoKeyPair>;
|
|
26
|
+
/**
|
|
27
|
+
* Generate crypto key pair sync
|
|
28
|
+
* @returns {ICryptoKeyPair} Crypto key pair
|
|
29
|
+
*/
|
|
30
|
+
generateKeyPairSync(): ICryptoKeyPair;
|
|
31
|
+
/**
|
|
32
|
+
* Encapsulate async
|
|
33
|
+
* @param publicKey {Uint8Array} Public key buffer
|
|
34
|
+
* @returns {Promise<ICryptoEncapsulated>} Encapsulated data
|
|
35
|
+
* TODO: GPU Calculations
|
|
36
|
+
*/
|
|
37
|
+
encapsulate(publicKey: Uint8Array): Promise<ICryptoEncapsulated>;
|
|
38
|
+
/**
|
|
39
|
+
* Encapsulate sync
|
|
40
|
+
* @param publicKey {Uint8Array} Public key buffer
|
|
41
|
+
* @returns {ICryptoEncapsulated} Encapsulated data
|
|
42
|
+
*/
|
|
43
|
+
encapsulateSync(publicKey: Uint8Array): ICryptoEncapsulated;
|
|
44
|
+
/**
|
|
45
|
+
* Decapsulate async
|
|
46
|
+
* @param privateKey {Uint8Array} Private key buffer
|
|
47
|
+
* @param peerPublicKey {Uint8Array} Peer public key
|
|
48
|
+
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
49
|
+
* @returns {Promise<Uint8Array>} Buffer data
|
|
50
|
+
* TODO: GPU Calculations
|
|
51
|
+
*/
|
|
52
|
+
decapsulate(privateKey: Uint8Array, peerPublicKey: Uint8Array, ciphertext: Uint8Array): Promise<Uint8Array>;
|
|
53
|
+
/**
|
|
54
|
+
* Decapsulate sync
|
|
55
|
+
* @param privateKey {Uint8Array} Private key buffer
|
|
56
|
+
* @param peerPublicKey{Uint8Array} Peer public key buffer
|
|
57
|
+
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
58
|
+
* @returns {Uint8Array} Buffer data
|
|
59
|
+
*/
|
|
60
|
+
decapsulateSync(privateKey: Uint8Array, peerPublicKey: Uint8Array, ciphertext: Uint8Array): Uint8Array;
|
|
19
61
|
/**
|
|
20
62
|
* Get small polygon
|
|
21
63
|
* @returns {bigint[]} Small polygon
|
|
@@ -28,6 +70,11 @@ export declare class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
28
70
|
* @private
|
|
29
71
|
*/
|
|
30
72
|
private static uniformPoly;
|
|
73
|
+
/**
|
|
74
|
+
* Error polygon
|
|
75
|
+
* @private
|
|
76
|
+
*/
|
|
77
|
+
private static errorPoly;
|
|
31
78
|
/**
|
|
32
79
|
* NTT Operation
|
|
33
80
|
* @param poly {bigint[]} Polygon
|
|
@@ -85,47 +132,6 @@ export declare class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
85
132
|
* @private
|
|
86
133
|
*/
|
|
87
134
|
private static modInverse;
|
|
88
|
-
/**
|
|
89
|
-
* Generate crypto key pair async
|
|
90
|
-
* @returns {ICryptoKeyPair} Crypto key pair
|
|
91
|
-
* TODO: GPU Calculations
|
|
92
|
-
*/
|
|
93
|
-
generateKeyPair(): Promise<ICryptoKeyPair>;
|
|
94
|
-
/**
|
|
95
|
-
* Generate crypto key pair sync
|
|
96
|
-
* @returns {ICryptoKeyPair} Crypto key pair
|
|
97
|
-
*/
|
|
98
|
-
generateKeyPairSync(): ICryptoKeyPair;
|
|
99
|
-
/**
|
|
100
|
-
* Encapsulate async
|
|
101
|
-
* @param publicKey {Uint8Array} Public key buffer
|
|
102
|
-
* @returns {Promise<ICryptoEncapsulated>} Encapsulated data
|
|
103
|
-
* TODO: GPU Calculations
|
|
104
|
-
*/
|
|
105
|
-
encapsulate(publicKey: Uint8Array): Promise<ICryptoEncapsulated>;
|
|
106
|
-
/**
|
|
107
|
-
* Encapsulate sync
|
|
108
|
-
* @param publicKey {Uint8Array} Public key buffer
|
|
109
|
-
* @returns {ICryptoEncapsulated} Encapsulated data
|
|
110
|
-
*/
|
|
111
|
-
encapsulateSync(publicKey: Uint8Array): ICryptoEncapsulated;
|
|
112
|
-
/**
|
|
113
|
-
* Decapsulate async
|
|
114
|
-
* @param privateKey {Uint8Array} Private key buffer
|
|
115
|
-
* @param peerPublicKey {Uint8Array} Peer public key
|
|
116
|
-
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
117
|
-
* @returns {Promise<Uint8Array>} Buffer data
|
|
118
|
-
* TODO: GPU Calculations
|
|
119
|
-
*/
|
|
120
|
-
decapsulate(privateKey: Uint8Array, peerPublicKey: Uint8Array, ciphertext: Uint8Array): Promise<Uint8Array>;
|
|
121
|
-
/**
|
|
122
|
-
* Decapsulate sync
|
|
123
|
-
* @param privateKey {Uint8Array} Private key buffer
|
|
124
|
-
* @param peerPublicKey{Uint8Array} Peer public key buffer
|
|
125
|
-
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
126
|
-
* @returns {Uint8Array} Buffer data
|
|
127
|
-
*/
|
|
128
|
-
decapsulateSync(privateKey: Uint8Array, peerPublicKey: Uint8Array, ciphertext: Uint8Array): Uint8Array;
|
|
129
135
|
/**
|
|
130
136
|
* Hash shared secret
|
|
131
137
|
* @param ss {Uint8Array} Shared secret buffer
|
|
@@ -134,5 +140,5 @@ export declare class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
134
140
|
* @returns {Uint8Array} Shared secret hash
|
|
135
141
|
* @private
|
|
136
142
|
*/
|
|
137
|
-
private hashSharedSecret;
|
|
143
|
+
private static hashSharedSecret;
|
|
138
144
|
}
|
package/docutil.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSDoc Util to change headers
|
|
3
|
+
*
|
|
4
|
+
* @author Elijah Rastorguev
|
|
5
|
+
* @version 1.0.0
|
|
6
|
+
* @build 1005
|
|
7
|
+
* @git https://github.com/devsdaddy/bitwarp
|
|
8
|
+
* @license MIT
|
|
9
|
+
* @updated 12.04.2026
|
|
10
|
+
*/
|
|
11
|
+
import { Project, SyntaxKind } from "ts-morph";
|
|
12
|
+
import { execSync } from "child_process";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* JSDoc Change Util
|
|
16
|
+
*/
|
|
17
|
+
async function updateJSDocInChangedFiles() {
|
|
18
|
+
// Get all changed files via GIT
|
|
19
|
+
const changedFiles = execSync("git diff --name-only").toString().trim().split("\n").filter(file => file.endsWith(".ts"));
|
|
20
|
+
|
|
21
|
+
if (changedFiles.length === 0) {
|
|
22
|
+
console.log("No changes found in project.");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
console.log(`Found changed files: ${changedFiles.length}`);
|
|
27
|
+
|
|
28
|
+
// Create ts-morph project
|
|
29
|
+
const project = new Project({
|
|
30
|
+
tsConfigFilePath: "tsconfig.json",
|
|
31
|
+
skipAddingFilesFromTsConfig: true, // Only changed
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// Add changed files
|
|
35
|
+
changedFiles.forEach(file => project.addSourceFileAtPath(file));
|
|
36
|
+
|
|
37
|
+
// Prepare date for @updated
|
|
38
|
+
const today = new Date();
|
|
39
|
+
const formattedDate = `${today.getDate().toString().padStart(2, '0')}.${(today.getMonth() + 1).toString().padStart(2, '0')}.${today.getFullYear()}`;
|
|
40
|
+
let filesUpdatedCount = 0;
|
|
41
|
+
|
|
42
|
+
// Change every changed file
|
|
43
|
+
for (const sourceFile of project.getSourceFiles()) {
|
|
44
|
+
let fileWasModified = false;
|
|
45
|
+
const jsdocs = sourceFile.getDescendantsOfKind(SyntaxKind.JSDoc);
|
|
46
|
+
|
|
47
|
+
for (const jsdoc of jsdocs) {
|
|
48
|
+
const buildTag = jsdoc.getTags().find(tag => tag.getTagName() === "build");
|
|
49
|
+
const updatedTag = jsdoc.getTags().find(tag => tag.getTagName() === "updated");
|
|
50
|
+
|
|
51
|
+
// Work with @build
|
|
52
|
+
if (buildTag) {
|
|
53
|
+
const commentText = buildTag.getCommentText();
|
|
54
|
+
if (commentText) {
|
|
55
|
+
const currentBuild = parseInt(commentText.trim(), 10);
|
|
56
|
+
if (!isNaN(currentBuild)) {
|
|
57
|
+
const newBuild = currentBuild + 1;
|
|
58
|
+
buildTag.replaceWithText(`@build ${newBuild}`);
|
|
59
|
+
fileWasModified = true;
|
|
60
|
+
console.log(` -> File: ${sourceFile.getFilePath()}, @build updated from ${currentBuild} to ${newBuild}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Work with @updated
|
|
66
|
+
if (updatedTag) {
|
|
67
|
+
updatedTag.replaceWithText(`@updated ${formattedDate}`);
|
|
68
|
+
fileWasModified = true;
|
|
69
|
+
console.log(` -> File: ${sourceFile.getFilePath()}, @updated changed to ${formattedDate}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Save modified file
|
|
74
|
+
if (fileWasModified) {
|
|
75
|
+
await sourceFile.save();
|
|
76
|
+
filesUpdatedCount++;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
console.log(`Done! Updated files: ${filesUpdatedCount}.`);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Update JSDoc in Changed Files
|
|
84
|
+
updateJSDocInChangedFiles().catch(console.error);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "quarkdash",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "QuarkDash - pure typescript hybrid cryptographic protocol that provides post-quantum security, high performance, and attack resistance.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"quark",
|
|
@@ -37,8 +37,9 @@
|
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
"scripts": {
|
|
40
|
+
"update-docs": "ts-node docutil.ts",
|
|
40
41
|
"clean": "rm -rf dist",
|
|
41
|
-
"build": "npm run clean && npm run build:esm && npm run build:cjs && npm run build:types",
|
|
42
|
+
"build": "npm run clean && npm run update-docs && npm run build:esm && npm run build:cjs && npm run build:types",
|
|
42
43
|
"build:esm": "tsc -p tsconfig.json",
|
|
43
44
|
"build:cjs": "tsc -p tsconfig.cjs.json",
|
|
44
45
|
"build:types": "tsc -p tsconfig.json --emitDeclarationOnly --declaration --outDir dist/types",
|
|
@@ -50,6 +51,7 @@
|
|
|
50
51
|
"devDependencies": {
|
|
51
52
|
"@types/jest": "^29.5.0",
|
|
52
53
|
"@types/node": "^20.0.0",
|
|
54
|
+
"ts-morph": "^27.0.2",
|
|
53
55
|
"jest": "^29.5.0",
|
|
54
56
|
"ts-jest": "^29.1.0",
|
|
55
57
|
"ts-node": "^10.9.0",
|
package/src/ringlwe.ts
CHANGED
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* @git https://github.com/devsdaddy/quarkdash
|
|
5
5
|
* @version 1.0.0
|
|
6
6
|
* @author Elijah Rastorguev
|
|
7
|
-
* @build
|
|
7
|
+
* @build 1002
|
|
8
8
|
* @website https://dev.to/devsdaddy
|
|
9
|
+
* @updated 12.04.2026
|
|
9
10
|
*/
|
|
10
11
|
/* Import Required Modules */
|
|
11
12
|
import {ICryptoEncapsulated, ICryptoKeyPair, IKeyExchange} from "./types";
|
|
@@ -22,6 +23,96 @@ export class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
22
23
|
private static readonly ROOT = 7n;
|
|
23
24
|
private static readonly INV_N = this.modInverse(BigInt(this.N), this.Q);
|
|
24
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Generate crypto key pair async
|
|
28
|
+
* @returns {ICryptoKeyPair} Crypto key pair
|
|
29
|
+
* TODO: GPU Calculations
|
|
30
|
+
*/
|
|
31
|
+
public async generateKeyPair(): Promise<ICryptoKeyPair> {
|
|
32
|
+
return this.generateKeyPairSync();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Generate crypto key pair sync
|
|
37
|
+
* @returns {ICryptoKeyPair} Crypto key pair
|
|
38
|
+
*/
|
|
39
|
+
public generateKeyPairSync(): ICryptoKeyPair {
|
|
40
|
+
const a = QuarkDashKeyExchange.uniformPoly();
|
|
41
|
+
const s = QuarkDashKeyExchange.smallPoly();
|
|
42
|
+
const e = QuarkDashKeyExchange.errorPoly();
|
|
43
|
+
const as = QuarkDashKeyExchange.multiply(a, s);
|
|
44
|
+
const b = new Array<bigint>(QuarkDashKeyExchange.N);
|
|
45
|
+
for (let i = 0; i < QuarkDashKeyExchange.N; i++) {
|
|
46
|
+
b[i] = (as[i] + e[i]) % QuarkDashKeyExchange.Q;
|
|
47
|
+
}
|
|
48
|
+
const publicKey = QuarkDashUtils.concatBytes(
|
|
49
|
+
QuarkDashKeyExchange.serializePoly(a),
|
|
50
|
+
QuarkDashKeyExchange.serializePoly(b)
|
|
51
|
+
);
|
|
52
|
+
const privateKey = QuarkDashKeyExchange.serializePoly(s);
|
|
53
|
+
return { publicKey, privateKey };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Encapsulate async
|
|
58
|
+
* @param publicKey {Uint8Array} Public key buffer
|
|
59
|
+
* @returns {Promise<ICryptoEncapsulated>} Encapsulated data
|
|
60
|
+
* TODO: GPU Calculations
|
|
61
|
+
*/
|
|
62
|
+
public async encapsulate(publicKey: Uint8Array): Promise<ICryptoEncapsulated> {
|
|
63
|
+
return this.encapsulateSync(publicKey);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Encapsulate sync
|
|
68
|
+
* @param publicKey {Uint8Array} Public key buffer
|
|
69
|
+
* @returns {ICryptoEncapsulated} Encapsulated data
|
|
70
|
+
*/
|
|
71
|
+
public encapsulateSync(publicKey: Uint8Array): ICryptoEncapsulated {
|
|
72
|
+
const aBytes = publicKey.slice(0, QuarkDashKeyExchange.N * 2);
|
|
73
|
+
const bBytes = publicKey.slice(QuarkDashKeyExchange.N * 2);
|
|
74
|
+
const a = QuarkDashKeyExchange.deserializePoly(aBytes);
|
|
75
|
+
const b = QuarkDashKeyExchange.deserializePoly(bBytes);
|
|
76
|
+
const sp = QuarkDashKeyExchange.smallPoly();
|
|
77
|
+
const ep = QuarkDashKeyExchange.errorPoly();
|
|
78
|
+
const uArr = QuarkDashKeyExchange.multiply(a, sp);
|
|
79
|
+
for (let i = 0; i < QuarkDashKeyExchange.N; i++) {
|
|
80
|
+
uArr[i] = (uArr[i] + ep[i]) % QuarkDashKeyExchange.Q;
|
|
81
|
+
}
|
|
82
|
+
const w = QuarkDashKeyExchange.multiply(b, sp);
|
|
83
|
+
const rawSecret = QuarkDashKeyExchange.roundToBits(w);
|
|
84
|
+
const ciphertext = QuarkDashKeyExchange.serializePoly(uArr);
|
|
85
|
+
const sharedSecret = QuarkDashKeyExchange.hashSharedSecret(rawSecret, publicKey, ciphertext);
|
|
86
|
+
return { ciphertext, sharedSecret };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Decapsulate async
|
|
91
|
+
* @param privateKey {Uint8Array} Private key buffer
|
|
92
|
+
* @param peerPublicKey {Uint8Array} Peer public key
|
|
93
|
+
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
94
|
+
* @returns {Promise<Uint8Array>} Buffer data
|
|
95
|
+
* TODO: GPU Calculations
|
|
96
|
+
*/
|
|
97
|
+
public async decapsulate(privateKey: Uint8Array, peerPublicKey: Uint8Array, ciphertext: Uint8Array): Promise<Uint8Array> {
|
|
98
|
+
return this.decapsulateSync(privateKey, peerPublicKey, ciphertext);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Decapsulate sync
|
|
103
|
+
* @param privateKey {Uint8Array} Private key buffer
|
|
104
|
+
* @param peerPublicKey{Uint8Array} Peer public key buffer
|
|
105
|
+
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
106
|
+
* @returns {Uint8Array} Buffer data
|
|
107
|
+
*/
|
|
108
|
+
public decapsulateSync(privateKey: Uint8Array, peerPublicKey: Uint8Array, ciphertext: Uint8Array): Uint8Array {
|
|
109
|
+
const s = QuarkDashKeyExchange.deserializePoly(privateKey);
|
|
110
|
+
const u = QuarkDashKeyExchange.deserializePoly(ciphertext);
|
|
111
|
+
const w = QuarkDashKeyExchange.multiply(u, s);
|
|
112
|
+
const rawSecret = QuarkDashKeyExchange.roundToBits(w);
|
|
113
|
+
return QuarkDashKeyExchange.hashSharedSecret(rawSecret, peerPublicKey, ciphertext);
|
|
114
|
+
}
|
|
115
|
+
|
|
25
116
|
/**
|
|
26
117
|
* Get small polygon
|
|
27
118
|
* @returns {bigint[]} Small polygon
|
|
@@ -29,11 +120,18 @@ export class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
29
120
|
*/
|
|
30
121
|
private static smallPoly(): bigint[] {
|
|
31
122
|
const poly = new Array<bigint>(this.N);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
123
|
+
const bytesNeeded = Math.ceil(this.N * 2 / 8);
|
|
124
|
+
const randomBytes = QuarkDashUtils.randomBytes(bytesNeeded);
|
|
125
|
+
for (let i = 0; i < this.N; i++) {
|
|
126
|
+
const byteIdx = Math.floor(i * 2 / 8);
|
|
127
|
+
const bitShift = (i * 2) % 8;
|
|
128
|
+
const val = (randomBytes[byteIdx] >> bitShift) & 0x03; // 0..3
|
|
129
|
+
if (val === 0) poly[i] = -1n;
|
|
130
|
+
else if (val === 1) poly[i] = 0n;
|
|
131
|
+
else if (val === 2) poly[i] = 1n;
|
|
132
|
+
else {
|
|
133
|
+
poly[i] = 1n;
|
|
134
|
+
}
|
|
37
135
|
}
|
|
38
136
|
return poly;
|
|
39
137
|
}
|
|
@@ -45,14 +143,35 @@ export class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
45
143
|
*/
|
|
46
144
|
private static uniformPoly(): bigint[] {
|
|
47
145
|
const poly = new Array<bigint>(this.N);
|
|
48
|
-
const bytes = QuarkDashUtils.randomBytes(this.N*2);
|
|
49
|
-
for(let i=0;i<this.N;i++) {
|
|
50
|
-
const val = (bytes[2*i] | (bytes[2*i+1]<<8)) % Number(this.Q);
|
|
146
|
+
const bytes = QuarkDashUtils.randomBytes(this.N * 2);
|
|
147
|
+
for (let i = 0; i < this.N; i++) {
|
|
148
|
+
const val = (bytes[2 * i] | (bytes[2 * i + 1] << 8)) % Number(this.Q);
|
|
51
149
|
poly[i] = BigInt(val);
|
|
52
150
|
}
|
|
53
151
|
return poly;
|
|
54
152
|
}
|
|
55
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Error polygon
|
|
156
|
+
* @private
|
|
157
|
+
*/
|
|
158
|
+
private static errorPoly(): bigint[] {
|
|
159
|
+
const poly = new Array<bigint>(this.N);
|
|
160
|
+
const SIGMA = 3.19;
|
|
161
|
+
for (let i = 0; i < this.N; i++) {
|
|
162
|
+
let sum = 0;
|
|
163
|
+
const randBytes = QuarkDashUtils.randomBytes(12);
|
|
164
|
+
for (let j = 0; j < 12; j++) {
|
|
165
|
+
sum += randBytes[j];
|
|
166
|
+
}
|
|
167
|
+
// Центрируем и масштабируем к [-6,6]
|
|
168
|
+
const centered = (sum / 255) - 6;
|
|
169
|
+
const error = Math.floor(centered * SIGMA);
|
|
170
|
+
poly[i] = BigInt(Math.max(-Number(this.Q), Math.min(Number(this.Q) - 1, error)));
|
|
171
|
+
}
|
|
172
|
+
return poly;
|
|
173
|
+
}
|
|
174
|
+
|
|
56
175
|
/**
|
|
57
176
|
* NTT Operation
|
|
58
177
|
* @param poly {bigint[]} Polygon
|
|
@@ -61,19 +180,19 @@ export class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
61
180
|
private static ntt(poly: bigint[]): bigint[] {
|
|
62
181
|
const res = [...poly];
|
|
63
182
|
let len = 2;
|
|
64
|
-
while(len <= this.N) {
|
|
65
|
-
const wlen = this.powMod(this.ROOT, BigInt(this.N/len), this.Q);
|
|
66
|
-
for(let i=0;i<this.N;i+=len){
|
|
67
|
-
let w=1n;
|
|
68
|
-
for(let j=0;j<len/2;j++){
|
|
69
|
-
const u=res[i+j];
|
|
70
|
-
const v=(res[i+j+len/2]*w)%this.Q;
|
|
71
|
-
res[i+j]=(u+v)%this.Q;
|
|
72
|
-
res[i+j+len/2]=(u-v+this.Q)%this.Q;
|
|
73
|
-
w=(w*wlen)%this.Q;
|
|
183
|
+
while (len <= this.N) {
|
|
184
|
+
const wlen = this.powMod(this.ROOT, BigInt(this.N / len), this.Q);
|
|
185
|
+
for (let i = 0; i < this.N; i += len) {
|
|
186
|
+
let w = 1n;
|
|
187
|
+
for (let j = 0; j < len / 2; j++) {
|
|
188
|
+
const u = res[i + j];
|
|
189
|
+
const v = (res[i + j + len / 2] * w) % this.Q;
|
|
190
|
+
res[i + j] = (u + v) % this.Q;
|
|
191
|
+
res[i + j + len / 2] = (u - v + this.Q) % this.Q;
|
|
192
|
+
w = (w * wlen) % this.Q;
|
|
74
193
|
}
|
|
75
194
|
}
|
|
76
|
-
len<<=1;
|
|
195
|
+
len <<= 1;
|
|
77
196
|
}
|
|
78
197
|
return res;
|
|
79
198
|
}
|
|
@@ -86,21 +205,23 @@ export class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
86
205
|
private static invNTT(poly: bigint[]): bigint[] {
|
|
87
206
|
const res = [...poly];
|
|
88
207
|
let len = this.N;
|
|
89
|
-
while(len >= 2){
|
|
90
|
-
const wlen = this.powMod(this.ROOT, BigInt(this.N/len), this.Q);
|
|
91
|
-
for(let i=0;i<this.N;i+=len){
|
|
92
|
-
let w=1n;
|
|
93
|
-
for(let j=0;j<len/2;j++){
|
|
94
|
-
const u=res[i+j];
|
|
95
|
-
const v=res[i+j+len/2];
|
|
96
|
-
res[i+j]=(u+v)%this.Q;
|
|
97
|
-
res[i+j+len/2]=((u-v+this.Q)*w)%this.Q;
|
|
98
|
-
w=(w*wlen)%this.Q;
|
|
208
|
+
while (len >= 2) {
|
|
209
|
+
const wlen = this.powMod(this.ROOT, BigInt(this.N / len), this.Q);
|
|
210
|
+
for (let i = 0; i < this.N; i += len) {
|
|
211
|
+
let w = 1n;
|
|
212
|
+
for (let j = 0; j < len / 2; j++) {
|
|
213
|
+
const u = res[i + j];
|
|
214
|
+
const v = res[i + j + len / 2];
|
|
215
|
+
res[i + j] = (u + v) % this.Q;
|
|
216
|
+
res[i + j + len / 2] = ((u - v + this.Q) * w) % this.Q;
|
|
217
|
+
w = (w * wlen) % this.Q;
|
|
99
218
|
}
|
|
100
219
|
}
|
|
101
|
-
len>>=1;
|
|
220
|
+
len >>= 1;
|
|
221
|
+
}
|
|
222
|
+
for (let i = 0; i < this.N; i++) {
|
|
223
|
+
res[i] = (res[i] * this.INV_N) % this.Q;
|
|
102
224
|
}
|
|
103
|
-
for(let i=0;i<this.N;i++) res[i]=(res[i]*this.INV_N)%this.Q;
|
|
104
225
|
return res;
|
|
105
226
|
}
|
|
106
227
|
|
|
@@ -114,7 +235,9 @@ export class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
114
235
|
const aNTT = this.ntt(a);
|
|
115
236
|
const bNTT = this.ntt(b);
|
|
116
237
|
const prod = new Array<bigint>(this.N);
|
|
117
|
-
for(let i=0;i<this.N;i++)
|
|
238
|
+
for (let i = 0; i < this.N; i++) {
|
|
239
|
+
prod[i] = (aNTT[i] * bNTT[i]) % this.Q;
|
|
240
|
+
}
|
|
118
241
|
return this.invNTT(prod);
|
|
119
242
|
}
|
|
120
243
|
|
|
@@ -125,11 +248,11 @@ export class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
125
248
|
* @private
|
|
126
249
|
*/
|
|
127
250
|
private static serializePoly(poly: bigint[]): Uint8Array {
|
|
128
|
-
const bytes = new Uint8Array(this.N*2);
|
|
129
|
-
for(let i=0;i<this.N;i++) {
|
|
251
|
+
const bytes = new Uint8Array(this.N * 2);
|
|
252
|
+
for (let i = 0; i < this.N; i++) {
|
|
130
253
|
const val = Number(poly[i]);
|
|
131
|
-
bytes[2*i]=val&0xFF;
|
|
132
|
-
bytes[2*i+1]=(val>>8)&0xFF;
|
|
254
|
+
bytes[2 * i] = val & 0xFF;
|
|
255
|
+
bytes[2 * i + 1] = (val >> 8) & 0xFF;
|
|
133
256
|
}
|
|
134
257
|
return bytes;
|
|
135
258
|
}
|
|
@@ -142,9 +265,9 @@ export class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
142
265
|
*/
|
|
143
266
|
private static deserializePoly(bytes: Uint8Array): bigint[] {
|
|
144
267
|
const poly = new Array<bigint>(this.N);
|
|
145
|
-
for(let i=0;i<this.N;i++) {
|
|
146
|
-
const val = bytes[2*i] | (bytes[2*i+1]<<8);
|
|
147
|
-
poly[i]=BigInt(val);
|
|
268
|
+
for (let i = 0; i < this.N; i++) {
|
|
269
|
+
const val = bytes[2 * i] | (bytes[2 * i + 1] << 8);
|
|
270
|
+
poly[i] = BigInt(val);
|
|
148
271
|
}
|
|
149
272
|
return poly;
|
|
150
273
|
}
|
|
@@ -157,9 +280,9 @@ export class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
157
280
|
*/
|
|
158
281
|
private static roundToBits(poly: bigint[]): Uint8Array {
|
|
159
282
|
const result = new Uint8Array(32);
|
|
160
|
-
for(let i=0;i<this.N;i++) {
|
|
161
|
-
const bit = (Number(poly[i]) > Number(this.Q)/2) ? 1 : 0;
|
|
162
|
-
if(bit) result[i>>3] |= (1<<(i&7));
|
|
283
|
+
for (let i = 0; i < this.N; i++) {
|
|
284
|
+
const bit = (Number(poly[i]) > Number(this.Q) / 2) ? 1 : 0;
|
|
285
|
+
if (bit) result[i >> 3] |= (1 << (i & 7));
|
|
163
286
|
}
|
|
164
287
|
return result;
|
|
165
288
|
}
|
|
@@ -173,8 +296,14 @@ export class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
173
296
|
* @private
|
|
174
297
|
*/
|
|
175
298
|
private static powMod(base: bigint, exp: bigint, mod: bigint): bigint {
|
|
176
|
-
let result
|
|
177
|
-
|
|
299
|
+
let result = 1n;
|
|
300
|
+
let b = base % mod;
|
|
301
|
+
let e = exp;
|
|
302
|
+
while (e > 0n) {
|
|
303
|
+
if (e & 1n) result = (result * b) % mod;
|
|
304
|
+
b = (b * b) % mod;
|
|
305
|
+
e >>= 1n;
|
|
306
|
+
}
|
|
178
307
|
return result;
|
|
179
308
|
}
|
|
180
309
|
|
|
@@ -186,92 +315,14 @@ export class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
186
315
|
* @private
|
|
187
316
|
*/
|
|
188
317
|
private static modInverse(a: bigint, m: bigint): bigint {
|
|
189
|
-
let [old_r,r]=[a,m]
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
* TODO: GPU Calculations
|
|
198
|
-
*/
|
|
199
|
-
public async generateKeyPair(): Promise<ICryptoKeyPair> {
|
|
200
|
-
return this.generateKeyPairSync();
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Generate crypto key pair sync
|
|
205
|
-
* @returns {ICryptoKeyPair} Crypto key pair
|
|
206
|
-
*/
|
|
207
|
-
public generateKeyPairSync(): ICryptoKeyPair {
|
|
208
|
-
const a = QuarkDashKeyExchange.uniformPoly();
|
|
209
|
-
const s = QuarkDashKeyExchange.smallPoly();
|
|
210
|
-
const e = QuarkDashKeyExchange.smallPoly();
|
|
211
|
-
const as = QuarkDashKeyExchange.multiply(a,s);
|
|
212
|
-
const b = new Array<bigint>(QuarkDashKeyExchange.N);
|
|
213
|
-
for(let i=0; i<QuarkDashKeyExchange.N; i++) b[i] = (as[i]+e[i]) % QuarkDashKeyExchange.Q;
|
|
214
|
-
const pub = QuarkDashUtils.concatBytes(QuarkDashKeyExchange.serializePoly(a), QuarkDashKeyExchange.serializePoly(b));
|
|
215
|
-
const priv = QuarkDashKeyExchange.serializePoly(s);
|
|
216
|
-
return { publicKey: pub, privateKey: priv };
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* Encapsulate async
|
|
221
|
-
* @param publicKey {Uint8Array} Public key buffer
|
|
222
|
-
* @returns {Promise<ICryptoEncapsulated>} Encapsulated data
|
|
223
|
-
* TODO: GPU Calculations
|
|
224
|
-
*/
|
|
225
|
-
public async encapsulate(publicKey: Uint8Array): Promise<ICryptoEncapsulated> {
|
|
226
|
-
return this.encapsulateSync(publicKey);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* Encapsulate sync
|
|
231
|
-
* @param publicKey {Uint8Array} Public key buffer
|
|
232
|
-
* @returns {ICryptoEncapsulated} Encapsulated data
|
|
233
|
-
*/
|
|
234
|
-
public encapsulateSync(publicKey: Uint8Array): ICryptoEncapsulated {
|
|
235
|
-
const aBytes = publicKey.slice(0, QuarkDashKeyExchange.N * 2);
|
|
236
|
-
const bBytes = publicKey.slice(QuarkDashKeyExchange.N * 2);
|
|
237
|
-
const a = QuarkDashKeyExchange.deserializePoly(aBytes);
|
|
238
|
-
const b = QuarkDashKeyExchange.deserializePoly(bBytes);
|
|
239
|
-
const sp = QuarkDashKeyExchange.smallPoly();
|
|
240
|
-
const ep = QuarkDashKeyExchange.smallPoly();
|
|
241
|
-
const uArr = QuarkDashKeyExchange.multiply(a, sp);
|
|
242
|
-
for (let i = 0; i < QuarkDashKeyExchange.N; i++) uArr[i] = (uArr[i] + ep[i]) % QuarkDashKeyExchange.Q;
|
|
243
|
-
const w = QuarkDashKeyExchange.multiply(b, sp);
|
|
244
|
-
const rawSecret = QuarkDashKeyExchange.roundToBits(w);
|
|
245
|
-
const ciphertext = QuarkDashKeyExchange.serializePoly(uArr);
|
|
246
|
-
const sharedSecret = this.hashSharedSecret(rawSecret, publicKey, ciphertext);
|
|
247
|
-
return { ciphertext, sharedSecret };
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Decapsulate async
|
|
252
|
-
* @param privateKey {Uint8Array} Private key buffer
|
|
253
|
-
* @param peerPublicKey {Uint8Array} Peer public key
|
|
254
|
-
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
255
|
-
* @returns {Promise<Uint8Array>} Buffer data
|
|
256
|
-
* TODO: GPU Calculations
|
|
257
|
-
*/
|
|
258
|
-
public async decapsulate(privateKey: Uint8Array, peerPublicKey: Uint8Array, ciphertext: Uint8Array): Promise<Uint8Array> {
|
|
259
|
-
return this.decapsulateSync(privateKey, peerPublicKey, ciphertext);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* Decapsulate sync
|
|
264
|
-
* @param privateKey {Uint8Array} Private key buffer
|
|
265
|
-
* @param peerPublicKey{Uint8Array} Peer public key buffer
|
|
266
|
-
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
267
|
-
* @returns {Uint8Array} Buffer data
|
|
268
|
-
*/
|
|
269
|
-
public decapsulateSync(privateKey: Uint8Array, peerPublicKey: Uint8Array, ciphertext: Uint8Array): Uint8Array {
|
|
270
|
-
const s = QuarkDashKeyExchange.deserializePoly(privateKey);
|
|
271
|
-
const u = QuarkDashKeyExchange.deserializePoly(ciphertext);
|
|
272
|
-
const w = QuarkDashKeyExchange.multiply(u, s);
|
|
273
|
-
const rawSecret = QuarkDashKeyExchange.roundToBits(w);
|
|
274
|
-
return this.hashSharedSecret(rawSecret, peerPublicKey, ciphertext);
|
|
318
|
+
let [old_r, r] = [a, m];
|
|
319
|
+
let [old_s, s] = [1n, 0n];
|
|
320
|
+
while (r !== 0n) {
|
|
321
|
+
const q = old_r / r;
|
|
322
|
+
[old_r, r] = [r, old_r - q * r];
|
|
323
|
+
[old_s, s] = [s, old_s - q * s];
|
|
324
|
+
}
|
|
325
|
+
return (old_s % m + m) % m;
|
|
275
326
|
}
|
|
276
327
|
|
|
277
328
|
/**
|
|
@@ -282,7 +333,7 @@ export class QuarkDashKeyExchange implements IKeyExchange {
|
|
|
282
333
|
* @returns {Uint8Array} Shared secret hash
|
|
283
334
|
* @private
|
|
284
335
|
*/
|
|
285
|
-
private hashSharedSecret(ss: Uint8Array, publicKey: Uint8Array, ciphertext: Uint8Array): Uint8Array {
|
|
336
|
+
private static hashSharedSecret(ss: Uint8Array, publicKey: Uint8Array, ciphertext: Uint8Array): Uint8Array {
|
|
286
337
|
const data = QuarkDashUtils.concatBytes(ss, publicKey, ciphertext);
|
|
287
338
|
return SHA256.hash(data, true) as Uint8Array;
|
|
288
339
|
}
|