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
|
@@ -1,13 +1,29 @@
|
|
|
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
28
|
* Generate crypto key pair async
|
|
13
29
|
* @returns {ICryptoKeyPair} Crypto key pair
|
|
@@ -21,16 +37,16 @@ class QuarkDashKeyExchange {
|
|
|
21
37
|
* @returns {ICryptoKeyPair} Crypto key pair
|
|
22
38
|
*/
|
|
23
39
|
generateKeyPairSync() {
|
|
24
|
-
const a =
|
|
25
|
-
const s =
|
|
26
|
-
const e =
|
|
27
|
-
const as =
|
|
28
|
-
const b = new Array(
|
|
29
|
-
for (let i = 0; i <
|
|
30
|
-
b[i] = (as[i] + e[i]) %
|
|
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);
|
|
45
|
+
for (let i = 0; i < this.N; i++) {
|
|
46
|
+
b[i] = (as[i] + e[i]) % this.Q;
|
|
31
47
|
}
|
|
32
|
-
const publicKey = utils_1.QuarkDashUtils.concatBytes(
|
|
33
|
-
const privateKey =
|
|
48
|
+
const publicKey = utils_1.QuarkDashUtils.concatBytes(this.serializePoly(a), this.serializePoly(b));
|
|
49
|
+
const privateKey = this.serializePoly(s);
|
|
34
50
|
return { publicKey, privateKey };
|
|
35
51
|
}
|
|
36
52
|
/**
|
|
@@ -48,20 +64,20 @@ class QuarkDashKeyExchange {
|
|
|
48
64
|
* @returns {ICryptoEncapsulated} Encapsulated data
|
|
49
65
|
*/
|
|
50
66
|
encapsulateSync(publicKey) {
|
|
51
|
-
const aBytes = publicKey.slice(0,
|
|
52
|
-
const bBytes = publicKey.slice(
|
|
53
|
-
const a =
|
|
54
|
-
const b =
|
|
55
|
-
const sp =
|
|
56
|
-
const ep =
|
|
57
|
-
const uArr =
|
|
58
|
-
for (let i = 0; i <
|
|
59
|
-
uArr[i] = (uArr[i] + ep[i]) %
|
|
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;
|
|
60
76
|
}
|
|
61
|
-
const w =
|
|
62
|
-
const rawSecret =
|
|
63
|
-
const ciphertext =
|
|
64
|
-
const sharedSecret =
|
|
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);
|
|
65
81
|
return { ciphertext, sharedSecret };
|
|
66
82
|
}
|
|
67
83
|
/**
|
|
@@ -83,101 +99,114 @@ class QuarkDashKeyExchange {
|
|
|
83
99
|
* @returns {Uint8Array} Buffer data
|
|
84
100
|
*/
|
|
85
101
|
decapsulateSync(privateKey, peerPublicKey, ciphertext) {
|
|
86
|
-
const s =
|
|
87
|
-
const u =
|
|
88
|
-
const w =
|
|
89
|
-
const rawSecret =
|
|
90
|
-
return
|
|
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);
|
|
91
107
|
}
|
|
92
108
|
/**
|
|
93
|
-
*
|
|
94
|
-
* @
|
|
109
|
+
* Modular inverse
|
|
110
|
+
* @param a {bigint}
|
|
111
|
+
* @param m {bigint}
|
|
112
|
+
* @returns {bigint} Inversion result
|
|
95
113
|
* @private
|
|
96
114
|
*/
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
const val = (randomBytes[byteIdx] >> bitShift) & 0x03; // 0..3
|
|
105
|
-
if (val === 0)
|
|
106
|
-
poly[i] = -1n;
|
|
107
|
-
else if (val === 1)
|
|
108
|
-
poly[i] = 0n;
|
|
109
|
-
else if (val === 2)
|
|
110
|
-
poly[i] = 1n;
|
|
111
|
-
else {
|
|
112
|
-
poly[i] = 1n;
|
|
113
|
-
}
|
|
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];
|
|
114
122
|
}
|
|
115
|
-
return
|
|
123
|
+
return (old_s % m + m) % m;
|
|
116
124
|
}
|
|
117
125
|
/**
|
|
118
|
-
*
|
|
119
|
-
* @
|
|
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
|
|
120
131
|
* @private
|
|
121
132
|
*/
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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;
|
|
142
|
+
}
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Round to bits
|
|
147
|
+
* @param poly {bigint[]} Polygon
|
|
148
|
+
* @returns {Uint8Array} rounded buffer
|
|
149
|
+
* @private
|
|
150
|
+
*/
|
|
151
|
+
roundToBits(poly) {
|
|
152
|
+
const result = new Uint8Array(32);
|
|
125
153
|
for (let i = 0; i < this.N; i++) {
|
|
126
|
-
const
|
|
127
|
-
|
|
154
|
+
const bit = (Number(poly[i]) > Number(this.Q) / 2) ? 1 : 0;
|
|
155
|
+
if (bit)
|
|
156
|
+
result[i >> 3] |= (1 << (i & 7));
|
|
128
157
|
}
|
|
129
|
-
return
|
|
158
|
+
return result;
|
|
130
159
|
}
|
|
131
160
|
/**
|
|
132
|
-
*
|
|
161
|
+
* Deserialize Polygon
|
|
162
|
+
* @param bytes {Uint8Array} Polygon buffer
|
|
163
|
+
* @returns {bigint[]} Polygon
|
|
133
164
|
* @private
|
|
134
165
|
*/
|
|
135
|
-
|
|
166
|
+
deserializePoly(bytes) {
|
|
136
167
|
const poly = new Array(this.N);
|
|
137
|
-
const SIGMA = 3.19;
|
|
138
168
|
for (let i = 0; i < this.N; i++) {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
for (let j = 0; j < 12; j++) {
|
|
142
|
-
sum += randBytes[j];
|
|
143
|
-
}
|
|
144
|
-
// Центрируем и масштабируем к [-6,6]
|
|
145
|
-
const centered = (sum / 255) - 6;
|
|
146
|
-
const error = Math.floor(centered * SIGMA);
|
|
147
|
-
poly[i] = BigInt(Math.max(-Number(this.Q), Math.min(Number(this.Q) - 1, error)));
|
|
169
|
+
const val = bytes[2 * i] | (bytes[2 * i + 1] << 8);
|
|
170
|
+
poly[i] = BigInt(val);
|
|
148
171
|
}
|
|
149
172
|
return poly;
|
|
150
173
|
}
|
|
151
174
|
/**
|
|
152
|
-
*
|
|
175
|
+
* Serialize polygon
|
|
153
176
|
* @param poly {bigint[]} Polygon
|
|
177
|
+
* @returns {Uint8Array} Polygon buffer
|
|
154
178
|
* @private
|
|
155
179
|
*/
|
|
156
|
-
|
|
157
|
-
const
|
|
158
|
-
let
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
let w = 1n;
|
|
163
|
-
for (let j = 0; j < len / 2; j++) {
|
|
164
|
-
const u = res[i + j];
|
|
165
|
-
const v = (res[i + j + len / 2] * w) % this.Q;
|
|
166
|
-
res[i + j] = (u + v) % this.Q;
|
|
167
|
-
res[i + j + len / 2] = (u - v + this.Q) % this.Q;
|
|
168
|
-
w = (w * wlen) % this.Q;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
len <<= 1;
|
|
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;
|
|
172
186
|
}
|
|
173
|
-
return
|
|
187
|
+
return bytes;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Multiply
|
|
191
|
+
* @param a {bigint[]} Polygon
|
|
192
|
+
* @param b {bigint[]} Polygon
|
|
193
|
+
* @returns {bigint[]} Multiplied polygons
|
|
194
|
+
*/
|
|
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);
|
|
174
203
|
}
|
|
175
204
|
/**
|
|
176
205
|
* Inverse NTT
|
|
177
206
|
* @param poly {bigint[]} Polygon
|
|
178
207
|
* @private
|
|
179
208
|
*/
|
|
180
|
-
|
|
209
|
+
invNTT(poly) {
|
|
181
210
|
const res = [...poly];
|
|
182
211
|
let len = this.N;
|
|
183
212
|
while (len >= 2) {
|
|
@@ -200,119 +229,99 @@ class QuarkDashKeyExchange {
|
|
|
200
229
|
return res;
|
|
201
230
|
}
|
|
202
231
|
/**
|
|
203
|
-
*
|
|
204
|
-
* @param a {bigint[]} Polygon
|
|
205
|
-
* @param b {bigint[]} Polygon
|
|
206
|
-
* @returns {bigint[]} Multiplied polygons
|
|
207
|
-
*/
|
|
208
|
-
static multiply(a, b) {
|
|
209
|
-
const aNTT = this.ntt(a);
|
|
210
|
-
const bNTT = this.ntt(b);
|
|
211
|
-
const prod = new Array(this.N);
|
|
212
|
-
for (let i = 0; i < this.N; i++) {
|
|
213
|
-
prod[i] = (aNTT[i] * bNTT[i]) % this.Q;
|
|
214
|
-
}
|
|
215
|
-
return this.invNTT(prod);
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Serialize polygon
|
|
232
|
+
* NTT Operation
|
|
219
233
|
* @param poly {bigint[]} Polygon
|
|
220
|
-
* @returns {Uint8Array} Polygon buffer
|
|
221
234
|
* @private
|
|
222
235
|
*/
|
|
223
|
-
|
|
224
|
-
const
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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;
|
|
229
252
|
}
|
|
230
|
-
return
|
|
253
|
+
return res;
|
|
231
254
|
}
|
|
232
255
|
/**
|
|
233
|
-
*
|
|
234
|
-
* @param bytes {Uint8Array} Polygon buffer
|
|
235
|
-
* @returns {bigint[]} Polygon
|
|
256
|
+
* Error polygon
|
|
236
257
|
* @private
|
|
237
258
|
*/
|
|
238
|
-
|
|
259
|
+
errorPoly() {
|
|
239
260
|
const poly = new Array(this.N);
|
|
261
|
+
const SIGMA = 3.19;
|
|
240
262
|
for (let i = 0; i < this.N; i++) {
|
|
241
|
-
|
|
242
|
-
|
|
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)));
|
|
243
271
|
}
|
|
244
272
|
return poly;
|
|
245
273
|
}
|
|
246
274
|
/**
|
|
247
|
-
*
|
|
248
|
-
* @
|
|
249
|
-
* @returns {Uint8Array} rounded buffer
|
|
275
|
+
* Uniform polygon
|
|
276
|
+
* @returns {bigint[]}
|
|
250
277
|
* @private
|
|
251
278
|
*/
|
|
252
|
-
|
|
253
|
-
const
|
|
279
|
+
uniformPoly() {
|
|
280
|
+
const poly = new Array(this.N);
|
|
281
|
+
const bytes = utils_1.QuarkDashUtils.randomBytes(this.N * 2);
|
|
254
282
|
for (let i = 0; i < this.N; i++) {
|
|
255
|
-
const
|
|
256
|
-
|
|
257
|
-
result[i >> 3] |= (1 << (i & 7));
|
|
258
|
-
}
|
|
259
|
-
return result;
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Modular exponentiation
|
|
263
|
-
* @param base {bigint} Base
|
|
264
|
-
* @param exp {bigint} exponential
|
|
265
|
-
* @param mod {bigint} module
|
|
266
|
-
* @returns {bigint} Result of modular exponentiation
|
|
267
|
-
* @private
|
|
268
|
-
*/
|
|
269
|
-
static powMod(base, exp, mod) {
|
|
270
|
-
let result = 1n;
|
|
271
|
-
let b = base % mod;
|
|
272
|
-
let e = exp;
|
|
273
|
-
while (e > 0n) {
|
|
274
|
-
if (e & 1n)
|
|
275
|
-
result = (result * b) % mod;
|
|
276
|
-
b = (b * b) % mod;
|
|
277
|
-
e >>= 1n;
|
|
283
|
+
const val = (bytes[2 * i] | (bytes[2 * i + 1] << 8)) % Number(this.Q);
|
|
284
|
+
poly[i] = BigInt(val);
|
|
278
285
|
}
|
|
279
|
-
return
|
|
286
|
+
return poly;
|
|
280
287
|
}
|
|
281
288
|
/**
|
|
282
|
-
*
|
|
283
|
-
* @
|
|
284
|
-
* @param m {bigint}
|
|
285
|
-
* @returns {bigint} Inversion result
|
|
289
|
+
* Get small polygon
|
|
290
|
+
* @returns {bigint[]} Small polygon
|
|
286
291
|
* @private
|
|
287
292
|
*/
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
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
|
+
}
|
|
295
310
|
}
|
|
296
|
-
return
|
|
311
|
+
return poly;
|
|
297
312
|
}
|
|
298
313
|
/**
|
|
299
314
|
* Hash shared secret
|
|
300
|
-
* @param ss {Uint8Array} Shared
|
|
301
|
-
* @param publicKey {Uint8Array} Public
|
|
302
|
-
* @param ciphertext {Uint8Array} Cipher text
|
|
303
|
-
* @returns {Uint8Array}
|
|
304
|
-
* @
|
|
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
|
|
305
320
|
*/
|
|
306
|
-
|
|
321
|
+
hashSharedSecretSync(ss, publicKey, ciphertext) {
|
|
307
322
|
const data = utils_1.QuarkDashUtils.concatBytes(ss, publicKey, ciphertext);
|
|
308
323
|
return sha_1.SHA256.hash(data, true);
|
|
309
324
|
}
|
|
310
325
|
}
|
|
311
|
-
exports.
|
|
312
|
-
|
|
313
|
-
// Ring-LWE Constants
|
|
314
|
-
QuarkDashKeyExchange.N = 256;
|
|
315
|
-
QuarkDashKeyExchange.Q = 7681n;
|
|
316
|
-
QuarkDashKeyExchange.ROOT = 7n;
|
|
317
|
-
QuarkDashKeyExchange.INV_N = _a.modInverse(BigInt(_a.N), _a.Q);
|
|
318
|
-
//# 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":";;;AAAA;;;;;;;;;GASG;AACH,yCAA6C;AAC7C,qCAAmC;AAGnC;;GAEG;AACH,MAAa,WAAW;IAAxB;QACI,yBAAyB;QACN,MAAC,GAAG,GAAG,CAAC;QACR,MAAC,GAAS,KAAK,CAAC;QAChB,SAAI,GAAG,EAAE,CAAC;QACV,UAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IA2TvE,CAAC;IAzTG;;;;OAIG;IACI,KAAK,CAAC,eAAe;QACxB,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;IACtC,CAAC;IAED;;;OAGG;IACI,mBAAmB;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,SAAS,GAAG,sBAAc,CAAC,WAAW,CACxC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EACrB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CACxB,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;IACrC,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,WAAW,CAAC,SAAqB;QAC1C,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,SAAqB;QACxC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACjF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IACxC,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,WAAW,CAAC,UAAsB,EAAE,aAAyB,EAAE,UAAsB;QAC9F,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;OAMG;IACI,eAAe,CAAC,UAAsB,EAAE,aAAyB,EAAE,UAAsB;QAC5F,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;;OAMG;IACO,UAAU,CAAC,CAAS,EAAE,CAAS;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1B,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YACpB,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;;OAOG;IACO,MAAM,CAAC,IAAY,EAAE,GAAW,EAAE,GAAW;QACnD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,CAAC;QACZ,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,GAAG,EAAE;gBAAE,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YACxC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YAClB,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACO,WAAW,CAAC,IAAc;QAChC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,GAAG;gBAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACO,eAAe,CAAC,KAAiB;QACvC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACO,aAAa,CAAC,IAAc;QAClC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;YAC1B,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QACzC,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACO,QAAQ,CAAC,CAAW,EAAE,CAAW;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACO,MAAM,CAAC,IAAc;QAC3B,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;QACjB,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACrB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;oBAC/B,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;oBAC9B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;oBACvD,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBAC5B,CAAC;YACL,CAAC;YACD,GAAG,KAAK,CAAC,CAAC;QACd,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;OAIG;IACO,GAAG,CAAC,IAAc;QACxB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACrB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;oBAC9C,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;oBAC9B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACzD,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBAC5B,CAAC;YACL,CAAC;YACD,GAAG,KAAK,CAAC,CAAC;QACd,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;OAGG;IACO,SAAS;QACf,MAAM,IAAI,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,MAAM,SAAS,GAAG,sBAAc,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1B,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;YACD,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACO,WAAW;QACjB,MAAM,IAAI,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,sBAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACO,SAAS;QACf,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,CAAC,OAAO;YAC9D,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;iBAC5B,IAAI,GAAG,KAAK,CAAC;gBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;iBAC5B,CAAC;gBACF,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACjB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACO,oBAAoB,CAAC,EAAc,EAAE,SAAqB,EAAE,UAAsB;QACxF,MAAM,IAAI,GAAG,sBAAc,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACnE,OAAO,YAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAe,CAAC;IACjD,CAAC;CACJ;AAhUD,kCAgUC"}
|
|
@@ -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"}
|