quarkdash 1.0.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/.idea/modules.xml +8 -0
- package/.idea/quarkdash.iml +12 -0
- package/.idea/vcs.xml +6 -0
- package/LICENSE +21 -0
- package/README.md +161 -0
- package/coverage/clover.xml +470 -0
- package/coverage/coverage-final.json +8 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/cipher.ts.html +862 -0
- package/coverage/lcov-report/crypto.ts.html +1000 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +206 -0
- package/coverage/lcov-report/index.ts.html +151 -0
- package/coverage/lcov-report/kdf.ts.html +274 -0
- package/coverage/lcov-report/mac.ts.html +277 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/ringlwe.ts.html +895 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov-report/utils.ts.html +1111 -0
- package/coverage/lcov.info +740 -0
- package/dist/cjs/cipher.js +265 -0
- package/dist/cjs/cipher.js.map +1 -0
- package/dist/cjs/crypto.js +284 -0
- package/dist/cjs/crypto.js.map +1 -0
- package/dist/cjs/index.js +37 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/kdf.js +56 -0
- package/dist/cjs/kdf.js.map +1 -0
- package/dist/cjs/mac.js +55 -0
- package/dist/cjs/mac.js.map +1 -0
- package/dist/cjs/ringlwe.js +267 -0
- package/dist/cjs/ringlwe.js.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils.js +320 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/cipher.js +259 -0
- package/dist/esm/cipher.js.map +1 -0
- package/dist/esm/crypto.js +280 -0
- package/dist/esm/crypto.js.map +1 -0
- package/dist/esm/index.js +21 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/kdf.js +52 -0
- package/dist/esm/kdf.js.map +1 -0
- package/dist/esm/mac.js +51 -0
- package/dist/esm/mac.js.map +1 -0
- package/dist/esm/ringlwe.js +263 -0
- package/dist/esm/ringlwe.js.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils.js +313 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/types/cipher.d.ts +153 -0
- package/dist/types/crypto.d.ts +155 -0
- package/dist/types/index.d.ts +16 -0
- package/dist/types/kdf.d.ts +34 -0
- package/dist/types/mac.d.ts +47 -0
- package/dist/types/ringlwe.d.ts +127 -0
- package/dist/types/types.d.ts +69 -0
- package/dist/types/utils.d.ts +132 -0
- package/img/cover.png +0 -0
- package/package.json +63 -0
- package/src/cipher.ts +260 -0
- package/src/crypto.ts +306 -0
- package/src/index.ts +23 -0
- package/src/kdf.ts +64 -0
- package/src/mac.ts +65 -0
- package/src/ringlwe.ts +271 -0
- package/src/types.ts +75 -0
- package/src/utils.ts +343 -0
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { QuarkDashUtils } from "./utils";
|
|
2
|
+
/**
|
|
3
|
+
* Cipher Type
|
|
4
|
+
*/
|
|
5
|
+
export var CipherType;
|
|
6
|
+
(function (CipherType) {
|
|
7
|
+
CipherType[CipherType["ChaCha20"] = 0] = "ChaCha20";
|
|
8
|
+
CipherType[CipherType["Gimli"] = 1] = "Gimli";
|
|
9
|
+
})(CipherType || (CipherType = {}));
|
|
10
|
+
/**
|
|
11
|
+
* Cipher Factory
|
|
12
|
+
*/
|
|
13
|
+
export class CipherFactory {
|
|
14
|
+
/**
|
|
15
|
+
* Create Cipher
|
|
16
|
+
* @param algorithm {CipherType} Current cipher type
|
|
17
|
+
* @param key {Uint8Array} Key buffer
|
|
18
|
+
* @param nonce {Uint8Array} Nonce buffer
|
|
19
|
+
* @returns {ICipher} Cipher class instance
|
|
20
|
+
*/
|
|
21
|
+
static create(algorithm, key, nonce) {
|
|
22
|
+
switch (algorithm) {
|
|
23
|
+
case CipherType.ChaCha20: return new QuarkDashChaCha(key, nonce);
|
|
24
|
+
case CipherType.Gimli: return new QuarkDashGimli(key, nonce);
|
|
25
|
+
default: throw new Error('Unsupported cipher type');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* ChaCha20 Based Cipher Implementation
|
|
31
|
+
*/
|
|
32
|
+
export class QuarkDashChaCha {
|
|
33
|
+
/**
|
|
34
|
+
* Create ChaCha20 Cipher
|
|
35
|
+
* @param key {Uint8Array} Key buffer
|
|
36
|
+
* @param nonce {Uint8Array} Nonce buffer
|
|
37
|
+
*/
|
|
38
|
+
constructor(key, nonce) {
|
|
39
|
+
if (key.length !== 32)
|
|
40
|
+
throw new Error('Key must be 32 bytes');
|
|
41
|
+
if (nonce.length !== 12)
|
|
42
|
+
throw new Error('Nonce must be 12 bytes');
|
|
43
|
+
this.key = key;
|
|
44
|
+
this.nonce = nonce;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Encrypt data async using ChaCha20
|
|
48
|
+
* @param data {Uint8Array} Raw data buffer
|
|
49
|
+
* @returns {Promise<Uint8Array>} Result buffer
|
|
50
|
+
* TODO: GPU Calculations
|
|
51
|
+
*/
|
|
52
|
+
async encrypt(data) { return this.process(data); }
|
|
53
|
+
/**
|
|
54
|
+
* Decrypt data async using ChaCha20
|
|
55
|
+
* @param data {Uint8Array} Encrypted raw data buffer
|
|
56
|
+
* @returns {Promise<Uint8Array>} Result buffer
|
|
57
|
+
* TODO: GPU Calculations
|
|
58
|
+
*/
|
|
59
|
+
async decrypt(data) { return this.process(data); }
|
|
60
|
+
/**
|
|
61
|
+
* Encrypt data sync using ChaCha20
|
|
62
|
+
* @param data {Uint8Array} Raw data buffer
|
|
63
|
+
* @returns {Uint8Array} Result buffer
|
|
64
|
+
*/
|
|
65
|
+
encryptSync(data) { return this.process(data); }
|
|
66
|
+
/**
|
|
67
|
+
* Decrypt data sync using ChaCha20
|
|
68
|
+
* @param data {Uint8Array} Encrypted raw data buffer
|
|
69
|
+
* @returns {Uint8Array} Result buffer
|
|
70
|
+
*/
|
|
71
|
+
decryptSync(data) { return this.process(data); }
|
|
72
|
+
/**
|
|
73
|
+
* Process ChaCha20 Cipher
|
|
74
|
+
* @param data {Uint8Array} Data for processing
|
|
75
|
+
* @returns {Uint8Array} Processing result
|
|
76
|
+
* @private
|
|
77
|
+
*/
|
|
78
|
+
process(data) {
|
|
79
|
+
const out = new Uint8Array(data.length);
|
|
80
|
+
let block = 0;
|
|
81
|
+
let pos = 0;
|
|
82
|
+
while (pos < data.length) {
|
|
83
|
+
const ks = this.keystreamBlock(block);
|
|
84
|
+
const len = Math.min(64, data.length - pos);
|
|
85
|
+
for (let i = 0; i < len; i++)
|
|
86
|
+
out[pos + i] = data[pos + i] ^ ks[i];
|
|
87
|
+
pos += len;
|
|
88
|
+
block++;
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get keystream block
|
|
94
|
+
* @param counter {number} counter
|
|
95
|
+
* @returns {Uint8Array} result buffer
|
|
96
|
+
* @private
|
|
97
|
+
*/
|
|
98
|
+
keystreamBlock(counter) {
|
|
99
|
+
const state = new Uint32Array(16);
|
|
100
|
+
state[0] = 0x61707865;
|
|
101
|
+
state[1] = 0x3320646e;
|
|
102
|
+
state[2] = 0x79622d32;
|
|
103
|
+
state[3] = 0x6b206574;
|
|
104
|
+
for (let i = 0; i < 8; i++)
|
|
105
|
+
state[4 + i] = QuarkDashUtils.readU32(this.key, i * 4);
|
|
106
|
+
state[12] = counter;
|
|
107
|
+
for (let i = 0; i < 3; i++)
|
|
108
|
+
state[13 + i] = QuarkDashUtils.readU32(this.nonce, i * 4);
|
|
109
|
+
const working = new Uint32Array(state);
|
|
110
|
+
for (let r = 0; r < 10; r++) {
|
|
111
|
+
this.quarterRound(working, 0, 4, 8, 12);
|
|
112
|
+
this.quarterRound(working, 1, 5, 9, 13);
|
|
113
|
+
this.quarterRound(working, 2, 6, 10, 14);
|
|
114
|
+
this.quarterRound(working, 3, 7, 11, 15);
|
|
115
|
+
this.quarterRound(working, 0, 5, 10, 15);
|
|
116
|
+
this.quarterRound(working, 1, 6, 11, 12);
|
|
117
|
+
this.quarterRound(working, 2, 7, 8, 13);
|
|
118
|
+
this.quarterRound(working, 3, 4, 9, 14);
|
|
119
|
+
}
|
|
120
|
+
for (let i = 0; i < 16; i++)
|
|
121
|
+
working[i] += state[i];
|
|
122
|
+
const out = new Uint8Array(64);
|
|
123
|
+
for (let i = 0; i < 16; i++)
|
|
124
|
+
QuarkDashUtils.writeU32(working[i], out, i * 4);
|
|
125
|
+
return out;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Quarter Round
|
|
129
|
+
* @param s {Uint8Array} Buffer
|
|
130
|
+
* @param a {number}
|
|
131
|
+
* @param b {number}
|
|
132
|
+
* @param c {number}
|
|
133
|
+
* @param d {number}
|
|
134
|
+
* @private
|
|
135
|
+
*/
|
|
136
|
+
quarterRound(s, a, b, c, d) {
|
|
137
|
+
s[a] += s[b];
|
|
138
|
+
s[d] ^= s[a];
|
|
139
|
+
s[d] = (s[d] << 16) | (s[d] >>> 16);
|
|
140
|
+
s[c] += s[d];
|
|
141
|
+
s[b] ^= s[c];
|
|
142
|
+
s[b] = (s[b] << 12) | (s[b] >>> 20);
|
|
143
|
+
s[a] += s[b];
|
|
144
|
+
s[d] ^= s[a];
|
|
145
|
+
s[d] = (s[d] << 8) | (s[d] >>> 24);
|
|
146
|
+
s[c] += s[d];
|
|
147
|
+
s[b] ^= s[c];
|
|
148
|
+
s[b] = (s[b] << 7) | (s[b] >>> 25);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Gimli Cipher
|
|
153
|
+
*/
|
|
154
|
+
export class QuarkDashGimli {
|
|
155
|
+
/**
|
|
156
|
+
* Create Gimli Cipher
|
|
157
|
+
* @param key {Uint8Array} Key buffer
|
|
158
|
+
* @param nonce {Uint8Array} Nonce buffer
|
|
159
|
+
*/
|
|
160
|
+
constructor(key, nonce) {
|
|
161
|
+
if (key.length !== 32)
|
|
162
|
+
throw new Error('Key must be 32 bytes');
|
|
163
|
+
if (nonce.length !== 12)
|
|
164
|
+
throw new Error('Nonce must be 12 bytes');
|
|
165
|
+
this.key = key;
|
|
166
|
+
this.nonce = nonce;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Encrypt data async using Gimli
|
|
170
|
+
* @param data {Uint8Array} Raw data buffer
|
|
171
|
+
* @returns {Promise<Uint8Array>} Result buffer
|
|
172
|
+
* TODO: GPU Calculations
|
|
173
|
+
*/
|
|
174
|
+
async encrypt(data) { return this.process(data); }
|
|
175
|
+
/**
|
|
176
|
+
* Decrypt data async using Gimli
|
|
177
|
+
* @param data {Uint8Array} Encrypted raw data buffer
|
|
178
|
+
* @returns {Promise<Uint8Array>} Result buffer
|
|
179
|
+
* TODO: GPU Calculations
|
|
180
|
+
*/
|
|
181
|
+
async decrypt(data) { return this.process(data); }
|
|
182
|
+
/**
|
|
183
|
+
* Encrypt data sync using Gimli
|
|
184
|
+
* @param data {Uint8Array} Raw data buffer
|
|
185
|
+
* @returns {Uint8Array} Result buffer
|
|
186
|
+
*/
|
|
187
|
+
encryptSync(data) { return this.process(data); }
|
|
188
|
+
/**
|
|
189
|
+
* Decrypt data sync using Gimli
|
|
190
|
+
* @param data {Uint8Array} Encrypted raw data buffer
|
|
191
|
+
* @returns {Uint8Array} Result buffer
|
|
192
|
+
*/
|
|
193
|
+
decryptSync(data) { return this.process(data); }
|
|
194
|
+
/**
|
|
195
|
+
* Process Gimli Cipher
|
|
196
|
+
* @param data {Uint8Array} Input buffer
|
|
197
|
+
* @returns {Uint8Array} Output buffer
|
|
198
|
+
* @private
|
|
199
|
+
*/
|
|
200
|
+
process(data) {
|
|
201
|
+
const out = new Uint8Array(data.length);
|
|
202
|
+
let block = 0;
|
|
203
|
+
let pos = 0;
|
|
204
|
+
while (pos < data.length) {
|
|
205
|
+
const ks = this.keystreamBlock(block);
|
|
206
|
+
const len = Math.min(48, data.length - pos);
|
|
207
|
+
for (let i = 0; i < len; i++)
|
|
208
|
+
out[pos + i] = data[pos + i] ^ ks[i];
|
|
209
|
+
pos += len;
|
|
210
|
+
block++;
|
|
211
|
+
}
|
|
212
|
+
return out;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get keystream block
|
|
216
|
+
* @param counter {number} Counter
|
|
217
|
+
* @returns {Uint8Array} Result buffer
|
|
218
|
+
* @private
|
|
219
|
+
*/
|
|
220
|
+
keystreamBlock(counter) {
|
|
221
|
+
const state = new Uint32Array(12);
|
|
222
|
+
for (let i = 0; i < 8; i++)
|
|
223
|
+
state[i] = QuarkDashUtils.readU32(this.key, i * 4);
|
|
224
|
+
state[8] = QuarkDashUtils.readU32(this.nonce, 0);
|
|
225
|
+
state[9] = QuarkDashUtils.readU32(this.nonce, 4);
|
|
226
|
+
state[10] = QuarkDashUtils.readU32(this.nonce, 8);
|
|
227
|
+
state[11] = counter;
|
|
228
|
+
for (let r = 0; r < 24; r++)
|
|
229
|
+
this.gimliRound(state, r);
|
|
230
|
+
const out = new Uint8Array(48);
|
|
231
|
+
for (let i = 0; i < 12; i++)
|
|
232
|
+
QuarkDashUtils.writeU32(state[i], out, i * 4);
|
|
233
|
+
return out;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Gimli Round
|
|
237
|
+
* @param state {Uint32Array} State buffer
|
|
238
|
+
* @param round {number} Round number
|
|
239
|
+
* @private
|
|
240
|
+
*/
|
|
241
|
+
gimliRound(state, round) {
|
|
242
|
+
for (let i = 0; i < 4; i++) {
|
|
243
|
+
const x = state[i], y = state[i + 4], z = state[i + 8];
|
|
244
|
+
const newX = x ^ (z << 1) ^ ((y & z) << 2);
|
|
245
|
+
const newY = y ^ x ^ ((x | z) << 1);
|
|
246
|
+
const newZ = z ^ y ^ ((x & y) << 3);
|
|
247
|
+
state[i] = newX;
|
|
248
|
+
state[i + 4] = newY;
|
|
249
|
+
state[i + 8] = newZ;
|
|
250
|
+
}
|
|
251
|
+
const t = state[1];
|
|
252
|
+
state[1] = state[2];
|
|
253
|
+
state[2] = state[3];
|
|
254
|
+
state[3] = t;
|
|
255
|
+
if ((round & 3) === 0)
|
|
256
|
+
state[0] ^= (0x9e377900 | round);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=cipher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cipher.js","sourceRoot":"","sources":["../../src/cipher.ts"],"names":[],"mappings":"AAWA,OAAO,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IAClB,mDAAY,CAAA;IACZ,6CAAS,CAAA;AACb,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAED;;GAEG;AACH,MAAM,OAAO,aAAa;IACtB;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,SAAqB,EAAE,GAAe,EAAE,KAAiB;QACnE,QAAO,SAAS,EAAE,CAAC;YACf,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,IAAI,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACjE,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC7D,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACxD,CAAC;IACL,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,OAAO,eAAe;IAKxB;;;;OAIG;IACH,YAAY,GAAe,EAAE,KAAiB;QAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC/D,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACnE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,OAAO,CAAC,IAAgB,IAAyB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1F;;;;;OAKG;IACI,KAAK,CAAC,OAAO,CAAC,IAAgB,IAAyB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1F;;;;OAIG;IACI,WAAW,CAAC,IAAgB,IAAgB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE/E;;;;OAIG;IACI,WAAW,CAAC,IAAgB,IAAgB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE/E;;;;;OAKG;IACK,OAAO,CAAC,IAAgB;QAC5B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,GAAG,GAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/D,GAAG,IAAI,GAAG,CAAC;YACX,KAAK,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAAC,OAAe;QAClC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QAClC,KAAK,CAAC,CAAC,CAAC,GAAC,UAAU,CAAC;QAAC,KAAK,CAAC,CAAC,CAAC,GAAC,UAAU,CAAC;QAAC,KAAK,CAAC,CAAC,CAAC,GAAC,UAAU,CAAC;QAAC,KAAK,CAAC,CAAC,CAAC,GAAC,UAAU,CAAC;QACnF,KAAK,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE;YAAE,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC;QACzE,KAAK,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;QACpB,KAAK,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,GAAC,CAAC,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAC,CAAC;YAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAC,CAAC;YACzE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,CAAC,CAAC;YAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,YAAY,CAAC,OAAO,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,CAAC,CAAC;YAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,YAAY,CAAC,OAAO,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAC,CAAC;YAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/B,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE;YAAE,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC;QACpE,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;;;;OAQG;IACK,YAAY,CAAC,CAAa,EAAE,CAAQ,EAAC,CAAQ,EAAC,CAAQ,EAAC,CAAQ;QACnE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAG,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAG,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAG,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAG,EAAE,CAAC,CAAC;IAC7D,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,OAAO,cAAc;IAKvB;;;;OAIG;IACH,YAAY,GAAe,EAAE,KAAiB;QAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC/D,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACnE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,OAAO,CAAC,IAAgB,IAAyB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1F;;;;;OAKG;IACI,KAAK,CAAC,OAAO,CAAC,IAAgB,IAAyB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1F;;;;OAIG;IACI,WAAW,CAAC,IAAgB,IAAgB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE/E;;;;OAIG;IACI,WAAW,CAAC,IAAgB,IAAgB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE/E;;;;;OAKG;IACK,OAAO,CAAC,IAAgB;QAC5B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,GAAG,GAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/D,GAAG,IAAI,GAAG,CAAC;YACX,KAAK,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAAC,OAAe;QAClC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC;QACvE,KAAK,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC;QACjD,KAAK,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;QACpB,KAAK,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE;YAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/B,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE;YAAE,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC;QAClE,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACK,UAAU,CAAC,KAAiB,EAAE,KAAY;QAC9C,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC;YACjB,MAAM,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC,EAAE,CAAC,GAAC,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC;YAChC,KAAK,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC;YAAC,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,IAAI,CAAC;YAAC,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,IAAI,CAAC;QACpD,CAAC;QACD,MAAM,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAC,KAAK,CAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAC,KAAK,CAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAC,KAAK,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC;QACnE,IAAG,CAAC,KAAK,GAAC,CAAC,CAAC,KAAG,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;IACvD,CAAC;CACJ"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QuarkDash Crypto Algorithm Implementation
|
|
3
|
+
*
|
|
4
|
+
* @git https://github.com/devsdaddy/quarkdash
|
|
5
|
+
* @version 1.0.0
|
|
6
|
+
* @author Elijah Rastorguev
|
|
7
|
+
* @build 1000
|
|
8
|
+
* @website https://dev.to/devsdaddy
|
|
9
|
+
*/
|
|
10
|
+
/* Import Required Modules */
|
|
11
|
+
import { CipherFactory, CipherType } from "./cipher";
|
|
12
|
+
import { QuarkDashKDF } from "./kdf";
|
|
13
|
+
import { QuarkDashMAC } from "./mac";
|
|
14
|
+
import { QuarkDashKeyExchange } from "./ringlwe";
|
|
15
|
+
import { QuarkDashUtils } from "./utils";
|
|
16
|
+
/**
|
|
17
|
+
* Default QuarkDash options
|
|
18
|
+
*/
|
|
19
|
+
const DEFAULT_OPTIONS = {
|
|
20
|
+
cipher: CipherType.ChaCha20,
|
|
21
|
+
kdf: new QuarkDashKDF(),
|
|
22
|
+
mac: new QuarkDashMAC(),
|
|
23
|
+
keyExchange: new QuarkDashKeyExchange(),
|
|
24
|
+
maxPacketWindow: 1000,
|
|
25
|
+
timestampToleranceMs: 300000,
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* QuarkDash Crypto Algorithm Implementation
|
|
29
|
+
*/
|
|
30
|
+
export class QuarkDash {
|
|
31
|
+
/**
|
|
32
|
+
* Create QuarkDash Crypto
|
|
33
|
+
* @param config {QuarkDashOptions} Crypto Options
|
|
34
|
+
*/
|
|
35
|
+
constructor(config) {
|
|
36
|
+
this.sessionKey = null;
|
|
37
|
+
this.cipher = null;
|
|
38
|
+
this.macKey = null;
|
|
39
|
+
this.sendSeq = 0;
|
|
40
|
+
this.recvSeq = 0;
|
|
41
|
+
this.receivedPackets = new Set();
|
|
42
|
+
this.config = { ...DEFAULT_OPTIONS, ...config };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Generate key pair async
|
|
46
|
+
* @returns {Promise<Uint8Array>} Key pair buffer
|
|
47
|
+
* TODO: GPU Computing
|
|
48
|
+
*/
|
|
49
|
+
async generateKeyPair() {
|
|
50
|
+
this.myKeyPair = await this.config.keyExchange.generateKeyPair();
|
|
51
|
+
return this.myKeyPair.publicKey;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Generate key pair sync
|
|
55
|
+
* @returns {Uint8Array} Key pair buffer
|
|
56
|
+
*/
|
|
57
|
+
generateKeyPairSync() {
|
|
58
|
+
this.myKeyPair = this.config.keyExchange.generateKeyPairSync();
|
|
59
|
+
return this.myKeyPair.publicKey;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Initialize session async
|
|
63
|
+
* @param peerPublicKey {Uint8Array} Peer public key buffer
|
|
64
|
+
* @param isInitiator {boolean} Is session initiator
|
|
65
|
+
* @returns {Promise<Uint8Array|number>} Returns derived session key or null
|
|
66
|
+
* TODO: GPU Computing
|
|
67
|
+
*/
|
|
68
|
+
async initializeSession(peerPublicKey, isInitiator) {
|
|
69
|
+
this.peerPublicKey = peerPublicKey;
|
|
70
|
+
if (!this.myKeyPair)
|
|
71
|
+
await this.generateKeyPair();
|
|
72
|
+
if (isInitiator) {
|
|
73
|
+
const { ciphertext, sharedSecret } = await this.config.keyExchange.encapsulate(peerPublicKey);
|
|
74
|
+
await this.deriveSessionKeys(sharedSecret);
|
|
75
|
+
return ciphertext;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Initialize session sync
|
|
83
|
+
* @param peerPublicKey {Uint8Array} Peer public key buffer
|
|
84
|
+
* @param isInitiator {boolean} Is session initiator
|
|
85
|
+
* @returns {Uint8Array|number} Returns derived session key or null
|
|
86
|
+
*/
|
|
87
|
+
initializeSessionSync(peerPublicKey, isInitiator) {
|
|
88
|
+
this.peerPublicKey = peerPublicKey;
|
|
89
|
+
if (!this.myKeyPair)
|
|
90
|
+
this.generateKeyPairSync();
|
|
91
|
+
if (isInitiator) {
|
|
92
|
+
const { ciphertext, sharedSecret } = this.config.keyExchange.encapsulateSync(peerPublicKey);
|
|
93
|
+
this.deriveSessionKeysSync(sharedSecret);
|
|
94
|
+
return ciphertext;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Finalize session async
|
|
102
|
+
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
103
|
+
* TODO: GPU Computing
|
|
104
|
+
*/
|
|
105
|
+
async finalizeSession(ciphertext) {
|
|
106
|
+
if (!this.myKeyPair || !this.peerPublicKey)
|
|
107
|
+
throw new Error('Session not initialized');
|
|
108
|
+
const sharedSecret = await this.config.keyExchange.decapsulate(this.myKeyPair.privateKey, ciphertext);
|
|
109
|
+
await this.deriveSessionKeys(sharedSecret);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Finalize session sync
|
|
113
|
+
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
114
|
+
*/
|
|
115
|
+
finalizeSessionSync(ciphertext) {
|
|
116
|
+
if (!this.myKeyPair || !this.peerPublicKey)
|
|
117
|
+
throw new Error('Session not initialized');
|
|
118
|
+
const sharedSecret = this.config.keyExchange.decapsulateSync(this.myKeyPair.privateKey, ciphertext);
|
|
119
|
+
this.deriveSessionKeysSync(sharedSecret);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Derive session keys async
|
|
123
|
+
* @param sharedSecret {Uint8Array} Shared secret buffer
|
|
124
|
+
* @private
|
|
125
|
+
* TODO: GPU Computing
|
|
126
|
+
*/
|
|
127
|
+
async deriveSessionKeys(sharedSecret) {
|
|
128
|
+
const salt = QuarkDashUtils.randomBytes(32);
|
|
129
|
+
const info = QuarkDashUtils.textToBytes('session-key');
|
|
130
|
+
const keyMaterial = await this.config.kdf.derive(sharedSecret, salt, info, 64);
|
|
131
|
+
this.processDeriveSessionKeys(keyMaterial, sharedSecret);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Derive session keys sync
|
|
135
|
+
* @param sharedSecret {Uint8Array} Shared secret buffer
|
|
136
|
+
* @private
|
|
137
|
+
*/
|
|
138
|
+
deriveSessionKeysSync(sharedSecret) {
|
|
139
|
+
const salt = QuarkDashUtils.randomBytes(32);
|
|
140
|
+
const info = QuarkDashUtils.textToBytes('session-key');
|
|
141
|
+
const keyMaterial = this.config.kdf.deriveSync(sharedSecret, salt, info, 64);
|
|
142
|
+
this.processDeriveSessionKeys(keyMaterial, sharedSecret);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Process derive session keys
|
|
146
|
+
* @param keyMaterial {Uint8Array} Key material buffer
|
|
147
|
+
* @param sharedSecret {Uint8Array} Shared secret buffer
|
|
148
|
+
* @private
|
|
149
|
+
*/
|
|
150
|
+
processDeriveSessionKeys(keyMaterial, sharedSecret) {
|
|
151
|
+
this.sessionKey = keyMaterial.slice(0, 32);
|
|
152
|
+
this.macKey = keyMaterial.slice(32, 64);
|
|
153
|
+
const nonce = new Uint8Array(12);
|
|
154
|
+
this.cipher = CipherFactory.create(this.config.cipher, this.sessionKey, nonce);
|
|
155
|
+
QuarkDashUtils.secureZero(sharedSecret);
|
|
156
|
+
QuarkDashUtils.secureZero(keyMaterial);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Encrypt sync
|
|
160
|
+
* @param decryptedData {Uint8Array} Decrypted buffer
|
|
161
|
+
* @returns {Promise<Uint8Array>} Encrypted buffer
|
|
162
|
+
* TODO: GPU Computing
|
|
163
|
+
*/
|
|
164
|
+
async encrypt(decryptedData) {
|
|
165
|
+
if (!this.cipher || !this.macKey)
|
|
166
|
+
throw new Error('Session not established');
|
|
167
|
+
const metadata = this.buildMetadata();
|
|
168
|
+
const encrypted = await this.cipher.encrypt(decryptedData);
|
|
169
|
+
const mac = await this.config.mac.sign(QuarkDashUtils.concatBytes(metadata, encrypted), this.macKey);
|
|
170
|
+
return QuarkDashUtils.concatBytes(metadata, encrypted, mac);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Encrypt sync
|
|
174
|
+
* @param decryptedData {Uint8Array} Decrypted buffer
|
|
175
|
+
* @returns {Uint8Array} Encrypted buffer
|
|
176
|
+
*/
|
|
177
|
+
encryptSync(decryptedData) {
|
|
178
|
+
if (!this.cipher || !this.macKey)
|
|
179
|
+
throw new Error('Session not established');
|
|
180
|
+
const metadata = this.buildMetadata();
|
|
181
|
+
const encrypted = this.cipher.encryptSync(decryptedData);
|
|
182
|
+
const mac = this.config.mac.signSync(QuarkDashUtils.concatBytes(metadata, encrypted), this.macKey);
|
|
183
|
+
return QuarkDashUtils.concatBytes(metadata, encrypted, mac);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Decrypt async
|
|
187
|
+
* @param encryptedData {Uint8Array} Encrypted buffer
|
|
188
|
+
* @returns {Promise<Uint8Array>} Decrypted buffer
|
|
189
|
+
* TODO: GPU Computing
|
|
190
|
+
*/
|
|
191
|
+
async decrypt(encryptedData) {
|
|
192
|
+
if (!this.cipher || !this.macKey)
|
|
193
|
+
throw new Error('Session not established');
|
|
194
|
+
const packet = this.processDecrypt(encryptedData);
|
|
195
|
+
const valid = await this.config.mac.verify(QuarkDashUtils.concatBytes(packet.metadata, packet.encrypted), this.macKey, packet.mac);
|
|
196
|
+
if (!valid)
|
|
197
|
+
throw new Error('MAC verification failed');
|
|
198
|
+
this.checkMetadata(packet.metadata);
|
|
199
|
+
return await this.cipher.decrypt(packet.encrypted);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Decrypt sync
|
|
203
|
+
* @param encryptedData {Uint8Array} Encrypted buffer
|
|
204
|
+
* @returns {Uint8Array} Decrypted buffer
|
|
205
|
+
*/
|
|
206
|
+
decryptSync(encryptedData) {
|
|
207
|
+
if (!this.cipher || !this.macKey)
|
|
208
|
+
throw new Error('Session not established');
|
|
209
|
+
const packet = this.processDecrypt(encryptedData);
|
|
210
|
+
const valid = this.config.mac.verifySync(QuarkDashUtils.concatBytes(packet.metadata, packet.encrypted), this.macKey, packet.mac);
|
|
211
|
+
if (!valid)
|
|
212
|
+
throw new Error('MAC verification failed');
|
|
213
|
+
this.checkMetadata(packet.metadata);
|
|
214
|
+
return this.cipher.decryptSync(packet.encrypted);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Process decrypt
|
|
218
|
+
* @param encryptedData {Uint8Array} encrypted buffer
|
|
219
|
+
* @returns {QDEncryptedPacket} Parsed encrypted packet
|
|
220
|
+
* @private
|
|
221
|
+
*/
|
|
222
|
+
processDecrypt(encryptedData) {
|
|
223
|
+
if (encryptedData.length < 44)
|
|
224
|
+
throw new Error('Invalid ciphertext');
|
|
225
|
+
return {
|
|
226
|
+
metadata: encryptedData.slice(0, 12),
|
|
227
|
+
encrypted: encryptedData.slice(12, encryptedData.length - 32),
|
|
228
|
+
mac: encryptedData.slice(encryptedData.length - 32)
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Build meta-data
|
|
233
|
+
* @returns {Uint8Array} Meta-data buffer
|
|
234
|
+
* @private
|
|
235
|
+
*/
|
|
236
|
+
buildMetadata() {
|
|
237
|
+
const metadata = new Uint8Array(12);
|
|
238
|
+
const timestamp = BigInt(Date.now());
|
|
239
|
+
for (let i = 0; i < 8; i++)
|
|
240
|
+
metadata[i] = Number((timestamp >> BigInt(i * 8)) & 0xffn);
|
|
241
|
+
const seq = this.sendSeq++;
|
|
242
|
+
for (let i = 0; i < 4; i++)
|
|
243
|
+
metadata[8 + i] = (seq >> (i * 8)) & 0xFF;
|
|
244
|
+
return metadata;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Check Meta-Data
|
|
248
|
+
* @param metadata {Uint8Array} Meta-data buffer
|
|
249
|
+
* @private
|
|
250
|
+
*/
|
|
251
|
+
checkMetadata(metadata) {
|
|
252
|
+
const timestamp = QuarkDashUtils.readUint64(metadata, 0);
|
|
253
|
+
const now = Date.now();
|
|
254
|
+
if (Math.abs(now - Number(timestamp)) > this.config.timestampToleranceMs) {
|
|
255
|
+
throw new Error('Timestamp out of window');
|
|
256
|
+
}
|
|
257
|
+
const seq = QuarkDashUtils.readUint32(metadata, 8);
|
|
258
|
+
if (this.receivedPackets.has(seq))
|
|
259
|
+
throw new Error('Replay detected');
|
|
260
|
+
this.receivedPackets.add(seq);
|
|
261
|
+
if (this.receivedPackets.size > this.config.maxPacketWindow) {
|
|
262
|
+
const oldest = Math.min(...this.receivedPackets);
|
|
263
|
+
this.receivedPackets.delete(oldest);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Dispose QuarkDash Crypto
|
|
268
|
+
*/
|
|
269
|
+
dispose() {
|
|
270
|
+
if (this.sessionKey)
|
|
271
|
+
QuarkDashUtils.secureZero(this.sessionKey);
|
|
272
|
+
if (this.macKey)
|
|
273
|
+
QuarkDashUtils.secureZero(this.macKey);
|
|
274
|
+
this.sessionKey = null;
|
|
275
|
+
this.macKey = null;
|
|
276
|
+
this.cipher = null;
|
|
277
|
+
this.receivedPackets.clear();
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,6BAA6B;AAC7B,OAAO,EAAC,aAAa,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAEnD,OAAO,EAAC,YAAY,EAAC,MAAM,OAAO,CAAC;AACnC,OAAO,EAAC,YAAY,EAAC,MAAM,OAAO,CAAC;AACnC,OAAO,EAAC,oBAAoB,EAAC,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAuBvC;;GAEG;AACH,MAAM,eAAe,GAAsB;IACvC,MAAM,EAAE,UAAU,CAAC,QAAQ;IAC3B,GAAG,EAAE,IAAI,YAAY,EAAE;IACvB,GAAG,EAAE,IAAI,YAAY,EAAE;IACvB,WAAW,EAAE,IAAI,oBAAoB,EAAE;IACvC,eAAe,EAAE,IAAI;IACrB,oBAAoB,EAAE,MAAM;CAC/B,CAAA;AAED;;GAEG;AACH,MAAM,OAAO,SAAS;IAWlB;;;OAGG;IACH,YAAY,MAAkC;QAbtC,eAAU,GAAsB,IAAI,CAAC;QACrC,WAAM,GAAmB,IAAI,CAAC;QAC9B,WAAM,GAAsB,IAAI,CAAC;QACjC,YAAO,GAAG,CAAC,CAAC;QACZ,YAAO,GAAG,CAAC,CAAC;QACZ,oBAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QASxC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,MAAM,EAAE,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe;QACxB,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;QACjE,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,mBAAmB;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IACpC,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,iBAAiB,CAAC,aAAyB,EAAE,WAAoB;QAC1E,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAC9F,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAC3C,OAAO,UAAU,CAAC;QACtB,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,qBAAqB,CAAC,aAAyB,EAAE,WAAoB;QACxE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC5F,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;YACzC,OAAO,UAAU,CAAC;QACtB,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAAC,UAAsB;QAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACvF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACtG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACI,mBAAmB,CAAC,UAAsB;QAC7C,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACvF,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACpG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,iBAAiB,CAAC,YAAwB;QACpD,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/E,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACK,qBAAqB,CAAC,YAAwB;QAClD,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC7D,CAAC;IAED;;;;;OAKG;IACK,wBAAwB,CAAC,WAAwB,EAAE,YAAwB;QAC/E,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC/E,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACxC,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,OAAO,CAAC,aAAyB;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACrG,OAAO,cAAc,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,aAAyB;QACxC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACnG,OAAO,cAAc,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,OAAO,CAAC,aAAyB;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACnI,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACvD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,aAAyB;QACxC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACjI,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACvD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAAC,aAAyB;QAC5C,IAAI,aAAa,CAAC,MAAM,GAAG,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACrE,OAAO;YACH,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACpC,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,aAAa,CAAC,MAAM,GAAG,EAAE,CAAC;YAC7D,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE,CAAC;SACtD,CAAA;IACL,CAAC;IAED;;;;OAIG;IACK,aAAa;QACjB,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACrF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,QAAQ,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAClE,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACK,aAAa,CAAC,QAAoB;QACtC,MAAM,SAAS,GAAG,cAAc,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACtE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;YACjD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,IAAI,CAAC,UAAU;YAAE,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChE,IAAI,IAAI,CAAC,MAAM;YAAE,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;CACJ"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QuarkDash Crypto Library
|
|
3
|
+
*
|
|
4
|
+
* @git https://github.com/devsdaddy/quarkdash
|
|
5
|
+
* @version 1.0.0
|
|
6
|
+
* @author Elijah Rastorguev
|
|
7
|
+
* @build 1000
|
|
8
|
+
* @website https://dev.to/devsdaddy
|
|
9
|
+
*/
|
|
10
|
+
/* Export Types and Utils */
|
|
11
|
+
export * from "./types";
|
|
12
|
+
export * from "./utils";
|
|
13
|
+
/* Export KDF and MAC */
|
|
14
|
+
export * from "./kdf";
|
|
15
|
+
export * from "./mac";
|
|
16
|
+
/* Export Cipher and Ring-LWE */
|
|
17
|
+
export * from "./cipher";
|
|
18
|
+
export * from "./ringlwe";
|
|
19
|
+
/* Export Main Algorithm */
|
|
20
|
+
export * from "./crypto";
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,4BAA4B;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AAExB,wBAAwB;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AAEtB,gCAAgC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAE1B,2BAA2B;AAC3B,cAAc,UAAU,CAAC"}
|
package/dist/esm/kdf.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { QuarkDashUtils } from "./utils";
|
|
2
|
+
/**
|
|
3
|
+
* KDF implementation using Shake-256
|
|
4
|
+
*/
|
|
5
|
+
export class QuarkDashKDF {
|
|
6
|
+
/**
|
|
7
|
+
* Derive KDF async
|
|
8
|
+
* @param ikm {Uint8Array} IKM buffer
|
|
9
|
+
* @param salt {Uint8Array} Salt buffer
|
|
10
|
+
* @param info {Uint8Array} Meta buffer
|
|
11
|
+
* @param length {number} Buffer length
|
|
12
|
+
* @returns {Promise<Uint8Array>} Result
|
|
13
|
+
* TODO: GPU Calculations
|
|
14
|
+
*/
|
|
15
|
+
async derive(ikm, salt, info, length) {
|
|
16
|
+
const prk = await QuarkDashUtils.shake256(QuarkDashUtils.concatBytes(salt, ikm), 64);
|
|
17
|
+
const result = new Uint8Array(length);
|
|
18
|
+
let t = new Uint8Array(0);
|
|
19
|
+
let i = 1;
|
|
20
|
+
while (result.length < length) {
|
|
21
|
+
const input = QuarkDashUtils.concatBytes(t, info, new Uint8Array([i]));
|
|
22
|
+
t = await QuarkDashUtils.shake256(QuarkDashUtils.concatBytes(prk, input), 64);
|
|
23
|
+
const take = Math.min(t.length, length - result.length);
|
|
24
|
+
result.set(t.slice(0, take), result.length);
|
|
25
|
+
i++;
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Derive KDF sync
|
|
31
|
+
* @param ikm {Uint8Array} IKM buffer
|
|
32
|
+
* @param salt {Uint8Array} Salt buffer
|
|
33
|
+
* @param info {Uint8Array} Meta buffer
|
|
34
|
+
* @param length {number} Buffer length
|
|
35
|
+
* @returns {Uint8Array} Result
|
|
36
|
+
*/
|
|
37
|
+
deriveSync(ikm, salt, info, length) {
|
|
38
|
+
const prk = QuarkDashUtils.shake256Sync(QuarkDashUtils.concatBytes(salt, ikm), 64);
|
|
39
|
+
const result = new Uint8Array(length);
|
|
40
|
+
let t = new Uint8Array(0);
|
|
41
|
+
let i = 1;
|
|
42
|
+
while (result.length < length) {
|
|
43
|
+
const input = QuarkDashUtils.concatBytes(t, info, new Uint8Array([i]));
|
|
44
|
+
t = QuarkDashUtils.shake256Sync(QuarkDashUtils.concatBytes(prk, input), 64);
|
|
45
|
+
const take = Math.min(t.length, length - result.length);
|
|
46
|
+
result.set(t.slice(0, take), result.length);
|
|
47
|
+
i++;
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=kdf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kdf.js","sourceRoot":"","sources":["../../src/kdf.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,YAAY;IACrB;;;;;;;;OAQG;IACI,KAAK,CAAC,MAAM,CAAC,GAAe,EAAE,IAAgB,EAAE,IAAgB,EAAE,MAAc;QACnF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAe,CAAC;QACnG,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAe,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAe,CAAC;YACrF,CAAC,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC,EAAE,CAAC;QACR,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;;OAOG;IACI,UAAU,CAAC,GAAe,EAAE,IAAgB,EAAE,IAAgB,EAAE,MAAc;QACjF,MAAM,GAAG,GAAG,cAAc,CAAC,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACnF,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAe,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC,EAAE,CAAC;QACR,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
|