quarkdash 1.0.2 → 1.0.5

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 (39) hide show
  1. package/coverage/clover.xml +218 -72
  2. package/coverage/coverage-final.json +5 -4
  3. package/coverage/lcov-report/cipher.ts.html +1 -1
  4. package/coverage/lcov-report/crypto.ts.html +3 -3
  5. package/coverage/lcov-report/index.html +30 -15
  6. package/coverage/lcov-report/index.ts.html +13 -4
  7. package/coverage/lcov-report/kdf.ts.html +1 -1
  8. package/coverage/lcov-report/mac.ts.html +1 -1
  9. package/coverage/lcov-report/ringlwe.ts.html +73 -19
  10. package/coverage/lcov-report/sha.ts.html +877 -0
  11. package/coverage/lcov-report/shake.ts.html +1 -1
  12. package/coverage/lcov-report/utils.ts.html +9 -9
  13. package/coverage/lcov.info +274 -98
  14. package/dist/cjs/crypto.js +2 -2
  15. package/dist/cjs/crypto.js.map +1 -1
  16. package/dist/cjs/index.js +2 -0
  17. package/dist/cjs/index.js.map +1 -1
  18. package/dist/cjs/ringlwe.js +23 -6
  19. package/dist/cjs/ringlwe.js.map +1 -1
  20. package/dist/cjs/sha.js +242 -0
  21. package/dist/cjs/sha.js.map +1 -0
  22. package/dist/esm/crypto.js +2 -2
  23. package/dist/esm/crypto.js.map +1 -1
  24. package/dist/esm/index.js +2 -0
  25. package/dist/esm/index.js.map +1 -1
  26. package/dist/esm/ringlwe.js +23 -6
  27. package/dist/esm/ringlwe.js.map +1 -1
  28. package/dist/esm/sha.js +237 -0
  29. package/dist/esm/sha.js.map +1 -0
  30. package/dist/types/index.d.ts +1 -0
  31. package/dist/types/ringlwe.d.ts +13 -2
  32. package/dist/types/sha.d.ts +49 -0
  33. package/dist/types/types.d.ts +2 -2
  34. package/package.json +1 -1
  35. package/src/crypto.ts +2 -2
  36. package/src/index.ts +3 -0
  37. package/src/ringlwe.ts +30 -12
  38. package/src/sha.ts +265 -0
  39. package/src/types.ts +2 -2
@@ -0,0 +1,237 @@
1
+ /**
2
+ * QuarkDash SHA Implementations
3
+ *
4
+ * @git https://github.com/devsdaddy/quarkdash
5
+ * @version 1.0.0
6
+ * @author Elijah Rastorguev
7
+ * @build 1000
8
+ * @website https://dev.to/devsdaddy
9
+ */
10
+ /**
11
+ * SHA-256 Implementation
12
+ */
13
+ export class SHA256 {
14
+ /**
15
+ * Right Rotate
16
+ * @param value {number} Value to rotate
17
+ * @param amount {number} Rotate amount
18
+ * @private
19
+ */
20
+ static rightRotate(value, amount) {
21
+ return (value >>> amount) | (value << (32 - amount));
22
+ }
23
+ /**
24
+ * Get SHA256 Hash
25
+ * @param data {string|Uint8Array} Raw string or bytes array
26
+ * @param returnBytes {boolean} Returns HEX String or Uint8Array
27
+ * @returns {string|Uint8Array} HEX String or Uint8Array
28
+ */
29
+ static hash(data, returnBytes = false) {
30
+ const msgBytes = typeof data === 'string' ? new TextEncoder().encode(data) : data;
31
+ // Initial hash values
32
+ let h0 = 0x6a09e667;
33
+ let h1 = 0xbb67ae85;
34
+ let h2 = 0x3c6ef372;
35
+ let h3 = 0xa54ff53a;
36
+ let h4 = 0x510e527f;
37
+ let h5 = 0x9b05688c;
38
+ let h6 = 0x1f83d9ab;
39
+ let h7 = 0x5be0cd19;
40
+ // Pre-processing: padding
41
+ const ml = msgBytes.length * 8;
42
+ const padded = new Uint8Array(((ml + 64 + 511) & ~511) / 8);
43
+ padded.set(msgBytes);
44
+ padded[msgBytes.length] = 0x80;
45
+ // Append length
46
+ const dv = new DataView(padded.buffer);
47
+ dv.setUint32(padded.length - 8, 0, false);
48
+ dv.setUint32(padded.length - 4, ml, false);
49
+ // Process chunks
50
+ for (let i = 0; i < padded.length; i += 64) {
51
+ const w = new Array(64).fill(0);
52
+ // Prepare message schedule
53
+ for (let j = 0; j < 16; j++) {
54
+ w[j] = dv.getUint32(i + j * 4, false);
55
+ }
56
+ for (let j = 16; j < 64; j++) {
57
+ const s0 = this.rightRotate(w[j - 15], 7) ^ this.rightRotate(w[j - 15], 18) ^ (w[j - 15] >>> 3);
58
+ const s1 = this.rightRotate(w[j - 2], 17) ^ this.rightRotate(w[j - 2], 19) ^ (w[j - 2] >>> 10);
59
+ w[j] = (w[j - 16] + s0 + w[j - 7] + s1) >>> 0;
60
+ }
61
+ // Initialize working variables
62
+ let a = h0;
63
+ let b = h1;
64
+ let c = h2;
65
+ let d = h3;
66
+ let e = h4;
67
+ let f = h5;
68
+ let g = h6;
69
+ let h = h7;
70
+ // Main loop
71
+ for (let j = 0; j < 64; j++) {
72
+ const S1 = this.rightRotate(e, 6) ^ this.rightRotate(e, 11) ^ this.rightRotate(e, 25);
73
+ const ch = (e & f) ^ ((~e) & g);
74
+ const temp1 = (h + S1 + ch + this.K[j] + w[j]) >>> 0;
75
+ const S0 = this.rightRotate(a, 2) ^ this.rightRotate(a, 13) ^ this.rightRotate(a, 22);
76
+ const maj = (a & b) ^ (a & c) ^ (b & c);
77
+ const temp2 = (S0 + maj) >>> 0;
78
+ h = g;
79
+ g = f;
80
+ f = e;
81
+ e = (d + temp1) >>> 0;
82
+ d = c;
83
+ c = b;
84
+ b = a;
85
+ a = (temp1 + temp2) >>> 0;
86
+ }
87
+ // Update hash values
88
+ h0 = (h0 + a) >>> 0;
89
+ h1 = (h1 + b) >>> 0;
90
+ h2 = (h2 + c) >>> 0;
91
+ h3 = (h3 + d) >>> 0;
92
+ h4 = (h4 + e) >>> 0;
93
+ h5 = (h5 + f) >>> 0;
94
+ h6 = (h6 + g) >>> 0;
95
+ h7 = (h7 + h) >>> 0;
96
+ }
97
+ // Produce final hash
98
+ const result = new Uint8Array(32);
99
+ const resultView = new DataView(result.buffer);
100
+ resultView.setUint32(0, h0, false);
101
+ resultView.setUint32(4, h1, false);
102
+ resultView.setUint32(8, h2, false);
103
+ resultView.setUint32(12, h3, false);
104
+ resultView.setUint32(16, h4, false);
105
+ resultView.setUint32(20, h5, false);
106
+ resultView.setUint32(24, h6, false);
107
+ resultView.setUint32(28, h7, false);
108
+ return (returnBytes) ? result : Array.from(result).map(b => b.toString(16).padStart(2, '0')).join('');
109
+ }
110
+ }
111
+ // Constants
112
+ SHA256.K = [
113
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
114
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
115
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
116
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
117
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
118
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
119
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
120
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
121
+ ];
122
+ /**
123
+ * SHA-512 Implementation
124
+ */
125
+ export class SHA512 {
126
+ /**
127
+ * Bitint right rotate
128
+ * @param value {number} Value
129
+ * @param amount {number} Rotate amount
130
+ * @private
131
+ */
132
+ static rightRotate(value, amount) {
133
+ return (value >> BigInt(amount)) | (value << (64n - BigInt(amount)));
134
+ }
135
+ /**
136
+ * Get SHA512 Hash
137
+ * @param data {string|Uint8Array} Raw string or bytes array
138
+ * @param returnBytes {boolean} Returns HEX String or Uint8Array
139
+ * @returns {string|Uint8Array} HEX String or Uint8Array
140
+ */
141
+ static hash(data, returnBytes = false) {
142
+ const msgBytes = typeof data === "string" ? new TextEncoder().encode(data) : data;
143
+ // Initial hash values
144
+ let h0 = 0x6a09e667f3bcc908n;
145
+ let h1 = 0xbb67ae8584caa73bn;
146
+ let h2 = 0x3c6ef372fe94f82bn;
147
+ let h3 = 0xa54ff53a5f1d36f1n;
148
+ let h4 = 0x510e527fade682d1n;
149
+ let h5 = 0x9b05688c2b3e6c1fn;
150
+ let h6 = 0x1f83d9abfb41bd6bn;
151
+ let h7 = 0x5be0cd19137e2179n;
152
+ const ml = BigInt(msgBytes.length * 8);
153
+ const padded = new Uint8Array((((Number(ml) + 128 + 1023) & ~1023) / 8));
154
+ padded.set(msgBytes);
155
+ padded[msgBytes.length] = 0x80;
156
+ const dv = new DataView(padded.buffer);
157
+ dv.setBigUint64(padded.length - 8, ml, false);
158
+ for (let i = 0; i < padded.length; i += 128) {
159
+ const w = new Array(80).fill(0n);
160
+ for (let j = 0; j < 16; j++) {
161
+ w[j] = dv.getBigUint64(i + j * 8, false);
162
+ }
163
+ for (let j = 16; j < 80; j++) {
164
+ const s0 = this.rightRotate(w[j - 15], 1) ^ this.rightRotate(w[j - 15], 8) ^ (w[j - 15] >> 7n);
165
+ const s1 = this.rightRotate(w[j - 2], 19) ^ this.rightRotate(w[j - 2], 61) ^ (w[j - 2] >> 6n);
166
+ w[j] = (w[j - 16] + s0 + w[j - 7] + s1) & 0xffffffffffffffffn;
167
+ }
168
+ let a = h0;
169
+ let b = h1;
170
+ let c = h2;
171
+ let d = h3;
172
+ let e = h4;
173
+ let f = h5;
174
+ let g = h6;
175
+ let h = h7;
176
+ for (let j = 0; j < 80; j++) {
177
+ const S1 = this.rightRotate(e, 14) ^ this.rightRotate(e, 18) ^ this.rightRotate(e, 41);
178
+ const ch = (e & f) ^ ((~e) & g);
179
+ const temp1 = (h + S1 + ch + this.K[j] + w[j]) & 0xffffffffffffffffn;
180
+ const S0 = this.rightRotate(a, 28) ^ this.rightRotate(a, 34) ^ this.rightRotate(a, 39);
181
+ const maj = (a & b) ^ (a & c) ^ (b & c);
182
+ const temp2 = (S0 + maj) & 0xffffffffffffffffn;
183
+ h = g;
184
+ g = f;
185
+ f = e;
186
+ e = (d + temp1) & 0xffffffffffffffffn;
187
+ d = c;
188
+ c = b;
189
+ b = a;
190
+ a = (temp1 + temp2) & 0xffffffffffffffffn;
191
+ }
192
+ h0 = (h0 + a) & 0xffffffffffffffffn;
193
+ h1 = (h1 + b) & 0xffffffffffffffffn;
194
+ h2 = (h2 + c) & 0xffffffffffffffffn;
195
+ h3 = (h3 + d) & 0xffffffffffffffffn;
196
+ h4 = (h4 + e) & 0xffffffffffffffffn;
197
+ h5 = (h5 + f) & 0xffffffffffffffffn;
198
+ h6 = (h6 + g) & 0xffffffffffffffffn;
199
+ h7 = (h7 + h) & 0xffffffffffffffffn;
200
+ }
201
+ const result = new Uint8Array(64);
202
+ const resultView = new DataView(result.buffer);
203
+ resultView.setBigUint64(0, h0, false);
204
+ resultView.setBigUint64(8, h1, false);
205
+ resultView.setBigUint64(16, h2, false);
206
+ resultView.setBigUint64(24, h3, false);
207
+ resultView.setBigUint64(32, h4, false);
208
+ resultView.setBigUint64(40, h5, false);
209
+ resultView.setBigUint64(48, h6, false);
210
+ resultView.setBigUint64(56, h7, false);
211
+ return (returnBytes) ? result : Array.from(result).map(b => b.toString(16).padStart(2, '0')).join('');
212
+ }
213
+ }
214
+ // Constants
215
+ SHA512.K = [
216
+ 0x428a2f98d728ae22n, 0x7137449123ef65cdn, 0xb5c0fbcfec4d3b2fn, 0xe9b5dba58189dbbcn,
217
+ 0x3956c25bf348b538n, 0x59f111f1b605d019n, 0x923f82a4af194f9bn, 0xab1c5ed5da6d8118n,
218
+ 0xd807aa98a3030242n, 0x12835b0145706fben, 0x243185be4ee4b28cn, 0x550c7dc3d5ffb4e2n,
219
+ 0x72be5d74f27b896fn, 0x80deb1fe3b1696b1n, 0x9bdc06a725c71235n, 0xc19bf174cf692694n,
220
+ 0xe49b69c19ef14ad2n, 0xefbe4786384f25e3n, 0x0fc19dc68b8cd5b5n, 0x240ca1cc77ac9c65n,
221
+ 0x2de92c6f592b0275n, 0x4a7484aa6ea6e483n, 0x5cb0a9dcbd41fbd4n, 0x76f988da831153b5n,
222
+ 0x983e5152ee66dfabn, 0xa831c66d2db43210n, 0xb00327c898fb213fn, 0xbf597fc7beef0ee4n,
223
+ 0xc6e00bf33da88fc2n, 0xd5a79147930aa725n, 0x06ca6351e003826fn, 0x142929670a0e6e70n,
224
+ 0x27b70a8546d22ffcn, 0x2e1b21385c26c926n, 0x4d2c6dfc5ac42aedn, 0x53380d139d95b3dfn,
225
+ 0x650a73548baf63den, 0x766a0abb3c77b2a8n, 0x81c2c92e47edaee6n, 0x92722c851482353bn,
226
+ 0xa2bfe8a14cf10364n, 0xa81a664bbc423001n, 0xc24b8b70d0f89791n, 0xc76c51a30654be30n,
227
+ 0xd192e819d6ef5218n, 0xd69906245565a910n, 0xf40e35855771202an, 0x106aa07032bbd1b8n,
228
+ 0x19a4c116b8d2d0c8n, 0x1e376c085141ab53n, 0x2748774cdf8eeb99n, 0x34b0bcb5e19b48a8n,
229
+ 0x391c0cb3c5c95a63n, 0x4ed8aa4ae3418acbn, 0x5b9cca4f7763e373n, 0x682e6ff3d6b2b8a3n,
230
+ 0x748f82ee5defb2fcn, 0x78a5636f43172f60n, 0x84c87814a1f0ab72n, 0x8cc702081a6439ecn,
231
+ 0x90befffa23631e28n, 0xa4506cebde82bde9n, 0xbef9a3f7b2c67915n, 0xc67178f2e372532bn,
232
+ 0xca273eceea26619cn, 0xd186b8c721c0c207n, 0xeada7dd6cde0eb1en, 0xf57d4f7fee6ed178n,
233
+ 0x06f067aa72176fban, 0x0a637dc5a2c898a6n, 0x113f9804bef90daen, 0x1b710b35131c471bn,
234
+ 0x28db77f523047d84n, 0x32caab7b40c72493n, 0x3c9ebe0a15c9bebcn, 0x431d67c49c100d4cn,
235
+ 0x4cc5d4becb3e42b6n, 0x597f299cfc657e2an, 0x5fcb6fab3ad6faecn, 0x6c44198c4a475817n
236
+ ];
237
+ //# sourceMappingURL=sha.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sha.js","sourceRoot":"","sources":["../../src/sha.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@
10
10
  export * from "./types";
11
11
  export * from "./utils";
12
12
  export * from "./shake";
13
+ export * from "./sha";
13
14
  export * from "./kdf";
14
15
  export * from "./mac";
15
16
  export * from "./cipher";
@@ -112,16 +112,27 @@ export declare class QuarkDashKeyExchange implements IKeyExchange {
112
112
  /**
113
113
  * Decapsulate async
114
114
  * @param privateKey {Uint8Array} Private key buffer
115
+ * @param peerPublicKey {Uint8Array} Peer public key
115
116
  * @param ciphertext {Uint8Array} Cipher text buffer
116
117
  * @returns {Promise<Uint8Array>} Buffer data
117
118
  * TODO: GPU Calculations
118
119
  */
119
- decapsulate(privateKey: Uint8Array, ciphertext: Uint8Array): Promise<Uint8Array>;
120
+ decapsulate(privateKey: Uint8Array, peerPublicKey: Uint8Array, ciphertext: Uint8Array): Promise<Uint8Array>;
120
121
  /**
121
122
  * Decapsulate sync
122
123
  * @param privateKey {Uint8Array} Private key buffer
124
+ * @param peerPublicKey{Uint8Array} Peer public key buffer
123
125
  * @param ciphertext {Uint8Array} Cipher text buffer
124
126
  * @returns {Uint8Array} Buffer data
125
127
  */
126
- decapsulateSync(privateKey: Uint8Array, ciphertext: Uint8Array): Uint8Array;
128
+ decapsulateSync(privateKey: Uint8Array, peerPublicKey: Uint8Array, ciphertext: Uint8Array): Uint8Array;
129
+ /**
130
+ * Hash shared secret
131
+ * @param ss {Uint8Array} Shared secret buffer
132
+ * @param publicKey {Uint8Array} Public key buffer
133
+ * @param ciphertext {Uint8Array} Cipher text buffer
134
+ * @returns {Uint8Array} Shared secret hash
135
+ * @private
136
+ */
137
+ private hashSharedSecret;
127
138
  }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * QuarkDash SHA Implementations
3
+ *
4
+ * @git https://github.com/devsdaddy/quarkdash
5
+ * @version 1.0.0
6
+ * @author Elijah Rastorguev
7
+ * @build 1000
8
+ * @website https://dev.to/devsdaddy
9
+ */
10
+ /**
11
+ * SHA-256 Implementation
12
+ */
13
+ export declare class SHA256 {
14
+ private static readonly K;
15
+ /**
16
+ * Right Rotate
17
+ * @param value {number} Value to rotate
18
+ * @param amount {number} Rotate amount
19
+ * @private
20
+ */
21
+ private static rightRotate;
22
+ /**
23
+ * Get SHA256 Hash
24
+ * @param data {string|Uint8Array} Raw string or bytes array
25
+ * @param returnBytes {boolean} Returns HEX String or Uint8Array
26
+ * @returns {string|Uint8Array} HEX String or Uint8Array
27
+ */
28
+ static hash(data: string | Uint8Array, returnBytes?: boolean): string | Uint8Array;
29
+ }
30
+ /**
31
+ * SHA-512 Implementation
32
+ */
33
+ export declare class SHA512 {
34
+ private static readonly K;
35
+ /**
36
+ * Bitint right rotate
37
+ * @param value {number} Value
38
+ * @param amount {number} Rotate amount
39
+ * @private
40
+ */
41
+ private static rightRotate;
42
+ /**
43
+ * Get SHA512 Hash
44
+ * @param data {string|Uint8Array} Raw string or bytes array
45
+ * @param returnBytes {boolean} Returns HEX String or Uint8Array
46
+ * @returns {string|Uint8Array} HEX String or Uint8Array
47
+ */
48
+ static hash(data: string | Uint8Array, returnBytes?: boolean): string | Uint8Array;
49
+ }
@@ -50,8 +50,8 @@ export interface IKeyExchange {
50
50
  generateKeyPairSync(): ICryptoKeyPair;
51
51
  encapsulate(publicKey: Uint8Array): Promise<ICryptoEncapsulated>;
52
52
  encapsulateSync(publicKey: Uint8Array): ICryptoEncapsulated;
53
- decapsulate(privateKey: Uint8Array, ciphertext: Uint8Array): Promise<Uint8Array>;
54
- decapsulateSync(privateKey: Uint8Array, ciphertext: Uint8Array): Uint8Array;
53
+ decapsulate(privateKey: Uint8Array, peerPublicKey: Uint8Array, ciphertext: Uint8Array): Promise<Uint8Array>;
54
+ decapsulateSync(privateKey: Uint8Array, peerPublicKey: Uint8Array, ciphertext: Uint8Array): Uint8Array;
55
55
  }
56
56
  /**
57
57
  * Crypto key pair
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quarkdash",
3
- "version": "1.0.2",
3
+ "version": "1.0.5",
4
4
  "description": "QuarkDash - pure typescript hybrid cryptographic protocol that provides post-quantum security, high performance, and attack resistance.",
5
5
  "keywords": [
6
6
  "quark",
package/src/crypto.ts CHANGED
@@ -133,7 +133,7 @@ export class QuarkDash implements ICryptoMethodAsync, ICryptoMethodSync {
133
133
  */
134
134
  public async finalizeSession(ciphertext: Uint8Array): Promise<void> {
135
135
  if (!this.myKeyPair || !this.peerPublicKey) throw new Error('Session not initialized');
136
- const sharedSecret = await this.config.keyExchange.decapsulate(this.myKeyPair.privateKey, ciphertext);
136
+ const sharedSecret = await this.config.keyExchange.decapsulate(this.myKeyPair.privateKey, this.peerPublicKey, ciphertext);
137
137
  await this.deriveSessionKeys(sharedSecret);
138
138
  }
139
139
 
@@ -143,7 +143,7 @@ export class QuarkDash implements ICryptoMethodAsync, ICryptoMethodSync {
143
143
  */
144
144
  public finalizeSessionSync(ciphertext: Uint8Array): void {
145
145
  if (!this.myKeyPair || !this.peerPublicKey) throw new Error('Session not initialized');
146
- const sharedSecret = this.config.keyExchange.decapsulateSync(this.myKeyPair.privateKey, ciphertext);
146
+ const sharedSecret = this.config.keyExchange.decapsulateSync(this.myKeyPair.privateKey, this.peerPublicKey, ciphertext);
147
147
  this.deriveSessionKeysSync(sharedSecret);
148
148
  }
149
149
 
package/src/index.ts CHANGED
@@ -10,7 +10,10 @@
10
10
  /* Export Types and Utils */
11
11
  export * from "./types";
12
12
  export * from "./utils";
13
+
14
+ /* Hash methods */
13
15
  export * from "./shake";
16
+ export * from "./sha";
14
17
 
15
18
  /* Export KDF and MAC */
16
19
  export * from "./kdf";
package/src/ringlwe.ts CHANGED
@@ -10,6 +10,7 @@
10
10
  /* Import Required Modules */
11
11
  import {ICryptoEncapsulated, ICryptoKeyPair, IKeyExchange} from "./types";
12
12
  import {QuarkDashUtils} from "./utils";
13
+ import {SHA256} from "./sha";
13
14
 
14
15
  /**
15
16
  * Ring-LWE based key exchange implementation
@@ -231,41 +232,58 @@ export class QuarkDashKeyExchange implements IKeyExchange {
231
232
  * @returns {ICryptoEncapsulated} Encapsulated data
232
233
  */
233
234
  public encapsulateSync(publicKey: Uint8Array): ICryptoEncapsulated {
234
- const aBytes = publicKey.slice(0, QuarkDashKeyExchange.N*2);
235
- const bBytes = publicKey.slice(QuarkDashKeyExchange.N*2);
235
+ const aBytes = publicKey.slice(0, QuarkDashKeyExchange.N * 2);
236
+ const bBytes = publicKey.slice(QuarkDashKeyExchange.N * 2);
236
237
  const a = QuarkDashKeyExchange.deserializePoly(aBytes);
237
238
  const b = QuarkDashKeyExchange.deserializePoly(bBytes);
238
239
  const sp = QuarkDashKeyExchange.smallPoly();
239
240
  const ep = QuarkDashKeyExchange.smallPoly();
240
- const uArr = QuarkDashKeyExchange.multiply(a,sp);
241
- for(let i=0; i<QuarkDashKeyExchange.N; i++) uArr[i] = (uArr[i]+ep[i]) % QuarkDashKeyExchange.Q;
242
- const w = QuarkDashKeyExchange.multiply(b,sp);
243
- const shared = QuarkDashKeyExchange.roundToBits(w);
241
+ const uArr = QuarkDashKeyExchange.multiply(a, sp);
242
+ for (let i = 0; i < QuarkDashKeyExchange.N; i++) uArr[i] = (uArr[i] + ep[i]) % QuarkDashKeyExchange.Q;
243
+ const w = QuarkDashKeyExchange.multiply(b, sp);
244
+ const rawSecret = QuarkDashKeyExchange.roundToBits(w);
244
245
  const ciphertext = QuarkDashKeyExchange.serializePoly(uArr);
245
- return { ciphertext, sharedSecret: shared };
246
+ const sharedSecret = this.hashSharedSecret(rawSecret, publicKey, ciphertext);
247
+ return { ciphertext, sharedSecret };
246
248
  }
247
249
 
248
250
  /**
249
251
  * Decapsulate async
250
252
  * @param privateKey {Uint8Array} Private key buffer
253
+ * @param peerPublicKey {Uint8Array} Peer public key
251
254
  * @param ciphertext {Uint8Array} Cipher text buffer
252
255
  * @returns {Promise<Uint8Array>} Buffer data
253
256
  * TODO: GPU Calculations
254
257
  */
255
- public async decapsulate(privateKey: Uint8Array, ciphertext: Uint8Array): Promise<Uint8Array> {
256
- return this.decapsulateSync(privateKey, ciphertext);
258
+ public async decapsulate(privateKey: Uint8Array, peerPublicKey: Uint8Array, ciphertext: Uint8Array): Promise<Uint8Array> {
259
+ return this.decapsulateSync(privateKey, peerPublicKey, ciphertext);
257
260
  }
258
261
 
259
262
  /**
260
263
  * Decapsulate sync
261
264
  * @param privateKey {Uint8Array} Private key buffer
265
+ * @param peerPublicKey{Uint8Array} Peer public key buffer
262
266
  * @param ciphertext {Uint8Array} Cipher text buffer
263
267
  * @returns {Uint8Array} Buffer data
264
268
  */
265
- public decapsulateSync(privateKey: Uint8Array, ciphertext: Uint8Array): Uint8Array {
269
+ public decapsulateSync(privateKey: Uint8Array, peerPublicKey: Uint8Array, ciphertext: Uint8Array): Uint8Array {
266
270
  const s = QuarkDashKeyExchange.deserializePoly(privateKey);
267
271
  const u = QuarkDashKeyExchange.deserializePoly(ciphertext);
268
- const w = QuarkDashKeyExchange.multiply(u,s);
269
- return QuarkDashKeyExchange.roundToBits(w);
272
+ const w = QuarkDashKeyExchange.multiply(u, s);
273
+ const rawSecret = QuarkDashKeyExchange.roundToBits(w);
274
+ return this.hashSharedSecret(rawSecret, peerPublicKey, ciphertext);
275
+ }
276
+
277
+ /**
278
+ * Hash shared secret
279
+ * @param ss {Uint8Array} Shared secret buffer
280
+ * @param publicKey {Uint8Array} Public key buffer
281
+ * @param ciphertext {Uint8Array} Cipher text buffer
282
+ * @returns {Uint8Array} Shared secret hash
283
+ * @private
284
+ */
285
+ private hashSharedSecret(ss: Uint8Array, publicKey: Uint8Array, ciphertext: Uint8Array): Uint8Array {
286
+ const data = QuarkDashUtils.concatBytes(ss, publicKey, ciphertext);
287
+ return SHA256.hash(data, true) as Uint8Array;
270
288
  }
271
289
  }