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
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QuarkDash ChaCha 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 { QuarkDashUtils } from "../core/utils";
|
|
12
|
+
/**
|
|
13
|
+
* ChaCha20 Based Cipher Implementation
|
|
14
|
+
*/
|
|
15
|
+
export class QuarkDashChaCha {
|
|
16
|
+
/**
|
|
17
|
+
* Create ChaCha20 Cipher
|
|
18
|
+
* @param key {Uint8Array} Key buffer
|
|
19
|
+
* @param nonce {Uint8Array} Nonce buffer
|
|
20
|
+
*/
|
|
21
|
+
constructor(key, nonce) {
|
|
22
|
+
if (key.length !== 32)
|
|
23
|
+
throw new Error('Key must be 32 bytes');
|
|
24
|
+
if (nonce.length !== 12)
|
|
25
|
+
throw new Error('Nonce must be 12 bytes');
|
|
26
|
+
this.key = key;
|
|
27
|
+
this.nonce = nonce;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Encrypt data async using ChaCha20
|
|
31
|
+
* @param data {Uint8Array} Raw data buffer
|
|
32
|
+
* @returns {Promise<Uint8Array>} Result buffer
|
|
33
|
+
* TODO: GPU Calculations
|
|
34
|
+
*/
|
|
35
|
+
async encrypt(data) { return this.process(data); }
|
|
36
|
+
/**
|
|
37
|
+
* Decrypt data async using ChaCha20
|
|
38
|
+
* @param data {Uint8Array} Encrypted raw data buffer
|
|
39
|
+
* @returns {Promise<Uint8Array>} Result buffer
|
|
40
|
+
* TODO: GPU Calculations
|
|
41
|
+
*/
|
|
42
|
+
async decrypt(data) { return this.process(data); }
|
|
43
|
+
/**
|
|
44
|
+
* Encrypt data sync using ChaCha20
|
|
45
|
+
* @param data {Uint8Array} Raw data buffer
|
|
46
|
+
* @returns {Uint8Array} Result buffer
|
|
47
|
+
*/
|
|
48
|
+
encryptSync(data) { return this.process(data); }
|
|
49
|
+
/**
|
|
50
|
+
* Decrypt data sync using ChaCha20
|
|
51
|
+
* @param data {Uint8Array} Encrypted raw data buffer
|
|
52
|
+
* @returns {Uint8Array} Result buffer
|
|
53
|
+
*/
|
|
54
|
+
decryptSync(data) { return this.process(data); }
|
|
55
|
+
/**
|
|
56
|
+
* Process ChaCha20 Cipher
|
|
57
|
+
* @param data {Uint8Array} Data for processing
|
|
58
|
+
* @returns {Uint8Array} Processing result
|
|
59
|
+
* @private
|
|
60
|
+
*/
|
|
61
|
+
process(data) {
|
|
62
|
+
const out = new Uint8Array(data.length);
|
|
63
|
+
let offset = 0;
|
|
64
|
+
let blockCounter = 0;
|
|
65
|
+
while (offset < data.length) {
|
|
66
|
+
const blocksRemaining = Math.ceil((data.length - offset) / QuarkDashChaCha.BLOCK_SIZE);
|
|
67
|
+
const blocksThisBatch = Math.min(QuarkDashChaCha.BLOCKS_PER_BATCH, blocksRemaining);
|
|
68
|
+
const batchSize = blocksThisBatch * QuarkDashChaCha.BLOCK_SIZE;
|
|
69
|
+
const keystream = this.generateKeystreamBatch(blockCounter, blocksThisBatch);
|
|
70
|
+
const bytesToProcess = Math.min(batchSize, data.length - offset);
|
|
71
|
+
for (let i = 0; i < bytesToProcess; i++) {
|
|
72
|
+
out[offset + i] = data[offset + i] ^ keystream[i];
|
|
73
|
+
}
|
|
74
|
+
offset += bytesToProcess;
|
|
75
|
+
blockCounter += blocksThisBatch;
|
|
76
|
+
}
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Quarter Round
|
|
81
|
+
* @param s {Uint8Array} Buffer
|
|
82
|
+
* @param a {number}
|
|
83
|
+
* @param b {number}
|
|
84
|
+
* @param c {number}
|
|
85
|
+
* @param d {number}
|
|
86
|
+
* @private
|
|
87
|
+
*/
|
|
88
|
+
quarterRound(s, a, b, c, d) {
|
|
89
|
+
s[a] += s[b];
|
|
90
|
+
s[d] ^= s[a];
|
|
91
|
+
s[d] = (s[d] << 16) | (s[d] >>> 16);
|
|
92
|
+
s[c] += s[d];
|
|
93
|
+
s[b] ^= s[c];
|
|
94
|
+
s[b] = (s[b] << 12) | (s[b] >>> 20);
|
|
95
|
+
s[a] += s[b];
|
|
96
|
+
s[d] ^= s[a];
|
|
97
|
+
s[d] = (s[d] << 8) | (s[d] >>> 24);
|
|
98
|
+
s[c] += s[d];
|
|
99
|
+
s[b] ^= s[c];
|
|
100
|
+
s[b] = (s[b] << 7) | (s[b] >>> 25);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Generate Keystream Batch
|
|
104
|
+
* @param startCounter {number} Start counter
|
|
105
|
+
* @param count {number} Count
|
|
106
|
+
* @private
|
|
107
|
+
*/
|
|
108
|
+
generateKeystreamBatch(startCounter, count) {
|
|
109
|
+
const out = new Uint8Array(count * QuarkDashChaCha.BLOCK_SIZE);
|
|
110
|
+
const state = new Uint32Array(16);
|
|
111
|
+
state[0] = 0x61707865;
|
|
112
|
+
state[1] = 0x3320646e;
|
|
113
|
+
state[2] = 0x79622d32;
|
|
114
|
+
state[3] = 0x6b206574;
|
|
115
|
+
// Ключ
|
|
116
|
+
for (let i = 0; i < 8; i++) {
|
|
117
|
+
state[4 + i] = QuarkDashUtils.readUint32LE(this.key, i * 4);
|
|
118
|
+
}
|
|
119
|
+
// Nonce
|
|
120
|
+
for (let i = 0; i < 3; i++) {
|
|
121
|
+
state[13 + i] = QuarkDashUtils.readUint32LE(this.nonce, i * 4);
|
|
122
|
+
}
|
|
123
|
+
for (let block = 0; block < count; block++) {
|
|
124
|
+
state[12] = startCounter + block;
|
|
125
|
+
const working = new Uint32Array(state);
|
|
126
|
+
for (let round = 0; round < 10; round++) {
|
|
127
|
+
this.quarterRound(working, 0, 4, 8, 12);
|
|
128
|
+
this.quarterRound(working, 1, 5, 9, 13);
|
|
129
|
+
this.quarterRound(working, 2, 6, 10, 14);
|
|
130
|
+
this.quarterRound(working, 3, 7, 11, 15);
|
|
131
|
+
this.quarterRound(working, 0, 5, 10, 15);
|
|
132
|
+
this.quarterRound(working, 1, 6, 11, 12);
|
|
133
|
+
this.quarterRound(working, 2, 7, 8, 13);
|
|
134
|
+
this.quarterRound(working, 3, 4, 9, 14);
|
|
135
|
+
}
|
|
136
|
+
for (let i = 0; i < 16; i++) {
|
|
137
|
+
working[i] += state[i];
|
|
138
|
+
}
|
|
139
|
+
const outOffset = block * QuarkDashChaCha.BLOCK_SIZE;
|
|
140
|
+
for (let i = 0; i < 16; i++) {
|
|
141
|
+
QuarkDashUtils.writeUint32LE(working[i], out, outOffset + i * 4);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return out;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
QuarkDashChaCha.BLOCK_SIZE = 64;
|
|
148
|
+
QuarkDashChaCha.BLOCKS_PER_BATCH = 32; // 2048 байт за раз
|
|
149
|
+
QuarkDashChaCha.BATCH_SIZE = QuarkDashChaCha.BLOCK_SIZE * QuarkDashChaCha.BLOCKS_PER_BATCH;
|
|
150
|
+
//# sourceMappingURL=chacha.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chacha.js","sourceRoot":"","sources":["../../../src/cipher/chacha.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { QuarkDashChaCha } from "./chacha";
|
|
2
|
+
import { QuarkDashGimli } from "./gimli";
|
|
3
|
+
/**
|
|
4
|
+
* Cipher Type
|
|
5
|
+
*/
|
|
6
|
+
export var CipherType;
|
|
7
|
+
(function (CipherType) {
|
|
8
|
+
CipherType[CipherType["ChaCha20"] = 0] = "ChaCha20";
|
|
9
|
+
CipherType[CipherType["Gimli"] = 1] = "Gimli";
|
|
10
|
+
})(CipherType || (CipherType = {}));
|
|
11
|
+
/**
|
|
12
|
+
* Cipher Factory
|
|
13
|
+
*/
|
|
14
|
+
export class CipherFactory {
|
|
15
|
+
/**
|
|
16
|
+
* Create Cipher
|
|
17
|
+
* @param algorithm {CipherType} Current cipher type
|
|
18
|
+
* @param key {Uint8Array} Key buffer
|
|
19
|
+
* @param nonce {Uint8Array} Nonce buffer
|
|
20
|
+
* @returns {ICipher} Cipher class instance
|
|
21
|
+
*/
|
|
22
|
+
static create(algorithm, key, nonce) {
|
|
23
|
+
switch (algorithm) {
|
|
24
|
+
case CipherType.ChaCha20: return new QuarkDashChaCha(key, nonce);
|
|
25
|
+
case CipherType.Gimli: return new QuarkDashGimli(key, nonce);
|
|
26
|
+
default: throw new Error('Unsupported cipher type');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=cipher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cipher.js","sourceRoot":"","sources":["../../../src/cipher/cipher.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,eAAe,EAAC,MAAM,UAAU,CAAC;AACzC,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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QuarkDash Gimli 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 { QuarkDashUtils } from "../core/utils";
|
|
12
|
+
/**
|
|
13
|
+
* Gimli Cipher
|
|
14
|
+
*/
|
|
15
|
+
export class QuarkDashGimli {
|
|
16
|
+
/**
|
|
17
|
+
* Create Gimli Cipher
|
|
18
|
+
* @param key {Uint8Array} Key buffer
|
|
19
|
+
* @param nonce {Uint8Array} Nonce buffer
|
|
20
|
+
*/
|
|
21
|
+
constructor(key, nonce) {
|
|
22
|
+
if (key.length !== 32)
|
|
23
|
+
throw new Error('Key must be 32 bytes');
|
|
24
|
+
if (nonce.length !== 12)
|
|
25
|
+
throw new Error('Nonce must be 12 bytes');
|
|
26
|
+
this.key = key;
|
|
27
|
+
this.nonce = nonce;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Encrypt data async using Gimli
|
|
31
|
+
* @param data {Uint8Array} Raw data buffer
|
|
32
|
+
* @returns {Promise<Uint8Array>} Result buffer
|
|
33
|
+
* TODO: GPU Calculations
|
|
34
|
+
*/
|
|
35
|
+
async encrypt(data) { return this.process(data); }
|
|
36
|
+
/**
|
|
37
|
+
* Decrypt data async using Gimli
|
|
38
|
+
* @param data {Uint8Array} Encrypted raw data buffer
|
|
39
|
+
* @returns {Promise<Uint8Array>} Result buffer
|
|
40
|
+
* TODO: GPU Calculations
|
|
41
|
+
*/
|
|
42
|
+
async decrypt(data) { return this.process(data); }
|
|
43
|
+
/**
|
|
44
|
+
* Encrypt data sync using Gimli
|
|
45
|
+
* @param data {Uint8Array} Raw data buffer
|
|
46
|
+
* @returns {Uint8Array} Result buffer
|
|
47
|
+
*/
|
|
48
|
+
encryptSync(data) { return this.process(data); }
|
|
49
|
+
/**
|
|
50
|
+
* Decrypt data sync using Gimli
|
|
51
|
+
* @param data {Uint8Array} Encrypted raw data buffer
|
|
52
|
+
* @returns {Uint8Array} Result buffer
|
|
53
|
+
*/
|
|
54
|
+
decryptSync(data) { return this.process(data); }
|
|
55
|
+
/**
|
|
56
|
+
* Process Gimli Cipher
|
|
57
|
+
* @param data {Uint8Array} Input buffer
|
|
58
|
+
* @returns {Uint8Array} Output buffer
|
|
59
|
+
* @private
|
|
60
|
+
*/
|
|
61
|
+
process(data) {
|
|
62
|
+
const out = new Uint8Array(data.length);
|
|
63
|
+
let offset = 0;
|
|
64
|
+
let blockCounter = 0;
|
|
65
|
+
while (offset < data.length) {
|
|
66
|
+
const blocksRemaining = Math.ceil((data.length - offset) / QuarkDashGimli.BLOCK_SIZE);
|
|
67
|
+
const blocksThisBatch = Math.min(QuarkDashGimli.BLOCKS_PER_BATCH, blocksRemaining);
|
|
68
|
+
const batchSize = blocksThisBatch * QuarkDashGimli.BLOCK_SIZE;
|
|
69
|
+
const keystream = this.generateKeystreamBatch(blockCounter, blocksThisBatch);
|
|
70
|
+
const bytesToProcess = Math.min(batchSize, data.length - offset);
|
|
71
|
+
for (let i = 0; i < bytesToProcess; i++) {
|
|
72
|
+
out[offset + i] = data[offset + i] ^ keystream[i];
|
|
73
|
+
}
|
|
74
|
+
offset += bytesToProcess;
|
|
75
|
+
blockCounter += blocksThisBatch;
|
|
76
|
+
}
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Generate keystream batch
|
|
81
|
+
* @param startCounter {number} Start counter
|
|
82
|
+
* @param count {number} Count
|
|
83
|
+
* @private
|
|
84
|
+
*/
|
|
85
|
+
generateKeystreamBatch(startCounter, count) {
|
|
86
|
+
const out = new Uint8Array(count * QuarkDashGimli.BLOCK_SIZE);
|
|
87
|
+
const state = new Uint32Array(12);
|
|
88
|
+
for (let i = 0; i < 8; i++) {
|
|
89
|
+
state[i] = QuarkDashUtils.readUint32LE(this.key, i * 4);
|
|
90
|
+
}
|
|
91
|
+
// Nonce
|
|
92
|
+
state[8] = QuarkDashUtils.readUint32LE(this.nonce, 0);
|
|
93
|
+
state[9] = QuarkDashUtils.readUint32LE(this.nonce, 4);
|
|
94
|
+
state[10] = QuarkDashUtils.readUint32LE(this.nonce, 8);
|
|
95
|
+
for (let block = 0; block < count; block++) {
|
|
96
|
+
state[11] = startCounter + block;
|
|
97
|
+
const working = new Uint32Array(state);
|
|
98
|
+
for (let round = 0; round < 24; round++) {
|
|
99
|
+
this.gimliRound(working, round);
|
|
100
|
+
}
|
|
101
|
+
const outOffset = block * QuarkDashGimli.BLOCK_SIZE;
|
|
102
|
+
for (let i = 0; i < 12; i++) {
|
|
103
|
+
QuarkDashUtils.writeUint32LE(working[i], out, outOffset + i * 4);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return out;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Gimli Round
|
|
110
|
+
* @param state {Uint32Array} State buffer
|
|
111
|
+
* @param round {number} Round number
|
|
112
|
+
* @private
|
|
113
|
+
*/
|
|
114
|
+
gimliRound(state, round) {
|
|
115
|
+
for (let i = 0; i < 4; i++) {
|
|
116
|
+
const x = state[i];
|
|
117
|
+
const y = state[i + 4];
|
|
118
|
+
const z = state[i + 8];
|
|
119
|
+
const newX = x ^ (z << 1) ^ ((y & z) << 2);
|
|
120
|
+
const newY = y ^ x ^ ((x | z) << 1);
|
|
121
|
+
const newZ = z ^ y ^ ((x & y) << 3);
|
|
122
|
+
state[i] = newX;
|
|
123
|
+
state[i + 4] = newY;
|
|
124
|
+
state[i + 8] = newZ;
|
|
125
|
+
}
|
|
126
|
+
// Перестановка слов
|
|
127
|
+
const t = state[1];
|
|
128
|
+
state[1] = state[2];
|
|
129
|
+
state[2] = state[3];
|
|
130
|
+
state[3] = t;
|
|
131
|
+
if ((round & 3) === 0) {
|
|
132
|
+
state[0] ^= (0x9e377900 | round);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
QuarkDashGimli.BLOCK_SIZE = 48;
|
|
137
|
+
QuarkDashGimli.BLOCKS_PER_BATCH = 32; // 1536 байт за раз
|
|
138
|
+
QuarkDashGimli.BATCH_SIZE = QuarkDashGimli.BLOCK_SIZE * QuarkDashGimli.BLOCKS_PER_BATCH;
|
|
139
|
+
//# sourceMappingURL=gimli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gimli.js","sourceRoot":"","sources":["../../../src/cipher/gimli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kdf.js","sourceRoot":"","sources":["../../../src/core/kdf.ts"],"names":[],"mappings":"AAYA,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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { QuarkDashUtils } from "./utils";
|
|
2
|
+
import { Shake256, Shake256Wasm, isWasmShake } from "../hash/shake";
|
|
3
|
+
/**
|
|
4
|
+
* MAC implementation using Shake-256
|
|
5
|
+
*/
|
|
6
|
+
export class QuarkDashMAC {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.tempBuffer = new Uint8Array(64 * 1024);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Sign data async
|
|
12
|
+
* @param data {Uint8Array} Data buffer
|
|
13
|
+
* @param key {Uint8Array} Key buffer
|
|
14
|
+
* @returns {Promise<Uint8Array>} Signed result buffer
|
|
15
|
+
* TODO: GPU Calculations
|
|
16
|
+
*/
|
|
17
|
+
async sign(data, key) {
|
|
18
|
+
const full = QuarkDashUtils.concatBytes(key, data);
|
|
19
|
+
return (isWasmShake()) ? Shake256Wasm.shake256Wasm(full, 32) : Shake256.hash(full, 32);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Verify async
|
|
23
|
+
* @param data {Uint8Array} data buffer
|
|
24
|
+
* @param key {Uint8Array} key buffer
|
|
25
|
+
* @param tag {Uint8Array} tag buffer
|
|
26
|
+
* @returns {Promise<boolean>} Is verified?
|
|
27
|
+
* TODO: GPU Calculations
|
|
28
|
+
*/
|
|
29
|
+
async verify(data, key, tag) {
|
|
30
|
+
const expected = await this.sign(data, key);
|
|
31
|
+
return QuarkDashUtils.constantTimeEqual(expected, tag);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Sign two async
|
|
35
|
+
* @param data1 {Uint8Array} First buffer
|
|
36
|
+
* @param data2 {Uint8Array} Second buffer
|
|
37
|
+
* @param key {Uint8Array} Key
|
|
38
|
+
* @returns {Promise<Uint8Array>}
|
|
39
|
+
*/
|
|
40
|
+
async signTwo(data1, data2, key) {
|
|
41
|
+
const totalLen = key.length + data1.length + data2.length;
|
|
42
|
+
if (totalLen > this.tempBuffer.length) {
|
|
43
|
+
this.tempBuffer = new Uint8Array(totalLen);
|
|
44
|
+
}
|
|
45
|
+
this.tempBuffer.set(key, 0);
|
|
46
|
+
this.tempBuffer.set(data1, key.length);
|
|
47
|
+
this.tempBuffer.set(data2, key.length + data1.length);
|
|
48
|
+
return (isWasmShake()) ? Shake256Wasm.shake256Wasm(this.tempBuffer.subarray(0, totalLen), 32) : Shake256.hash(this.tempBuffer.subarray(0, totalLen), 32);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Sign two sync
|
|
52
|
+
* @param data1 {Uint8Array} First buffer
|
|
53
|
+
* @param data2 {Uint8Array} Second buffer
|
|
54
|
+
* @param key {Uint8Array} Key
|
|
55
|
+
* @returns {Uint8Array}
|
|
56
|
+
*/
|
|
57
|
+
signTwoSync(data1, data2, key) {
|
|
58
|
+
const totalLen = key.length + data1.length + data2.length;
|
|
59
|
+
const combined = new Uint8Array(totalLen);
|
|
60
|
+
combined.set(key, 0);
|
|
61
|
+
combined.set(data1, key.length);
|
|
62
|
+
combined.set(data2, key.length + data1.length);
|
|
63
|
+
return (isWasmShake()) ? Shake256Wasm.shake256Wasm(combined, 32) : Shake256.hashSync(combined, 32);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Sign data sync
|
|
67
|
+
* @param data {Uint8Array} Data buffer
|
|
68
|
+
* @param key {Uint8Array} Key buffer
|
|
69
|
+
* @returns {Uint8Array} Signed result buffer
|
|
70
|
+
*/
|
|
71
|
+
signSync(data, key) {
|
|
72
|
+
const full = QuarkDashUtils.concatBytes(key, data);
|
|
73
|
+
return QuarkDashUtils.shake256Sync(full, 32);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Verify sync
|
|
77
|
+
* @param data {Uint8Array} data buffer
|
|
78
|
+
* @param key {Uint8Array} key buffer
|
|
79
|
+
* @param tag {Uint8Array} tag buffer
|
|
80
|
+
* @returns {Promise<boolean>} Is verified?
|
|
81
|
+
*/
|
|
82
|
+
verifySync(data, key, tag) {
|
|
83
|
+
const expected = this.signSync(data, key);
|
|
84
|
+
return QuarkDashUtils.constantTimeEqual(expected, tag);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=mac.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mac.js","sourceRoot":"","sources":["../../../src/core/mac.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":""}
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
* QuarkDash Crypto Utils
|
|
3
3
|
*
|
|
4
4
|
* @git https://github.com/devsdaddy/quarkdash
|
|
5
|
-
* @version 1.
|
|
5
|
+
* @version 1.1.0
|
|
6
6
|
* @author Elijah Rastorguev
|
|
7
|
-
* @build
|
|
7
|
+
* @build 1001
|
|
8
8
|
* @website https://dev.to/devsdaddy
|
|
9
|
+
* @updated 13.04.2026
|
|
9
10
|
*/
|
|
10
|
-
import
|
|
11
|
-
import { Shake256 } from "./shake";
|
|
11
|
+
import { Shake256 } from "../hash/shake";
|
|
12
12
|
/**
|
|
13
13
|
* Crypto Utils Class
|
|
14
14
|
*/
|
|
@@ -256,6 +256,26 @@ export class QuarkDashUtils {
|
|
|
256
256
|
v |= BigInt(arr[off + i]) << BigInt(i * 8);
|
|
257
257
|
return v;
|
|
258
258
|
}
|
|
259
|
+
/**
|
|
260
|
+
* Read Uint32 Little Endian Value
|
|
261
|
+
* @param arr {Uint8Array} Buffer
|
|
262
|
+
* @param off {number} Offset
|
|
263
|
+
*/
|
|
264
|
+
static readUint32LE(arr, off) {
|
|
265
|
+
return (arr[off] | (arr[off + 1] << 8) | (arr[off + 2] << 16) | (arr[off + 3] << 24)) >>> 0;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Write Uint32 Little Endian Value
|
|
269
|
+
* @param v {number} Value
|
|
270
|
+
* @param arr {Uint8Array} Buffer
|
|
271
|
+
* @param off {number} Offset
|
|
272
|
+
*/
|
|
273
|
+
static writeUint32LE(v, arr, off) {
|
|
274
|
+
arr[off] = v & 0xFF;
|
|
275
|
+
arr[off + 1] = (v >>> 8) & 0xFF;
|
|
276
|
+
arr[off + 2] = (v >>> 16) & 0xFF;
|
|
277
|
+
arr[off + 3] = (v >>> 24) & 0xFF;
|
|
278
|
+
}
|
|
259
279
|
}
|
|
260
280
|
// Protected Constants
|
|
261
281
|
QuarkDashUtils.HEXChars = '0123456789abcdef';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/core/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QuarkDash Crypto WebAssembly Loader
|
|
3
|
+
*
|
|
4
|
+
* @git https://github.com/devsdaddy/quarkdash
|
|
5
|
+
* @version 1.1.0
|
|
6
|
+
* @author Elijah Rastorguev
|
|
7
|
+
* @build 1010
|
|
8
|
+
* @website https://dev.to/devsdaddy
|
|
9
|
+
* @updated 14.04.2026
|
|
10
|
+
*/
|
|
11
|
+
// WASM Variables
|
|
12
|
+
let wasmPromise = null;
|
|
13
|
+
let wasmCache = null;
|
|
14
|
+
/**
|
|
15
|
+
* Load WASM Module
|
|
16
|
+
* @param wasmUrl
|
|
17
|
+
*/
|
|
18
|
+
export async function loadWasmModule(wasmUrl) {
|
|
19
|
+
if (wasmCache)
|
|
20
|
+
return wasmCache;
|
|
21
|
+
if (wasmPromise)
|
|
22
|
+
return wasmPromise;
|
|
23
|
+
wasmPromise = (async () => {
|
|
24
|
+
let bytes;
|
|
25
|
+
// For Node js
|
|
26
|
+
if (typeof process !== 'undefined' && process.versions && process.versions.node) {
|
|
27
|
+
try {
|
|
28
|
+
const { readFileSync } = await import('fs');
|
|
29
|
+
const { resolve } = await import('path');
|
|
30
|
+
const possiblePaths = [
|
|
31
|
+
resolve(process.cwd(), wasmUrl),
|
|
32
|
+
resolve(__dirname, wasmUrl)
|
|
33
|
+
];
|
|
34
|
+
for (const path of possiblePaths) {
|
|
35
|
+
try {
|
|
36
|
+
const buffer = readFileSync(path);
|
|
37
|
+
bytes = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
|
|
38
|
+
return await WebAssembly.compile(bytes);
|
|
39
|
+
}
|
|
40
|
+
catch (e) { /* continue */ }
|
|
41
|
+
}
|
|
42
|
+
throw new Error('WASM file not found in Node.js filesystem');
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
console.error('Node.js filesystem read failed:', err);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Browser support
|
|
49
|
+
try {
|
|
50
|
+
const response = await fetch(wasmUrl);
|
|
51
|
+
if (!response.ok)
|
|
52
|
+
throw new Error(`HTTP ${response.status}`);
|
|
53
|
+
bytes = await response.arrayBuffer();
|
|
54
|
+
return await WebAssembly.compile(bytes);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
console.error(`Failed to fetch WASM from ${wasmUrl}:`, err);
|
|
58
|
+
}
|
|
59
|
+
throw new Error('Unable to load WASM module. Please provide a valid URL or install the .wasm file.');
|
|
60
|
+
})();
|
|
61
|
+
wasmCache = await wasmPromise;
|
|
62
|
+
return wasmCache;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=wasm_loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm_loader.js","sourceRoot":"","sources":["../../../src/core/wasm_loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,iBAAiB;AACjB,IAAI,WAAW,GAAuC,IAAI,CAAC;AAC3D,IAAI,SAAS,GAA8B,IAAI,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IAChD,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;QACtB,IAAI,KAAkB,CAAC;QAEvB,cAAc;QACd,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC9E,IAAI,CAAC;gBACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;gBACzC,MAAM,aAAa,GAAG;oBAClB,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC;oBAC/B,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;iBAC9B,CAAC;gBACF,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;oBAC/B,IAAI,CAAC;wBACD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;wBAClC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;wBACtF,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC5C,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;gBAClC,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;YAC1D,CAAC;QACL,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7D,KAAK,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;YACrC,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,6BAA6B,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACzG,CAAC,CAAC,EAAE,CAAC;IAEL,SAAS,GAAG,MAAM,WAAW,CAAC;IAC9B,OAAO,SAAS,CAAC;AACrB,CAAC"}
|