quarkdash 1.0.8 → 1.1.0

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.
Files changed (114) hide show
  1. package/README.md +4 -2
  2. package/dist/cjs/cipher/chacha.js +154 -0
  3. package/dist/cjs/cipher/chacha.js.map +1 -0
  4. package/dist/cjs/cipher/cipher.js +34 -0
  5. package/dist/cjs/cipher/cipher.js.map +1 -0
  6. package/dist/cjs/cipher/gimli.js +143 -0
  7. package/dist/cjs/cipher/gimli.js.map +1 -0
  8. package/dist/cjs/core/kdf.js.map +1 -0
  9. package/dist/cjs/{mac.js → core/mac.js} +37 -1
  10. package/dist/cjs/core/mac.js.map +1 -0
  11. package/dist/cjs/{types.js.map → core/types.js.map} +1 -1
  12. package/dist/cjs/{utils.js → core/utils.js} +25 -8
  13. package/dist/cjs/core/utils.js.map +1 -0
  14. package/dist/cjs/core/wasm_loader.js +100 -0
  15. package/dist/cjs/core/wasm_loader.js.map +1 -0
  16. package/dist/cjs/crypto.js +30 -13
  17. package/dist/cjs/crypto.js.map +1 -1
  18. package/dist/cjs/{sha.js → hash/sha.js} +3 -2
  19. package/dist/cjs/hash/sha.js.map +1 -0
  20. package/dist/cjs/hash/shake.js +318 -0
  21. package/dist/cjs/hash/shake.js.map +1 -0
  22. package/dist/cjs/index.js +16 -11
  23. package/dist/cjs/index.js.map +1 -1
  24. package/dist/cjs/{ringlwe.js → session/baselwe.js} +186 -177
  25. package/dist/cjs/session/baselwe.js.map +1 -0
  26. package/dist/cjs/session/ringlwe.js +19 -0
  27. package/dist/cjs/session/ringlwe.js.map +1 -0
  28. package/dist/cjs/session/rringlwe.js +42 -0
  29. package/dist/cjs/session/rringlwe.js.map +1 -0
  30. package/dist/esm/cipher/chacha.js +150 -0
  31. package/dist/esm/cipher/chacha.js.map +1 -0
  32. package/dist/esm/cipher/cipher.js +30 -0
  33. package/dist/esm/cipher/cipher.js.map +1 -0
  34. package/dist/esm/cipher/gimli.js +139 -0
  35. package/dist/esm/cipher/gimli.js.map +1 -0
  36. package/dist/esm/core/kdf.js.map +1 -0
  37. package/dist/esm/core/mac.js +87 -0
  38. package/dist/esm/core/mac.js.map +1 -0
  39. package/dist/esm/{types.js.map → core/types.js.map} +1 -1
  40. package/dist/esm/{utils.js → core/utils.js} +24 -4
  41. package/dist/esm/core/utils.js.map +1 -0
  42. package/dist/esm/core/wasm_loader.js +64 -0
  43. package/dist/esm/core/wasm_loader.js.map +1 -0
  44. package/dist/esm/crypto.js +30 -13
  45. package/dist/esm/crypto.js.map +1 -1
  46. package/dist/esm/{sha.js → hash/sha.js} +3 -2
  47. package/dist/esm/hash/sha.js.map +1 -0
  48. package/dist/esm/hash/shake.js +311 -0
  49. package/dist/esm/hash/shake.js.map +1 -0
  50. package/dist/esm/index.js +16 -11
  51. package/dist/esm/index.js.map +1 -1
  52. package/dist/esm/{ringlwe.js → session/baselwe.js} +184 -175
  53. package/dist/esm/session/baselwe.js.map +1 -0
  54. package/dist/esm/session/ringlwe.js +15 -0
  55. package/dist/esm/session/ringlwe.js.map +1 -0
  56. package/dist/esm/session/rringlwe.js +38 -0
  57. package/dist/esm/session/rringlwe.js.map +1 -0
  58. package/dist/shake.wasm +0 -0
  59. package/dist/types/cipher/chacha.d.ts +67 -0
  60. package/dist/types/cipher/cipher.d.ts +31 -0
  61. package/dist/types/cipher/gimli.d.ts +64 -0
  62. package/dist/types/{kdf.d.ts → core/kdf.d.ts} +3 -2
  63. package/dist/types/{mac.d.ts → core/mac.d.ts} +21 -2
  64. package/dist/types/{types.d.ts → core/types.d.ts} +5 -2
  65. package/dist/types/{utils.d.ts → core/utils.d.ts} +13 -0
  66. package/dist/types/core/wasm_loader.d.ts +5 -0
  67. package/dist/types/crypto.d.ts +8 -4
  68. package/dist/types/{sha.d.ts → hash/sha.d.ts} +3 -2
  69. package/dist/types/hash/shake.d.ts +85 -0
  70. package/dist/types/index.d.ts +15 -10
  71. package/dist/types/{ringlwe.d.ts → session/baselwe.d.ts} +49 -59
  72. package/dist/types/session/ringlwe.d.ts +21 -0
  73. package/dist/types/session/rringlwe.d.ts +27 -0
  74. package/package.json +12 -4
  75. package/wasm/shake.wasm +0 -0
  76. package/dist/cjs/cipher.js +0 -265
  77. package/dist/cjs/cipher.js.map +0 -1
  78. package/dist/cjs/kdf.js.map +0 -1
  79. package/dist/cjs/mac.js.map +0 -1
  80. package/dist/cjs/ringlwe.js.map +0 -1
  81. package/dist/cjs/sha.js.map +0 -1
  82. package/dist/cjs/shake.js +0 -159
  83. package/dist/cjs/shake.js.map +0 -1
  84. package/dist/cjs/utils.js.map +0 -1
  85. package/dist/esm/cipher.js +0 -259
  86. package/dist/esm/cipher.js.map +0 -1
  87. package/dist/esm/kdf.js.map +0 -1
  88. package/dist/esm/mac.js +0 -51
  89. package/dist/esm/mac.js.map +0 -1
  90. package/dist/esm/ringlwe.js.map +0 -1
  91. package/dist/esm/sha.js.map +0 -1
  92. package/dist/esm/shake.js +0 -155
  93. package/dist/esm/shake.js.map +0 -1
  94. package/dist/esm/utils.js.map +0 -1
  95. package/dist/types/cipher.d.ts +0 -153
  96. package/dist/types/shake.d.ts +0 -53
  97. package/docutil.ts +0 -84
  98. package/img/cover.png +0 -0
  99. package/src/cipher.ts +0 -260
  100. package/src/crypto.ts +0 -306
  101. package/src/index.ts +0 -27
  102. package/src/kdf.ts +0 -64
  103. package/src/mac.ts +0 -65
  104. package/src/ringlwe.ts +0 -340
  105. package/src/sha.ts +0 -265
  106. package/src/shake.ts +0 -163
  107. package/src/types.ts +0 -75
  108. package/src/utils.ts +0 -290
  109. package/tsconfig.cjs.json +0 -7
  110. package/tsconfig.json +0 -18
  111. /package/dist/cjs/{kdf.js → core/kdf.js} +0 -0
  112. /package/dist/cjs/{types.js → core/types.js} +0 -0
  113. /package/dist/esm/{kdf.js → core/kdf.js} +0 -0
  114. /package/dist/esm/{types.js → core/types.js} +0 -0
@@ -1,13 +1,29 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.QuarkDashKeyExchange = void 0;
5
- const utils_1 = require("./utils");
6
- const sha_1 = require("./sha");
3
+ exports.BaseRingLWE = void 0;
7
4
  /**
8
- * Ring-LWE based key exchange implementation
5
+ * QuarkDash Basic LWE Utils Implementation
6
+ *
7
+ * @git https://github.com/devsdaddy/quarkdash
8
+ * @version 1.1.0
9
+ * @author Elijah Rastorguev
10
+ * @build 1003
11
+ * @website https://dev.to/devsdaddy
12
+ * @updated 13.04.2026
9
13
  */
10
- class QuarkDashKeyExchange {
14
+ const utils_1 = require("../core/utils");
15
+ const sha_1 = require("../hash/sha");
16
+ /**
17
+ * Base Ring-LWE Function
18
+ */
19
+ class BaseRingLWE {
20
+ constructor() {
21
+ // Constants for override
22
+ this.N = 256;
23
+ this.Q = 7681n;
24
+ this.ROOT = 7n;
25
+ this.INV_N = this.modInverse(BigInt(this.N), this.Q);
26
+ }
11
27
  /**
12
28
  * Generate crypto key pair async
13
29
  * @returns {ICryptoKeyPair} Crypto key pair
@@ -21,16 +37,16 @@ class QuarkDashKeyExchange {
21
37
  * @returns {ICryptoKeyPair} Crypto key pair
22
38
  */
23
39
  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;
40
+ const a = this.uniformPoly();
41
+ const s = this.smallPoly();
42
+ const e = this.errorPoly();
43
+ const as = this.multiply(a, s);
44
+ const b = new Array(this.N);
45
+ for (let i = 0; i < this.N; i++) {
46
+ b[i] = (as[i] + e[i]) % this.Q;
31
47
  }
32
- const publicKey = utils_1.QuarkDashUtils.concatBytes(_a.serializePoly(a), _a.serializePoly(b));
33
- const privateKey = _a.serializePoly(s);
48
+ const publicKey = utils_1.QuarkDashUtils.concatBytes(this.serializePoly(a), this.serializePoly(b));
49
+ const privateKey = this.serializePoly(s);
34
50
  return { publicKey, privateKey };
35
51
  }
36
52
  /**
@@ -48,20 +64,20 @@ class QuarkDashKeyExchange {
48
64
  * @returns {ICryptoEncapsulated} Encapsulated data
49
65
  */
50
66
  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;
67
+ const aBytes = publicKey.slice(0, this.N * 2);
68
+ const bBytes = publicKey.slice(this.N * 2);
69
+ const a = this.deserializePoly(aBytes);
70
+ const b = this.deserializePoly(bBytes);
71
+ const sp = this.smallPoly();
72
+ const ep = this.errorPoly();
73
+ const uArr = this.multiply(a, sp);
74
+ for (let i = 0; i < this.N; i++) {
75
+ uArr[i] = (uArr[i] + ep[i]) % this.Q;
60
76
  }
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);
77
+ const w = this.multiply(b, sp);
78
+ const rawSecret = this.roundToBits(w);
79
+ const ciphertext = this.serializePoly(uArr);
80
+ const sharedSecret = this.hashSharedSecretSync(rawSecret, publicKey, ciphertext);
65
81
  return { ciphertext, sharedSecret };
66
82
  }
67
83
  /**
@@ -83,101 +99,114 @@ class QuarkDashKeyExchange {
83
99
  * @returns {Uint8Array} Buffer data
84
100
  */
85
101
  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);
102
+ const s = this.deserializePoly(privateKey);
103
+ const u = this.deserializePoly(ciphertext);
104
+ const w = this.multiply(u, s);
105
+ const rawSecret = this.roundToBits(w);
106
+ return this.hashSharedSecretSync(rawSecret, peerPublicKey, ciphertext);
91
107
  }
92
108
  /**
93
- * Get small polygon
94
- * @returns {bigint[]} Small polygon
109
+ * Modular inverse
110
+ * @param a {bigint}
111
+ * @param m {bigint}
112
+ * @returns {bigint} Inversion result
95
113
  * @private
96
114
  */
97
- static smallPoly() {
98
- const poly = new Array(this.N);
99
- const bytesNeeded = Math.ceil(this.N * 2 / 8);
100
- const randomBytes = utils_1.QuarkDashUtils.randomBytes(bytesNeeded);
101
- for (let i = 0; i < this.N; i++) {
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)
106
- poly[i] = -1n;
107
- else if (val === 1)
108
- poly[i] = 0n;
109
- else if (val === 2)
110
- poly[i] = 1n;
111
- else {
112
- poly[i] = 1n;
113
- }
115
+ modInverse(a, m) {
116
+ let [old_r, r] = [a, m];
117
+ let [old_s, s] = [1n, 0n];
118
+ while (r !== 0n) {
119
+ const q = old_r / r;
120
+ [old_r, r] = [r, old_r - q * r];
121
+ [old_s, s] = [s, old_s - q * s];
114
122
  }
115
- return poly;
123
+ return (old_s % m + m) % m;
116
124
  }
117
125
  /**
118
- * Uniform polygon
119
- * @returns {bigint[]}
126
+ * Modular exponentiation
127
+ * @param base {bigint} Base
128
+ * @param exp {bigint} exponential
129
+ * @param mod {bigint} module
130
+ * @returns {bigint} Result of modular exponentiation
120
131
  * @private
121
132
  */
122
- static uniformPoly() {
123
- const poly = new Array(this.N);
124
- const bytes = utils_1.QuarkDashUtils.randomBytes(this.N * 2);
133
+ powMod(base, exp, mod) {
134
+ let result = 1n;
135
+ let b = base % mod;
136
+ let e = exp;
137
+ while (e > 0n) {
138
+ if (e & 1n)
139
+ result = (result * b) % mod;
140
+ b = (b * b) % mod;
141
+ e >>= 1n;
142
+ }
143
+ return result;
144
+ }
145
+ /**
146
+ * Round to bits
147
+ * @param poly {bigint[]} Polygon
148
+ * @returns {Uint8Array} rounded buffer
149
+ * @private
150
+ */
151
+ roundToBits(poly) {
152
+ const result = new Uint8Array(32);
125
153
  for (let i = 0; i < this.N; i++) {
126
- const val = (bytes[2 * i] | (bytes[2 * i + 1] << 8)) % Number(this.Q);
127
- poly[i] = BigInt(val);
154
+ const bit = (Number(poly[i]) > Number(this.Q) / 2) ? 1 : 0;
155
+ if (bit)
156
+ result[i >> 3] |= (1 << (i & 7));
128
157
  }
129
- return poly;
158
+ return result;
130
159
  }
131
160
  /**
132
- * Error polygon
161
+ * Deserialize Polygon
162
+ * @param bytes {Uint8Array} Polygon buffer
163
+ * @returns {bigint[]} Polygon
133
164
  * @private
134
165
  */
135
- static errorPoly() {
166
+ deserializePoly(bytes) {
136
167
  const poly = new Array(this.N);
137
- const SIGMA = 3.19;
138
168
  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)));
169
+ const val = bytes[2 * i] | (bytes[2 * i + 1] << 8);
170
+ poly[i] = BigInt(val);
148
171
  }
149
172
  return poly;
150
173
  }
151
174
  /**
152
- * NTT Operation
175
+ * Serialize polygon
153
176
  * @param poly {bigint[]} Polygon
177
+ * @returns {Uint8Array} Polygon buffer
154
178
  * @private
155
179
  */
156
- static ntt(poly) {
157
- const res = [...poly];
158
- let len = 2;
159
- while (len <= this.N) {
160
- const wlen = this.powMod(this.ROOT, BigInt(this.N / len), this.Q);
161
- for (let i = 0; i < this.N; i += len) {
162
- let w = 1n;
163
- for (let j = 0; j < len / 2; j++) {
164
- const u = res[i + j];
165
- const v = (res[i + j + len / 2] * w) % this.Q;
166
- res[i + j] = (u + v) % this.Q;
167
- res[i + j + len / 2] = (u - v + this.Q) % this.Q;
168
- w = (w * wlen) % this.Q;
169
- }
170
- }
171
- len <<= 1;
180
+ serializePoly(poly) {
181
+ const bytes = new Uint8Array(this.N * 2);
182
+ for (let i = 0; i < this.N; i++) {
183
+ const val = Number(poly[i]);
184
+ bytes[2 * i] = val & 0xFF;
185
+ bytes[2 * i + 1] = (val >> 8) & 0xFF;
172
186
  }
173
- return res;
187
+ return bytes;
188
+ }
189
+ /**
190
+ * Multiply
191
+ * @param a {bigint[]} Polygon
192
+ * @param b {bigint[]} Polygon
193
+ * @returns {bigint[]} Multiplied polygons
194
+ */
195
+ multiply(a, b) {
196
+ const aNTT = this.ntt(a);
197
+ const bNTT = this.ntt(b);
198
+ const prod = new Array(this.N);
199
+ for (let i = 0; i < this.N; i++) {
200
+ prod[i] = (aNTT[i] * bNTT[i]) % this.Q;
201
+ }
202
+ return this.invNTT(prod);
174
203
  }
175
204
  /**
176
205
  * Inverse NTT
177
206
  * @param poly {bigint[]} Polygon
178
207
  * @private
179
208
  */
180
- static invNTT(poly) {
209
+ invNTT(poly) {
181
210
  const res = [...poly];
182
211
  let len = this.N;
183
212
  while (len >= 2) {
@@ -200,119 +229,99 @@ class QuarkDashKeyExchange {
200
229
  return res;
201
230
  }
202
231
  /**
203
- * Multiply
204
- * @param a {bigint[]} Polygon
205
- * @param b {bigint[]} Polygon
206
- * @returns {bigint[]} Multiplied polygons
207
- */
208
- static multiply(a, b) {
209
- const aNTT = this.ntt(a);
210
- const bNTT = this.ntt(b);
211
- const prod = new Array(this.N);
212
- for (let i = 0; i < this.N; i++) {
213
- prod[i] = (aNTT[i] * bNTT[i]) % this.Q;
214
- }
215
- return this.invNTT(prod);
216
- }
217
- /**
218
- * Serialize polygon
232
+ * NTT Operation
219
233
  * @param poly {bigint[]} Polygon
220
- * @returns {Uint8Array} Polygon buffer
221
234
  * @private
222
235
  */
223
- static serializePoly(poly) {
224
- const bytes = new Uint8Array(this.N * 2);
225
- for (let i = 0; i < this.N; i++) {
226
- const val = Number(poly[i]);
227
- bytes[2 * i] = val & 0xFF;
228
- bytes[2 * i + 1] = (val >> 8) & 0xFF;
236
+ ntt(poly) {
237
+ const res = [...poly];
238
+ let len = 2;
239
+ while (len <= this.N) {
240
+ const wlen = this.powMod(this.ROOT, BigInt(this.N / len), this.Q);
241
+ for (let i = 0; i < this.N; i += len) {
242
+ let w = 1n;
243
+ for (let j = 0; j < len / 2; j++) {
244
+ const u = res[i + j];
245
+ const v = (res[i + j + len / 2] * w) % this.Q;
246
+ res[i + j] = (u + v) % this.Q;
247
+ res[i + j + len / 2] = BigInt((u - v + this.Q) % this.Q);
248
+ w = (w * wlen) % this.Q;
249
+ }
250
+ }
251
+ len <<= 1;
229
252
  }
230
- return bytes;
253
+ return res;
231
254
  }
232
255
  /**
233
- * Deserialize Polygon
234
- * @param bytes {Uint8Array} Polygon buffer
235
- * @returns {bigint[]} Polygon
256
+ * Error polygon
236
257
  * @private
237
258
  */
238
- static deserializePoly(bytes) {
259
+ errorPoly() {
239
260
  const poly = new Array(this.N);
261
+ const SIGMA = 3.19;
240
262
  for (let i = 0; i < this.N; i++) {
241
- const val = bytes[2 * i] | (bytes[2 * i + 1] << 8);
242
- poly[i] = BigInt(val);
263
+ let sum = 0;
264
+ const randBytes = utils_1.QuarkDashUtils.randomBytes(12);
265
+ for (let j = 0; j < 12; j++) {
266
+ sum += randBytes[j];
267
+ }
268
+ const centered = (sum / 255) - 6;
269
+ const error = Math.floor(centered * SIGMA);
270
+ poly[i] = BigInt(Math.max(-Number(this.Q), Math.min(Number(this.Q) - 1, error)));
243
271
  }
244
272
  return poly;
245
273
  }
246
274
  /**
247
- * Round to bits
248
- * @param poly {bigint[]} Polygon
249
- * @returns {Uint8Array} rounded buffer
275
+ * Uniform polygon
276
+ * @returns {bigint[]}
250
277
  * @private
251
278
  */
252
- static roundToBits(poly) {
253
- const result = new Uint8Array(32);
279
+ uniformPoly() {
280
+ const poly = new Array(this.N);
281
+ const bytes = utils_1.QuarkDashUtils.randomBytes(this.N * 2);
254
282
  for (let i = 0; i < this.N; i++) {
255
- const bit = (Number(poly[i]) > Number(this.Q) / 2) ? 1 : 0;
256
- if (bit)
257
- result[i >> 3] |= (1 << (i & 7));
258
- }
259
- return result;
260
- }
261
- /**
262
- * Modular exponentiation
263
- * @param base {bigint} Base
264
- * @param exp {bigint} exponential
265
- * @param mod {bigint} module
266
- * @returns {bigint} Result of modular exponentiation
267
- * @private
268
- */
269
- static powMod(base, exp, mod) {
270
- let result = 1n;
271
- let b = base % mod;
272
- let e = exp;
273
- while (e > 0n) {
274
- if (e & 1n)
275
- result = (result * b) % mod;
276
- b = (b * b) % mod;
277
- e >>= 1n;
283
+ const val = (bytes[2 * i] | (bytes[2 * i + 1] << 8)) % Number(this.Q);
284
+ poly[i] = BigInt(val);
278
285
  }
279
- return result;
286
+ return poly;
280
287
  }
281
288
  /**
282
- * Modular inverse
283
- * @param a {bigint}
284
- * @param m {bigint}
285
- * @returns {bigint} Inversion result
289
+ * Get small polygon
290
+ * @returns {bigint[]} Small polygon
286
291
  * @private
287
292
  */
288
- static modInverse(a, m) {
289
- let [old_r, r] = [a, m];
290
- let [old_s, s] = [1n, 0n];
291
- while (r !== 0n) {
292
- const q = old_r / r;
293
- [old_r, r] = [r, old_r - q * r];
294
- [old_s, s] = [s, old_s - q * s];
293
+ smallPoly() {
294
+ const poly = new Array(this.N);
295
+ const bytesNeeded = Math.ceil(this.N * 2 / 8);
296
+ const randomBytes = utils_1.QuarkDashUtils.randomBytes(bytesNeeded);
297
+ for (let i = 0; i < this.N; i++) {
298
+ const byteIdx = Math.floor(i * 2 / 8);
299
+ const bitShift = (i * 2) % 8;
300
+ const val = (randomBytes[byteIdx] >> bitShift) & 0x03; // 0..3
301
+ if (val === 0)
302
+ poly[i] = -1n;
303
+ else if (val === 1)
304
+ poly[i] = 0n;
305
+ else if (val === 2)
306
+ poly[i] = 1n;
307
+ else {
308
+ poly[i] = 1n;
309
+ }
295
310
  }
296
- return (old_s % m + m) % m;
311
+ return poly;
297
312
  }
298
313
  /**
299
314
  * Hash shared secret
300
- * @param ss {Uint8Array} Shared secret buffer
301
- * @param publicKey {Uint8Array} Public key buffer
302
- * @param ciphertext {Uint8Array} Cipher text buffer
303
- * @returns {Uint8Array} Shared secret hash
304
- * @private
315
+ * @param ss {Uint8Array} Shared Secret
316
+ * @param publicKey {Uint8Array} Public Key
317
+ * @param ciphertext {Uint8Array} Cipher text
318
+ * @returns {Uint8Array} Hash buffer
319
+ * @protected
305
320
  */
306
- static hashSharedSecret(ss, publicKey, ciphertext) {
321
+ hashSharedSecretSync(ss, publicKey, ciphertext) {
307
322
  const data = utils_1.QuarkDashUtils.concatBytes(ss, publicKey, ciphertext);
308
323
  return sha_1.SHA256.hash(data, true);
309
324
  }
310
325
  }
311
- exports.QuarkDashKeyExchange = QuarkDashKeyExchange;
312
- _a = QuarkDashKeyExchange;
313
- // Ring-LWE Constants
314
- QuarkDashKeyExchange.N = 256;
315
- QuarkDashKeyExchange.Q = 7681n;
316
- QuarkDashKeyExchange.ROOT = 7n;
317
- QuarkDashKeyExchange.INV_N = _a.modInverse(BigInt(_a.N), _a.Q);
318
- //# sourceMappingURL=ringlwe.js.map
326
+ exports.BaseRingLWE = BaseRingLWE;
327
+ //# sourceMappingURL=baselwe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baselwe.js","sourceRoot":"","sources":["../../../src/session/baselwe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuarkDashRLWE = void 0;
4
+ const baselwe_1 = require("./baselwe");
5
+ /**
6
+ * Ring-LWE based key exchange implementation
7
+ */
8
+ class QuarkDashRLWE extends baselwe_1.BaseRingLWE {
9
+ constructor() {
10
+ super(...arguments);
11
+ // Ring-LWE Constants
12
+ this.N = 256;
13
+ this.Q = 7681n;
14
+ this.ROOT = 7n;
15
+ this.INV_N = this.modInverse(BigInt(this.N), this.Q);
16
+ }
17
+ }
18
+ exports.QuarkDashRLWE = QuarkDashRLWE;
19
+ //# sourceMappingURL=ringlwe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ringlwe.js","sourceRoot":"","sources":["../../../src/session/ringlwe.ts"],"names":[],"mappings":";;;AAcA,uCAAsC;AAEtC;;GAEG;AACH,MAAa,aAAc,SAAQ,qBAAW;IAA9C;;QACI,qBAAqB;QACO,MAAC,GAAG,GAAG,CAAC;QACR,MAAC,GAAG,KAAK,CAAC;QACV,SAAI,GAAG,EAAE,CAAC;QACV,UAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;CAAA;AAND,sCAMC"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuarkDashRRLWE = void 0;
4
+ const utils_1 = require("../core/utils");
5
+ const baselwe_1 = require("./baselwe");
6
+ /**
7
+ * QuarkDash Radical Ring-LWE Implementation
8
+ */
9
+ class QuarkDashRRLWE extends baselwe_1.BaseRingLWE {
10
+ constructor() {
11
+ super(...arguments);
12
+ // General Constants
13
+ this.N = 256;
14
+ this.Q = 12289n;
15
+ this.ROOT = 7n;
16
+ this.INV_N = this.modInverse(BigInt(this.N), this.Q);
17
+ }
18
+ /**
19
+ * Override small polynome for Radical Ring-lWE
20
+ * @returns {bigint[]} Small polynome
21
+ * @protected
22
+ */
23
+ smallPoly() {
24
+ const poly = new Array(this.N);
25
+ const bytesNeeded = Math.ceil(this.N * 2 / 8);
26
+ const randomBytes = utils_1.QuarkDashUtils.randomBytes(bytesNeeded);
27
+ for (let i = 0; i < this.N; i++) {
28
+ const byteIdx = Math.floor(i * 2 / 8);
29
+ const bitShift = (i * 2) % 8;
30
+ const val = (randomBytes[byteIdx] >> bitShift) & 0x03;
31
+ if (val === 0)
32
+ poly[i] = -1n;
33
+ else if (val === 1)
34
+ poly[i] = 0n;
35
+ else
36
+ poly[i] = 1n;
37
+ }
38
+ return poly;
39
+ }
40
+ }
41
+ exports.QuarkDashRRLWE = QuarkDashRRLWE;
42
+ //# sourceMappingURL=rringlwe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rringlwe.js","sourceRoot":"","sources":["../../../src/session/rringlwe.ts"],"names":[],"mappings":";;;AAYA,yCAA6C;AAE7C,uCAAsC;AAEtC;;GAEG;AACH,MAAa,cAAe,SAAQ,qBAAW;IAA/C;;QACI,oBAAoB;QACQ,MAAC,GAAG,GAAG,CAAC;QACR,MAAC,GAAG,MAAM,CAAC;QACX,SAAI,GAAG,EAAE,CAAC;QACV,UAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAqBhF,CAAC;IAnBG;;;;OAIG;IACgB,SAAS;QACxB,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,sBAAc,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;YACtD,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;;gBAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AA1BD,wCA0BC"}