quarkdash 1.0.7 → 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} +246 -203
- 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} +244 -201
- 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} +87 -91
- package/dist/types/session/ringlwe.d.ts +21 -0
- package/dist/types/session/rringlwe.d.ts +27 -0
- package/package.json +13 -3
- 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/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 -289
- package/src/sha.ts +0 -265
- package/src/shake.ts +0 -163
- package/src/types.ts +0 -75
- package/src/utils.ts +0 -290
- package/tsconfig.cjs.json +0 -7
- package/tsconfig.json +0 -18
- /package/dist/cjs/{kdf.js → core/kdf.js} +0 -0
- /package/dist/cjs/{types.js → core/types.js} +0 -0
- /package/dist/esm/{kdf.js → core/kdf.js} +0 -0
- /package/dist/esm/{types.js → core/types.js} +0 -0
|
@@ -1,134 +1,143 @@
|
|
|
1
|
-
var _a;
|
|
2
|
-
import { QuarkDashUtils } from "./utils";
|
|
3
|
-
import { SHA256 } from "./sha";
|
|
4
1
|
/**
|
|
5
|
-
*
|
|
2
|
+
* QuarkDash Basic LWE Utils Implementation
|
|
3
|
+
*
|
|
4
|
+
* @git https://github.com/devsdaddy/quarkdash
|
|
5
|
+
* @version 1.1.0
|
|
6
|
+
* @author Elijah Rastorguev
|
|
7
|
+
* @build 1003
|
|
8
|
+
* @website https://dev.to/devsdaddy
|
|
9
|
+
* @updated 13.04.2026
|
|
6
10
|
*/
|
|
7
|
-
|
|
11
|
+
import { QuarkDashUtils } from "../core/utils";
|
|
12
|
+
import { SHA256 } from "../hash/sha";
|
|
13
|
+
/**
|
|
14
|
+
* Base Ring-LWE Function
|
|
15
|
+
*/
|
|
16
|
+
export class BaseRingLWE {
|
|
17
|
+
constructor() {
|
|
18
|
+
// Constants for override
|
|
19
|
+
this.N = 256;
|
|
20
|
+
this.Q = 7681n;
|
|
21
|
+
this.ROOT = 7n;
|
|
22
|
+
this.INV_N = this.modInverse(BigInt(this.N), this.Q);
|
|
23
|
+
}
|
|
8
24
|
/**
|
|
9
|
-
*
|
|
10
|
-
* @returns {
|
|
11
|
-
*
|
|
25
|
+
* Generate crypto key pair async
|
|
26
|
+
* @returns {ICryptoKeyPair} Crypto key pair
|
|
27
|
+
* TODO: GPU Calculations
|
|
12
28
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
for (let i = 0; i < this.N; i++) {
|
|
16
|
-
const r = Math.random();
|
|
17
|
-
if (r < 0.33)
|
|
18
|
-
poly[i] = -1n;
|
|
19
|
-
else if (r < 0.66)
|
|
20
|
-
poly[i] = 0n;
|
|
21
|
-
else
|
|
22
|
-
poly[i] = 1n;
|
|
23
|
-
}
|
|
24
|
-
return poly;
|
|
29
|
+
async generateKeyPair() {
|
|
30
|
+
return this.generateKeyPairSync();
|
|
25
31
|
}
|
|
26
32
|
/**
|
|
27
|
-
*
|
|
28
|
-
* @returns {
|
|
29
|
-
* @private
|
|
33
|
+
* Generate crypto key pair sync
|
|
34
|
+
* @returns {ICryptoKeyPair} Crypto key pair
|
|
30
35
|
*/
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
const
|
|
36
|
+
generateKeyPairSync() {
|
|
37
|
+
const a = this.uniformPoly();
|
|
38
|
+
const s = this.smallPoly();
|
|
39
|
+
const e = this.errorPoly();
|
|
40
|
+
const as = this.multiply(a, s);
|
|
41
|
+
const b = new Array(this.N);
|
|
34
42
|
for (let i = 0; i < this.N; i++) {
|
|
35
|
-
|
|
36
|
-
poly[i] = BigInt(val);
|
|
43
|
+
b[i] = (as[i] + e[i]) % this.Q;
|
|
37
44
|
}
|
|
38
|
-
|
|
45
|
+
const publicKey = QuarkDashUtils.concatBytes(this.serializePoly(a), this.serializePoly(b));
|
|
46
|
+
const privateKey = this.serializePoly(s);
|
|
47
|
+
return { publicKey, privateKey };
|
|
39
48
|
}
|
|
40
49
|
/**
|
|
41
|
-
*
|
|
42
|
-
* @param
|
|
43
|
-
* @
|
|
50
|
+
* Encapsulate async
|
|
51
|
+
* @param publicKey {Uint8Array} Public key buffer
|
|
52
|
+
* @returns {Promise<ICryptoEncapsulated>} Encapsulated data
|
|
53
|
+
* TODO: GPU Calculations
|
|
44
54
|
*/
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
let len = 2;
|
|
48
|
-
while (len <= this.N) {
|
|
49
|
-
const wlen = this.powMod(this.ROOT, BigInt(this.N / len), this.Q);
|
|
50
|
-
for (let i = 0; i < this.N; i += len) {
|
|
51
|
-
let w = 1n;
|
|
52
|
-
for (let j = 0; j < len / 2; j++) {
|
|
53
|
-
const u = res[i + j];
|
|
54
|
-
const v = (res[i + j + len / 2] * w) % this.Q;
|
|
55
|
-
res[i + j] = (u + v) % this.Q;
|
|
56
|
-
res[i + j + len / 2] = (u - v + this.Q) % this.Q;
|
|
57
|
-
w = (w * wlen) % this.Q;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
len <<= 1;
|
|
61
|
-
}
|
|
62
|
-
return res;
|
|
55
|
+
async encapsulate(publicKey) {
|
|
56
|
+
return this.encapsulateSync(publicKey);
|
|
63
57
|
}
|
|
64
58
|
/**
|
|
65
|
-
*
|
|
66
|
-
* @param
|
|
67
|
-
* @
|
|
59
|
+
* Encapsulate sync
|
|
60
|
+
* @param publicKey {Uint8Array} Public key buffer
|
|
61
|
+
* @returns {ICryptoEncapsulated} Encapsulated data
|
|
68
62
|
*/
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
res[i + j] = (u + v) % this.Q;
|
|
80
|
-
res[i + j + len / 2] = ((u - v + this.Q) * w) % this.Q;
|
|
81
|
-
w = (w * wlen) % this.Q;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
len >>= 1;
|
|
63
|
+
encapsulateSync(publicKey) {
|
|
64
|
+
const aBytes = publicKey.slice(0, this.N * 2);
|
|
65
|
+
const bBytes = publicKey.slice(this.N * 2);
|
|
66
|
+
const a = this.deserializePoly(aBytes);
|
|
67
|
+
const b = this.deserializePoly(bBytes);
|
|
68
|
+
const sp = this.smallPoly();
|
|
69
|
+
const ep = this.errorPoly();
|
|
70
|
+
const uArr = this.multiply(a, sp);
|
|
71
|
+
for (let i = 0; i < this.N; i++) {
|
|
72
|
+
uArr[i] = (uArr[i] + ep[i]) % this.Q;
|
|
85
73
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
74
|
+
const w = this.multiply(b, sp);
|
|
75
|
+
const rawSecret = this.roundToBits(w);
|
|
76
|
+
const ciphertext = this.serializePoly(uArr);
|
|
77
|
+
const sharedSecret = this.hashSharedSecretSync(rawSecret, publicKey, ciphertext);
|
|
78
|
+
return { ciphertext, sharedSecret };
|
|
89
79
|
}
|
|
90
80
|
/**
|
|
91
|
-
*
|
|
92
|
-
* @param
|
|
93
|
-
* @param
|
|
94
|
-
* @
|
|
81
|
+
* Decapsulate async
|
|
82
|
+
* @param privateKey {Uint8Array} Private key buffer
|
|
83
|
+
* @param peerPublicKey {Uint8Array} Peer public key
|
|
84
|
+
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
85
|
+
* @returns {Promise<Uint8Array>} Buffer data
|
|
86
|
+
* TODO: GPU Calculations
|
|
95
87
|
*/
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const bNTT = this.ntt(b);
|
|
99
|
-
const prod = new Array(this.N);
|
|
100
|
-
for (let i = 0; i < this.N; i++)
|
|
101
|
-
prod[i] = (aNTT[i] * bNTT[i]) % this.Q;
|
|
102
|
-
return this.invNTT(prod);
|
|
88
|
+
async decapsulate(privateKey, peerPublicKey, ciphertext) {
|
|
89
|
+
return this.decapsulateSync(privateKey, peerPublicKey, ciphertext);
|
|
103
90
|
}
|
|
104
91
|
/**
|
|
105
|
-
*
|
|
106
|
-
* @param
|
|
107
|
-
* @
|
|
92
|
+
* Decapsulate sync
|
|
93
|
+
* @param privateKey {Uint8Array} Private key buffer
|
|
94
|
+
* @param peerPublicKey{Uint8Array} Peer public key buffer
|
|
95
|
+
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
96
|
+
* @returns {Uint8Array} Buffer data
|
|
97
|
+
*/
|
|
98
|
+
decapsulateSync(privateKey, peerPublicKey, ciphertext) {
|
|
99
|
+
const s = this.deserializePoly(privateKey);
|
|
100
|
+
const u = this.deserializePoly(ciphertext);
|
|
101
|
+
const w = this.multiply(u, s);
|
|
102
|
+
const rawSecret = this.roundToBits(w);
|
|
103
|
+
return this.hashSharedSecretSync(rawSecret, peerPublicKey, ciphertext);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Modular inverse
|
|
107
|
+
* @param a {bigint}
|
|
108
|
+
* @param m {bigint}
|
|
109
|
+
* @returns {bigint} Inversion result
|
|
108
110
|
* @private
|
|
109
111
|
*/
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
112
|
+
modInverse(a, m) {
|
|
113
|
+
let [old_r, r] = [a, m];
|
|
114
|
+
let [old_s, s] = [1n, 0n];
|
|
115
|
+
while (r !== 0n) {
|
|
116
|
+
const q = old_r / r;
|
|
117
|
+
[old_r, r] = [r, old_r - q * r];
|
|
118
|
+
[old_s, s] = [s, old_s - q * s];
|
|
116
119
|
}
|
|
117
|
-
return
|
|
120
|
+
return (old_s % m + m) % m;
|
|
118
121
|
}
|
|
119
122
|
/**
|
|
120
|
-
*
|
|
121
|
-
* @param
|
|
122
|
-
* @
|
|
123
|
+
* Modular exponentiation
|
|
124
|
+
* @param base {bigint} Base
|
|
125
|
+
* @param exp {bigint} exponential
|
|
126
|
+
* @param mod {bigint} module
|
|
127
|
+
* @returns {bigint} Result of modular exponentiation
|
|
123
128
|
* @private
|
|
124
129
|
*/
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
+
powMod(base, exp, mod) {
|
|
131
|
+
let result = 1n;
|
|
132
|
+
let b = base % mod;
|
|
133
|
+
let e = exp;
|
|
134
|
+
while (e > 0n) {
|
|
135
|
+
if (e & 1n)
|
|
136
|
+
result = (result * b) % mod;
|
|
137
|
+
b = (b * b) % mod;
|
|
138
|
+
e >>= 1n;
|
|
130
139
|
}
|
|
131
|
-
return
|
|
140
|
+
return result;
|
|
132
141
|
}
|
|
133
142
|
/**
|
|
134
143
|
* Round to bits
|
|
@@ -136,7 +145,7 @@ export class QuarkDashKeyExchange {
|
|
|
136
145
|
* @returns {Uint8Array} rounded buffer
|
|
137
146
|
* @private
|
|
138
147
|
*/
|
|
139
|
-
|
|
148
|
+
roundToBits(poly) {
|
|
140
149
|
const result = new Uint8Array(32);
|
|
141
150
|
for (let i = 0; i < this.N; i++) {
|
|
142
151
|
const bit = (Number(poly[i]) > Number(this.Q) / 2) ? 1 : 0;
|
|
@@ -146,135 +155,169 @@ export class QuarkDashKeyExchange {
|
|
|
146
155
|
return result;
|
|
147
156
|
}
|
|
148
157
|
/**
|
|
149
|
-
*
|
|
150
|
-
* @param
|
|
151
|
-
* @
|
|
152
|
-
* @param mod {bigint} module
|
|
153
|
-
* @returns {bigint} Result of modular exponentiation
|
|
158
|
+
* Deserialize Polygon
|
|
159
|
+
* @param bytes {Uint8Array} Polygon buffer
|
|
160
|
+
* @returns {bigint[]} Polygon
|
|
154
161
|
* @private
|
|
155
162
|
*/
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
b = (b * b) % mod;
|
|
162
|
-
e >>= 1n;
|
|
163
|
+
deserializePoly(bytes) {
|
|
164
|
+
const poly = new Array(this.N);
|
|
165
|
+
for (let i = 0; i < this.N; i++) {
|
|
166
|
+
const val = bytes[2 * i] | (bytes[2 * i + 1] << 8);
|
|
167
|
+
poly[i] = BigInt(val);
|
|
163
168
|
}
|
|
164
|
-
return
|
|
169
|
+
return poly;
|
|
165
170
|
}
|
|
166
171
|
/**
|
|
167
|
-
*
|
|
168
|
-
* @param
|
|
169
|
-
* @
|
|
170
|
-
* @returns {bigint} Inversion result
|
|
172
|
+
* Serialize polygon
|
|
173
|
+
* @param poly {bigint[]} Polygon
|
|
174
|
+
* @returns {Uint8Array} Polygon buffer
|
|
171
175
|
* @private
|
|
172
176
|
*/
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
const
|
|
177
|
-
[
|
|
178
|
-
[
|
|
177
|
+
serializePoly(poly) {
|
|
178
|
+
const bytes = new Uint8Array(this.N * 2);
|
|
179
|
+
for (let i = 0; i < this.N; i++) {
|
|
180
|
+
const val = Number(poly[i]);
|
|
181
|
+
bytes[2 * i] = val & 0xFF;
|
|
182
|
+
bytes[2 * i + 1] = (val >> 8) & 0xFF;
|
|
179
183
|
}
|
|
180
|
-
return
|
|
184
|
+
return bytes;
|
|
181
185
|
}
|
|
182
186
|
/**
|
|
183
|
-
*
|
|
184
|
-
* @
|
|
185
|
-
*
|
|
187
|
+
* Multiply
|
|
188
|
+
* @param a {bigint[]} Polygon
|
|
189
|
+
* @param b {bigint[]} Polygon
|
|
190
|
+
* @returns {bigint[]} Multiplied polygons
|
|
186
191
|
*/
|
|
187
|
-
|
|
188
|
-
|
|
192
|
+
multiply(a, b) {
|
|
193
|
+
const aNTT = this.ntt(a);
|
|
194
|
+
const bNTT = this.ntt(b);
|
|
195
|
+
const prod = new Array(this.N);
|
|
196
|
+
for (let i = 0; i < this.N; i++) {
|
|
197
|
+
prod[i] = (aNTT[i] * bNTT[i]) % this.Q;
|
|
198
|
+
}
|
|
199
|
+
return this.invNTT(prod);
|
|
189
200
|
}
|
|
190
201
|
/**
|
|
191
|
-
*
|
|
192
|
-
* @
|
|
202
|
+
* Inverse NTT
|
|
203
|
+
* @param poly {bigint[]} Polygon
|
|
204
|
+
* @private
|
|
193
205
|
*/
|
|
194
|
-
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
206
|
+
invNTT(poly) {
|
|
207
|
+
const res = [...poly];
|
|
208
|
+
let len = this.N;
|
|
209
|
+
while (len >= 2) {
|
|
210
|
+
const wlen = this.powMod(this.ROOT, BigInt(this.N / len), this.Q);
|
|
211
|
+
for (let i = 0; i < this.N; i += len) {
|
|
212
|
+
let w = 1n;
|
|
213
|
+
for (let j = 0; j < len / 2; j++) {
|
|
214
|
+
const u = res[i + j];
|
|
215
|
+
const v = res[i + j + len / 2];
|
|
216
|
+
res[i + j] = (u + v) % this.Q;
|
|
217
|
+
res[i + j + len / 2] = ((u - v + this.Q) * w) % this.Q;
|
|
218
|
+
w = (w * wlen) % this.Q;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
len >>= 1;
|
|
222
|
+
}
|
|
223
|
+
for (let i = 0; i < this.N; i++) {
|
|
224
|
+
res[i] = (res[i] * this.INV_N) % this.Q;
|
|
225
|
+
}
|
|
226
|
+
return res;
|
|
205
227
|
}
|
|
206
228
|
/**
|
|
207
|
-
*
|
|
208
|
-
* @param
|
|
209
|
-
* @
|
|
210
|
-
* TODO: GPU Calculations
|
|
229
|
+
* NTT Operation
|
|
230
|
+
* @param poly {bigint[]} Polygon
|
|
231
|
+
* @private
|
|
211
232
|
*/
|
|
212
|
-
|
|
213
|
-
|
|
233
|
+
ntt(poly) {
|
|
234
|
+
const res = [...poly];
|
|
235
|
+
let len = 2;
|
|
236
|
+
while (len <= this.N) {
|
|
237
|
+
const wlen = this.powMod(this.ROOT, BigInt(this.N / len), this.Q);
|
|
238
|
+
for (let i = 0; i < this.N; i += len) {
|
|
239
|
+
let w = 1n;
|
|
240
|
+
for (let j = 0; j < len / 2; j++) {
|
|
241
|
+
const u = res[i + j];
|
|
242
|
+
const v = (res[i + j + len / 2] * w) % this.Q;
|
|
243
|
+
res[i + j] = (u + v) % this.Q;
|
|
244
|
+
res[i + j + len / 2] = BigInt((u - v + this.Q) % this.Q);
|
|
245
|
+
w = (w * wlen) % this.Q;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
len <<= 1;
|
|
249
|
+
}
|
|
250
|
+
return res;
|
|
214
251
|
}
|
|
215
252
|
/**
|
|
216
|
-
*
|
|
217
|
-
* @
|
|
218
|
-
* @returns {ICryptoEncapsulated} Encapsulated data
|
|
253
|
+
* Error polygon
|
|
254
|
+
* @private
|
|
219
255
|
*/
|
|
220
|
-
|
|
221
|
-
const
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
return { ciphertext, sharedSecret };
|
|
256
|
+
errorPoly() {
|
|
257
|
+
const poly = new Array(this.N);
|
|
258
|
+
const SIGMA = 3.19;
|
|
259
|
+
for (let i = 0; i < this.N; i++) {
|
|
260
|
+
let sum = 0;
|
|
261
|
+
const randBytes = QuarkDashUtils.randomBytes(12);
|
|
262
|
+
for (let j = 0; j < 12; j++) {
|
|
263
|
+
sum += randBytes[j];
|
|
264
|
+
}
|
|
265
|
+
const centered = (sum / 255) - 6;
|
|
266
|
+
const error = Math.floor(centered * SIGMA);
|
|
267
|
+
poly[i] = BigInt(Math.max(-Number(this.Q), Math.min(Number(this.Q) - 1, error)));
|
|
268
|
+
}
|
|
269
|
+
return poly;
|
|
235
270
|
}
|
|
236
271
|
/**
|
|
237
|
-
*
|
|
238
|
-
* @
|
|
239
|
-
* @
|
|
240
|
-
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
241
|
-
* @returns {Promise<Uint8Array>} Buffer data
|
|
242
|
-
* TODO: GPU Calculations
|
|
272
|
+
* Uniform polygon
|
|
273
|
+
* @returns {bigint[]}
|
|
274
|
+
* @private
|
|
243
275
|
*/
|
|
244
|
-
|
|
245
|
-
|
|
276
|
+
uniformPoly() {
|
|
277
|
+
const poly = new Array(this.N);
|
|
278
|
+
const bytes = QuarkDashUtils.randomBytes(this.N * 2);
|
|
279
|
+
for (let i = 0; i < this.N; i++) {
|
|
280
|
+
const val = (bytes[2 * i] | (bytes[2 * i + 1] << 8)) % Number(this.Q);
|
|
281
|
+
poly[i] = BigInt(val);
|
|
282
|
+
}
|
|
283
|
+
return poly;
|
|
246
284
|
}
|
|
247
285
|
/**
|
|
248
|
-
*
|
|
249
|
-
* @
|
|
250
|
-
* @
|
|
251
|
-
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
252
|
-
* @returns {Uint8Array} Buffer data
|
|
286
|
+
* Get small polygon
|
|
287
|
+
* @returns {bigint[]} Small polygon
|
|
288
|
+
* @private
|
|
253
289
|
*/
|
|
254
|
-
|
|
255
|
-
const
|
|
256
|
-
const
|
|
257
|
-
const
|
|
258
|
-
|
|
259
|
-
|
|
290
|
+
smallPoly() {
|
|
291
|
+
const poly = new Array(this.N);
|
|
292
|
+
const bytesNeeded = Math.ceil(this.N * 2 / 8);
|
|
293
|
+
const randomBytes = QuarkDashUtils.randomBytes(bytesNeeded);
|
|
294
|
+
for (let i = 0; i < this.N; i++) {
|
|
295
|
+
const byteIdx = Math.floor(i * 2 / 8);
|
|
296
|
+
const bitShift = (i * 2) % 8;
|
|
297
|
+
const val = (randomBytes[byteIdx] >> bitShift) & 0x03; // 0..3
|
|
298
|
+
if (val === 0)
|
|
299
|
+
poly[i] = -1n;
|
|
300
|
+
else if (val === 1)
|
|
301
|
+
poly[i] = 0n;
|
|
302
|
+
else if (val === 2)
|
|
303
|
+
poly[i] = 1n;
|
|
304
|
+
else {
|
|
305
|
+
poly[i] = 1n;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return poly;
|
|
260
309
|
}
|
|
261
310
|
/**
|
|
262
311
|
* Hash shared secret
|
|
263
|
-
* @param ss {Uint8Array} Shared
|
|
264
|
-
* @param publicKey {Uint8Array} Public
|
|
265
|
-
* @param ciphertext {Uint8Array} Cipher text
|
|
266
|
-
* @returns {Uint8Array}
|
|
267
|
-
* @
|
|
312
|
+
* @param ss {Uint8Array} Shared Secret
|
|
313
|
+
* @param publicKey {Uint8Array} Public Key
|
|
314
|
+
* @param ciphertext {Uint8Array} Cipher text
|
|
315
|
+
* @returns {Uint8Array} Hash buffer
|
|
316
|
+
* @protected
|
|
268
317
|
*/
|
|
269
|
-
|
|
318
|
+
hashSharedSecretSync(ss, publicKey, ciphertext) {
|
|
270
319
|
const data = QuarkDashUtils.concatBytes(ss, publicKey, ciphertext);
|
|
271
320
|
return SHA256.hash(data, true);
|
|
272
321
|
}
|
|
273
322
|
}
|
|
274
|
-
|
|
275
|
-
// Ring-LWE Constants
|
|
276
|
-
QuarkDashKeyExchange.N = 256;
|
|
277
|
-
QuarkDashKeyExchange.Q = 7681n;
|
|
278
|
-
QuarkDashKeyExchange.ROOT = 7n;
|
|
279
|
-
QuarkDashKeyExchange.INV_N = _a.modInverse(BigInt(_a.N), _a.Q);
|
|
280
|
-
//# sourceMappingURL=ringlwe.js.map
|
|
323
|
+
//# sourceMappingURL=baselwe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baselwe.js","sourceRoot":"","sources":["../../../src/session/baselwe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseRingLWE } from "./baselwe";
|
|
2
|
+
/**
|
|
3
|
+
* Ring-LWE based key exchange implementation
|
|
4
|
+
*/
|
|
5
|
+
export class QuarkDashRLWE extends BaseRingLWE {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
// Ring-LWE Constants
|
|
9
|
+
this.N = 256;
|
|
10
|
+
this.Q = 7681n;
|
|
11
|
+
this.ROOT = 7n;
|
|
12
|
+
this.INV_N = this.modInverse(BigInt(this.N), this.Q);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=ringlwe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ringlwe.js","sourceRoot":"","sources":["../../../src/session/ringlwe.ts"],"names":[],"mappings":"AAcA,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAEtC;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,WAAW;IAA9C;;QACI,qBAAqB;QACO,MAAC,GAAG,GAAG,CAAC;QACR,MAAC,GAAG,KAAK,CAAC;QACV,SAAI,GAAG,EAAE,CAAC;QACV,UAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { QuarkDashUtils } from "../core/utils";
|
|
2
|
+
import { BaseRingLWE } from "./baselwe";
|
|
3
|
+
/**
|
|
4
|
+
* QuarkDash Radical Ring-LWE Implementation
|
|
5
|
+
*/
|
|
6
|
+
export class QuarkDashRRLWE extends BaseRingLWE {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
// General Constants
|
|
10
|
+
this.N = 256;
|
|
11
|
+
this.Q = 12289n;
|
|
12
|
+
this.ROOT = 7n;
|
|
13
|
+
this.INV_N = this.modInverse(BigInt(this.N), this.Q);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Override small polynome for Radical Ring-lWE
|
|
17
|
+
* @returns {bigint[]} Small polynome
|
|
18
|
+
* @protected
|
|
19
|
+
*/
|
|
20
|
+
smallPoly() {
|
|
21
|
+
const poly = new Array(this.N);
|
|
22
|
+
const bytesNeeded = Math.ceil(this.N * 2 / 8);
|
|
23
|
+
const randomBytes = QuarkDashUtils.randomBytes(bytesNeeded);
|
|
24
|
+
for (let i = 0; i < this.N; i++) {
|
|
25
|
+
const byteIdx = Math.floor(i * 2 / 8);
|
|
26
|
+
const bitShift = (i * 2) % 8;
|
|
27
|
+
const val = (randomBytes[byteIdx] >> bitShift) & 0x03;
|
|
28
|
+
if (val === 0)
|
|
29
|
+
poly[i] = -1n;
|
|
30
|
+
else if (val === 1)
|
|
31
|
+
poly[i] = 0n;
|
|
32
|
+
else
|
|
33
|
+
poly[i] = 1n;
|
|
34
|
+
}
|
|
35
|
+
return poly;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=rringlwe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rringlwe.js","sourceRoot":"","sources":["../../../src/session/rringlwe.ts"],"names":[],"mappings":"AAYA,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAEtC;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,WAAW;IAA/C;;QACI,oBAAoB;QACQ,MAAC,GAAG,GAAG,CAAC;QACR,MAAC,GAAG,MAAM,CAAC;QACX,SAAI,GAAG,EAAE,CAAC;QACV,UAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAqBhF,CAAC;IAnBG;;;;OAIG;IACgB,SAAS;QACxB,MAAM,IAAI,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,GAAG,IAAI,CAAC;YACtD,IAAI,GAAG,KAAK,CAAC;gBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;iBACxB,IAAI,GAAG,KAAK,CAAC;gBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;;gBAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
|
package/dist/shake.wasm
ADDED
|
Binary file
|