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 @@
1
+ {"version":3,"file":"kdf.js","sourceRoot":"","sources":["../../src/kdf.ts"],"names":[],"mappings":";;;AAWA,mCAAyC;AAEzC;;GAEG;AACH,MAAa,YAAY;IACrB;;;;;;;;OAQG;IACI,KAAK,CAAC,MAAM,CAAC,GAAe,EAAE,IAAgB,EAAE,IAAgB,EAAE,MAAc;QACnF,MAAM,GAAG,GAAG,MAAM,sBAAc,CAAC,QAAQ,CAAC,sBAAc,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,sBAAc,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAe,CAAC;YACrF,CAAC,GAAG,MAAM,sBAAc,CAAC,QAAQ,CAAC,sBAAc,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,sBAAc,CAAC,YAAY,CAAC,sBAAc,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,sBAAc,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC,GAAG,sBAAc,CAAC,YAAY,CAAC,sBAAc,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;AA/CD,oCA+CC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuarkDashMAC = void 0;
4
+ const utils_1 = require("./utils");
5
+ /**
6
+ * MAC implementation using Shake-256
7
+ */
8
+ class QuarkDashMAC {
9
+ /**
10
+ * Sign data async
11
+ * @param data {Uint8Array} Data buffer
12
+ * @param key {Uint8Array} Key buffer
13
+ * @returns {Promise<Uint8Array>} Signed result buffer
14
+ * TODO: GPU Calculations
15
+ */
16
+ async sign(data, key) {
17
+ const full = utils_1.QuarkDashUtils.concatBytes(key, data);
18
+ return await utils_1.QuarkDashUtils.shake256(full, 32);
19
+ }
20
+ /**
21
+ * Verify async
22
+ * @param data {Uint8Array} data buffer
23
+ * @param key {Uint8Array} key buffer
24
+ * @param tag {Uint8Array} tag buffer
25
+ * @returns {Promise<boolean>} Is verified?
26
+ * TODO: GPU Calculations
27
+ */
28
+ async verify(data, key, tag) {
29
+ const expected = await this.sign(data, key);
30
+ return utils_1.QuarkDashUtils.constantTimeEqual(expected, tag);
31
+ }
32
+ /**
33
+ * Sign data sync
34
+ * @param data {Uint8Array} Data buffer
35
+ * @param key {Uint8Array} Key buffer
36
+ * @returns {Uint8Array} Signed result buffer
37
+ */
38
+ signSync(data, key) {
39
+ const full = utils_1.QuarkDashUtils.concatBytes(key, data);
40
+ return utils_1.QuarkDashUtils.shake256Sync(full, 32);
41
+ }
42
+ /**
43
+ * Verify sync
44
+ * @param data {Uint8Array} data buffer
45
+ * @param key {Uint8Array} key buffer
46
+ * @param tag {Uint8Array} tag buffer
47
+ * @returns {Promise<boolean>} Is verified?
48
+ */
49
+ verifySync(data, key, tag) {
50
+ const expected = this.signSync(data, key);
51
+ return utils_1.QuarkDashUtils.constantTimeEqual(expected, tag);
52
+ }
53
+ }
54
+ exports.QuarkDashMAC = QuarkDashMAC;
55
+ //# sourceMappingURL=mac.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mac.js","sourceRoot":"","sources":["../../src/mac.ts"],"names":[],"mappings":";;;AAWA,mCAAuC;AAEvC;;GAEG;AACH,MAAa,YAAY;IACrB;;;;;;OAMG;IACI,KAAK,CAAC,IAAI,CAAC,IAAgB,EAAE,GAAe;QAC/C,MAAM,IAAI,GAAG,sBAAc,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACnD,OAAO,MAAM,sBAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,MAAM,CAAC,IAAgB,EAAE,GAAe,EAAE,GAAe;QAClE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5C,OAAO,sBAAc,CAAC,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;OAKG;IACI,QAAQ,CAAC,IAAgB,EAAE,GAAe;QAC7C,MAAM,IAAI,GAAG,sBAAc,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACnD,OAAO,sBAAc,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IAED;;;;;;OAMG;IACI,UAAU,CAAC,IAAgB,EAAE,GAAe,EAAE,GAAe;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1C,OAAO,sBAAc,CAAC,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC;CACJ;AAhDD,oCAgDC"}
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.QuarkDashKeyExchange = void 0;
5
+ const utils_1 = require("./utils");
6
+ /**
7
+ * Ring-LWE based key exchange implementation
8
+ */
9
+ class QuarkDashKeyExchange {
10
+ /**
11
+ * Get small polygon
12
+ * @returns {bigint[]} Small polygon
13
+ * @private
14
+ */
15
+ static smallPoly() {
16
+ const poly = new Array(this.N);
17
+ for (let i = 0; i < this.N; i++) {
18
+ const r = Math.random();
19
+ if (r < 0.33)
20
+ poly[i] = -1n;
21
+ else if (r < 0.66)
22
+ poly[i] = 0n;
23
+ else
24
+ poly[i] = 1n;
25
+ }
26
+ return poly;
27
+ }
28
+ /**
29
+ * Uniform polygon
30
+ * @returns {bigint[]}
31
+ * @private
32
+ */
33
+ static uniformPoly() {
34
+ const poly = new Array(this.N);
35
+ const bytes = utils_1.QuarkDashUtils.randomBytes(this.N * 2);
36
+ for (let i = 0; i < this.N; i++) {
37
+ const val = (bytes[2 * i] | (bytes[2 * i + 1] << 8)) % Number(this.Q);
38
+ poly[i] = BigInt(val);
39
+ }
40
+ return poly;
41
+ }
42
+ /**
43
+ * NTT Operation
44
+ * @param poly {bigint[]} Polygon
45
+ * @private
46
+ */
47
+ static ntt(poly) {
48
+ const res = [...poly];
49
+ let len = 2;
50
+ while (len <= this.N) {
51
+ const wlen = this.powMod(this.ROOT, BigInt(this.N / len), this.Q);
52
+ for (let i = 0; i < this.N; i += len) {
53
+ let w = 1n;
54
+ for (let j = 0; j < len / 2; j++) {
55
+ const u = res[i + j];
56
+ const v = (res[i + j + len / 2] * w) % this.Q;
57
+ res[i + j] = (u + v) % this.Q;
58
+ res[i + j + len / 2] = (u - v + this.Q) % this.Q;
59
+ w = (w * wlen) % this.Q;
60
+ }
61
+ }
62
+ len <<= 1;
63
+ }
64
+ return res;
65
+ }
66
+ /**
67
+ * Inverse NTT
68
+ * @param poly {bigint[]} Polygon
69
+ * @private
70
+ */
71
+ static invNTT(poly) {
72
+ const res = [...poly];
73
+ let len = this.N;
74
+ while (len >= 2) {
75
+ const wlen = this.powMod(this.ROOT, BigInt(this.N / len), this.Q);
76
+ for (let i = 0; i < this.N; i += len) {
77
+ let w = 1n;
78
+ for (let j = 0; j < len / 2; j++) {
79
+ const u = res[i + j];
80
+ const v = res[i + j + len / 2];
81
+ res[i + j] = (u + v) % this.Q;
82
+ res[i + j + len / 2] = ((u - v + this.Q) * w) % this.Q;
83
+ w = (w * wlen) % this.Q;
84
+ }
85
+ }
86
+ len >>= 1;
87
+ }
88
+ for (let i = 0; i < this.N; i++)
89
+ res[i] = (res[i] * this.INV_N) % this.Q;
90
+ return res;
91
+ }
92
+ /**
93
+ * Multiply
94
+ * @param a {bigint[]} Polygon
95
+ * @param b {bigint[]} Polygon
96
+ * @returns {bigint[]} Multiplied polygons
97
+ */
98
+ static multiply(a, b) {
99
+ const aNTT = this.ntt(a);
100
+ const bNTT = this.ntt(b);
101
+ const prod = new Array(this.N);
102
+ for (let i = 0; i < this.N; i++)
103
+ prod[i] = (aNTT[i] * bNTT[i]) % this.Q;
104
+ return this.invNTT(prod);
105
+ }
106
+ /**
107
+ * Serialize polygon
108
+ * @param poly {bigint[]} Polygon
109
+ * @returns {Uint8Array} Polygon buffer
110
+ * @private
111
+ */
112
+ static serializePoly(poly) {
113
+ const bytes = new Uint8Array(this.N * 2);
114
+ for (let i = 0; i < this.N; i++) {
115
+ const val = Number(poly[i]);
116
+ bytes[2 * i] = val & 0xFF;
117
+ bytes[2 * i + 1] = (val >> 8) & 0xFF;
118
+ }
119
+ return bytes;
120
+ }
121
+ /**
122
+ * Deserialize Polygon
123
+ * @param bytes {Uint8Array} Polygon buffer
124
+ * @returns {bigint[]} Polygon
125
+ * @private
126
+ */
127
+ static deserializePoly(bytes) {
128
+ const poly = new Array(this.N);
129
+ for (let i = 0; i < this.N; i++) {
130
+ const val = bytes[2 * i] | (bytes[2 * i + 1] << 8);
131
+ poly[i] = BigInt(val);
132
+ }
133
+ return poly;
134
+ }
135
+ /**
136
+ * Round to bits
137
+ * @param poly {bigint[]} Polygon
138
+ * @returns {Uint8Array} rounded buffer
139
+ * @private
140
+ */
141
+ static roundToBits(poly) {
142
+ const result = new Uint8Array(32);
143
+ for (let i = 0; i < this.N; i++) {
144
+ const bit = (Number(poly[i]) > Number(this.Q) / 2) ? 1 : 0;
145
+ if (bit)
146
+ result[i >> 3] |= (1 << (i & 7));
147
+ }
148
+ return result;
149
+ }
150
+ /**
151
+ * Modular exponentiation
152
+ * @param base {bigint} Base
153
+ * @param exp {bigint} exponential
154
+ * @param mod {bigint} module
155
+ * @returns {bigint} Result of modular exponentiation
156
+ * @private
157
+ */
158
+ static powMod(base, exp, mod) {
159
+ let result = 1n, b = base % mod, e = exp;
160
+ while (e > 0n) {
161
+ if (e & 1n)
162
+ result = (result * b) % mod;
163
+ b = (b * b) % mod;
164
+ e >>= 1n;
165
+ }
166
+ return result;
167
+ }
168
+ /**
169
+ * Modular inverse
170
+ * @param a {bigint}
171
+ * @param m {bigint}
172
+ * @returns {bigint} Inversion result
173
+ * @private
174
+ */
175
+ static modInverse(a, m) {
176
+ let [old_r, r] = [a, m], [old_s, s] = [1n, 0n];
177
+ while (r !== 0n) {
178
+ const q = old_r / r;
179
+ [old_r, r] = [r, old_r - q * r];
180
+ [old_s, s] = [s, old_s - q * s];
181
+ }
182
+ return (old_s % m + m) % m;
183
+ }
184
+ /**
185
+ * Generate crypto key pair async
186
+ * @returns {ICryptoKeyPair} Crypto key pair
187
+ * TODO: GPU Calculations
188
+ */
189
+ async generateKeyPair() {
190
+ return this.generateKeyPairSync();
191
+ }
192
+ /**
193
+ * Generate crypto key pair sync
194
+ * @returns {ICryptoKeyPair} Crypto key pair
195
+ */
196
+ generateKeyPairSync() {
197
+ const a = _a.uniformPoly();
198
+ const s = _a.smallPoly();
199
+ const e = _a.smallPoly();
200
+ const as = _a.multiply(a, s);
201
+ const b = new Array(_a.N);
202
+ for (let i = 0; i < _a.N; i++)
203
+ b[i] = (as[i] + e[i]) % _a.Q;
204
+ const pub = utils_1.QuarkDashUtils.concatBytes(_a.serializePoly(a), _a.serializePoly(b));
205
+ const priv = _a.serializePoly(s);
206
+ return { publicKey: pub, privateKey: priv };
207
+ }
208
+ /**
209
+ * Encapsulate async
210
+ * @param publicKey {Uint8Array} Public key buffer
211
+ * @returns {Promise<ICryptoEncapsulated>} Encapsulated data
212
+ * TODO: GPU Calculations
213
+ */
214
+ async encapsulate(publicKey) {
215
+ return this.encapsulateSync(publicKey);
216
+ }
217
+ /**
218
+ * Encapsulate sync
219
+ * @param publicKey {Uint8Array} Public key buffer
220
+ * @returns {ICryptoEncapsulated} Encapsulated data
221
+ */
222
+ encapsulateSync(publicKey) {
223
+ const aBytes = publicKey.slice(0, _a.N * 2);
224
+ const bBytes = publicKey.slice(_a.N * 2);
225
+ const a = _a.deserializePoly(aBytes);
226
+ const b = _a.deserializePoly(bBytes);
227
+ const sp = _a.smallPoly();
228
+ const ep = _a.smallPoly();
229
+ const uArr = _a.multiply(a, sp);
230
+ for (let i = 0; i < _a.N; i++)
231
+ uArr[i] = (uArr[i] + ep[i]) % _a.Q;
232
+ const w = _a.multiply(b, sp);
233
+ const shared = _a.roundToBits(w);
234
+ const ciphertext = _a.serializePoly(uArr);
235
+ return { ciphertext, sharedSecret: shared };
236
+ }
237
+ /**
238
+ * Decapsulate async
239
+ * @param privateKey {Uint8Array} Private key buffer
240
+ * @param ciphertext {Uint8Array} Cipher text buffer
241
+ * @returns {Promise<Uint8Array>} Buffer data
242
+ * TODO: GPU Calculations
243
+ */
244
+ async decapsulate(privateKey, ciphertext) {
245
+ return this.decapsulateSync(privateKey, ciphertext);
246
+ }
247
+ /**
248
+ * Decapsulate sync
249
+ * @param privateKey {Uint8Array} Private key buffer
250
+ * @param ciphertext {Uint8Array} Cipher text buffer
251
+ * @returns {Uint8Array} Buffer data
252
+ */
253
+ decapsulateSync(privateKey, ciphertext) {
254
+ const s = _a.deserializePoly(privateKey);
255
+ const u = _a.deserializePoly(ciphertext);
256
+ const w = _a.multiply(u, s);
257
+ return _a.roundToBits(w);
258
+ }
259
+ }
260
+ exports.QuarkDashKeyExchange = QuarkDashKeyExchange;
261
+ _a = QuarkDashKeyExchange;
262
+ // Ring-LWE Constants
263
+ QuarkDashKeyExchange.N = 256;
264
+ QuarkDashKeyExchange.Q = 7681n;
265
+ QuarkDashKeyExchange.ROOT = 7n;
266
+ QuarkDashKeyExchange.INV_N = _a.modInverse(BigInt(_a.N), _a.Q);
267
+ //# sourceMappingURL=ringlwe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ringlwe.js","sourceRoot":"","sources":["../../src/ringlwe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,320 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.QuarkDashUtils = void 0;
7
+ /**
8
+ * QuarkDash Crypto Utils
9
+ *
10
+ * @git https://github.com/devsdaddy/quarkdash
11
+ * @version 1.0.0
12
+ * @author Elijah Rastorguev
13
+ * @build 1000
14
+ * @website https://dev.to/devsdaddy
15
+ */
16
+ const crypto_1 = __importDefault(require("crypto"));
17
+ /**
18
+ * Crypto Utils Class
19
+ */
20
+ class QuarkDashUtils {
21
+ /**
22
+ * Run SHA256 async
23
+ * @param data {Uint8Array} Bytes buffer
24
+ * @return {Promise<Uint8Array>} Result
25
+ */
26
+ static async sha256(data) {
27
+ const hash = await crypto_1.default.subtle.digest('SHA-256', data);
28
+ return new Uint8Array(hash);
29
+ }
30
+ /**
31
+ * Run SHA256 sync
32
+ * @param data {Uint8Array} Bytes buffer
33
+ * @return {Uint8Array} Result
34
+ */
35
+ static sha256Sync(data) {
36
+ if (typeof require !== 'undefined') {
37
+ const crypto = require('crypto');
38
+ const hash = crypto.createHash('sha256').update(data).digest();
39
+ return new Uint8Array(hash);
40
+ }
41
+ throw new Error('Synchronous SHA256 not available in browser');
42
+ }
43
+ /**
44
+ * Get Shake-256 result async
45
+ * @param data {Uint8Array} Bytes buffer
46
+ * @param len {number} Buffer length
47
+ * @return {Promise<Uint8Array>} Result buffer
48
+ */
49
+ static async shake256(data, len) {
50
+ const result = new Uint8Array(len);
51
+ let counter = 0;
52
+ let offset = 0;
53
+ while (offset < len) {
54
+ const cnt = new Uint8Array(4);
55
+ cnt[0] = (counter >> 24) & 0xFF;
56
+ cnt[1] = (counter >> 16) & 0xFF;
57
+ cnt[2] = (counter >> 8) & 0xFF;
58
+ cnt[3] = counter & 0xFF;
59
+ const hash = await this.sha256(this.concatBytes(data, cnt));
60
+ const take = Math.min(hash.length, len - offset);
61
+ result.set(hash.slice(0, take), offset);
62
+ offset += take;
63
+ counter++;
64
+ }
65
+ return result;
66
+ }
67
+ /**
68
+ * Get Shake-256 result sync
69
+ * @param data {Uint8Array} Bytes buffer
70
+ * @param len {number} Buffer length
71
+ * @return {Uint8Array} Result buffer
72
+ */
73
+ static shake256Sync(data, len) {
74
+ const result = new Uint8Array(len);
75
+ let counter = 0;
76
+ let offset = 0;
77
+ while (offset < len) {
78
+ const cnt = new Uint8Array(4);
79
+ cnt[0] = (counter >> 24) & 0xFF;
80
+ cnt[1] = (counter >> 16) & 0xFF;
81
+ cnt[2] = (counter >> 8) & 0xFF;
82
+ cnt[3] = counter & 0xFF;
83
+ const hash = this.sha256Sync(this.concatBytes(data, cnt));
84
+ const take = Math.min(hash.length, len - offset);
85
+ result.set(hash.slice(0, take), offset);
86
+ offset += take;
87
+ counter++;
88
+ }
89
+ return result;
90
+ }
91
+ /**
92
+ * Concat bytes
93
+ * @param arrays {Uint8Array|null|undefined} Input arrays for concat
94
+ * @returns {Uint8Array} Result buffer
95
+ */
96
+ static concatBytes(...arrays) {
97
+ const valid = arrays.filter(a => a != null);
98
+ const total = valid.reduce((s, a) => s + a.length, 0);
99
+ const res = new Uint8Array(total);
100
+ let pos = 0;
101
+ for (const a of valid) {
102
+ res.set(a, pos);
103
+ pos += a.length;
104
+ }
105
+ return res;
106
+ }
107
+ /**
108
+ * Coerce Array
109
+ * @param arg {any} Argument
110
+ * @param copy {any} Copy
111
+ * @protected
112
+ */
113
+ static coerceArray(arg, copy) {
114
+ let self = this;
115
+ // ArrayBuffer view
116
+ if (arg.buffer && arg.name === 'Uint8Array') {
117
+ if (copy) {
118
+ if (arg.slice) {
119
+ arg = arg.slice();
120
+ }
121
+ else {
122
+ arg = Array.prototype.slice.call(arg);
123
+ }
124
+ }
125
+ return arg;
126
+ }
127
+ // It's an array; check it is a valid representation of a byte
128
+ if (Array.isArray(arg)) {
129
+ if (!self.checkInts(arg)) {
130
+ throw new Error('Array contains invalid value: ' + arg);
131
+ }
132
+ return new Uint8Array(arg);
133
+ }
134
+ // Something else, but behaves like an array (maybe a Buffer? Arguments?)
135
+ if (self.checkInt(arg.length) && self.checkInts(arg)) {
136
+ return new Uint8Array(arg);
137
+ }
138
+ throw new Error('unsupported array-like object');
139
+ }
140
+ /**
141
+ * Check if value is int
142
+ * @param value {any} Value
143
+ * @returns {boolean}
144
+ * @protected
145
+ */
146
+ static checkInt(value) {
147
+ return parseInt(value) === value;
148
+ }
149
+ /**
150
+ * Check Ints inside array
151
+ * @param arrayish {any} Array
152
+ * @returns {boolean} Any value is integer and between 0 and 255
153
+ * @protected
154
+ */
155
+ static checkInts(arrayish) {
156
+ let self = this;
157
+ if (!self.checkInt(arrayish.length)) {
158
+ return false;
159
+ }
160
+ for (let i = 0; i < arrayish.length; i++) {
161
+ if (!self.checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {
162
+ return false;
163
+ }
164
+ }
165
+ return true;
166
+ }
167
+ /**
168
+ * Get random bytes
169
+ * @param len {number} buffer length
170
+ * @returns {Uint8Array} Random bytes buffer
171
+ */
172
+ static randomBytes(len) {
173
+ return crypto_1.default.getRandomValues(new Uint8Array(len));
174
+ }
175
+ /**
176
+ * Convert raw text to bytes array
177
+ * @param text {string} raw string
178
+ * @returns {any} bytes array
179
+ */
180
+ static textToBytes(text) {
181
+ let self = this;
182
+ let result = [], i = 0;
183
+ text = encodeURI(text);
184
+ while (i < text.length) {
185
+ let c = text.charCodeAt(i++);
186
+ // if it is a % sign, encode the following 2 bytes as a hex value
187
+ if (c === 37) {
188
+ result.push(parseInt(text.substr(i, 2), 16));
189
+ i += 2;
190
+ // otherwise, just the actual byte
191
+ }
192
+ else {
193
+ result.push(c);
194
+ }
195
+ }
196
+ return self.coerceArray(result);
197
+ }
198
+ /**
199
+ * Convert bytes array to raw string
200
+ * @param bytes {number[]|Uint8Array} Bytes array
201
+ * @returns {string} raw string
202
+ */
203
+ static bytesToText(bytes) {
204
+ return new TextDecoder().decode(bytes);
205
+ let result = [], i = 0;
206
+ while (i < bytes.length) {
207
+ let c = bytes[i];
208
+ if (c < 128) {
209
+ result.push(String.fromCharCode(c));
210
+ i++;
211
+ }
212
+ else if (c > 191 && c < 224) {
213
+ result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f)));
214
+ i += 2;
215
+ }
216
+ else {
217
+ result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)));
218
+ i += 3;
219
+ }
220
+ }
221
+ return result.join('');
222
+ }
223
+ /**
224
+ * Convert HEX string to bytes array
225
+ * @param text {string} HEX string
226
+ * @returns {number[]} bytes array
227
+ * @constructor
228
+ */
229
+ static HEXToBytes(text) {
230
+ let result = [];
231
+ for (let i = 0; i < text.length; i += 2) {
232
+ result.push(parseInt(text.substr(i, 2), 16));
233
+ }
234
+ return result;
235
+ }
236
+ /**
237
+ * Convert bytes array to HEX string
238
+ * @param bytes {number[]|Uint8Array} Bytes array
239
+ * @returns {string} HEX String
240
+ */
241
+ static bytesToHEX(bytes) {
242
+ let self = this;
243
+ let result = [];
244
+ for (let i = 0; i < bytes.length; i++) {
245
+ let v = bytes[i];
246
+ result.push(self.HEXChars[(v & 0xf0) >> 4] + self.HEXChars[v & 0x0f]);
247
+ }
248
+ return result.join('');
249
+ }
250
+ /**
251
+ * Constant time equal
252
+ * @param a {Uint8Array} first buffer
253
+ * @param b {Uint8Array} second buffer
254
+ * @returns {boolean} Equal or not
255
+ */
256
+ static constantTimeEqual(a, b) {
257
+ if (a.length !== b.length)
258
+ return false;
259
+ let diff = 0;
260
+ for (let i = 0; i < a.length; i++)
261
+ diff |= a[i] ^ b[i];
262
+ return diff === 0;
263
+ }
264
+ /**
265
+ * Secure zero
266
+ * @param bytes {Uint8Array} bytes buffer
267
+ */
268
+ static secureZero(bytes) {
269
+ for (let i = 0; i < bytes.length; i++)
270
+ bytes[i] = 0;
271
+ }
272
+ /**
273
+ * Read U32 from buffer
274
+ * @param arr {Uint8Array} buffer
275
+ * @param off {number} Offset
276
+ * @returns {number} U32
277
+ * @private
278
+ */
279
+ static readU32(arr, off) {
280
+ return (arr[off] | (arr[off + 1] << 8) | (arr[off + 2] << 16) | (arr[off + 3] << 24)) >>> 0;
281
+ }
282
+ /**
283
+ * Write U32 to buffer
284
+ * @param v {number} U32
285
+ * @param arr {Uint8Array} Target buffer
286
+ * @param off {number} Offset
287
+ * @private
288
+ */
289
+ static writeU32(v, arr, off) {
290
+ arr[off] = v & 0xFF;
291
+ arr[off + 1] = (v >> 8) & 0xFF;
292
+ arr[off + 2] = (v >> 16) & 0xFF;
293
+ arr[off + 3] = (v >> 24) & 0xFF;
294
+ }
295
+ /**
296
+ * Read Uint32 Value
297
+ * @param arr {Uint8Array} Bytes buffer
298
+ * @param off {number} Offset
299
+ * @returns {number} Uint32 Value
300
+ */
301
+ static readUint32(arr, off) {
302
+ return (arr[off] | (arr[off + 1] << 8) | (arr[off + 2] << 16) | (arr[off + 3] << 24)) >>> 0;
303
+ }
304
+ /**
305
+ * Read Uint64 Value
306
+ * @param arr {Uint8Array} Bytes buffer
307
+ * @param off {number} offset
308
+ * @returns {bigint} Bigint
309
+ */
310
+ static readUint64(arr, off) {
311
+ let v = 0n;
312
+ for (let i = 0; i < 8; i++)
313
+ v |= BigInt(arr[off + i]) << BigInt(i * 8);
314
+ return v;
315
+ }
316
+ }
317
+ exports.QuarkDashUtils = QuarkDashUtils;
318
+ // Protected Constants
319
+ QuarkDashUtils.HEXChars = '0123456789abcdef';
320
+ //# sourceMappingURL=utils.js.map