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.
@@ -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 r = Math.random();
20
- if (r < 0.33)
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 (r < 0.66)
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, b = base % mod, e = exp;
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], [old_s, s] = [1n, 0n];
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
  }
@@ -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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"}
@@ -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 r = Math.random();
17
- if (r < 0.33)
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 (r < 0.66)
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, b = base % mod, e = exp;
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], [old_s, s] = [1n, 0n];
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
  }
@@ -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":";AAYA,OAAO,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AACvC,OAAO,EAAC,MAAM,EAAC,MAAM,OAAO,CAAC;AAE7B;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAO7B;;;;OAIG;IACI,KAAK,CAAC,eAAe;QACxB,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;IACtC,CAAC;IAED;;;OAGG;IACI,mBAAmB;QACtB,MAAM,CAAC,GAAG,EAAoB,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,EAAoB,CAAC,SAAS,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,EAAoB,CAAC,SAAS,EAAE,CAAC;QAC3C,MAAM,EAAE,GAAG,EAAoB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,EAAoB,CAAC,CAAC,CAAC,CAAC;QACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,CACxC,EAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,EACrC,EAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,CACxC,CAAC;QACF,MAAM,UAAU,GAAG,EAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACzD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;IACrC,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,WAAW,CAAC,SAAqB;QAC1C,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,SAAqB;QACxC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,EAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,EAAoB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,GAAG,EAAoB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,EAAoB,CAAC,SAAS,EAAE,CAAC;QAC5C,MAAM,EAAE,GAAG,EAAoB,CAAC,SAAS,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,EAAoB,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,CAAC,GAAG,EAAoB,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,EAAoB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,EAAoB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,EAAoB,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC7F,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IACxC,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,WAAW,CAAC,UAAsB,EAAE,aAAyB,EAAE,UAAsB;QAC9F,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;OAMG;IACI,eAAe,CAAC,UAAsB,EAAE,aAAyB,EAAE,UAAsB;QAC5F,MAAM,CAAC,GAAG,EAAoB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,EAAoB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,EAAoB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,EAAoB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,EAAoB,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACvF,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,SAAS;QACpB,MAAM,IAAI,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO;YAC9D,IAAI,GAAG,KAAK,CAAC;gBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;iBACxB,IAAI,GAAG,KAAK,CAAC;gBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;iBAC5B,IAAI,GAAG,KAAK,CAAC;gBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;iBAC5B,CAAC;gBACF,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACjB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,WAAW;QACtB,MAAM,IAAI,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,SAAS;QACpB,MAAM,IAAI,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1B,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;YACD,qCAAqC;YACrC,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,GAAG,CAAC,IAAc;QAC7B,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACrB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;oBAC9C,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;oBAC9B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;oBACjD,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBAC5B,CAAC;YACL,CAAC;YACD,GAAG,KAAK,CAAC,CAAC;QACd,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,MAAM,CAAC,IAAc;QAChC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;QACjB,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACrB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;oBAC/B,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;oBAC9B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;oBACvD,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBAC5B,CAAC;YACL,CAAC;YACD,GAAG,KAAK,CAAC,CAAC;QACd,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,QAAQ,CAAC,CAAW,EAAE,CAAW;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,aAAa,CAAC,IAAc;QACvC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;YAC1B,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QACzC,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,eAAe,CAAC,KAAiB;QAC5C,MAAM,IAAI,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,WAAW,CAAC,IAAc;QACrC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,GAAG;gBAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,MAAM,CAAC,IAAY,EAAE,GAAW,EAAE,GAAW;QACxD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,CAAC;QACZ,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,GAAG,EAAE;gBAAE,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YACxC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YAClB,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACK,MAAM,CAAC,UAAU,CAAC,CAAS,EAAE,CAAS;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1B,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YACpB,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,gBAAgB,CAAC,EAAc,EAAE,SAAqB,EAAE,UAAsB;QACzF,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACnE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAe,CAAC;IACjD,CAAC;;;AA/TD,qBAAqB;AACG,sBAAC,GAAG,GAAG,AAAN,CAAO;AACR,sBAAC,GAAG,KAAK,AAAR,CAAS;AACV,yBAAI,GAAG,EAAE,AAAL,CAAM;AACV,0BAAK,GAAG,EAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAI,CAAC,CAAC,CAAC,EAAE,EAAI,CAAC,CAAC,CAAC,AAA1C,CAA2C"}
@@ -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 1000
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.7",
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 1000
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
- for (let i=0;i<this.N;i++) {
33
- const r = Math.random();
34
- if (r<0.33) poly[i] = -1n;
35
- else if (r<0.66) poly[i] = 0n;
36
- else poly[i] = 1n;
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++) prod[i]=(aNTT[i]*bNTT[i])%this.Q;
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=1n, b=base%mod, e=exp;
177
- while(e>0n){ if(e&1n) result=(result*b)%mod; b=(b*b)%mod; e>>=1n; }
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], [old_s,s]=[1n,0n];
190
- while(r!==0n){ const q=old_r/r; [old_r,r]=[r,old_r-q*r]; [old_s,s]=[s,old_s-q*s]; }
191
- return (old_s%m+m)%m;
192
- }
193
-
194
- /**
195
- * Generate crypto key pair async
196
- * @returns {ICryptoKeyPair} Crypto key pair
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
  }