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