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.
Files changed (75) hide show
  1. package/.idea/modules.xml +8 -0
  2. package/.idea/quarkdash.iml +12 -0
  3. package/.idea/vcs.xml +6 -0
  4. package/LICENSE +21 -0
  5. package/README.md +161 -0
  6. package/coverage/clover.xml +470 -0
  7. package/coverage/coverage-final.json +8 -0
  8. package/coverage/lcov-report/base.css +224 -0
  9. package/coverage/lcov-report/block-navigation.js +87 -0
  10. package/coverage/lcov-report/cipher.ts.html +862 -0
  11. package/coverage/lcov-report/crypto.ts.html +1000 -0
  12. package/coverage/lcov-report/favicon.png +0 -0
  13. package/coverage/lcov-report/index.html +206 -0
  14. package/coverage/lcov-report/index.ts.html +151 -0
  15. package/coverage/lcov-report/kdf.ts.html +274 -0
  16. package/coverage/lcov-report/mac.ts.html +277 -0
  17. package/coverage/lcov-report/prettify.css +1 -0
  18. package/coverage/lcov-report/prettify.js +2 -0
  19. package/coverage/lcov-report/ringlwe.ts.html +895 -0
  20. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  21. package/coverage/lcov-report/sorter.js +210 -0
  22. package/coverage/lcov-report/utils.ts.html +1111 -0
  23. package/coverage/lcov.info +740 -0
  24. package/dist/cjs/cipher.js +265 -0
  25. package/dist/cjs/cipher.js.map +1 -0
  26. package/dist/cjs/crypto.js +284 -0
  27. package/dist/cjs/crypto.js.map +1 -0
  28. package/dist/cjs/index.js +37 -0
  29. package/dist/cjs/index.js.map +1 -0
  30. package/dist/cjs/kdf.js +56 -0
  31. package/dist/cjs/kdf.js.map +1 -0
  32. package/dist/cjs/mac.js +55 -0
  33. package/dist/cjs/mac.js.map +1 -0
  34. package/dist/cjs/ringlwe.js +267 -0
  35. package/dist/cjs/ringlwe.js.map +1 -0
  36. package/dist/cjs/types.js +3 -0
  37. package/dist/cjs/types.js.map +1 -0
  38. package/dist/cjs/utils.js +320 -0
  39. package/dist/cjs/utils.js.map +1 -0
  40. package/dist/esm/cipher.js +259 -0
  41. package/dist/esm/cipher.js.map +1 -0
  42. package/dist/esm/crypto.js +280 -0
  43. package/dist/esm/crypto.js.map +1 -0
  44. package/dist/esm/index.js +21 -0
  45. package/dist/esm/index.js.map +1 -0
  46. package/dist/esm/kdf.js +52 -0
  47. package/dist/esm/kdf.js.map +1 -0
  48. package/dist/esm/mac.js +51 -0
  49. package/dist/esm/mac.js.map +1 -0
  50. package/dist/esm/ringlwe.js +263 -0
  51. package/dist/esm/ringlwe.js.map +1 -0
  52. package/dist/esm/types.js +2 -0
  53. package/dist/esm/types.js.map +1 -0
  54. package/dist/esm/utils.js +313 -0
  55. package/dist/esm/utils.js.map +1 -0
  56. package/dist/types/cipher.d.ts +153 -0
  57. package/dist/types/crypto.d.ts +155 -0
  58. package/dist/types/index.d.ts +16 -0
  59. package/dist/types/kdf.d.ts +34 -0
  60. package/dist/types/mac.d.ts +47 -0
  61. package/dist/types/ringlwe.d.ts +127 -0
  62. package/dist/types/types.d.ts +69 -0
  63. package/dist/types/utils.d.ts +132 -0
  64. package/img/cover.png +0 -0
  65. package/package.json +63 -0
  66. package/src/cipher.ts +260 -0
  67. package/src/crypto.ts +306 -0
  68. package/src/index.ts +23 -0
  69. package/src/kdf.ts +64 -0
  70. package/src/mac.ts +65 -0
  71. package/src/ringlwe.ts +271 -0
  72. package/src/types.ts +75 -0
  73. package/src/utils.ts +343 -0
  74. package/tsconfig.cjs.json +7 -0
  75. package/tsconfig.json +18 -0
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuarkDashGimli = exports.QuarkDashChaCha = exports.CipherFactory = exports.CipherType = void 0;
4
+ const utils_1 = require("./utils");
5
+ /**
6
+ * Cipher Type
7
+ */
8
+ var CipherType;
9
+ (function (CipherType) {
10
+ CipherType[CipherType["ChaCha20"] = 0] = "ChaCha20";
11
+ CipherType[CipherType["Gimli"] = 1] = "Gimli";
12
+ })(CipherType || (exports.CipherType = CipherType = {}));
13
+ /**
14
+ * Cipher Factory
15
+ */
16
+ class CipherFactory {
17
+ /**
18
+ * Create Cipher
19
+ * @param algorithm {CipherType} Current cipher type
20
+ * @param key {Uint8Array} Key buffer
21
+ * @param nonce {Uint8Array} Nonce buffer
22
+ * @returns {ICipher} Cipher class instance
23
+ */
24
+ static create(algorithm, key, nonce) {
25
+ switch (algorithm) {
26
+ case CipherType.ChaCha20: return new QuarkDashChaCha(key, nonce);
27
+ case CipherType.Gimli: return new QuarkDashGimli(key, nonce);
28
+ default: throw new Error('Unsupported cipher type');
29
+ }
30
+ }
31
+ }
32
+ exports.CipherFactory = CipherFactory;
33
+ /**
34
+ * ChaCha20 Based Cipher Implementation
35
+ */
36
+ class QuarkDashChaCha {
37
+ /**
38
+ * Create ChaCha20 Cipher
39
+ * @param key {Uint8Array} Key buffer
40
+ * @param nonce {Uint8Array} Nonce buffer
41
+ */
42
+ constructor(key, nonce) {
43
+ if (key.length !== 32)
44
+ throw new Error('Key must be 32 bytes');
45
+ if (nonce.length !== 12)
46
+ throw new Error('Nonce must be 12 bytes');
47
+ this.key = key;
48
+ this.nonce = nonce;
49
+ }
50
+ /**
51
+ * Encrypt data async using ChaCha20
52
+ * @param data {Uint8Array} Raw data buffer
53
+ * @returns {Promise<Uint8Array>} Result buffer
54
+ * TODO: GPU Calculations
55
+ */
56
+ async encrypt(data) { return this.process(data); }
57
+ /**
58
+ * Decrypt data async using ChaCha20
59
+ * @param data {Uint8Array} Encrypted raw data buffer
60
+ * @returns {Promise<Uint8Array>} Result buffer
61
+ * TODO: GPU Calculations
62
+ */
63
+ async decrypt(data) { return this.process(data); }
64
+ /**
65
+ * Encrypt data sync using ChaCha20
66
+ * @param data {Uint8Array} Raw data buffer
67
+ * @returns {Uint8Array} Result buffer
68
+ */
69
+ encryptSync(data) { return this.process(data); }
70
+ /**
71
+ * Decrypt data sync using ChaCha20
72
+ * @param data {Uint8Array} Encrypted raw data buffer
73
+ * @returns {Uint8Array} Result buffer
74
+ */
75
+ decryptSync(data) { return this.process(data); }
76
+ /**
77
+ * Process ChaCha20 Cipher
78
+ * @param data {Uint8Array} Data for processing
79
+ * @returns {Uint8Array} Processing result
80
+ * @private
81
+ */
82
+ process(data) {
83
+ const out = new Uint8Array(data.length);
84
+ let block = 0;
85
+ let pos = 0;
86
+ while (pos < data.length) {
87
+ const ks = this.keystreamBlock(block);
88
+ const len = Math.min(64, data.length - pos);
89
+ for (let i = 0; i < len; i++)
90
+ out[pos + i] = data[pos + i] ^ ks[i];
91
+ pos += len;
92
+ block++;
93
+ }
94
+ return out;
95
+ }
96
+ /**
97
+ * Get keystream block
98
+ * @param counter {number} counter
99
+ * @returns {Uint8Array} result buffer
100
+ * @private
101
+ */
102
+ keystreamBlock(counter) {
103
+ const state = new Uint32Array(16);
104
+ state[0] = 0x61707865;
105
+ state[1] = 0x3320646e;
106
+ state[2] = 0x79622d32;
107
+ state[3] = 0x6b206574;
108
+ for (let i = 0; i < 8; i++)
109
+ state[4 + i] = utils_1.QuarkDashUtils.readU32(this.key, i * 4);
110
+ state[12] = counter;
111
+ for (let i = 0; i < 3; i++)
112
+ state[13 + i] = utils_1.QuarkDashUtils.readU32(this.nonce, i * 4);
113
+ const working = new Uint32Array(state);
114
+ for (let r = 0; r < 10; r++) {
115
+ this.quarterRound(working, 0, 4, 8, 12);
116
+ this.quarterRound(working, 1, 5, 9, 13);
117
+ this.quarterRound(working, 2, 6, 10, 14);
118
+ this.quarterRound(working, 3, 7, 11, 15);
119
+ this.quarterRound(working, 0, 5, 10, 15);
120
+ this.quarterRound(working, 1, 6, 11, 12);
121
+ this.quarterRound(working, 2, 7, 8, 13);
122
+ this.quarterRound(working, 3, 4, 9, 14);
123
+ }
124
+ for (let i = 0; i < 16; i++)
125
+ working[i] += state[i];
126
+ const out = new Uint8Array(64);
127
+ for (let i = 0; i < 16; i++)
128
+ utils_1.QuarkDashUtils.writeU32(working[i], out, i * 4);
129
+ return out;
130
+ }
131
+ /**
132
+ * Quarter Round
133
+ * @param s {Uint8Array} Buffer
134
+ * @param a {number}
135
+ * @param b {number}
136
+ * @param c {number}
137
+ * @param d {number}
138
+ * @private
139
+ */
140
+ quarterRound(s, a, b, c, d) {
141
+ s[a] += s[b];
142
+ s[d] ^= s[a];
143
+ s[d] = (s[d] << 16) | (s[d] >>> 16);
144
+ s[c] += s[d];
145
+ s[b] ^= s[c];
146
+ s[b] = (s[b] << 12) | (s[b] >>> 20);
147
+ s[a] += s[b];
148
+ s[d] ^= s[a];
149
+ s[d] = (s[d] << 8) | (s[d] >>> 24);
150
+ s[c] += s[d];
151
+ s[b] ^= s[c];
152
+ s[b] = (s[b] << 7) | (s[b] >>> 25);
153
+ }
154
+ }
155
+ exports.QuarkDashChaCha = QuarkDashChaCha;
156
+ /**
157
+ * Gimli Cipher
158
+ */
159
+ class QuarkDashGimli {
160
+ /**
161
+ * Create Gimli Cipher
162
+ * @param key {Uint8Array} Key buffer
163
+ * @param nonce {Uint8Array} Nonce buffer
164
+ */
165
+ constructor(key, nonce) {
166
+ if (key.length !== 32)
167
+ throw new Error('Key must be 32 bytes');
168
+ if (nonce.length !== 12)
169
+ throw new Error('Nonce must be 12 bytes');
170
+ this.key = key;
171
+ this.nonce = nonce;
172
+ }
173
+ /**
174
+ * Encrypt data async using Gimli
175
+ * @param data {Uint8Array} Raw data buffer
176
+ * @returns {Promise<Uint8Array>} Result buffer
177
+ * TODO: GPU Calculations
178
+ */
179
+ async encrypt(data) { return this.process(data); }
180
+ /**
181
+ * Decrypt data async using Gimli
182
+ * @param data {Uint8Array} Encrypted raw data buffer
183
+ * @returns {Promise<Uint8Array>} Result buffer
184
+ * TODO: GPU Calculations
185
+ */
186
+ async decrypt(data) { return this.process(data); }
187
+ /**
188
+ * Encrypt data sync using Gimli
189
+ * @param data {Uint8Array} Raw data buffer
190
+ * @returns {Uint8Array} Result buffer
191
+ */
192
+ encryptSync(data) { return this.process(data); }
193
+ /**
194
+ * Decrypt data sync using Gimli
195
+ * @param data {Uint8Array} Encrypted raw data buffer
196
+ * @returns {Uint8Array} Result buffer
197
+ */
198
+ decryptSync(data) { return this.process(data); }
199
+ /**
200
+ * Process Gimli Cipher
201
+ * @param data {Uint8Array} Input buffer
202
+ * @returns {Uint8Array} Output buffer
203
+ * @private
204
+ */
205
+ process(data) {
206
+ const out = new Uint8Array(data.length);
207
+ let block = 0;
208
+ let pos = 0;
209
+ while (pos < data.length) {
210
+ const ks = this.keystreamBlock(block);
211
+ const len = Math.min(48, data.length - pos);
212
+ for (let i = 0; i < len; i++)
213
+ out[pos + i] = data[pos + i] ^ ks[i];
214
+ pos += len;
215
+ block++;
216
+ }
217
+ return out;
218
+ }
219
+ /**
220
+ * Get keystream block
221
+ * @param counter {number} Counter
222
+ * @returns {Uint8Array} Result buffer
223
+ * @private
224
+ */
225
+ keystreamBlock(counter) {
226
+ const state = new Uint32Array(12);
227
+ for (let i = 0; i < 8; i++)
228
+ state[i] = utils_1.QuarkDashUtils.readU32(this.key, i * 4);
229
+ state[8] = utils_1.QuarkDashUtils.readU32(this.nonce, 0);
230
+ state[9] = utils_1.QuarkDashUtils.readU32(this.nonce, 4);
231
+ state[10] = utils_1.QuarkDashUtils.readU32(this.nonce, 8);
232
+ state[11] = counter;
233
+ for (let r = 0; r < 24; r++)
234
+ this.gimliRound(state, r);
235
+ const out = new Uint8Array(48);
236
+ for (let i = 0; i < 12; i++)
237
+ utils_1.QuarkDashUtils.writeU32(state[i], out, i * 4);
238
+ return out;
239
+ }
240
+ /**
241
+ * Gimli Round
242
+ * @param state {Uint32Array} State buffer
243
+ * @param round {number} Round number
244
+ * @private
245
+ */
246
+ gimliRound(state, round) {
247
+ for (let i = 0; i < 4; i++) {
248
+ const x = state[i], y = state[i + 4], z = state[i + 8];
249
+ const newX = x ^ (z << 1) ^ ((y & z) << 2);
250
+ const newY = y ^ x ^ ((x | z) << 1);
251
+ const newZ = z ^ y ^ ((x & y) << 3);
252
+ state[i] = newX;
253
+ state[i + 4] = newY;
254
+ state[i + 8] = newZ;
255
+ }
256
+ const t = state[1];
257
+ state[1] = state[2];
258
+ state[2] = state[3];
259
+ state[3] = t;
260
+ if ((round & 3) === 0)
261
+ state[0] ^= (0x9e377900 | round);
262
+ }
263
+ }
264
+ exports.QuarkDashGimli = QuarkDashGimli;
265
+ //# sourceMappingURL=cipher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cipher.js","sourceRoot":"","sources":["../../src/cipher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuarkDash = void 0;
4
+ /**
5
+ * QuarkDash Crypto Algorithm Implementation
6
+ *
7
+ * @git https://github.com/devsdaddy/quarkdash
8
+ * @version 1.0.0
9
+ * @author Elijah Rastorguev
10
+ * @build 1000
11
+ * @website https://dev.to/devsdaddy
12
+ */
13
+ /* Import Required Modules */
14
+ const cipher_1 = require("./cipher");
15
+ const kdf_1 = require("./kdf");
16
+ const mac_1 = require("./mac");
17
+ const ringlwe_1 = require("./ringlwe");
18
+ const utils_1 = require("./utils");
19
+ /**
20
+ * Default QuarkDash options
21
+ */
22
+ const DEFAULT_OPTIONS = {
23
+ cipher: cipher_1.CipherType.ChaCha20,
24
+ kdf: new kdf_1.QuarkDashKDF(),
25
+ mac: new mac_1.QuarkDashMAC(),
26
+ keyExchange: new ringlwe_1.QuarkDashKeyExchange(),
27
+ maxPacketWindow: 1000,
28
+ timestampToleranceMs: 300000,
29
+ };
30
+ /**
31
+ * QuarkDash Crypto Algorithm Implementation
32
+ */
33
+ class QuarkDash {
34
+ /**
35
+ * Create QuarkDash Crypto
36
+ * @param config {QuarkDashOptions} Crypto Options
37
+ */
38
+ constructor(config) {
39
+ this.sessionKey = null;
40
+ this.cipher = null;
41
+ this.macKey = null;
42
+ this.sendSeq = 0;
43
+ this.recvSeq = 0;
44
+ this.receivedPackets = new Set();
45
+ this.config = { ...DEFAULT_OPTIONS, ...config };
46
+ }
47
+ /**
48
+ * Generate key pair async
49
+ * @returns {Promise<Uint8Array>} Key pair buffer
50
+ * TODO: GPU Computing
51
+ */
52
+ async generateKeyPair() {
53
+ this.myKeyPair = await this.config.keyExchange.generateKeyPair();
54
+ return this.myKeyPair.publicKey;
55
+ }
56
+ /**
57
+ * Generate key pair sync
58
+ * @returns {Uint8Array} Key pair buffer
59
+ */
60
+ generateKeyPairSync() {
61
+ this.myKeyPair = this.config.keyExchange.generateKeyPairSync();
62
+ return this.myKeyPair.publicKey;
63
+ }
64
+ /**
65
+ * Initialize session async
66
+ * @param peerPublicKey {Uint8Array} Peer public key buffer
67
+ * @param isInitiator {boolean} Is session initiator
68
+ * @returns {Promise<Uint8Array|number>} Returns derived session key or null
69
+ * TODO: GPU Computing
70
+ */
71
+ async initializeSession(peerPublicKey, isInitiator) {
72
+ this.peerPublicKey = peerPublicKey;
73
+ if (!this.myKeyPair)
74
+ await this.generateKeyPair();
75
+ if (isInitiator) {
76
+ const { ciphertext, sharedSecret } = await this.config.keyExchange.encapsulate(peerPublicKey);
77
+ await this.deriveSessionKeys(sharedSecret);
78
+ return ciphertext;
79
+ }
80
+ else {
81
+ return null;
82
+ }
83
+ }
84
+ /**
85
+ * Initialize session sync
86
+ * @param peerPublicKey {Uint8Array} Peer public key buffer
87
+ * @param isInitiator {boolean} Is session initiator
88
+ * @returns {Uint8Array|number} Returns derived session key or null
89
+ */
90
+ initializeSessionSync(peerPublicKey, isInitiator) {
91
+ this.peerPublicKey = peerPublicKey;
92
+ if (!this.myKeyPair)
93
+ this.generateKeyPairSync();
94
+ if (isInitiator) {
95
+ const { ciphertext, sharedSecret } = this.config.keyExchange.encapsulateSync(peerPublicKey);
96
+ this.deriveSessionKeysSync(sharedSecret);
97
+ return ciphertext;
98
+ }
99
+ else {
100
+ return null;
101
+ }
102
+ }
103
+ /**
104
+ * Finalize session async
105
+ * @param ciphertext {Uint8Array} Cipher text buffer
106
+ * TODO: GPU Computing
107
+ */
108
+ async finalizeSession(ciphertext) {
109
+ if (!this.myKeyPair || !this.peerPublicKey)
110
+ throw new Error('Session not initialized');
111
+ const sharedSecret = await this.config.keyExchange.decapsulate(this.myKeyPair.privateKey, ciphertext);
112
+ await this.deriveSessionKeys(sharedSecret);
113
+ }
114
+ /**
115
+ * Finalize session sync
116
+ * @param ciphertext {Uint8Array} Cipher text buffer
117
+ */
118
+ finalizeSessionSync(ciphertext) {
119
+ if (!this.myKeyPair || !this.peerPublicKey)
120
+ throw new Error('Session not initialized');
121
+ const sharedSecret = this.config.keyExchange.decapsulateSync(this.myKeyPair.privateKey, ciphertext);
122
+ this.deriveSessionKeysSync(sharedSecret);
123
+ }
124
+ /**
125
+ * Derive session keys async
126
+ * @param sharedSecret {Uint8Array} Shared secret buffer
127
+ * @private
128
+ * TODO: GPU Computing
129
+ */
130
+ async deriveSessionKeys(sharedSecret) {
131
+ const salt = utils_1.QuarkDashUtils.randomBytes(32);
132
+ const info = utils_1.QuarkDashUtils.textToBytes('session-key');
133
+ const keyMaterial = await this.config.kdf.derive(sharedSecret, salt, info, 64);
134
+ this.processDeriveSessionKeys(keyMaterial, sharedSecret);
135
+ }
136
+ /**
137
+ * Derive session keys sync
138
+ * @param sharedSecret {Uint8Array} Shared secret buffer
139
+ * @private
140
+ */
141
+ deriveSessionKeysSync(sharedSecret) {
142
+ const salt = utils_1.QuarkDashUtils.randomBytes(32);
143
+ const info = utils_1.QuarkDashUtils.textToBytes('session-key');
144
+ const keyMaterial = this.config.kdf.deriveSync(sharedSecret, salt, info, 64);
145
+ this.processDeriveSessionKeys(keyMaterial, sharedSecret);
146
+ }
147
+ /**
148
+ * Process derive session keys
149
+ * @param keyMaterial {Uint8Array} Key material buffer
150
+ * @param sharedSecret {Uint8Array} Shared secret buffer
151
+ * @private
152
+ */
153
+ processDeriveSessionKeys(keyMaterial, sharedSecret) {
154
+ this.sessionKey = keyMaterial.slice(0, 32);
155
+ this.macKey = keyMaterial.slice(32, 64);
156
+ const nonce = new Uint8Array(12);
157
+ this.cipher = cipher_1.CipherFactory.create(this.config.cipher, this.sessionKey, nonce);
158
+ utils_1.QuarkDashUtils.secureZero(sharedSecret);
159
+ utils_1.QuarkDashUtils.secureZero(keyMaterial);
160
+ }
161
+ /**
162
+ * Encrypt sync
163
+ * @param decryptedData {Uint8Array} Decrypted buffer
164
+ * @returns {Promise<Uint8Array>} Encrypted buffer
165
+ * TODO: GPU Computing
166
+ */
167
+ async encrypt(decryptedData) {
168
+ if (!this.cipher || !this.macKey)
169
+ throw new Error('Session not established');
170
+ const metadata = this.buildMetadata();
171
+ const encrypted = await this.cipher.encrypt(decryptedData);
172
+ const mac = await this.config.mac.sign(utils_1.QuarkDashUtils.concatBytes(metadata, encrypted), this.macKey);
173
+ return utils_1.QuarkDashUtils.concatBytes(metadata, encrypted, mac);
174
+ }
175
+ /**
176
+ * Encrypt sync
177
+ * @param decryptedData {Uint8Array} Decrypted buffer
178
+ * @returns {Uint8Array} Encrypted buffer
179
+ */
180
+ encryptSync(decryptedData) {
181
+ if (!this.cipher || !this.macKey)
182
+ throw new Error('Session not established');
183
+ const metadata = this.buildMetadata();
184
+ const encrypted = this.cipher.encryptSync(decryptedData);
185
+ const mac = this.config.mac.signSync(utils_1.QuarkDashUtils.concatBytes(metadata, encrypted), this.macKey);
186
+ return utils_1.QuarkDashUtils.concatBytes(metadata, encrypted, mac);
187
+ }
188
+ /**
189
+ * Decrypt async
190
+ * @param encryptedData {Uint8Array} Encrypted buffer
191
+ * @returns {Promise<Uint8Array>} Decrypted buffer
192
+ * TODO: GPU Computing
193
+ */
194
+ async decrypt(encryptedData) {
195
+ if (!this.cipher || !this.macKey)
196
+ throw new Error('Session not established');
197
+ const packet = this.processDecrypt(encryptedData);
198
+ const valid = await this.config.mac.verify(utils_1.QuarkDashUtils.concatBytes(packet.metadata, packet.encrypted), this.macKey, packet.mac);
199
+ if (!valid)
200
+ throw new Error('MAC verification failed');
201
+ this.checkMetadata(packet.metadata);
202
+ return await this.cipher.decrypt(packet.encrypted);
203
+ }
204
+ /**
205
+ * Decrypt sync
206
+ * @param encryptedData {Uint8Array} Encrypted buffer
207
+ * @returns {Uint8Array} Decrypted buffer
208
+ */
209
+ decryptSync(encryptedData) {
210
+ if (!this.cipher || !this.macKey)
211
+ throw new Error('Session not established');
212
+ const packet = this.processDecrypt(encryptedData);
213
+ const valid = this.config.mac.verifySync(utils_1.QuarkDashUtils.concatBytes(packet.metadata, packet.encrypted), this.macKey, packet.mac);
214
+ if (!valid)
215
+ throw new Error('MAC verification failed');
216
+ this.checkMetadata(packet.metadata);
217
+ return this.cipher.decryptSync(packet.encrypted);
218
+ }
219
+ /**
220
+ * Process decrypt
221
+ * @param encryptedData {Uint8Array} encrypted buffer
222
+ * @returns {QDEncryptedPacket} Parsed encrypted packet
223
+ * @private
224
+ */
225
+ processDecrypt(encryptedData) {
226
+ if (encryptedData.length < 44)
227
+ throw new Error('Invalid ciphertext');
228
+ return {
229
+ metadata: encryptedData.slice(0, 12),
230
+ encrypted: encryptedData.slice(12, encryptedData.length - 32),
231
+ mac: encryptedData.slice(encryptedData.length - 32)
232
+ };
233
+ }
234
+ /**
235
+ * Build meta-data
236
+ * @returns {Uint8Array} Meta-data buffer
237
+ * @private
238
+ */
239
+ buildMetadata() {
240
+ const metadata = new Uint8Array(12);
241
+ const timestamp = BigInt(Date.now());
242
+ for (let i = 0; i < 8; i++)
243
+ metadata[i] = Number((timestamp >> BigInt(i * 8)) & 0xffn);
244
+ const seq = this.sendSeq++;
245
+ for (let i = 0; i < 4; i++)
246
+ metadata[8 + i] = (seq >> (i * 8)) & 0xFF;
247
+ return metadata;
248
+ }
249
+ /**
250
+ * Check Meta-Data
251
+ * @param metadata {Uint8Array} Meta-data buffer
252
+ * @private
253
+ */
254
+ checkMetadata(metadata) {
255
+ const timestamp = utils_1.QuarkDashUtils.readUint64(metadata, 0);
256
+ const now = Date.now();
257
+ if (Math.abs(now - Number(timestamp)) > this.config.timestampToleranceMs) {
258
+ throw new Error('Timestamp out of window');
259
+ }
260
+ const seq = utils_1.QuarkDashUtils.readUint32(metadata, 8);
261
+ if (this.receivedPackets.has(seq))
262
+ throw new Error('Replay detected');
263
+ this.receivedPackets.add(seq);
264
+ if (this.receivedPackets.size > this.config.maxPacketWindow) {
265
+ const oldest = Math.min(...this.receivedPackets);
266
+ this.receivedPackets.delete(oldest);
267
+ }
268
+ }
269
+ /**
270
+ * Dispose QuarkDash Crypto
271
+ */
272
+ dispose() {
273
+ if (this.sessionKey)
274
+ utils_1.QuarkDashUtils.secureZero(this.sessionKey);
275
+ if (this.macKey)
276
+ utils_1.QuarkDashUtils.secureZero(this.macKey);
277
+ this.sessionKey = null;
278
+ this.macKey = null;
279
+ this.cipher = null;
280
+ this.receivedPackets.clear();
281
+ }
282
+ }
283
+ exports.QuarkDash = QuarkDash;
284
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ /**
18
+ * QuarkDash Crypto Library
19
+ *
20
+ * @git https://github.com/devsdaddy/quarkdash
21
+ * @version 1.0.0
22
+ * @author Elijah Rastorguev
23
+ * @build 1000
24
+ * @website https://dev.to/devsdaddy
25
+ */
26
+ /* Export Types and Utils */
27
+ __exportStar(require("./types"), exports);
28
+ __exportStar(require("./utils"), exports);
29
+ /* Export KDF and MAC */
30
+ __exportStar(require("./kdf"), exports);
31
+ __exportStar(require("./mac"), exports);
32
+ /* Export Cipher and Ring-LWE */
33
+ __exportStar(require("./cipher"), exports);
34
+ __exportStar(require("./ringlwe"), exports);
35
+ /* Export Main Algorithm */
36
+ __exportStar(require("./crypto"), exports);
37
+ //# 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,0CAAwB;AACxB,0CAAwB;AAExB,wBAAwB;AACxB,wCAAsB;AACtB,wCAAsB;AAEtB,gCAAgC;AAChC,2CAAyB;AACzB,4CAA0B;AAE1B,2BAA2B;AAC3B,2CAAyB"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuarkDashKDF = void 0;
4
+ const utils_1 = require("./utils");
5
+ /**
6
+ * KDF implementation using Shake-256
7
+ */
8
+ class QuarkDashKDF {
9
+ /**
10
+ * Derive KDF async
11
+ * @param ikm {Uint8Array} IKM buffer
12
+ * @param salt {Uint8Array} Salt buffer
13
+ * @param info {Uint8Array} Meta buffer
14
+ * @param length {number} Buffer length
15
+ * @returns {Promise<Uint8Array>} Result
16
+ * TODO: GPU Calculations
17
+ */
18
+ async derive(ikm, salt, info, length) {
19
+ const prk = await utils_1.QuarkDashUtils.shake256(utils_1.QuarkDashUtils.concatBytes(salt, ikm), 64);
20
+ const result = new Uint8Array(length);
21
+ let t = new Uint8Array(0);
22
+ let i = 1;
23
+ while (result.length < length) {
24
+ const input = utils_1.QuarkDashUtils.concatBytes(t, info, new Uint8Array([i]));
25
+ t = await utils_1.QuarkDashUtils.shake256(utils_1.QuarkDashUtils.concatBytes(prk, input), 64);
26
+ const take = Math.min(t.length, length - result.length);
27
+ result.set(t.slice(0, take), result.length);
28
+ i++;
29
+ }
30
+ return result;
31
+ }
32
+ /**
33
+ * Derive KDF sync
34
+ * @param ikm {Uint8Array} IKM buffer
35
+ * @param salt {Uint8Array} Salt buffer
36
+ * @param info {Uint8Array} Meta buffer
37
+ * @param length {number} Buffer length
38
+ * @returns {Uint8Array} Result
39
+ */
40
+ deriveSync(ikm, salt, info, length) {
41
+ const prk = utils_1.QuarkDashUtils.shake256Sync(utils_1.QuarkDashUtils.concatBytes(salt, ikm), 64);
42
+ const result = new Uint8Array(length);
43
+ let t = new Uint8Array(0);
44
+ let i = 1;
45
+ while (result.length < length) {
46
+ const input = utils_1.QuarkDashUtils.concatBytes(t, info, new Uint8Array([i]));
47
+ t = utils_1.QuarkDashUtils.shake256Sync(utils_1.QuarkDashUtils.concatBytes(prk, input), 64);
48
+ const take = Math.min(t.length, length - result.length);
49
+ result.set(t.slice(0, take), result.length);
50
+ i++;
51
+ }
52
+ return result;
53
+ }
54
+ }
55
+ exports.QuarkDashKDF = QuarkDashKDF;
56
+ //# sourceMappingURL=kdf.js.map