quarkdash 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/.idea/modules.xml +8 -0
  2. package/.idea/quarkdash.iml +12 -0
  3. package/.idea/vcs.xml +6 -0
  4. package/LICENSE +21 -0
  5. package/README.md +161 -0
  6. package/coverage/clover.xml +470 -0
  7. package/coverage/coverage-final.json +8 -0
  8. package/coverage/lcov-report/base.css +224 -0
  9. package/coverage/lcov-report/block-navigation.js +87 -0
  10. package/coverage/lcov-report/cipher.ts.html +862 -0
  11. package/coverage/lcov-report/crypto.ts.html +1000 -0
  12. package/coverage/lcov-report/favicon.png +0 -0
  13. package/coverage/lcov-report/index.html +206 -0
  14. package/coverage/lcov-report/index.ts.html +151 -0
  15. package/coverage/lcov-report/kdf.ts.html +274 -0
  16. package/coverage/lcov-report/mac.ts.html +277 -0
  17. package/coverage/lcov-report/prettify.css +1 -0
  18. package/coverage/lcov-report/prettify.js +2 -0
  19. package/coverage/lcov-report/ringlwe.ts.html +895 -0
  20. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  21. package/coverage/lcov-report/sorter.js +210 -0
  22. package/coverage/lcov-report/utils.ts.html +1111 -0
  23. package/coverage/lcov.info +740 -0
  24. package/dist/cjs/cipher.js +265 -0
  25. package/dist/cjs/cipher.js.map +1 -0
  26. package/dist/cjs/crypto.js +284 -0
  27. package/dist/cjs/crypto.js.map +1 -0
  28. package/dist/cjs/index.js +37 -0
  29. package/dist/cjs/index.js.map +1 -0
  30. package/dist/cjs/kdf.js +56 -0
  31. package/dist/cjs/kdf.js.map +1 -0
  32. package/dist/cjs/mac.js +55 -0
  33. package/dist/cjs/mac.js.map +1 -0
  34. package/dist/cjs/ringlwe.js +267 -0
  35. package/dist/cjs/ringlwe.js.map +1 -0
  36. package/dist/cjs/types.js +3 -0
  37. package/dist/cjs/types.js.map +1 -0
  38. package/dist/cjs/utils.js +320 -0
  39. package/dist/cjs/utils.js.map +1 -0
  40. package/dist/esm/cipher.js +259 -0
  41. package/dist/esm/cipher.js.map +1 -0
  42. package/dist/esm/crypto.js +280 -0
  43. package/dist/esm/crypto.js.map +1 -0
  44. package/dist/esm/index.js +21 -0
  45. package/dist/esm/index.js.map +1 -0
  46. package/dist/esm/kdf.js +52 -0
  47. package/dist/esm/kdf.js.map +1 -0
  48. package/dist/esm/mac.js +51 -0
  49. package/dist/esm/mac.js.map +1 -0
  50. package/dist/esm/ringlwe.js +263 -0
  51. package/dist/esm/ringlwe.js.map +1 -0
  52. package/dist/esm/types.js +2 -0
  53. package/dist/esm/types.js.map +1 -0
  54. package/dist/esm/utils.js +313 -0
  55. package/dist/esm/utils.js.map +1 -0
  56. package/dist/types/cipher.d.ts +153 -0
  57. package/dist/types/crypto.d.ts +155 -0
  58. package/dist/types/index.d.ts +16 -0
  59. package/dist/types/kdf.d.ts +34 -0
  60. package/dist/types/mac.d.ts +47 -0
  61. package/dist/types/ringlwe.d.ts +127 -0
  62. package/dist/types/types.d.ts +69 -0
  63. package/dist/types/utils.d.ts +132 -0
  64. package/img/cover.png +0 -0
  65. package/package.json +63 -0
  66. package/src/cipher.ts +260 -0
  67. package/src/crypto.ts +306 -0
  68. package/src/index.ts +23 -0
  69. package/src/kdf.ts +64 -0
  70. package/src/mac.ts +65 -0
  71. package/src/ringlwe.ts +271 -0
  72. package/src/types.ts +75 -0
  73. package/src/utils.ts +343 -0
  74. package/tsconfig.cjs.json +7 -0
  75. package/tsconfig.json +18 -0
@@ -0,0 +1,1000 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for crypto.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="prettify.css" />
9
+ <link rel="stylesheet" href="base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="index.html">All files</a> crypto.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">58.62% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>68/116</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">31.25% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>10/32</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">61.11% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>11/18</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">63.26% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>62/98</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line medium'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
380
+ <span class="cline-any cline-neutral">&nbsp;</span>
381
+ <span class="cline-any cline-yes">1x</span>
382
+ <span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-yes">1x</span>
384
+ <span class="cline-any cline-yes">1x</span>
385
+ <span class="cline-any cline-yes">1x</span>
386
+ <span class="cline-any cline-yes">1x</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
388
+ <span class="cline-any cline-neutral">&nbsp;</span>
389
+ <span class="cline-any cline-neutral">&nbsp;</span>
390
+ <span class="cline-any cline-neutral">&nbsp;</span>
391
+ <span class="cline-any cline-neutral">&nbsp;</span>
392
+ <span class="cline-any cline-neutral">&nbsp;</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-neutral">&nbsp;</span>
396
+ <span class="cline-any cline-neutral">&nbsp;</span>
397
+ <span class="cline-any cline-neutral">&nbsp;</span>
398
+ <span class="cline-any cline-neutral">&nbsp;</span>
399
+ <span class="cline-any cline-neutral">&nbsp;</span>
400
+ <span class="cline-any cline-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-neutral">&nbsp;</span>
402
+ <span class="cline-any cline-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-neutral">&nbsp;</span>
408
+ <span class="cline-any cline-neutral">&nbsp;</span>
409
+ <span class="cline-any cline-neutral">&nbsp;</span>
410
+ <span class="cline-any cline-neutral">&nbsp;</span>
411
+ <span class="cline-any cline-neutral">&nbsp;</span>
412
+ <span class="cline-any cline-yes">1x</span>
413
+ <span class="cline-any cline-neutral">&nbsp;</span>
414
+ <span class="cline-any cline-neutral">&nbsp;</span>
415
+ <span class="cline-any cline-neutral">&nbsp;</span>
416
+ <span class="cline-any cline-neutral">&nbsp;</span>
417
+ <span class="cline-any cline-neutral">&nbsp;</span>
418
+ <span class="cline-any cline-neutral">&nbsp;</span>
419
+ <span class="cline-any cline-neutral">&nbsp;</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-neutral">&nbsp;</span>
422
+ <span class="cline-any cline-neutral">&nbsp;</span>
423
+ <span class="cline-any cline-neutral">&nbsp;</span>
424
+ <span class="cline-any cline-yes">1x</span>
425
+ <span class="cline-any cline-neutral">&nbsp;</span>
426
+ <span class="cline-any cline-yes">14x</span>
427
+ <span class="cline-any cline-yes">14x</span>
428
+ <span class="cline-any cline-yes">14x</span>
429
+ <span class="cline-any cline-yes">14x</span>
430
+ <span class="cline-any cline-yes">14x</span>
431
+ <span class="cline-any cline-yes">14x</span>
432
+ <span class="cline-any cline-neutral">&nbsp;</span>
433
+ <span class="cline-any cline-neutral">&nbsp;</span>
434
+ <span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-neutral">&nbsp;</span>
436
+ <span class="cline-any cline-neutral">&nbsp;</span>
437
+ <span class="cline-any cline-neutral">&nbsp;</span>
438
+ <span class="cline-any cline-neutral">&nbsp;</span>
439
+ <span class="cline-any cline-neutral">&nbsp;</span>
440
+ <span class="cline-any cline-yes">14x</span>
441
+ <span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
444
+ <span class="cline-any cline-neutral">&nbsp;</span>
445
+ <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-neutral">&nbsp;</span>
447
+ <span class="cline-any cline-neutral">&nbsp;</span>
448
+ <span class="cline-any cline-neutral">&nbsp;</span>
449
+ <span class="cline-any cline-yes">14x</span>
450
+ <span class="cline-any cline-yes">14x</span>
451
+ <span class="cline-any cline-neutral">&nbsp;</span>
452
+ <span class="cline-any cline-neutral">&nbsp;</span>
453
+ <span class="cline-any cline-neutral">&nbsp;</span>
454
+ <span class="cline-any cline-neutral">&nbsp;</span>
455
+ <span class="cline-any cline-neutral">&nbsp;</span>
456
+ <span class="cline-any cline-neutral">&nbsp;</span>
457
+ <span class="cline-any cline-neutral">&nbsp;</span>
458
+ <span class="cline-any cline-no">&nbsp;</span>
459
+ <span class="cline-any cline-no">&nbsp;</span>
460
+ <span class="cline-any cline-neutral">&nbsp;</span>
461
+ <span class="cline-any cline-neutral">&nbsp;</span>
462
+ <span class="cline-any cline-neutral">&nbsp;</span>
463
+ <span class="cline-any cline-neutral">&nbsp;</span>
464
+ <span class="cline-any cline-neutral">&nbsp;</span>
465
+ <span class="cline-any cline-neutral">&nbsp;</span>
466
+ <span class="cline-any cline-neutral">&nbsp;</span>
467
+ <span class="cline-any cline-neutral">&nbsp;</span>
468
+ <span class="cline-any cline-neutral">&nbsp;</span>
469
+ <span class="cline-any cline-neutral">&nbsp;</span>
470
+ <span class="cline-any cline-yes">14x</span>
471
+ <span class="cline-any cline-yes">14x</span>
472
+ <span class="cline-any cline-yes">14x</span>
473
+ <span class="cline-any cline-yes">7x</span>
474
+ <span class="cline-any cline-yes">7x</span>
475
+ <span class="cline-any cline-yes">7x</span>
476
+ <span class="cline-any cline-neutral">&nbsp;</span>
477
+ <span class="cline-any cline-yes">7x</span>
478
+ <span class="cline-any cline-neutral">&nbsp;</span>
479
+ <span class="cline-any cline-neutral">&nbsp;</span>
480
+ <span class="cline-any cline-neutral">&nbsp;</span>
481
+ <span class="cline-any cline-neutral">&nbsp;</span>
482
+ <span class="cline-any cline-neutral">&nbsp;</span>
483
+ <span class="cline-any cline-neutral">&nbsp;</span>
484
+ <span class="cline-any cline-neutral">&nbsp;</span>
485
+ <span class="cline-any cline-neutral">&nbsp;</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-neutral">&nbsp;</span>
488
+ <span class="cline-any cline-no">&nbsp;</span>
489
+ <span class="cline-any cline-no">&nbsp;</span>
490
+ <span class="cline-any cline-no">&nbsp;</span>
491
+ <span class="cline-any cline-no">&nbsp;</span>
492
+ <span class="cline-any cline-no">&nbsp;</span>
493
+ <span class="cline-any cline-no">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-no">&nbsp;</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</span>
500
+ <span class="cline-any cline-neutral">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-neutral">&nbsp;</span>
503
+ <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-yes">7x</span>
506
+ <span class="cline-any cline-yes">7x</span>
507
+ <span class="cline-any cline-yes">7x</span>
508
+ <span class="cline-any cline-neutral">&nbsp;</span>
509
+ <span class="cline-any cline-neutral">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-neutral">&nbsp;</span>
514
+ <span class="cline-any cline-neutral">&nbsp;</span>
515
+ <span class="cline-any cline-no">&nbsp;</span>
516
+ <span class="cline-any cline-no">&nbsp;</span>
517
+ <span class="cline-any cline-no">&nbsp;</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span>
519
+ <span class="cline-any cline-neutral">&nbsp;</span>
520
+ <span class="cline-any cline-neutral">&nbsp;</span>
521
+ <span class="cline-any cline-neutral">&nbsp;</span>
522
+ <span class="cline-any cline-neutral">&nbsp;</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-neutral">&nbsp;</span>
525
+ <span class="cline-any cline-neutral">&nbsp;</span>
526
+ <span class="cline-any cline-neutral">&nbsp;</span>
527
+ <span class="cline-any cline-yes">14x</span>
528
+ <span class="cline-any cline-yes">14x</span>
529
+ <span class="cline-any cline-yes">14x</span>
530
+ <span class="cline-any cline-yes">14x</span>
531
+ <span class="cline-any cline-neutral">&nbsp;</span>
532
+ <span class="cline-any cline-neutral">&nbsp;</span>
533
+ <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-neutral">&nbsp;</span>
539
+ <span class="cline-any cline-no">&nbsp;</span>
540
+ <span class="cline-any cline-no">&nbsp;</span>
541
+ <span class="cline-any cline-no">&nbsp;</span>
542
+ <span class="cline-any cline-no">&nbsp;</span>
543
+ <span class="cline-any cline-neutral">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-neutral">&nbsp;</span>
546
+ <span class="cline-any cline-neutral">&nbsp;</span>
547
+ <span class="cline-any cline-neutral">&nbsp;</span>
548
+ <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-neutral">&nbsp;</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
552
+ <span class="cline-any cline-yes">14x</span>
553
+ <span class="cline-any cline-yes">14x</span>
554
+ <span class="cline-any cline-yes">14x</span>
555
+ <span class="cline-any cline-yes">14x</span>
556
+ <span class="cline-any cline-yes">14x</span>
557
+ <span class="cline-any cline-yes">14x</span>
558
+ <span class="cline-any cline-neutral">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-neutral">&nbsp;</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-neutral">&nbsp;</span>
564
+ <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-neutral">&nbsp;</span>
567
+ <span class="cline-any cline-yes">10x</span>
568
+ <span class="cline-any cline-yes">10x</span>
569
+ <span class="cline-any cline-yes">10x</span>
570
+ <span class="cline-any cline-yes">10x</span>
571
+ <span class="cline-any cline-yes">10x</span>
572
+ <span class="cline-any cline-neutral">&nbsp;</span>
573
+ <span class="cline-any cline-neutral">&nbsp;</span>
574
+ <span class="cline-any cline-neutral">&nbsp;</span>
575
+ <span class="cline-any cline-neutral">&nbsp;</span>
576
+ <span class="cline-any cline-neutral">&nbsp;</span>
577
+ <span class="cline-any cline-neutral">&nbsp;</span>
578
+ <span class="cline-any cline-neutral">&nbsp;</span>
579
+ <span class="cline-any cline-neutral">&nbsp;</span>
580
+ <span class="cline-any cline-no">&nbsp;</span>
581
+ <span class="cline-any cline-no">&nbsp;</span>
582
+ <span class="cline-any cline-no">&nbsp;</span>
583
+ <span class="cline-any cline-no">&nbsp;</span>
584
+ <span class="cline-any cline-no">&nbsp;</span>
585
+ <span class="cline-any cline-neutral">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-neutral">&nbsp;</span>
588
+ <span class="cline-any cline-neutral">&nbsp;</span>
589
+ <span class="cline-any cline-neutral">&nbsp;</span>
590
+ <span class="cline-any cline-neutral">&nbsp;</span>
591
+ <span class="cline-any cline-neutral">&nbsp;</span>
592
+ <span class="cline-any cline-neutral">&nbsp;</span>
593
+ <span class="cline-any cline-neutral">&nbsp;</span>
594
+ <span class="cline-any cline-yes">11x</span>
595
+ <span class="cline-any cline-yes">11x</span>
596
+ <span class="cline-any cline-yes">11x</span>
597
+ <span class="cline-any cline-yes">11x</span>
598
+ <span class="cline-any cline-yes">10x</span>
599
+ <span class="cline-any cline-yes">9x</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-neutral">&nbsp;</span>
602
+ <span class="cline-any cline-neutral">&nbsp;</span>
603
+ <span class="cline-any cline-neutral">&nbsp;</span>
604
+ <span class="cline-any cline-neutral">&nbsp;</span>
605
+ <span class="cline-any cline-neutral">&nbsp;</span>
606
+ <span class="cline-any cline-neutral">&nbsp;</span>
607
+ <span class="cline-any cline-neutral">&nbsp;</span>
608
+ <span class="cline-any cline-no">&nbsp;</span>
609
+ <span class="cline-any cline-no">&nbsp;</span>
610
+ <span class="cline-any cline-no">&nbsp;</span>
611
+ <span class="cline-any cline-no">&nbsp;</span>
612
+ <span class="cline-any cline-no">&nbsp;</span>
613
+ <span class="cline-any cline-no">&nbsp;</span>
614
+ <span class="cline-any cline-neutral">&nbsp;</span>
615
+ <span class="cline-any cline-neutral">&nbsp;</span>
616
+ <span class="cline-any cline-neutral">&nbsp;</span>
617
+ <span class="cline-any cline-neutral">&nbsp;</span>
618
+ <span class="cline-any cline-neutral">&nbsp;</span>
619
+ <span class="cline-any cline-neutral">&nbsp;</span>
620
+ <span class="cline-any cline-neutral">&nbsp;</span>
621
+ <span class="cline-any cline-neutral">&nbsp;</span>
622
+ <span class="cline-any cline-neutral">&nbsp;</span>
623
+ <span class="cline-any cline-yes">11x</span>
624
+ <span class="cline-any cline-yes">11x</span>
625
+ <span class="cline-any cline-neutral">&nbsp;</span>
626
+ <span class="cline-any cline-neutral">&nbsp;</span>
627
+ <span class="cline-any cline-neutral">&nbsp;</span>
628
+ <span class="cline-any cline-neutral">&nbsp;</span>
629
+ <span class="cline-any cline-neutral">&nbsp;</span>
630
+ <span class="cline-any cline-neutral">&nbsp;</span>
631
+ <span class="cline-any cline-neutral">&nbsp;</span>
632
+ <span class="cline-any cline-neutral">&nbsp;</span>
633
+ <span class="cline-any cline-neutral">&nbsp;</span>
634
+ <span class="cline-any cline-neutral">&nbsp;</span>
635
+ <span class="cline-any cline-neutral">&nbsp;</span>
636
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
+ <span class="cline-any cline-yes">10x</span>
638
+ <span class="cline-any cline-yes">10x</span>
639
+ <span class="cline-any cline-yes">80x</span>
640
+ <span class="cline-any cline-yes">10x</span>
641
+ <span class="cline-any cline-yes">40x</span>
642
+ <span class="cline-any cline-yes">10x</span>
643
+ <span class="cline-any cline-neutral">&nbsp;</span>
644
+ <span class="cline-any cline-neutral">&nbsp;</span>
645
+ <span class="cline-any cline-neutral">&nbsp;</span>
646
+ <span class="cline-any cline-neutral">&nbsp;</span>
647
+ <span class="cline-any cline-neutral">&nbsp;</span>
648
+ <span class="cline-any cline-neutral">&nbsp;</span>
649
+ <span class="cline-any cline-neutral">&nbsp;</span>
650
+ <span class="cline-any cline-neutral">&nbsp;</span>
651
+ <span class="cline-any cline-yes">10x</span>
652
+ <span class="cline-any cline-yes">10x</span>
653
+ <span class="cline-any cline-yes">10x</span>
654
+ <span class="cline-any cline-no">&nbsp;</span>
655
+ <span class="cline-any cline-neutral">&nbsp;</span>
656
+ <span class="cline-any cline-yes">10x</span>
657
+ <span class="cline-any cline-yes">10x</span>
658
+ <span class="cline-any cline-yes">9x</span>
659
+ <span class="cline-any cline-yes">9x</span>
660
+ <span class="cline-any cline-no">&nbsp;</span>
661
+ <span class="cline-any cline-no">&nbsp;</span>
662
+ <span class="cline-any cline-neutral">&nbsp;</span>
663
+ <span class="cline-any cline-neutral">&nbsp;</span>
664
+ <span class="cline-any cline-neutral">&nbsp;</span>
665
+ <span class="cline-any cline-neutral">&nbsp;</span>
666
+ <span class="cline-any cline-neutral">&nbsp;</span>
667
+ <span class="cline-any cline-neutral">&nbsp;</span>
668
+ <span class="cline-any cline-neutral">&nbsp;</span>
669
+ <span class="cline-any cline-no">&nbsp;</span>
670
+ <span class="cline-any cline-no">&nbsp;</span>
671
+ <span class="cline-any cline-no">&nbsp;</span>
672
+ <span class="cline-any cline-no">&nbsp;</span>
673
+ <span class="cline-any cline-no">&nbsp;</span>
674
+ <span class="cline-any cline-no">&nbsp;</span>
675
+ <span class="cline-any cline-neutral">&nbsp;</span>
676
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
677
+ * QuarkDash Crypto Algorithm Implementation
678
+ *
679
+ * @git https://github.com/devsdaddy/quarkdash
680
+ * @version 1.0.0
681
+ * @author Elijah Rastorguev
682
+ * @build 1000
683
+ * @website https://dev.to/devsdaddy
684
+ */
685
+ /* Import Required Modules */
686
+ import {CipherFactory, CipherType} from "./cipher";
687
+ import {ICipher, ICryptoMethodAsync, ICryptoMethodSync, IKDF, IKeyExchange, IMAC} from "./types";
688
+ import {QuarkDashKDF} from "./kdf";
689
+ import {QuarkDashMAC} from "./mac";
690
+ import {QuarkDashKeyExchange} from "./ringlwe";
691
+ import {QuarkDashUtils} from "./utils";
692
+ &nbsp;
693
+ /**
694
+ * Quark Dash parsed encrypted packet
695
+ */
696
+ export interface QDEncryptedPacket {
697
+ metadata: Uint8Array;
698
+ encrypted: Uint8Array;
699
+ mac: Uint8Array;
700
+ }
701
+ &nbsp;
702
+ /**
703
+ * QuarkDash options
704
+ */
705
+ export interface QuarkDashOptions {
706
+ cipher: CipherType;
707
+ kdf: IKDF;
708
+ mac: IMAC;
709
+ keyExchange: IKeyExchange;
710
+ maxPacketWindow: number;
711
+ timestampToleranceMs: number;
712
+ }
713
+ &nbsp;
714
+ /**
715
+ * Default QuarkDash options
716
+ */
717
+ const DEFAULT_OPTIONS : QuarkDashOptions = {
718
+ cipher: CipherType.ChaCha20,
719
+ kdf: new QuarkDashKDF(),
720
+ mac: new QuarkDashMAC(),
721
+ keyExchange: new QuarkDashKeyExchange(),
722
+ maxPacketWindow: 1000,
723
+ timestampToleranceMs: 300000,
724
+ }
725
+ &nbsp;
726
+ /**
727
+ * QuarkDash Crypto Algorithm Implementation
728
+ */
729
+ export class QuarkDash implements ICryptoMethodAsync, ICryptoMethodSync {
730
+ private config: QuarkDashOptions;
731
+ private sessionKey: Uint8Array | null = null;
732
+ private cipher: ICipher | null = null;
733
+ private macKey: Uint8Array | null = null;
734
+ private sendSeq = 0;
735
+ private recvSeq = 0;
736
+ private receivedPackets = new Set&lt;number&gt;();
737
+ private myKeyPair?: { publicKey: Uint8Array; privateKey: Uint8Array };
738
+ private peerPublicKey?: Uint8Array;
739
+ &nbsp;
740
+ /**
741
+ * Create QuarkDash Crypto
742
+ * @param config {QuarkDashOptions} Crypto Options
743
+ */
744
+ constructor(config?: Partial&lt;QuarkDashOptions&gt;) {
745
+ this.config = { ...DEFAULT_OPTIONS, ...config };
746
+ }
747
+ &nbsp;
748
+ /**
749
+ * Generate key pair async
750
+ * @returns {Promise&lt;Uint8Array&gt;} Key pair buffer
751
+ * TODO: GPU Computing
752
+ */
753
+ public async generateKeyPair(): Promise&lt;Uint8Array&gt; {
754
+ this.myKeyPair = await this.config.keyExchange.generateKeyPair();
755
+ return this.myKeyPair.publicKey;
756
+ }
757
+ &nbsp;
758
+ /**
759
+ * Generate key pair sync
760
+ * @returns {Uint8Array} Key pair buffer
761
+ */
762
+ public <span class="fstat-no" title="function not covered" >generateKeyPairSync(</span>): Uint8Array {
763
+ <span class="cstat-no" title="statement not covered" > this.myKeyPair = this.config.keyExchange.generateKeyPairSync();</span>
764
+ <span class="cstat-no" title="statement not covered" > return this.myKeyPair.publicKey;</span>
765
+ }
766
+ &nbsp;
767
+ /**
768
+ * Initialize session async
769
+ * @param peerPublicKey {Uint8Array} Peer public key buffer
770
+ * @param isInitiator {boolean} Is session initiator
771
+ * @returns {Promise&lt;Uint8Array|number&gt;} Returns derived session key or null
772
+ * TODO: GPU Computing
773
+ */
774
+ public async initializeSession(peerPublicKey: Uint8Array, isInitiator: boolean): Promise&lt;Uint8Array | null&gt; {
775
+ this.peerPublicKey = peerPublicKey;
776
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.myKeyPair) <span class="cstat-no" title="statement not covered" >await this.generateKeyPair();</span>
777
+ if (isInitiator) {
778
+ const { ciphertext, sharedSecret } = await this.config.keyExchange.encapsulate(peerPublicKey);
779
+ await this.deriveSessionKeys(sharedSecret);
780
+ return ciphertext;
781
+ } else {
782
+ return null;
783
+ }
784
+ }
785
+ &nbsp;
786
+ /**
787
+ * Initialize session sync
788
+ * @param peerPublicKey {Uint8Array} Peer public key buffer
789
+ * @param isInitiator {boolean} Is session initiator
790
+ * @returns {Uint8Array|number} Returns derived session key or null
791
+ */
792
+ public <span class="fstat-no" title="function not covered" >initializeSessionSync(</span>peerPublicKey: Uint8Array, isInitiator: boolean): Uint8Array | null {
793
+ <span class="cstat-no" title="statement not covered" > this.peerPublicKey = peerPublicKey;</span>
794
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.myKeyPair) <span class="cstat-no" title="statement not covered" >this.generateKeyPairSync();</span></span>
795
+ <span class="cstat-no" title="statement not covered" > if (isInitiator) {</span>
796
+ const { ciphertext, sharedSecret } = <span class="cstat-no" title="statement not covered" >this.config.keyExchange.encapsulateSync(peerPublicKey);</span>
797
+ <span class="cstat-no" title="statement not covered" > this.deriveSessionKeysSync(sharedSecret);</span>
798
+ <span class="cstat-no" title="statement not covered" > return ciphertext;</span>
799
+ } else {
800
+ <span class="cstat-no" title="statement not covered" > return null;</span>
801
+ }
802
+ }
803
+ &nbsp;
804
+ /**
805
+ * Finalize session async
806
+ * @param ciphertext {Uint8Array} Cipher text buffer
807
+ * TODO: GPU Computing
808
+ */
809
+ public async finalizeSession(ciphertext: Uint8Array): Promise&lt;void&gt; {
810
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.myKeyPair || !this.peerPublicKey) <span class="cstat-no" title="statement not covered" >throw new Error('Session not initialized');</span>
811
+ const sharedSecret = await this.config.keyExchange.decapsulate(this.myKeyPair.privateKey, ciphertext);
812
+ await this.deriveSessionKeys(sharedSecret);
813
+ }
814
+ &nbsp;
815
+ /**
816
+ * Finalize session sync
817
+ * @param ciphertext {Uint8Array} Cipher text buffer
818
+ */
819
+ public <span class="fstat-no" title="function not covered" >finalizeSessionSync(</span>ciphertext: Uint8Array): void {
820
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.myKeyPair || !this.peerPublicKey) <span class="cstat-no" title="statement not covered" >throw new Error('Session not initialized');</span></span>
821
+ const sharedSecret = <span class="cstat-no" title="statement not covered" >this.config.keyExchange.decapsulateSync(this.myKeyPair.privateKey, ciphertext);</span>
822
+ <span class="cstat-no" title="statement not covered" > this.deriveSessionKeysSync(sharedSecret);</span>
823
+ }
824
+ &nbsp;
825
+ /**
826
+ * Derive session keys async
827
+ * @param sharedSecret {Uint8Array} Shared secret buffer
828
+ * @private
829
+ * TODO: GPU Computing
830
+ */
831
+ private async deriveSessionKeys(sharedSecret: Uint8Array): Promise&lt;void&gt; {
832
+ const salt = QuarkDashUtils.randomBytes(32);
833
+ const info = QuarkDashUtils.textToBytes('session-key');
834
+ const keyMaterial = await this.config.kdf.derive(sharedSecret, salt, info, 64);
835
+ this.processDeriveSessionKeys(keyMaterial, sharedSecret);
836
+ }
837
+ &nbsp;
838
+ /**
839
+ * Derive session keys sync
840
+ * @param sharedSecret {Uint8Array} Shared secret buffer
841
+ * @private
842
+ */
843
+ private <span class="fstat-no" title="function not covered" >deriveSessionKeysSync(</span>sharedSecret: Uint8Array): void {
844
+ const salt = <span class="cstat-no" title="statement not covered" >QuarkDashUtils.randomBytes(32);</span>
845
+ const info = <span class="cstat-no" title="statement not covered" >QuarkDashUtils.textToBytes('session-key');</span>
846
+ const keyMaterial = <span class="cstat-no" title="statement not covered" >this.config.kdf.deriveSync(sharedSecret, salt, info, 64);</span>
847
+ <span class="cstat-no" title="statement not covered" > this.processDeriveSessionKeys(keyMaterial, sharedSecret);</span>
848
+ }
849
+ &nbsp;
850
+ /**
851
+ * Process derive session keys
852
+ * @param keyMaterial {Uint8Array} Key material buffer
853
+ * @param sharedSecret {Uint8Array} Shared secret buffer
854
+ * @private
855
+ */
856
+ private processDeriveSessionKeys(keyMaterial : Uint8Array, sharedSecret: Uint8Array){
857
+ this.sessionKey = keyMaterial.slice(0, 32);
858
+ this.macKey = keyMaterial.slice(32, 64);
859
+ const nonce = new Uint8Array(12);
860
+ this.cipher = CipherFactory.create(this.config.cipher, this.sessionKey, nonce);
861
+ QuarkDashUtils.secureZero(sharedSecret);
862
+ QuarkDashUtils.secureZero(keyMaterial);
863
+ }
864
+ &nbsp;
865
+ /**
866
+ * Encrypt sync
867
+ * @param decryptedData {Uint8Array} Decrypted buffer
868
+ * @returns {Promise&lt;Uint8Array&gt;} Encrypted buffer
869
+ * TODO: GPU Computing
870
+ */
871
+ public async encrypt(decryptedData: Uint8Array): Promise&lt;Uint8Array&gt; {
872
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.cipher || !this.macKey) <span class="cstat-no" title="statement not covered" >throw new Error('Session not established');</span>
873
+ const metadata = this.buildMetadata();
874
+ const encrypted = await this.cipher.encrypt(decryptedData);
875
+ const mac = await this.config.mac.sign(QuarkDashUtils.concatBytes(metadata, encrypted), this.macKey);
876
+ return QuarkDashUtils.concatBytes(metadata, encrypted, mac);
877
+ }
878
+ &nbsp;
879
+ /**
880
+ * Encrypt sync
881
+ * @param decryptedData {Uint8Array} Decrypted buffer
882
+ * @returns {Uint8Array} Encrypted buffer
883
+ */
884
+ public <span class="fstat-no" title="function not covered" >encryptSync(</span>decryptedData: Uint8Array): Uint8Array {
885
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.cipher || !this.macKey) <span class="cstat-no" title="statement not covered" >throw new Error('Session not established');</span></span>
886
+ const metadata = <span class="cstat-no" title="statement not covered" >this.buildMetadata();</span>
887
+ const encrypted = <span class="cstat-no" title="statement not covered" >this.cipher.encryptSync(decryptedData);</span>
888
+ const mac = <span class="cstat-no" title="statement not covered" >this.config.mac.signSync(QuarkDashUtils.concatBytes(metadata, encrypted), this.macKey);</span>
889
+ <span class="cstat-no" title="statement not covered" > return QuarkDashUtils.concatBytes(metadata, encrypted, mac);</span>
890
+ }
891
+ &nbsp;
892
+ /**
893
+ * Decrypt async
894
+ * @param encryptedData {Uint8Array} Encrypted buffer
895
+ * @returns {Promise&lt;Uint8Array&gt;} Decrypted buffer
896
+ * TODO: GPU Computing
897
+ */
898
+ public async decrypt(encryptedData: Uint8Array): Promise&lt;Uint8Array&gt; {
899
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.cipher || !this.macKey) <span class="cstat-no" title="statement not covered" >throw new Error('Session not established');</span>
900
+ const packet = this.processDecrypt(encryptedData);
901
+ const valid = await this.config.mac.verify(QuarkDashUtils.concatBytes(packet.metadata, packet.encrypted), this.macKey, packet.mac);
902
+ if (!valid) throw new Error('MAC verification failed');
903
+ this.checkMetadata(packet.metadata);
904
+ return await this.cipher.decrypt(packet.encrypted);
905
+ }
906
+ &nbsp;
907
+ /**
908
+ * Decrypt sync
909
+ * @param encryptedData {Uint8Array} Encrypted buffer
910
+ * @returns {Uint8Array} Decrypted buffer
911
+ */
912
+ public <span class="fstat-no" title="function not covered" >decryptSync(</span>encryptedData: Uint8Array): Uint8Array {
913
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.cipher || !this.macKey) <span class="cstat-no" title="statement not covered" >throw new Error('Session not established');</span></span>
914
+ const packet = <span class="cstat-no" title="statement not covered" >this.processDecrypt(encryptedData);</span>
915
+ const valid = <span class="cstat-no" title="statement not covered" >this.config.mac.verifySync(QuarkDashUtils.concatBytes(packet.metadata, packet.encrypted), this.macKey, packet.mac);</span>
916
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!valid) <span class="cstat-no" title="statement not covered" >throw new Error('MAC verification failed');</span></span>
917
+ <span class="cstat-no" title="statement not covered" > this.checkMetadata(packet.metadata);</span>
918
+ <span class="cstat-no" title="statement not covered" > return this.cipher.decryptSync(packet.encrypted);</span>
919
+ }
920
+ &nbsp;
921
+ /**
922
+ * Process decrypt
923
+ * @param encryptedData {Uint8Array} encrypted buffer
924
+ * @returns {QDEncryptedPacket} Parsed encrypted packet
925
+ * @private
926
+ */
927
+ private processDecrypt(encryptedData: Uint8Array) : QDEncryptedPacket {
928
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (encryptedData.length &lt; 44) <span class="cstat-no" title="statement not covered" >throw new Error('Invalid ciphertext');</span>
929
+ return {
930
+ metadata: encryptedData.slice(0, 12),
931
+ encrypted: encryptedData.slice(12, encryptedData.length - 32),
932
+ mac: encryptedData.slice(encryptedData.length - 32)
933
+ }
934
+ }
935
+ &nbsp;
936
+ /**
937
+ * Build meta-data
938
+ * @returns {Uint8Array} Meta-data buffer
939
+ * @private
940
+ */
941
+ private buildMetadata(): Uint8Array {
942
+ const metadata = new Uint8Array(12);
943
+ const timestamp = BigInt(Date.now());
944
+ for (let i = 0; i &lt; 8; i++) metadata[i] = Number((timestamp &gt;&gt; BigInt(i*8)) &amp; 0xFFn);
945
+ const seq = this.sendSeq++;
946
+ for (let i = 0; i &lt; 4; i++) metadata[8+i] = (seq &gt;&gt; (i*8)) &amp; 0xFF;
947
+ return metadata;
948
+ }
949
+ &nbsp;
950
+ /**
951
+ * Check Meta-Data
952
+ * @param metadata {Uint8Array} Meta-data buffer
953
+ * @private
954
+ */
955
+ private checkMetadata(metadata: Uint8Array): void {
956
+ const timestamp = QuarkDashUtils.readUint64(metadata, 0);
957
+ const now = Date.now();
958
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (Math.abs(now - Number(timestamp)) &gt; this.config.timestampToleranceMs) {
959
+ <span class="cstat-no" title="statement not covered" > throw new Error('Timestamp out of window');</span>
960
+ }
961
+ const seq = QuarkDashUtils.readUint32(metadata, 8);
962
+ if (this.receivedPackets.has(seq)) throw new Error('Replay detected');
963
+ this.receivedPackets.add(seq);
964
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.receivedPackets.size &gt; this.config.maxPacketWindow) {
965
+ const oldest = <span class="cstat-no" title="statement not covered" >Math.min(...this.receivedPackets);</span>
966
+ <span class="cstat-no" title="statement not covered" > this.receivedPackets.delete(oldest);</span>
967
+ }
968
+ }
969
+ &nbsp;
970
+ /**
971
+ * Dispose QuarkDash Crypto
972
+ */
973
+ public <span class="fstat-no" title="function not covered" >dispose(</span>) : void {
974
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.sessionKey) <span class="cstat-no" title="statement not covered" >QuarkDashUtils.secureZero(this.sessionKey);</span></span>
975
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.macKey) <span class="cstat-no" title="statement not covered" >QuarkDashUtils.secureZero(this.macKey);</span></span>
976
+ <span class="cstat-no" title="statement not covered" > this.sessionKey = null;</span>
977
+ <span class="cstat-no" title="statement not covered" > this.macKey = null;</span>
978
+ <span class="cstat-no" title="statement not covered" > this.cipher = null;</span>
979
+ <span class="cstat-no" title="statement not covered" > this.receivedPackets.clear();</span>
980
+ }
981
+ }</pre></td></tr></table></pre>
982
+
983
+ <div class='push'></div><!-- for sticky footer -->
984
+ </div><!-- /wrapper -->
985
+ <div class='footer quiet pad2 space-top1 center small'>
986
+ Code coverage generated by
987
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
988
+ at 2026-04-06T14:58:58.176Z
989
+ </div>
990
+ <script src="prettify.js"></script>
991
+ <script>
992
+ window.onload = function () {
993
+ prettyPrint();
994
+ };
995
+ </script>
996
+ <script src="sorter.js"></script>
997
+ <script src="block-navigation.js"></script>
998
+ </body>
999
+ </html>
1000
+