quarkdash 1.0.7 → 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 (113) 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} +246 -203
  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} +244 -201
  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} +87 -91
  72. package/dist/types/session/ringlwe.d.ts +21 -0
  73. package/dist/types/session/rringlwe.d.ts +27 -0
  74. package/package.json +13 -3
  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/img/cover.png +0 -0
  98. package/src/cipher.ts +0 -260
  99. package/src/crypto.ts +0 -306
  100. package/src/index.ts +0 -27
  101. package/src/kdf.ts +0 -64
  102. package/src/mac.ts +0 -65
  103. package/src/ringlwe.ts +0 -289
  104. package/src/sha.ts +0 -265
  105. package/src/shake.ts +0 -163
  106. package/src/types.ts +0 -75
  107. package/src/utils.ts +0 -290
  108. package/tsconfig.cjs.json +0 -7
  109. package/tsconfig.json +0 -18
  110. /package/dist/cjs/{kdf.js → core/kdf.js} +0 -0
  111. /package/dist/cjs/{types.js → core/types.js} +0 -0
  112. /package/dist/esm/{kdf.js → core/kdf.js} +0 -0
  113. /package/dist/esm/{types.js → core/types.js} +0 -0
@@ -1,137 +1,146 @@
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
- * Get small polygon
13
- * @returns {bigint[]} Small polygon
14
- * @private
28
+ * Generate crypto key pair async
29
+ * @returns {ICryptoKeyPair} Crypto key pair
30
+ * TODO: GPU Calculations
15
31
  */
16
- static smallPoly() {
17
- const poly = new Array(this.N);
18
- for (let i = 0; i < this.N; i++) {
19
- const r = Math.random();
20
- if (r < 0.33)
21
- poly[i] = -1n;
22
- else if (r < 0.66)
23
- poly[i] = 0n;
24
- else
25
- poly[i] = 1n;
26
- }
27
- return poly;
32
+ async generateKeyPair() {
33
+ return this.generateKeyPairSync();
28
34
  }
29
35
  /**
30
- * Uniform polygon
31
- * @returns {bigint[]}
32
- * @private
36
+ * Generate crypto key pair sync
37
+ * @returns {ICryptoKeyPair} Crypto key pair
33
38
  */
34
- static uniformPoly() {
35
- const poly = new Array(this.N);
36
- const bytes = utils_1.QuarkDashUtils.randomBytes(this.N * 2);
39
+ generateKeyPairSync() {
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);
37
45
  for (let i = 0; i < this.N; i++) {
38
- const val = (bytes[2 * i] | (bytes[2 * i + 1] << 8)) % Number(this.Q);
39
- poly[i] = BigInt(val);
46
+ b[i] = (as[i] + e[i]) % this.Q;
40
47
  }
41
- return poly;
48
+ const publicKey = utils_1.QuarkDashUtils.concatBytes(this.serializePoly(a), this.serializePoly(b));
49
+ const privateKey = this.serializePoly(s);
50
+ return { publicKey, privateKey };
42
51
  }
43
52
  /**
44
- * NTT Operation
45
- * @param poly {bigint[]} Polygon
46
- * @private
53
+ * Encapsulate async
54
+ * @param publicKey {Uint8Array} Public key buffer
55
+ * @returns {Promise<ICryptoEncapsulated>} Encapsulated data
56
+ * TODO: GPU Calculations
47
57
  */
48
- static ntt(poly) {
49
- const res = [...poly];
50
- let len = 2;
51
- while (len <= this.N) {
52
- const wlen = this.powMod(this.ROOT, BigInt(this.N / len), this.Q);
53
- for (let i = 0; i < this.N; i += len) {
54
- let w = 1n;
55
- for (let j = 0; j < len / 2; j++) {
56
- const u = res[i + j];
57
- const v = (res[i + j + len / 2] * w) % this.Q;
58
- res[i + j] = (u + v) % this.Q;
59
- res[i + j + len / 2] = (u - v + this.Q) % this.Q;
60
- w = (w * wlen) % this.Q;
61
- }
62
- }
63
- len <<= 1;
64
- }
65
- return res;
58
+ async encapsulate(publicKey) {
59
+ return this.encapsulateSync(publicKey);
66
60
  }
67
61
  /**
68
- * Inverse NTT
69
- * @param poly {bigint[]} Polygon
70
- * @private
62
+ * Encapsulate sync
63
+ * @param publicKey {Uint8Array} Public key buffer
64
+ * @returns {ICryptoEncapsulated} Encapsulated data
71
65
  */
72
- static invNTT(poly) {
73
- const res = [...poly];
74
- let len = this.N;
75
- while (len >= 2) {
76
- const wlen = this.powMod(this.ROOT, BigInt(this.N / len), this.Q);
77
- for (let i = 0; i < this.N; i += len) {
78
- let w = 1n;
79
- for (let j = 0; j < len / 2; j++) {
80
- const u = res[i + j];
81
- const v = res[i + j + len / 2];
82
- res[i + j] = (u + v) % this.Q;
83
- res[i + j + len / 2] = ((u - v + this.Q) * w) % this.Q;
84
- w = (w * wlen) % this.Q;
85
- }
86
- }
87
- len >>= 1;
66
+ encapsulateSync(publicKey) {
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;
88
76
  }
89
- for (let i = 0; i < this.N; i++)
90
- res[i] = (res[i] * this.INV_N) % this.Q;
91
- return res;
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);
81
+ return { ciphertext, sharedSecret };
92
82
  }
93
83
  /**
94
- * Multiply
95
- * @param a {bigint[]} Polygon
96
- * @param b {bigint[]} Polygon
97
- * @returns {bigint[]} Multiplied polygons
84
+ * Decapsulate async
85
+ * @param privateKey {Uint8Array} Private key buffer
86
+ * @param peerPublicKey {Uint8Array} Peer public key
87
+ * @param ciphertext {Uint8Array} Cipher text buffer
88
+ * @returns {Promise<Uint8Array>} Buffer data
89
+ * TODO: GPU Calculations
98
90
  */
99
- static multiply(a, b) {
100
- const aNTT = this.ntt(a);
101
- const bNTT = this.ntt(b);
102
- const prod = new Array(this.N);
103
- for (let i = 0; i < this.N; i++)
104
- prod[i] = (aNTT[i] * bNTT[i]) % this.Q;
105
- return this.invNTT(prod);
91
+ async decapsulate(privateKey, peerPublicKey, ciphertext) {
92
+ return this.decapsulateSync(privateKey, peerPublicKey, ciphertext);
106
93
  }
107
94
  /**
108
- * Serialize polygon
109
- * @param poly {bigint[]} Polygon
110
- * @returns {Uint8Array} Polygon buffer
95
+ * Decapsulate sync
96
+ * @param privateKey {Uint8Array} Private key buffer
97
+ * @param peerPublicKey{Uint8Array} Peer public key buffer
98
+ * @param ciphertext {Uint8Array} Cipher text buffer
99
+ * @returns {Uint8Array} Buffer data
100
+ */
101
+ decapsulateSync(privateKey, 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);
107
+ }
108
+ /**
109
+ * Modular inverse
110
+ * @param a {bigint}
111
+ * @param m {bigint}
112
+ * @returns {bigint} Inversion result
111
113
  * @private
112
114
  */
113
- static serializePoly(poly) {
114
- const bytes = new Uint8Array(this.N * 2);
115
- for (let i = 0; i < this.N; i++) {
116
- const val = Number(poly[i]);
117
- bytes[2 * i] = val & 0xFF;
118
- bytes[2 * i + 1] = (val >> 8) & 0xFF;
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];
119
122
  }
120
- return bytes;
123
+ return (old_s % m + m) % m;
121
124
  }
122
125
  /**
123
- * Deserialize Polygon
124
- * @param bytes {Uint8Array} Polygon buffer
125
- * @returns {bigint[]} Polygon
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
126
131
  * @private
127
132
  */
128
- static deserializePoly(bytes) {
129
- const poly = new Array(this.N);
130
- for (let i = 0; i < this.N; i++) {
131
- const val = bytes[2 * i] | (bytes[2 * i + 1] << 8);
132
- poly[i] = BigInt(val);
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;
133
142
  }
134
- return poly;
143
+ return result;
135
144
  }
136
145
  /**
137
146
  * Round to bits
@@ -139,7 +148,7 @@ class QuarkDashKeyExchange {
139
148
  * @returns {Uint8Array} rounded buffer
140
149
  * @private
141
150
  */
142
- static roundToBits(poly) {
151
+ roundToBits(poly) {
143
152
  const result = new Uint8Array(32);
144
153
  for (let i = 0; i < this.N; i++) {
145
154
  const bit = (Number(poly[i]) > Number(this.Q) / 2) ? 1 : 0;
@@ -149,136 +158,170 @@ class QuarkDashKeyExchange {
149
158
  return result;
150
159
  }
151
160
  /**
152
- * Modular exponentiation
153
- * @param base {bigint} Base
154
- * @param exp {bigint} exponential
155
- * @param mod {bigint} module
156
- * @returns {bigint} Result of modular exponentiation
161
+ * Deserialize Polygon
162
+ * @param bytes {Uint8Array} Polygon buffer
163
+ * @returns {bigint[]} Polygon
157
164
  * @private
158
165
  */
159
- static powMod(base, exp, mod) {
160
- let result = 1n, b = base % mod, e = exp;
161
- while (e > 0n) {
162
- if (e & 1n)
163
- result = (result * b) % mod;
164
- b = (b * b) % mod;
165
- e >>= 1n;
166
+ deserializePoly(bytes) {
167
+ const poly = new Array(this.N);
168
+ for (let i = 0; i < this.N; i++) {
169
+ const val = bytes[2 * i] | (bytes[2 * i + 1] << 8);
170
+ poly[i] = BigInt(val);
166
171
  }
167
- return result;
172
+ return poly;
168
173
  }
169
174
  /**
170
- * Modular inverse
171
- * @param a {bigint}
172
- * @param m {bigint}
173
- * @returns {bigint} Inversion result
175
+ * Serialize polygon
176
+ * @param poly {bigint[]} Polygon
177
+ * @returns {Uint8Array} Polygon buffer
174
178
  * @private
175
179
  */
176
- static modInverse(a, m) {
177
- let [old_r, r] = [a, m], [old_s, s] = [1n, 0n];
178
- while (r !== 0n) {
179
- const q = old_r / r;
180
- [old_r, r] = [r, old_r - q * r];
181
- [old_s, s] = [s, old_s - q * s];
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;
182
186
  }
183
- return (old_s % m + m) % m;
187
+ return bytes;
184
188
  }
185
189
  /**
186
- * Generate crypto key pair async
187
- * @returns {ICryptoKeyPair} Crypto key pair
188
- * TODO: GPU Calculations
190
+ * Multiply
191
+ * @param a {bigint[]} Polygon
192
+ * @param b {bigint[]} Polygon
193
+ * @returns {bigint[]} Multiplied polygons
189
194
  */
190
- async generateKeyPair() {
191
- return this.generateKeyPairSync();
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);
192
203
  }
193
204
  /**
194
- * Generate crypto key pair sync
195
- * @returns {ICryptoKeyPair} Crypto key pair
205
+ * Inverse NTT
206
+ * @param poly {bigint[]} Polygon
207
+ * @private
196
208
  */
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 };
209
+ invNTT(poly) {
210
+ const res = [...poly];
211
+ let len = this.N;
212
+ while (len >= 2) {
213
+ const wlen = this.powMod(this.ROOT, BigInt(this.N / len), this.Q);
214
+ for (let i = 0; i < this.N; i += len) {
215
+ let w = 1n;
216
+ for (let j = 0; j < len / 2; j++) {
217
+ const u = res[i + j];
218
+ const v = res[i + j + len / 2];
219
+ res[i + j] = (u + v) % this.Q;
220
+ res[i + j + len / 2] = ((u - v + this.Q) * w) % this.Q;
221
+ w = (w * wlen) % this.Q;
222
+ }
223
+ }
224
+ len >>= 1;
225
+ }
226
+ for (let i = 0; i < this.N; i++) {
227
+ res[i] = (res[i] * this.INV_N) % this.Q;
228
+ }
229
+ return res;
208
230
  }
209
231
  /**
210
- * Encapsulate async
211
- * @param publicKey {Uint8Array} Public key buffer
212
- * @returns {Promise<ICryptoEncapsulated>} Encapsulated data
213
- * TODO: GPU Calculations
232
+ * NTT Operation
233
+ * @param poly {bigint[]} Polygon
234
+ * @private
214
235
  */
215
- async encapsulate(publicKey) {
216
- return this.encapsulateSync(publicKey);
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;
252
+ }
253
+ return res;
217
254
  }
218
255
  /**
219
- * Encapsulate sync
220
- * @param publicKey {Uint8Array} Public key buffer
221
- * @returns {ICryptoEncapsulated} Encapsulated data
256
+ * Error polygon
257
+ * @private
222
258
  */
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 };
259
+ errorPoly() {
260
+ const poly = new Array(this.N);
261
+ const SIGMA = 3.19;
262
+ for (let i = 0; i < this.N; i++) {
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)));
271
+ }
272
+ return poly;
238
273
  }
239
274
  /**
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
275
+ * Uniform polygon
276
+ * @returns {bigint[]}
277
+ * @private
246
278
  */
247
- async decapsulate(privateKey, peerPublicKey, ciphertext) {
248
- return this.decapsulateSync(privateKey, peerPublicKey, ciphertext);
279
+ uniformPoly() {
280
+ const poly = new Array(this.N);
281
+ const bytes = utils_1.QuarkDashUtils.randomBytes(this.N * 2);
282
+ for (let i = 0; i < this.N; i++) {
283
+ const val = (bytes[2 * i] | (bytes[2 * i + 1] << 8)) % Number(this.Q);
284
+ poly[i] = BigInt(val);
285
+ }
286
+ return poly;
249
287
  }
250
288
  /**
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
289
+ * Get small polygon
290
+ * @returns {bigint[]} Small polygon
291
+ * @private
256
292
  */
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);
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
+ }
310
+ }
311
+ return poly;
263
312
  }
264
313
  /**
265
314
  * Hash shared secret
266
- * @param ss {Uint8Array} Shared secret buffer
267
- * @param publicKey {Uint8Array} Public key buffer
268
- * @param ciphertext {Uint8Array} Cipher text buffer
269
- * @returns {Uint8Array} Shared secret hash
270
- * @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
271
320
  */
272
- hashSharedSecret(ss, publicKey, ciphertext) {
321
+ hashSharedSecretSync(ss, publicKey, ciphertext) {
273
322
  const data = utils_1.QuarkDashUtils.concatBytes(ss, publicKey, ciphertext);
274
323
  return sha_1.SHA256.hash(data, true);
275
324
  }
276
325
  }
277
- exports.QuarkDashKeyExchange = QuarkDashKeyExchange;
278
- _a = QuarkDashKeyExchange;
279
- // Ring-LWE Constants
280
- QuarkDashKeyExchange.N = 256;
281
- QuarkDashKeyExchange.Q = 7681n;
282
- QuarkDashKeyExchange.ROOT = 7n;
283
- QuarkDashKeyExchange.INV_N = _a.modInverse(BigInt(_a.N), _a.Q);
284
- //# 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"}