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