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.
- package/README.md +4 -2
- package/dist/cjs/cipher/chacha.js +154 -0
- package/dist/cjs/cipher/chacha.js.map +1 -0
- package/dist/cjs/cipher/cipher.js +34 -0
- package/dist/cjs/cipher/cipher.js.map +1 -0
- package/dist/cjs/cipher/gimli.js +143 -0
- package/dist/cjs/cipher/gimli.js.map +1 -0
- package/dist/cjs/core/kdf.js.map +1 -0
- package/dist/cjs/{mac.js → core/mac.js} +37 -1
- package/dist/cjs/core/mac.js.map +1 -0
- package/dist/cjs/{types.js.map → core/types.js.map} +1 -1
- package/dist/cjs/{utils.js → core/utils.js} +25 -8
- package/dist/cjs/core/utils.js.map +1 -0
- package/dist/cjs/core/wasm_loader.js +100 -0
- package/dist/cjs/core/wasm_loader.js.map +1 -0
- package/dist/cjs/crypto.js +30 -13
- package/dist/cjs/crypto.js.map +1 -1
- package/dist/cjs/{sha.js → hash/sha.js} +3 -2
- package/dist/cjs/hash/sha.js.map +1 -0
- package/dist/cjs/hash/shake.js +318 -0
- package/dist/cjs/hash/shake.js.map +1 -0
- package/dist/cjs/index.js +16 -11
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/{ringlwe.js → session/baselwe.js} +186 -177
- package/dist/cjs/session/baselwe.js.map +1 -0
- package/dist/cjs/session/ringlwe.js +19 -0
- package/dist/cjs/session/ringlwe.js.map +1 -0
- package/dist/cjs/session/rringlwe.js +42 -0
- package/dist/cjs/session/rringlwe.js.map +1 -0
- package/dist/esm/cipher/chacha.js +150 -0
- package/dist/esm/cipher/chacha.js.map +1 -0
- package/dist/esm/cipher/cipher.js +30 -0
- package/dist/esm/cipher/cipher.js.map +1 -0
- package/dist/esm/cipher/gimli.js +139 -0
- package/dist/esm/cipher/gimli.js.map +1 -0
- package/dist/esm/core/kdf.js.map +1 -0
- package/dist/esm/core/mac.js +87 -0
- package/dist/esm/core/mac.js.map +1 -0
- package/dist/esm/{types.js.map → core/types.js.map} +1 -1
- package/dist/esm/{utils.js → core/utils.js} +24 -4
- package/dist/esm/core/utils.js.map +1 -0
- package/dist/esm/core/wasm_loader.js +64 -0
- package/dist/esm/core/wasm_loader.js.map +1 -0
- package/dist/esm/crypto.js +30 -13
- package/dist/esm/crypto.js.map +1 -1
- package/dist/esm/{sha.js → hash/sha.js} +3 -2
- package/dist/esm/hash/sha.js.map +1 -0
- package/dist/esm/hash/shake.js +311 -0
- package/dist/esm/hash/shake.js.map +1 -0
- package/dist/esm/index.js +16 -11
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/{ringlwe.js → session/baselwe.js} +184 -175
- package/dist/esm/session/baselwe.js.map +1 -0
- package/dist/esm/session/ringlwe.js +15 -0
- package/dist/esm/session/ringlwe.js.map +1 -0
- package/dist/esm/session/rringlwe.js +38 -0
- package/dist/esm/session/rringlwe.js.map +1 -0
- package/dist/shake.wasm +0 -0
- package/dist/types/cipher/chacha.d.ts +67 -0
- package/dist/types/cipher/cipher.d.ts +31 -0
- package/dist/types/cipher/gimli.d.ts +64 -0
- package/dist/types/{kdf.d.ts → core/kdf.d.ts} +3 -2
- package/dist/types/{mac.d.ts → core/mac.d.ts} +21 -2
- package/dist/types/{types.d.ts → core/types.d.ts} +5 -2
- package/dist/types/{utils.d.ts → core/utils.d.ts} +13 -0
- package/dist/types/core/wasm_loader.d.ts +5 -0
- package/dist/types/crypto.d.ts +8 -4
- package/dist/types/{sha.d.ts → hash/sha.d.ts} +3 -2
- package/dist/types/hash/shake.d.ts +85 -0
- package/dist/types/index.d.ts +15 -10
- package/dist/types/{ringlwe.d.ts → session/baselwe.d.ts} +49 -59
- package/dist/types/session/ringlwe.d.ts +21 -0
- package/dist/types/session/rringlwe.d.ts +27 -0
- package/package.json +12 -4
- package/wasm/shake.wasm +0 -0
- package/dist/cjs/cipher.js +0 -265
- package/dist/cjs/cipher.js.map +0 -1
- package/dist/cjs/kdf.js.map +0 -1
- package/dist/cjs/mac.js.map +0 -1
- package/dist/cjs/ringlwe.js.map +0 -1
- package/dist/cjs/sha.js.map +0 -1
- package/dist/cjs/shake.js +0 -159
- package/dist/cjs/shake.js.map +0 -1
- package/dist/cjs/utils.js.map +0 -1
- package/dist/esm/cipher.js +0 -259
- package/dist/esm/cipher.js.map +0 -1
- package/dist/esm/kdf.js.map +0 -1
- package/dist/esm/mac.js +0 -51
- package/dist/esm/mac.js.map +0 -1
- package/dist/esm/ringlwe.js.map +0 -1
- package/dist/esm/sha.js.map +0 -1
- package/dist/esm/shake.js +0 -155
- package/dist/esm/shake.js.map +0 -1
- package/dist/esm/utils.js.map +0 -1
- package/dist/types/cipher.d.ts +0 -153
- package/dist/types/shake.d.ts +0 -53
- package/docutil.ts +0 -84
- package/img/cover.png +0 -0
- package/src/cipher.ts +0 -260
- package/src/crypto.ts +0 -306
- package/src/index.ts +0 -27
- package/src/kdf.ts +0 -64
- package/src/mac.ts +0 -65
- package/src/ringlwe.ts +0 -340
- package/src/sha.ts +0 -265
- package/src/shake.ts +0 -163
- package/src/types.ts +0 -75
- package/src/utils.ts +0 -290
- package/tsconfig.cjs.json +0 -7
- package/tsconfig.json +0 -18
- /package/dist/cjs/{kdf.js → core/kdf.js} +0 -0
- /package/dist/cjs/{types.js → core/types.js} +0 -0
- /package/dist/esm/{kdf.js → core/kdf.js} +0 -0
- /package/dist/esm/{types.js → core/types.js} +0 -0
|
@@ -1,10 +1,26 @@
|
|
|
1
|
-
var _a;
|
|
2
|
-
import { QuarkDashUtils } from "./utils";
|
|
3
|
-
import { SHA256 } from "./sha";
|
|
4
1
|
/**
|
|
5
|
-
*
|
|
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
|
-
|
|
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
25
|
* Generate crypto key pair async
|
|
10
26
|
* @returns {ICryptoKeyPair} Crypto key pair
|
|
@@ -18,16 +34,16 @@ export class QuarkDashKeyExchange {
|
|
|
18
34
|
* @returns {ICryptoKeyPair} Crypto key pair
|
|
19
35
|
*/
|
|
20
36
|
generateKeyPairSync() {
|
|
21
|
-
const a =
|
|
22
|
-
const s =
|
|
23
|
-
const e =
|
|
24
|
-
const as =
|
|
25
|
-
const b = new Array(
|
|
26
|
-
for (let i = 0; i <
|
|
27
|
-
b[i] = (as[i] + e[i]) %
|
|
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);
|
|
42
|
+
for (let i = 0; i < this.N; i++) {
|
|
43
|
+
b[i] = (as[i] + e[i]) % this.Q;
|
|
28
44
|
}
|
|
29
|
-
const publicKey = QuarkDashUtils.concatBytes(
|
|
30
|
-
const privateKey =
|
|
45
|
+
const publicKey = QuarkDashUtils.concatBytes(this.serializePoly(a), this.serializePoly(b));
|
|
46
|
+
const privateKey = this.serializePoly(s);
|
|
31
47
|
return { publicKey, privateKey };
|
|
32
48
|
}
|
|
33
49
|
/**
|
|
@@ -45,20 +61,20 @@ export class QuarkDashKeyExchange {
|
|
|
45
61
|
* @returns {ICryptoEncapsulated} Encapsulated data
|
|
46
62
|
*/
|
|
47
63
|
encapsulateSync(publicKey) {
|
|
48
|
-
const aBytes = publicKey.slice(0,
|
|
49
|
-
const bBytes = publicKey.slice(
|
|
50
|
-
const a =
|
|
51
|
-
const b =
|
|
52
|
-
const sp =
|
|
53
|
-
const ep =
|
|
54
|
-
const uArr =
|
|
55
|
-
for (let i = 0; i <
|
|
56
|
-
uArr[i] = (uArr[i] + ep[i]) %
|
|
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;
|
|
57
73
|
}
|
|
58
|
-
const w =
|
|
59
|
-
const rawSecret =
|
|
60
|
-
const ciphertext =
|
|
61
|
-
const sharedSecret =
|
|
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);
|
|
62
78
|
return { ciphertext, sharedSecret };
|
|
63
79
|
}
|
|
64
80
|
/**
|
|
@@ -80,101 +96,114 @@ export class QuarkDashKeyExchange {
|
|
|
80
96
|
* @returns {Uint8Array} Buffer data
|
|
81
97
|
*/
|
|
82
98
|
decapsulateSync(privateKey, peerPublicKey, ciphertext) {
|
|
83
|
-
const s =
|
|
84
|
-
const u =
|
|
85
|
-
const w =
|
|
86
|
-
const rawSecret =
|
|
87
|
-
return
|
|
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);
|
|
88
104
|
}
|
|
89
105
|
/**
|
|
90
|
-
*
|
|
91
|
-
* @
|
|
106
|
+
* Modular inverse
|
|
107
|
+
* @param a {bigint}
|
|
108
|
+
* @param m {bigint}
|
|
109
|
+
* @returns {bigint} Inversion result
|
|
92
110
|
* @private
|
|
93
111
|
*/
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const val = (randomBytes[byteIdx] >> bitShift) & 0x03; // 0..3
|
|
102
|
-
if (val === 0)
|
|
103
|
-
poly[i] = -1n;
|
|
104
|
-
else if (val === 1)
|
|
105
|
-
poly[i] = 0n;
|
|
106
|
-
else if (val === 2)
|
|
107
|
-
poly[i] = 1n;
|
|
108
|
-
else {
|
|
109
|
-
poly[i] = 1n;
|
|
110
|
-
}
|
|
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];
|
|
111
119
|
}
|
|
112
|
-
return
|
|
120
|
+
return (old_s % m + m) % m;
|
|
113
121
|
}
|
|
114
122
|
/**
|
|
115
|
-
*
|
|
116
|
-
* @
|
|
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
|
|
117
128
|
* @private
|
|
118
129
|
*/
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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;
|
|
139
|
+
}
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Round to bits
|
|
144
|
+
* @param poly {bigint[]} Polygon
|
|
145
|
+
* @returns {Uint8Array} rounded buffer
|
|
146
|
+
* @private
|
|
147
|
+
*/
|
|
148
|
+
roundToBits(poly) {
|
|
149
|
+
const result = new Uint8Array(32);
|
|
122
150
|
for (let i = 0; i < this.N; i++) {
|
|
123
|
-
const
|
|
124
|
-
|
|
151
|
+
const bit = (Number(poly[i]) > Number(this.Q) / 2) ? 1 : 0;
|
|
152
|
+
if (bit)
|
|
153
|
+
result[i >> 3] |= (1 << (i & 7));
|
|
125
154
|
}
|
|
126
|
-
return
|
|
155
|
+
return result;
|
|
127
156
|
}
|
|
128
157
|
/**
|
|
129
|
-
*
|
|
158
|
+
* Deserialize Polygon
|
|
159
|
+
* @param bytes {Uint8Array} Polygon buffer
|
|
160
|
+
* @returns {bigint[]} Polygon
|
|
130
161
|
* @private
|
|
131
162
|
*/
|
|
132
|
-
|
|
163
|
+
deserializePoly(bytes) {
|
|
133
164
|
const poly = new Array(this.N);
|
|
134
|
-
const SIGMA = 3.19;
|
|
135
165
|
for (let i = 0; i < this.N; i++) {
|
|
136
|
-
|
|
137
|
-
|
|
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)));
|
|
166
|
+
const val = bytes[2 * i] | (bytes[2 * i + 1] << 8);
|
|
167
|
+
poly[i] = BigInt(val);
|
|
145
168
|
}
|
|
146
169
|
return poly;
|
|
147
170
|
}
|
|
148
171
|
/**
|
|
149
|
-
*
|
|
172
|
+
* Serialize polygon
|
|
150
173
|
* @param poly {bigint[]} Polygon
|
|
174
|
+
* @returns {Uint8Array} Polygon buffer
|
|
151
175
|
* @private
|
|
152
176
|
*/
|
|
153
|
-
|
|
154
|
-
const
|
|
155
|
-
let
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
let w = 1n;
|
|
160
|
-
for (let j = 0; j < len / 2; j++) {
|
|
161
|
-
const u = res[i + j];
|
|
162
|
-
const v = (res[i + j + len / 2] * w) % this.Q;
|
|
163
|
-
res[i + j] = (u + v) % this.Q;
|
|
164
|
-
res[i + j + len / 2] = (u - v + this.Q) % this.Q;
|
|
165
|
-
w = (w * wlen) % this.Q;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
len <<= 1;
|
|
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;
|
|
169
183
|
}
|
|
170
|
-
return
|
|
184
|
+
return bytes;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Multiply
|
|
188
|
+
* @param a {bigint[]} Polygon
|
|
189
|
+
* @param b {bigint[]} Polygon
|
|
190
|
+
* @returns {bigint[]} Multiplied polygons
|
|
191
|
+
*/
|
|
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);
|
|
171
200
|
}
|
|
172
201
|
/**
|
|
173
202
|
* Inverse NTT
|
|
174
203
|
* @param poly {bigint[]} Polygon
|
|
175
204
|
* @private
|
|
176
205
|
*/
|
|
177
|
-
|
|
206
|
+
invNTT(poly) {
|
|
178
207
|
const res = [...poly];
|
|
179
208
|
let len = this.N;
|
|
180
209
|
while (len >= 2) {
|
|
@@ -197,118 +226,98 @@ export class QuarkDashKeyExchange {
|
|
|
197
226
|
return res;
|
|
198
227
|
}
|
|
199
228
|
/**
|
|
200
|
-
*
|
|
201
|
-
* @param a {bigint[]} Polygon
|
|
202
|
-
* @param b {bigint[]} Polygon
|
|
203
|
-
* @returns {bigint[]} Multiplied polygons
|
|
204
|
-
*/
|
|
205
|
-
static multiply(a, b) {
|
|
206
|
-
const aNTT = this.ntt(a);
|
|
207
|
-
const bNTT = this.ntt(b);
|
|
208
|
-
const prod = new Array(this.N);
|
|
209
|
-
for (let i = 0; i < this.N; i++) {
|
|
210
|
-
prod[i] = (aNTT[i] * bNTT[i]) % this.Q;
|
|
211
|
-
}
|
|
212
|
-
return this.invNTT(prod);
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Serialize polygon
|
|
229
|
+
* NTT Operation
|
|
216
230
|
* @param poly {bigint[]} Polygon
|
|
217
|
-
* @returns {Uint8Array} Polygon buffer
|
|
218
231
|
* @private
|
|
219
232
|
*/
|
|
220
|
-
|
|
221
|
-
const
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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;
|
|
226
249
|
}
|
|
227
|
-
return
|
|
250
|
+
return res;
|
|
228
251
|
}
|
|
229
252
|
/**
|
|
230
|
-
*
|
|
231
|
-
* @param bytes {Uint8Array} Polygon buffer
|
|
232
|
-
* @returns {bigint[]} Polygon
|
|
253
|
+
* Error polygon
|
|
233
254
|
* @private
|
|
234
255
|
*/
|
|
235
|
-
|
|
256
|
+
errorPoly() {
|
|
236
257
|
const poly = new Array(this.N);
|
|
258
|
+
const SIGMA = 3.19;
|
|
237
259
|
for (let i = 0; i < this.N; i++) {
|
|
238
|
-
|
|
239
|
-
|
|
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)));
|
|
240
268
|
}
|
|
241
269
|
return poly;
|
|
242
270
|
}
|
|
243
271
|
/**
|
|
244
|
-
*
|
|
245
|
-
* @
|
|
246
|
-
* @returns {Uint8Array} rounded buffer
|
|
272
|
+
* Uniform polygon
|
|
273
|
+
* @returns {bigint[]}
|
|
247
274
|
* @private
|
|
248
275
|
*/
|
|
249
|
-
|
|
250
|
-
const
|
|
276
|
+
uniformPoly() {
|
|
277
|
+
const poly = new Array(this.N);
|
|
278
|
+
const bytes = QuarkDashUtils.randomBytes(this.N * 2);
|
|
251
279
|
for (let i = 0; i < this.N; i++) {
|
|
252
|
-
const
|
|
253
|
-
|
|
254
|
-
result[i >> 3] |= (1 << (i & 7));
|
|
255
|
-
}
|
|
256
|
-
return result;
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Modular exponentiation
|
|
260
|
-
* @param base {bigint} Base
|
|
261
|
-
* @param exp {bigint} exponential
|
|
262
|
-
* @param mod {bigint} module
|
|
263
|
-
* @returns {bigint} Result of modular exponentiation
|
|
264
|
-
* @private
|
|
265
|
-
*/
|
|
266
|
-
static powMod(base, exp, mod) {
|
|
267
|
-
let result = 1n;
|
|
268
|
-
let b = base % mod;
|
|
269
|
-
let e = exp;
|
|
270
|
-
while (e > 0n) {
|
|
271
|
-
if (e & 1n)
|
|
272
|
-
result = (result * b) % mod;
|
|
273
|
-
b = (b * b) % mod;
|
|
274
|
-
e >>= 1n;
|
|
280
|
+
const val = (bytes[2 * i] | (bytes[2 * i + 1] << 8)) % Number(this.Q);
|
|
281
|
+
poly[i] = BigInt(val);
|
|
275
282
|
}
|
|
276
|
-
return
|
|
283
|
+
return poly;
|
|
277
284
|
}
|
|
278
285
|
/**
|
|
279
|
-
*
|
|
280
|
-
* @
|
|
281
|
-
* @param m {bigint}
|
|
282
|
-
* @returns {bigint} Inversion result
|
|
286
|
+
* Get small polygon
|
|
287
|
+
* @returns {bigint[]} Small polygon
|
|
283
288
|
* @private
|
|
284
289
|
*/
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
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
|
+
}
|
|
292
307
|
}
|
|
293
|
-
return
|
|
308
|
+
return poly;
|
|
294
309
|
}
|
|
295
310
|
/**
|
|
296
311
|
* Hash shared secret
|
|
297
|
-
* @param ss {Uint8Array} Shared
|
|
298
|
-
* @param publicKey {Uint8Array} Public
|
|
299
|
-
* @param ciphertext {Uint8Array} Cipher text
|
|
300
|
-
* @returns {Uint8Array}
|
|
301
|
-
* @
|
|
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
|
|
302
317
|
*/
|
|
303
|
-
|
|
318
|
+
hashSharedSecretSync(ss, publicKey, ciphertext) {
|
|
304
319
|
const data = QuarkDashUtils.concatBytes(ss, publicKey, ciphertext);
|
|
305
320
|
return SHA256.hash(data, true);
|
|
306
321
|
}
|
|
307
322
|
}
|
|
308
|
-
|
|
309
|
-
// Ring-LWE Constants
|
|
310
|
-
QuarkDashKeyExchange.N = 256;
|
|
311
|
-
QuarkDashKeyExchange.Q = 7681n;
|
|
312
|
-
QuarkDashKeyExchange.ROOT = 7n;
|
|
313
|
-
QuarkDashKeyExchange.INV_N = _a.modInverse(BigInt(_a.N), _a.Q);
|
|
314
|
-
//# 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"}
|
package/dist/shake.wasm
ADDED
|
Binary file
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ICipher } from "../core/types";
|
|
2
|
+
/**
|
|
3
|
+
* ChaCha20 Based Cipher Implementation
|
|
4
|
+
*/
|
|
5
|
+
export declare class QuarkDashChaCha implements ICipher {
|
|
6
|
+
private readonly key;
|
|
7
|
+
private readonly nonce;
|
|
8
|
+
private static readonly BLOCK_SIZE;
|
|
9
|
+
private static readonly BLOCKS_PER_BATCH;
|
|
10
|
+
private static readonly BATCH_SIZE;
|
|
11
|
+
/**
|
|
12
|
+
* Create ChaCha20 Cipher
|
|
13
|
+
* @param key {Uint8Array} Key buffer
|
|
14
|
+
* @param nonce {Uint8Array} Nonce buffer
|
|
15
|
+
*/
|
|
16
|
+
constructor(key: Uint8Array, nonce: Uint8Array);
|
|
17
|
+
/**
|
|
18
|
+
* Encrypt data async using ChaCha20
|
|
19
|
+
* @param data {Uint8Array} Raw data buffer
|
|
20
|
+
* @returns {Promise<Uint8Array>} Result buffer
|
|
21
|
+
* TODO: GPU Calculations
|
|
22
|
+
*/
|
|
23
|
+
encrypt(data: Uint8Array): Promise<Uint8Array>;
|
|
24
|
+
/**
|
|
25
|
+
* Decrypt data async using ChaCha20
|
|
26
|
+
* @param data {Uint8Array} Encrypted raw data buffer
|
|
27
|
+
* @returns {Promise<Uint8Array>} Result buffer
|
|
28
|
+
* TODO: GPU Calculations
|
|
29
|
+
*/
|
|
30
|
+
decrypt(data: Uint8Array): Promise<Uint8Array>;
|
|
31
|
+
/**
|
|
32
|
+
* Encrypt data sync using ChaCha20
|
|
33
|
+
* @param data {Uint8Array} Raw data buffer
|
|
34
|
+
* @returns {Uint8Array} Result buffer
|
|
35
|
+
*/
|
|
36
|
+
encryptSync(data: Uint8Array): Uint8Array;
|
|
37
|
+
/**
|
|
38
|
+
* Decrypt data sync using ChaCha20
|
|
39
|
+
* @param data {Uint8Array} Encrypted raw data buffer
|
|
40
|
+
* @returns {Uint8Array} Result buffer
|
|
41
|
+
*/
|
|
42
|
+
decryptSync(data: Uint8Array): Uint8Array;
|
|
43
|
+
/**
|
|
44
|
+
* Process ChaCha20 Cipher
|
|
45
|
+
* @param data {Uint8Array} Data for processing
|
|
46
|
+
* @returns {Uint8Array} Processing result
|
|
47
|
+
* @private
|
|
48
|
+
*/
|
|
49
|
+
private process;
|
|
50
|
+
/**
|
|
51
|
+
* Quarter Round
|
|
52
|
+
* @param s {Uint8Array} Buffer
|
|
53
|
+
* @param a {number}
|
|
54
|
+
* @param b {number}
|
|
55
|
+
* @param c {number}
|
|
56
|
+
* @param d {number}
|
|
57
|
+
* @private
|
|
58
|
+
*/
|
|
59
|
+
private quarterRound;
|
|
60
|
+
/**
|
|
61
|
+
* Generate Keystream Batch
|
|
62
|
+
* @param startCounter {number} Start counter
|
|
63
|
+
* @param count {number} Count
|
|
64
|
+
* @private
|
|
65
|
+
*/
|
|
66
|
+
private generateKeystreamBatch;
|
|
67
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QuarkDash Ciphers Implementation
|
|
3
|
+
*
|
|
4
|
+
* @git https://github.com/devsdaddy/quarkdash
|
|
5
|
+
* @version 1.1.0
|
|
6
|
+
* @author Elijah Rastorguev
|
|
7
|
+
* @build 1002
|
|
8
|
+
* @website https://dev.to/devsdaddy
|
|
9
|
+
* @updated 13.04.2026
|
|
10
|
+
*/
|
|
11
|
+
import { ICipher } from "../core/types";
|
|
12
|
+
/**
|
|
13
|
+
* Cipher Type
|
|
14
|
+
*/
|
|
15
|
+
export declare enum CipherType {
|
|
16
|
+
ChaCha20 = 0,
|
|
17
|
+
Gimli = 1
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Cipher Factory
|
|
21
|
+
*/
|
|
22
|
+
export declare class CipherFactory {
|
|
23
|
+
/**
|
|
24
|
+
* Create Cipher
|
|
25
|
+
* @param algorithm {CipherType} Current cipher type
|
|
26
|
+
* @param key {Uint8Array} Key buffer
|
|
27
|
+
* @param nonce {Uint8Array} Nonce buffer
|
|
28
|
+
* @returns {ICipher} Cipher class instance
|
|
29
|
+
*/
|
|
30
|
+
static create(algorithm: CipherType, key: Uint8Array, nonce: Uint8Array): ICipher;
|
|
31
|
+
}
|