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,895 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for ringlwe.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> ringlwe.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">100% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>133/133</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">100% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>8/8</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>16/16</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">100% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>103/103</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 high'></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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
337
+ <span class="cline-any cline-neutral">&nbsp;</span>
338
+ <span class="cline-any cline-neutral">&nbsp;</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-neutral">&nbsp;</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-neutral">&nbsp;</span>
347
+ <span class="cline-any cline-yes">1x</span>
348
+ <span class="cline-any cline-neutral">&nbsp;</span>
349
+ <span class="cline-any cline-neutral">&nbsp;</span>
350
+ <span class="cline-any cline-neutral">&nbsp;</span>
351
+ <span class="cline-any cline-neutral">&nbsp;</span>
352
+ <span class="cline-any cline-yes">1x</span>
353
+ <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-yes">1x</span>
355
+ <span class="cline-any cline-yes">1x</span>
356
+ <span class="cline-any cline-yes">1x</span>
357
+ <span class="cline-any cline-yes">1x</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-neutral">&nbsp;</span>
361
+ <span class="cline-any cline-neutral">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
+ <span class="cline-any cline-neutral">&nbsp;</span>
365
+ <span class="cline-any cline-yes">42x</span>
366
+ <span class="cline-any cline-yes">42x</span>
367
+ <span class="cline-any cline-yes">10752x</span>
368
+ <span class="cline-any cline-yes">10752x</span>
369
+ <span class="cline-any cline-yes">7145x</span>
370
+ <span class="cline-any cline-yes">3564x</span>
371
+ <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-yes">42x</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">14x</span>
382
+ <span class="cline-any cline-yes">14x</span>
383
+ <span class="cline-any cline-yes">14x</span>
384
+ <span class="cline-any cline-yes">3584x</span>
385
+ <span class="cline-any cline-yes">3584x</span>
386
+ <span class="cline-any cline-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-yes">14x</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-yes">70x</span>
397
+ <span class="cline-any cline-yes">70x</span>
398
+ <span class="cline-any cline-yes">70x</span>
399
+ <span class="cline-any cline-yes">560x</span>
400
+ <span class="cline-any cline-yes">560x</span>
401
+ <span class="cline-any cline-yes">17850x</span>
402
+ <span class="cline-any cline-yes">17850x</span>
403
+ <span class="cline-any cline-yes">71680x</span>
404
+ <span class="cline-any cline-yes">71680x</span>
405
+ <span class="cline-any cline-yes">71680x</span>
406
+ <span class="cline-any cline-yes">71680x</span>
407
+ <span class="cline-any cline-yes">71680x</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-yes">560x</span>
411
+ <span class="cline-any cline-neutral">&nbsp;</span>
412
+ <span class="cline-any cline-yes">70x</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-yes">35x</span>
422
+ <span class="cline-any cline-yes">35x</span>
423
+ <span class="cline-any cline-yes">35x</span>
424
+ <span class="cline-any cline-yes">280x</span>
425
+ <span class="cline-any cline-yes">280x</span>
426
+ <span class="cline-any cline-yes">8925x</span>
427
+ <span class="cline-any cline-yes">8925x</span>
428
+ <span class="cline-any cline-yes">35840x</span>
429
+ <span class="cline-any cline-yes">35840x</span>
430
+ <span class="cline-any cline-yes">35840x</span>
431
+ <span class="cline-any cline-yes">35840x</span>
432
+ <span class="cline-any cline-yes">35840x</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-yes">280x</span>
436
+ <span class="cline-any cline-neutral">&nbsp;</span>
437
+ <span class="cline-any cline-yes">8960x</span>
438
+ <span class="cline-any cline-yes">35x</span>
439
+ <span class="cline-any cline-neutral">&nbsp;</span>
440
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">35x</span>
449
+ <span class="cline-any cline-yes">35x</span>
450
+ <span class="cline-any cline-yes">35x</span>
451
+ <span class="cline-any cline-yes">8960x</span>
452
+ <span class="cline-any cline-yes">35x</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-neutral">&nbsp;</span>
459
+ <span class="cline-any cline-neutral">&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-yes">49x</span>
463
+ <span class="cline-any cline-yes">49x</span>
464
+ <span class="cline-any cline-yes">12544x</span>
465
+ <span class="cline-any cline-yes">12544x</span>
466
+ <span class="cline-any cline-yes">12544x</span>
467
+ <span class="cline-any cline-neutral">&nbsp;</span>
468
+ <span class="cline-any cline-yes">49x</span>
469
+ <span class="cline-any cline-neutral">&nbsp;</span>
470
+ <span class="cline-any cline-neutral">&nbsp;</span>
471
+ <span class="cline-any cline-neutral">&nbsp;</span>
472
+ <span class="cline-any cline-neutral">&nbsp;</span>
473
+ <span class="cline-any cline-neutral">&nbsp;</span>
474
+ <span class="cline-any cline-neutral">&nbsp;</span>
475
+ <span class="cline-any cline-neutral">&nbsp;</span>
476
+ <span class="cline-any cline-neutral">&nbsp;</span>
477
+ <span class="cline-any cline-neutral">&nbsp;</span>
478
+ <span class="cline-any cline-yes">28x</span>
479
+ <span class="cline-any cline-yes">28x</span>
480
+ <span class="cline-any cline-yes">7168x</span>
481
+ <span class="cline-any cline-yes">7168x</span>
482
+ <span class="cline-any cline-neutral">&nbsp;</span>
483
+ <span class="cline-any cline-yes">28x</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-neutral">&nbsp;</span>
489
+ <span class="cline-any cline-neutral">&nbsp;</span>
490
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-neutral">&nbsp;</span>
492
+ <span class="cline-any cline-neutral">&nbsp;</span>
493
+ <span class="cline-any cline-yes">14x</span>
494
+ <span class="cline-any cline-yes">14x</span>
495
+ <span class="cline-any cline-yes">3584x</span>
496
+ <span class="cline-any cline-yes">3584x</span>
497
+ <span class="cline-any cline-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-yes">14x</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-neutral">&nbsp;</span>
506
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">840x</span>
511
+ <span class="cline-any cline-yes">3780x</span>
512
+ <span class="cline-any cline-yes">840x</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-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-neutral">&nbsp;</span>
517
+ <span class="cline-any cline-neutral">&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-yes">1x</span>
524
+ <span class="cline-any cline-yes">3x</span>
525
+ <span class="cline-any cline-yes">1x</span>
526
+ <span class="cline-any cline-neutral">&nbsp;</span>
527
+ <span class="cline-any cline-neutral">&nbsp;</span>
528
+ <span class="cline-any cline-neutral">&nbsp;</span>
529
+ <span class="cline-any cline-neutral">&nbsp;</span>
530
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">14x</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-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-yes">14x</span>
543
+ <span class="cline-any cline-yes">14x</span>
544
+ <span class="cline-any cline-yes">14x</span>
545
+ <span class="cline-any cline-yes">14x</span>
546
+ <span class="cline-any cline-yes">14x</span>
547
+ <span class="cline-any cline-yes">3584x</span>
548
+ <span class="cline-any cline-yes">14x</span>
549
+ <span class="cline-any cline-yes">14x</span>
550
+ <span class="cline-any cline-yes">14x</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
552
+ <span class="cline-any cline-neutral">&nbsp;</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-neutral">&nbsp;</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-neutral">&nbsp;</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">7x</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-neutral">&nbsp;</span>
568
+ <span class="cline-any cline-neutral">&nbsp;</span>
569
+ <span class="cline-any cline-yes">7x</span>
570
+ <span class="cline-any cline-yes">7x</span>
571
+ <span class="cline-any cline-yes">7x</span>
572
+ <span class="cline-any cline-yes">7x</span>
573
+ <span class="cline-any cline-yes">7x</span>
574
+ <span class="cline-any cline-yes">7x</span>
575
+ <span class="cline-any cline-yes">7x</span>
576
+ <span class="cline-any cline-yes">1792x</span>
577
+ <span class="cline-any cline-yes">7x</span>
578
+ <span class="cline-any cline-yes">7x</span>
579
+ <span class="cline-any cline-yes">7x</span>
580
+ <span class="cline-any cline-yes">7x</span>
581
+ <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-neutral">&nbsp;</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
584
+ <span class="cline-any cline-neutral">&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-yes">7x</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-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-neutral">&nbsp;</span>
596
+ <span class="cline-any cline-neutral">&nbsp;</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-neutral">&nbsp;</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-yes">7x</span>
602
+ <span class="cline-any cline-yes">7x</span>
603
+ <span class="cline-any cline-yes">7x</span>
604
+ <span class="cline-any cline-yes">7x</span>
605
+ <span class="cline-any cline-neutral">&nbsp;</span>
606
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
607
+ * QuarkDash Ring-LWE Implementation
608
+ *
609
+ * @git https://github.com/devsdaddy/quarkdash
610
+ * @version 1.0.0
611
+ * @author Elijah Rastorguev
612
+ * @build 1000
613
+ * @website https://dev.to/devsdaddy
614
+ */
615
+ /* Import Required Modules */
616
+ import {ICryptoEncapsulated, ICryptoKeyPair, IKeyExchange} from "./types";
617
+ import {QuarkDashUtils} from "./utils";
618
+ &nbsp;
619
+ /**
620
+ * Ring-LWE based key exchange implementation
621
+ */
622
+ export class QuarkDashKeyExchange implements IKeyExchange {
623
+ // Ring-LWE Constants
624
+ private static readonly N = 256;
625
+ private static readonly Q = 7681n;
626
+ private static readonly ROOT = 7n;
627
+ private static readonly INV_N = this.modInverse(BigInt(this.N), this.Q);
628
+ &nbsp;
629
+ /**
630
+ * Get small polygon
631
+ * @returns {bigint[]} Small polygon
632
+ * @private
633
+ */
634
+ private static smallPoly(): bigint[] {
635
+ const poly = new Array&lt;bigint&gt;(this.N);
636
+ for (let i=0;i&lt;this.N;i++) {
637
+ const r = Math.random();
638
+ if (r&lt;0.33) poly[i] = -1n;
639
+ else if (r&lt;0.66) poly[i] = 0n;
640
+ else poly[i] = 1n;
641
+ }
642
+ return poly;
643
+ }
644
+ &nbsp;
645
+ /**
646
+ * Uniform polygon
647
+ * @returns {bigint[]}
648
+ * @private
649
+ */
650
+ private static uniformPoly(): bigint[] {
651
+ const poly = new Array&lt;bigint&gt;(this.N);
652
+ const bytes = QuarkDashUtils.randomBytes(this.N*2);
653
+ for(let i=0;i&lt;this.N;i++) {
654
+ const val = (bytes[2*i] | (bytes[2*i+1]&lt;&lt;8)) % Number(this.Q);
655
+ poly[i] = BigInt(val);
656
+ }
657
+ return poly;
658
+ }
659
+ &nbsp;
660
+ /**
661
+ * NTT Operation
662
+ * @param poly {bigint[]} Polygon
663
+ * @private
664
+ */
665
+ private static ntt(poly: bigint[]): bigint[] {
666
+ const res = [...poly];
667
+ let len = 2;
668
+ while(len &lt;= this.N) {
669
+ const wlen = this.powMod(this.ROOT, BigInt(this.N/len), this.Q);
670
+ for(let i=0;i&lt;this.N;i+=len){
671
+ let w=1n;
672
+ for(let j=0;j&lt;len/2;j++){
673
+ const u=res[i+j];
674
+ const v=(res[i+j+len/2]*w)%this.Q;
675
+ res[i+j]=(u+v)%this.Q;
676
+ res[i+j+len/2]=(u-v+this.Q)%this.Q;
677
+ w=(w*wlen)%this.Q;
678
+ }
679
+ }
680
+ len&lt;&lt;=1;
681
+ }
682
+ return res;
683
+ }
684
+ &nbsp;
685
+ /**
686
+ * Inverse NTT
687
+ * @param poly {bigint[]} Polygon
688
+ * @private
689
+ */
690
+ private static invNTT(poly: bigint[]): bigint[] {
691
+ const res = [...poly];
692
+ let len = this.N;
693
+ while(len &gt;= 2){
694
+ const wlen = this.powMod(this.ROOT, BigInt(this.N/len), this.Q);
695
+ for(let i=0;i&lt;this.N;i+=len){
696
+ let w=1n;
697
+ for(let j=0;j&lt;len/2;j++){
698
+ const u=res[i+j];
699
+ const v=res[i+j+len/2];
700
+ res[i+j]=(u+v)%this.Q;
701
+ res[i+j+len/2]=((u-v+this.Q)*w)%this.Q;
702
+ w=(w*wlen)%this.Q;
703
+ }
704
+ }
705
+ len&gt;&gt;=1;
706
+ }
707
+ for(let i=0;i&lt;this.N;i++) res[i]=(res[i]*this.INV_N)%this.Q;
708
+ return res;
709
+ }
710
+ &nbsp;
711
+ /**
712
+ * Multiply
713
+ * @param a {bigint[]} Polygon
714
+ * @param b {bigint[]} Polygon
715
+ * @returns {bigint[]} Multiplied polygons
716
+ */
717
+ public static multiply(a: bigint[], b: bigint[]): bigint[] {
718
+ const aNTT = this.ntt(a);
719
+ const bNTT = this.ntt(b);
720
+ const prod = new Array&lt;bigint&gt;(this.N);
721
+ for(let i=0;i&lt;this.N;i++) prod[i]=(aNTT[i]*bNTT[i])%this.Q;
722
+ return this.invNTT(prod);
723
+ }
724
+ &nbsp;
725
+ /**
726
+ * Serialize polygon
727
+ * @param poly {bigint[]} Polygon
728
+ * @returns {Uint8Array} Polygon buffer
729
+ * @private
730
+ */
731
+ private static serializePoly(poly: bigint[]): Uint8Array {
732
+ const bytes = new Uint8Array(this.N*2);
733
+ for(let i=0;i&lt;this.N;i++) {
734
+ const val = Number(poly[i]);
735
+ bytes[2*i]=val&amp;0xFF;
736
+ bytes[2*i+1]=(val&gt;&gt;8)&amp;0xFF;
737
+ }
738
+ return bytes;
739
+ }
740
+ &nbsp;
741
+ /**
742
+ * Deserialize Polygon
743
+ * @param bytes {Uint8Array} Polygon buffer
744
+ * @returns {bigint[]} Polygon
745
+ * @private
746
+ */
747
+ private static deserializePoly(bytes: Uint8Array): bigint[] {
748
+ const poly = new Array&lt;bigint&gt;(this.N);
749
+ for(let i=0;i&lt;this.N;i++) {
750
+ const val = bytes[2*i] | (bytes[2*i+1]&lt;&lt;8);
751
+ poly[i]=BigInt(val);
752
+ }
753
+ return poly;
754
+ }
755
+ &nbsp;
756
+ /**
757
+ * Round to bits
758
+ * @param poly {bigint[]} Polygon
759
+ * @returns {Uint8Array} rounded buffer
760
+ * @private
761
+ */
762
+ private static roundToBits(poly: bigint[]): Uint8Array {
763
+ const result = new Uint8Array(32);
764
+ for(let i=0;i&lt;this.N;i++) {
765
+ const bit = (Number(poly[i]) &gt; Number(this.Q)/2) ? 1 : 0;
766
+ if(bit) result[i&gt;&gt;3] |= (1&lt;&lt;(i&amp;7));
767
+ }
768
+ return result;
769
+ }
770
+ &nbsp;
771
+ /**
772
+ * Modular exponentiation
773
+ * @param base {bigint} Base
774
+ * @param exp {bigint} exponential
775
+ * @param mod {bigint} module
776
+ * @returns {bigint} Result of modular exponentiation
777
+ * @private
778
+ */
779
+ private static powMod(base: bigint, exp: bigint, mod: bigint): bigint {
780
+ let result=1n, b=base%mod, e=exp;
781
+ while(e&gt;0n){ if(e&amp;1n) result=(result*b)%mod; b=(b*b)%mod; e&gt;&gt;=1n; }
782
+ return result;
783
+ }
784
+ &nbsp;
785
+ /**
786
+ * Modular inverse
787
+ * @param a {bigint}
788
+ * @param m {bigint}
789
+ * @returns {bigint} Inversion result
790
+ * @private
791
+ */
792
+ private static modInverse(a: bigint, m: bigint): bigint {
793
+ let [old_r,r]=[a,m], [old_s,s]=[1n,0n];
794
+ while(r!==0n){ const q=old_r/r; [old_r,r]=[r,old_r-q*r]; [old_s,s]=[s,old_s-q*s]; }
795
+ return (old_s%m+m)%m;
796
+ }
797
+ &nbsp;
798
+ /**
799
+ * Generate crypto key pair async
800
+ * @returns {ICryptoKeyPair} Crypto key pair
801
+ * TODO: GPU Calculations
802
+ */
803
+ public async generateKeyPair(): Promise&lt;ICryptoKeyPair&gt; {
804
+ return this.generateKeyPairSync();
805
+ }
806
+ &nbsp;
807
+ /**
808
+ * Generate crypto key pair sync
809
+ * @returns {ICryptoKeyPair} Crypto key pair
810
+ */
811
+ public generateKeyPairSync(): ICryptoKeyPair {
812
+ const a = QuarkDashKeyExchange.uniformPoly();
813
+ const s = QuarkDashKeyExchange.smallPoly();
814
+ const e = QuarkDashKeyExchange.smallPoly();
815
+ const as = QuarkDashKeyExchange.multiply(a,s);
816
+ const b = new Array&lt;bigint&gt;(QuarkDashKeyExchange.N);
817
+ for(let i=0; i&lt;QuarkDashKeyExchange.N; i++) b[i] = (as[i]+e[i]) % QuarkDashKeyExchange.Q;
818
+ const pub = QuarkDashUtils.concatBytes(QuarkDashKeyExchange.serializePoly(a), QuarkDashKeyExchange.serializePoly(b));
819
+ const priv = QuarkDashKeyExchange.serializePoly(s);
820
+ return { publicKey: pub, privateKey: priv };
821
+ }
822
+ &nbsp;
823
+ /**
824
+ * Encapsulate async
825
+ * @param publicKey {Uint8Array} Public key buffer
826
+ * @returns {Promise&lt;ICryptoEncapsulated&gt;} Encapsulated data
827
+ * TODO: GPU Calculations
828
+ */
829
+ public async encapsulate(publicKey: Uint8Array): Promise&lt;ICryptoEncapsulated&gt; {
830
+ return this.encapsulateSync(publicKey);
831
+ }
832
+ &nbsp;
833
+ /**
834
+ * Encapsulate sync
835
+ * @param publicKey {Uint8Array} Public key buffer
836
+ * @returns {ICryptoEncapsulated} Encapsulated data
837
+ */
838
+ public encapsulateSync(publicKey: Uint8Array): ICryptoEncapsulated {
839
+ const aBytes = publicKey.slice(0, QuarkDashKeyExchange.N*2);
840
+ const bBytes = publicKey.slice(QuarkDashKeyExchange.N*2);
841
+ const a = QuarkDashKeyExchange.deserializePoly(aBytes);
842
+ const b = QuarkDashKeyExchange.deserializePoly(bBytes);
843
+ const sp = QuarkDashKeyExchange.smallPoly();
844
+ const ep = QuarkDashKeyExchange.smallPoly();
845
+ const uArr = QuarkDashKeyExchange.multiply(a,sp);
846
+ for(let i=0; i&lt;QuarkDashKeyExchange.N; i++) uArr[i] = (uArr[i]+ep[i]) % QuarkDashKeyExchange.Q;
847
+ const w = QuarkDashKeyExchange.multiply(b,sp);
848
+ const shared = QuarkDashKeyExchange.roundToBits(w);
849
+ const ciphertext = QuarkDashKeyExchange.serializePoly(uArr);
850
+ return { ciphertext, sharedSecret: shared };
851
+ }
852
+ &nbsp;
853
+ /**
854
+ * Decapsulate async
855
+ * @param privateKey {Uint8Array} Private key buffer
856
+ * @param ciphertext {Uint8Array} Cipher text buffer
857
+ * @returns {Promise&lt;Uint8Array&gt;} Buffer data
858
+ * TODO: GPU Calculations
859
+ */
860
+ public async decapsulate(privateKey: Uint8Array, ciphertext: Uint8Array): Promise&lt;Uint8Array&gt; {
861
+ return this.decapsulateSync(privateKey, ciphertext);
862
+ }
863
+ &nbsp;
864
+ /**
865
+ * Decapsulate sync
866
+ * @param privateKey {Uint8Array} Private key buffer
867
+ * @param ciphertext {Uint8Array} Cipher text buffer
868
+ * @returns {Uint8Array} Buffer data
869
+ */
870
+ public decapsulateSync(privateKey: Uint8Array, ciphertext: Uint8Array): Uint8Array {
871
+ const s = QuarkDashKeyExchange.deserializePoly(privateKey);
872
+ const u = QuarkDashKeyExchange.deserializePoly(ciphertext);
873
+ const w = QuarkDashKeyExchange.multiply(u,s);
874
+ return QuarkDashKeyExchange.roundToBits(w);
875
+ }
876
+ }</pre></td></tr></table></pre>
877
+
878
+ <div class='push'></div><!-- for sticky footer -->
879
+ </div><!-- /wrapper -->
880
+ <div class='footer quiet pad2 space-top1 center small'>
881
+ Code coverage generated by
882
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
883
+ at 2026-04-06T14:58:58.176Z
884
+ </div>
885
+ <script src="prettify.js"></script>
886
+ <script>
887
+ window.onload = function () {
888
+ prettyPrint();
889
+ };
890
+ </script>
891
+ <script src="sorter.js"></script>
892
+ <script src="block-navigation.js"></script>
893
+ </body>
894
+ </html>
895
+