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.
- package/.idea/modules.xml +8 -0
- package/.idea/quarkdash.iml +12 -0
- package/.idea/vcs.xml +6 -0
- package/LICENSE +21 -0
- package/README.md +161 -0
- package/coverage/clover.xml +470 -0
- package/coverage/coverage-final.json +8 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/cipher.ts.html +862 -0
- package/coverage/lcov-report/crypto.ts.html +1000 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +206 -0
- package/coverage/lcov-report/index.ts.html +151 -0
- package/coverage/lcov-report/kdf.ts.html +274 -0
- package/coverage/lcov-report/mac.ts.html +277 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/ringlwe.ts.html +895 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov-report/utils.ts.html +1111 -0
- package/coverage/lcov.info +740 -0
- package/dist/cjs/cipher.js +265 -0
- package/dist/cjs/cipher.js.map +1 -0
- package/dist/cjs/crypto.js +284 -0
- package/dist/cjs/crypto.js.map +1 -0
- package/dist/cjs/index.js +37 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/kdf.js +56 -0
- package/dist/cjs/kdf.js.map +1 -0
- package/dist/cjs/mac.js +55 -0
- package/dist/cjs/mac.js.map +1 -0
- package/dist/cjs/ringlwe.js +267 -0
- package/dist/cjs/ringlwe.js.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils.js +320 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/cipher.js +259 -0
- package/dist/esm/cipher.js.map +1 -0
- package/dist/esm/crypto.js +280 -0
- package/dist/esm/crypto.js.map +1 -0
- package/dist/esm/index.js +21 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/kdf.js +52 -0
- package/dist/esm/kdf.js.map +1 -0
- package/dist/esm/mac.js +51 -0
- package/dist/esm/mac.js.map +1 -0
- package/dist/esm/ringlwe.js +263 -0
- package/dist/esm/ringlwe.js.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils.js +313 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/types/cipher.d.ts +153 -0
- package/dist/types/crypto.d.ts +155 -0
- package/dist/types/index.d.ts +16 -0
- package/dist/types/kdf.d.ts +34 -0
- package/dist/types/mac.d.ts +47 -0
- package/dist/types/ringlwe.d.ts +127 -0
- package/dist/types/types.d.ts +69 -0
- package/dist/types/utils.d.ts +132 -0
- package/img/cover.png +0 -0
- package/package.json +63 -0
- package/src/cipher.ts +260 -0
- package/src/crypto.ts +306 -0
- package/src/index.ts +23 -0
- package/src/kdf.ts +64 -0
- package/src/mac.ts +65 -0
- package/src/ringlwe.ts +271 -0
- package/src/types.ts +75 -0
- package/src/utils.ts +343 -0
- package/tsconfig.cjs.json +7 -0
- 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"> </span>
|
|
372
|
+
<span class="cline-any cline-neutral"> </span>
|
|
373
|
+
<span class="cline-any cline-neutral"> </span>
|
|
374
|
+
<span class="cline-any cline-neutral"> </span>
|
|
375
|
+
<span class="cline-any cline-neutral"> </span>
|
|
376
|
+
<span class="cline-any cline-neutral"> </span>
|
|
377
|
+
<span class="cline-any cline-neutral"> </span>
|
|
378
|
+
<span class="cline-any cline-neutral"> </span>
|
|
379
|
+
<span class="cline-any cline-neutral"> </span>
|
|
380
|
+
<span class="cline-any cline-neutral"> </span>
|
|
381
|
+
<span class="cline-any cline-yes">1x</span>
|
|
382
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
388
|
+
<span class="cline-any cline-neutral"> </span>
|
|
389
|
+
<span class="cline-any cline-neutral"> </span>
|
|
390
|
+
<span class="cline-any cline-neutral"> </span>
|
|
391
|
+
<span class="cline-any cline-neutral"> </span>
|
|
392
|
+
<span class="cline-any cline-neutral"> </span>
|
|
393
|
+
<span class="cline-any cline-neutral"> </span>
|
|
394
|
+
<span class="cline-any cline-neutral"> </span>
|
|
395
|
+
<span class="cline-any cline-neutral"> </span>
|
|
396
|
+
<span class="cline-any cline-neutral"> </span>
|
|
397
|
+
<span class="cline-any cline-neutral"> </span>
|
|
398
|
+
<span class="cline-any cline-neutral"> </span>
|
|
399
|
+
<span class="cline-any cline-neutral"> </span>
|
|
400
|
+
<span class="cline-any cline-neutral"> </span>
|
|
401
|
+
<span class="cline-any cline-neutral"> </span>
|
|
402
|
+
<span class="cline-any cline-neutral"> </span>
|
|
403
|
+
<span class="cline-any cline-neutral"> </span>
|
|
404
|
+
<span class="cline-any cline-neutral"> </span>
|
|
405
|
+
<span class="cline-any cline-neutral"> </span>
|
|
406
|
+
<span class="cline-any cline-neutral"> </span>
|
|
407
|
+
<span class="cline-any cline-neutral"> </span>
|
|
408
|
+
<span class="cline-any cline-neutral"> </span>
|
|
409
|
+
<span class="cline-any cline-neutral"> </span>
|
|
410
|
+
<span class="cline-any cline-neutral"> </span>
|
|
411
|
+
<span class="cline-any cline-neutral"> </span>
|
|
412
|
+
<span class="cline-any cline-yes">1x</span>
|
|
413
|
+
<span class="cline-any cline-neutral"> </span>
|
|
414
|
+
<span class="cline-any cline-neutral"> </span>
|
|
415
|
+
<span class="cline-any cline-neutral"> </span>
|
|
416
|
+
<span class="cline-any cline-neutral"> </span>
|
|
417
|
+
<span class="cline-any cline-neutral"> </span>
|
|
418
|
+
<span class="cline-any cline-neutral"> </span>
|
|
419
|
+
<span class="cline-any cline-neutral"> </span>
|
|
420
|
+
<span class="cline-any cline-neutral"> </span>
|
|
421
|
+
<span class="cline-any cline-neutral"> </span>
|
|
422
|
+
<span class="cline-any cline-neutral"> </span>
|
|
423
|
+
<span class="cline-any cline-neutral"> </span>
|
|
424
|
+
<span class="cline-any cline-yes">1x</span>
|
|
425
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
433
|
+
<span class="cline-any cline-neutral"> </span>
|
|
434
|
+
<span class="cline-any cline-neutral"> </span>
|
|
435
|
+
<span class="cline-any cline-neutral"> </span>
|
|
436
|
+
<span class="cline-any cline-neutral"> </span>
|
|
437
|
+
<span class="cline-any cline-neutral"> </span>
|
|
438
|
+
<span class="cline-any cline-neutral"> </span>
|
|
439
|
+
<span class="cline-any cline-neutral"> </span>
|
|
440
|
+
<span class="cline-any cline-yes">14x</span>
|
|
441
|
+
<span class="cline-any cline-neutral"> </span>
|
|
442
|
+
<span class="cline-any cline-neutral"> </span>
|
|
443
|
+
<span class="cline-any cline-neutral"> </span>
|
|
444
|
+
<span class="cline-any cline-neutral"> </span>
|
|
445
|
+
<span class="cline-any cline-neutral"> </span>
|
|
446
|
+
<span class="cline-any cline-neutral"> </span>
|
|
447
|
+
<span class="cline-any cline-neutral"> </span>
|
|
448
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
452
|
+
<span class="cline-any cline-neutral"> </span>
|
|
453
|
+
<span class="cline-any cline-neutral"> </span>
|
|
454
|
+
<span class="cline-any cline-neutral"> </span>
|
|
455
|
+
<span class="cline-any cline-neutral"> </span>
|
|
456
|
+
<span class="cline-any cline-neutral"> </span>
|
|
457
|
+
<span class="cline-any cline-neutral"> </span>
|
|
458
|
+
<span class="cline-any cline-no"> </span>
|
|
459
|
+
<span class="cline-any cline-no"> </span>
|
|
460
|
+
<span class="cline-any cline-neutral"> </span>
|
|
461
|
+
<span class="cline-any cline-neutral"> </span>
|
|
462
|
+
<span class="cline-any cline-neutral"> </span>
|
|
463
|
+
<span class="cline-any cline-neutral"> </span>
|
|
464
|
+
<span class="cline-any cline-neutral"> </span>
|
|
465
|
+
<span class="cline-any cline-neutral"> </span>
|
|
466
|
+
<span class="cline-any cline-neutral"> </span>
|
|
467
|
+
<span class="cline-any cline-neutral"> </span>
|
|
468
|
+
<span class="cline-any cline-neutral"> </span>
|
|
469
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
477
|
+
<span class="cline-any cline-yes">7x</span>
|
|
478
|
+
<span class="cline-any cline-neutral"> </span>
|
|
479
|
+
<span class="cline-any cline-neutral"> </span>
|
|
480
|
+
<span class="cline-any cline-neutral"> </span>
|
|
481
|
+
<span class="cline-any cline-neutral"> </span>
|
|
482
|
+
<span class="cline-any cline-neutral"> </span>
|
|
483
|
+
<span class="cline-any cline-neutral"> </span>
|
|
484
|
+
<span class="cline-any cline-neutral"> </span>
|
|
485
|
+
<span class="cline-any cline-neutral"> </span>
|
|
486
|
+
<span class="cline-any cline-neutral"> </span>
|
|
487
|
+
<span class="cline-any cline-neutral"> </span>
|
|
488
|
+
<span class="cline-any cline-no"> </span>
|
|
489
|
+
<span class="cline-any cline-no"> </span>
|
|
490
|
+
<span class="cline-any cline-no"> </span>
|
|
491
|
+
<span class="cline-any cline-no"> </span>
|
|
492
|
+
<span class="cline-any cline-no"> </span>
|
|
493
|
+
<span class="cline-any cline-no"> </span>
|
|
494
|
+
<span class="cline-any cline-neutral"> </span>
|
|
495
|
+
<span class="cline-any cline-no"> </span>
|
|
496
|
+
<span class="cline-any cline-neutral"> </span>
|
|
497
|
+
<span class="cline-any cline-neutral"> </span>
|
|
498
|
+
<span class="cline-any cline-neutral"> </span>
|
|
499
|
+
<span class="cline-any cline-neutral"> </span>
|
|
500
|
+
<span class="cline-any cline-neutral"> </span>
|
|
501
|
+
<span class="cline-any cline-neutral"> </span>
|
|
502
|
+
<span class="cline-any cline-neutral"> </span>
|
|
503
|
+
<span class="cline-any cline-neutral"> </span>
|
|
504
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
509
|
+
<span class="cline-any cline-neutral"> </span>
|
|
510
|
+
<span class="cline-any cline-neutral"> </span>
|
|
511
|
+
<span class="cline-any cline-neutral"> </span>
|
|
512
|
+
<span class="cline-any cline-neutral"> </span>
|
|
513
|
+
<span class="cline-any cline-neutral"> </span>
|
|
514
|
+
<span class="cline-any cline-neutral"> </span>
|
|
515
|
+
<span class="cline-any cline-no"> </span>
|
|
516
|
+
<span class="cline-any cline-no"> </span>
|
|
517
|
+
<span class="cline-any cline-no"> </span>
|
|
518
|
+
<span class="cline-any cline-neutral"> </span>
|
|
519
|
+
<span class="cline-any cline-neutral"> </span>
|
|
520
|
+
<span class="cline-any cline-neutral"> </span>
|
|
521
|
+
<span class="cline-any cline-neutral"> </span>
|
|
522
|
+
<span class="cline-any cline-neutral"> </span>
|
|
523
|
+
<span class="cline-any cline-neutral"> </span>
|
|
524
|
+
<span class="cline-any cline-neutral"> </span>
|
|
525
|
+
<span class="cline-any cline-neutral"> </span>
|
|
526
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
532
|
+
<span class="cline-any cline-neutral"> </span>
|
|
533
|
+
<span class="cline-any cline-neutral"> </span>
|
|
534
|
+
<span class="cline-any cline-neutral"> </span>
|
|
535
|
+
<span class="cline-any cline-neutral"> </span>
|
|
536
|
+
<span class="cline-any cline-neutral"> </span>
|
|
537
|
+
<span class="cline-any cline-neutral"> </span>
|
|
538
|
+
<span class="cline-any cline-neutral"> </span>
|
|
539
|
+
<span class="cline-any cline-no"> </span>
|
|
540
|
+
<span class="cline-any cline-no"> </span>
|
|
541
|
+
<span class="cline-any cline-no"> </span>
|
|
542
|
+
<span class="cline-any cline-no"> </span>
|
|
543
|
+
<span class="cline-any cline-neutral"> </span>
|
|
544
|
+
<span class="cline-any cline-neutral"> </span>
|
|
545
|
+
<span class="cline-any cline-neutral"> </span>
|
|
546
|
+
<span class="cline-any cline-neutral"> </span>
|
|
547
|
+
<span class="cline-any cline-neutral"> </span>
|
|
548
|
+
<span class="cline-any cline-neutral"> </span>
|
|
549
|
+
<span class="cline-any cline-neutral"> </span>
|
|
550
|
+
<span class="cline-any cline-neutral"> </span>
|
|
551
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
559
|
+
<span class="cline-any cline-neutral"> </span>
|
|
560
|
+
<span class="cline-any cline-neutral"> </span>
|
|
561
|
+
<span class="cline-any cline-neutral"> </span>
|
|
562
|
+
<span class="cline-any cline-neutral"> </span>
|
|
563
|
+
<span class="cline-any cline-neutral"> </span>
|
|
564
|
+
<span class="cline-any cline-neutral"> </span>
|
|
565
|
+
<span class="cline-any cline-neutral"> </span>
|
|
566
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
573
|
+
<span class="cline-any cline-neutral"> </span>
|
|
574
|
+
<span class="cline-any cline-neutral"> </span>
|
|
575
|
+
<span class="cline-any cline-neutral"> </span>
|
|
576
|
+
<span class="cline-any cline-neutral"> </span>
|
|
577
|
+
<span class="cline-any cline-neutral"> </span>
|
|
578
|
+
<span class="cline-any cline-neutral"> </span>
|
|
579
|
+
<span class="cline-any cline-neutral"> </span>
|
|
580
|
+
<span class="cline-any cline-no"> </span>
|
|
581
|
+
<span class="cline-any cline-no"> </span>
|
|
582
|
+
<span class="cline-any cline-no"> </span>
|
|
583
|
+
<span class="cline-any cline-no"> </span>
|
|
584
|
+
<span class="cline-any cline-no"> </span>
|
|
585
|
+
<span class="cline-any cline-neutral"> </span>
|
|
586
|
+
<span class="cline-any cline-neutral"> </span>
|
|
587
|
+
<span class="cline-any cline-neutral"> </span>
|
|
588
|
+
<span class="cline-any cline-neutral"> </span>
|
|
589
|
+
<span class="cline-any cline-neutral"> </span>
|
|
590
|
+
<span class="cline-any cline-neutral"> </span>
|
|
591
|
+
<span class="cline-any cline-neutral"> </span>
|
|
592
|
+
<span class="cline-any cline-neutral"> </span>
|
|
593
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
601
|
+
<span class="cline-any cline-neutral"> </span>
|
|
602
|
+
<span class="cline-any cline-neutral"> </span>
|
|
603
|
+
<span class="cline-any cline-neutral"> </span>
|
|
604
|
+
<span class="cline-any cline-neutral"> </span>
|
|
605
|
+
<span class="cline-any cline-neutral"> </span>
|
|
606
|
+
<span class="cline-any cline-neutral"> </span>
|
|
607
|
+
<span class="cline-any cline-neutral"> </span>
|
|
608
|
+
<span class="cline-any cline-no"> </span>
|
|
609
|
+
<span class="cline-any cline-no"> </span>
|
|
610
|
+
<span class="cline-any cline-no"> </span>
|
|
611
|
+
<span class="cline-any cline-no"> </span>
|
|
612
|
+
<span class="cline-any cline-no"> </span>
|
|
613
|
+
<span class="cline-any cline-no"> </span>
|
|
614
|
+
<span class="cline-any cline-neutral"> </span>
|
|
615
|
+
<span class="cline-any cline-neutral"> </span>
|
|
616
|
+
<span class="cline-any cline-neutral"> </span>
|
|
617
|
+
<span class="cline-any cline-neutral"> </span>
|
|
618
|
+
<span class="cline-any cline-neutral"> </span>
|
|
619
|
+
<span class="cline-any cline-neutral"> </span>
|
|
620
|
+
<span class="cline-any cline-neutral"> </span>
|
|
621
|
+
<span class="cline-any cline-neutral"> </span>
|
|
622
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
626
|
+
<span class="cline-any cline-neutral"> </span>
|
|
627
|
+
<span class="cline-any cline-neutral"> </span>
|
|
628
|
+
<span class="cline-any cline-neutral"> </span>
|
|
629
|
+
<span class="cline-any cline-neutral"> </span>
|
|
630
|
+
<span class="cline-any cline-neutral"> </span>
|
|
631
|
+
<span class="cline-any cline-neutral"> </span>
|
|
632
|
+
<span class="cline-any cline-neutral"> </span>
|
|
633
|
+
<span class="cline-any cline-neutral"> </span>
|
|
634
|
+
<span class="cline-any cline-neutral"> </span>
|
|
635
|
+
<span class="cline-any cline-neutral"> </span>
|
|
636
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
644
|
+
<span class="cline-any cline-neutral"> </span>
|
|
645
|
+
<span class="cline-any cline-neutral"> </span>
|
|
646
|
+
<span class="cline-any cline-neutral"> </span>
|
|
647
|
+
<span class="cline-any cline-neutral"> </span>
|
|
648
|
+
<span class="cline-any cline-neutral"> </span>
|
|
649
|
+
<span class="cline-any cline-neutral"> </span>
|
|
650
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
655
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
661
|
+
<span class="cline-any cline-no"> </span>
|
|
662
|
+
<span class="cline-any cline-neutral"> </span>
|
|
663
|
+
<span class="cline-any cline-neutral"> </span>
|
|
664
|
+
<span class="cline-any cline-neutral"> </span>
|
|
665
|
+
<span class="cline-any cline-neutral"> </span>
|
|
666
|
+
<span class="cline-any cline-neutral"> </span>
|
|
667
|
+
<span class="cline-any cline-neutral"> </span>
|
|
668
|
+
<span class="cline-any cline-neutral"> </span>
|
|
669
|
+
<span class="cline-any cline-no"> </span>
|
|
670
|
+
<span class="cline-any cline-no"> </span>
|
|
671
|
+
<span class="cline-any cline-no"> </span>
|
|
672
|
+
<span class="cline-any cline-no"> </span>
|
|
673
|
+
<span class="cline-any cline-no"> </span>
|
|
674
|
+
<span class="cline-any cline-no"> </span>
|
|
675
|
+
<span class="cline-any cline-neutral"> </span>
|
|
676
|
+
<span class="cline-any cline-neutral"> </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
|
+
|
|
693
|
+
/**
|
|
694
|
+
* Quark Dash parsed encrypted packet
|
|
695
|
+
*/
|
|
696
|
+
export interface QDEncryptedPacket {
|
|
697
|
+
metadata: Uint8Array;
|
|
698
|
+
encrypted: Uint8Array;
|
|
699
|
+
mac: Uint8Array;
|
|
700
|
+
}
|
|
701
|
+
|
|
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
|
+
|
|
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
|
+
|
|
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<number>();
|
|
737
|
+
private myKeyPair?: { publicKey: Uint8Array; privateKey: Uint8Array };
|
|
738
|
+
private peerPublicKey?: Uint8Array;
|
|
739
|
+
|
|
740
|
+
/**
|
|
741
|
+
* Create QuarkDash Crypto
|
|
742
|
+
* @param config {QuarkDashOptions} Crypto Options
|
|
743
|
+
*/
|
|
744
|
+
constructor(config?: Partial<QuarkDashOptions>) {
|
|
745
|
+
this.config = { ...DEFAULT_OPTIONS, ...config };
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
/**
|
|
749
|
+
* Generate key pair async
|
|
750
|
+
* @returns {Promise<Uint8Array>} Key pair buffer
|
|
751
|
+
* TODO: GPU Computing
|
|
752
|
+
*/
|
|
753
|
+
public async generateKeyPair(): Promise<Uint8Array> {
|
|
754
|
+
this.myKeyPair = await this.config.keyExchange.generateKeyPair();
|
|
755
|
+
return this.myKeyPair.publicKey;
|
|
756
|
+
}
|
|
757
|
+
|
|
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
|
+
|
|
767
|
+
/**
|
|
768
|
+
* Initialize session async
|
|
769
|
+
* @param peerPublicKey {Uint8Array} Peer public key buffer
|
|
770
|
+
* @param isInitiator {boolean} Is session initiator
|
|
771
|
+
* @returns {Promise<Uint8Array|number>} Returns derived session key or null
|
|
772
|
+
* TODO: GPU Computing
|
|
773
|
+
*/
|
|
774
|
+
public async initializeSession(peerPublicKey: Uint8Array, isInitiator: boolean): Promise<Uint8Array | null> {
|
|
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
|
+
|
|
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
|
+
|
|
804
|
+
/**
|
|
805
|
+
* Finalize session async
|
|
806
|
+
* @param ciphertext {Uint8Array} Cipher text buffer
|
|
807
|
+
* TODO: GPU Computing
|
|
808
|
+
*/
|
|
809
|
+
public async finalizeSession(ciphertext: Uint8Array): Promise<void> {
|
|
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
|
+
|
|
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
|
+
|
|
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<void> {
|
|
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
|
+
|
|
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
|
+
|
|
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
|
+
|
|
865
|
+
/**
|
|
866
|
+
* Encrypt sync
|
|
867
|
+
* @param decryptedData {Uint8Array} Decrypted buffer
|
|
868
|
+
* @returns {Promise<Uint8Array>} Encrypted buffer
|
|
869
|
+
* TODO: GPU Computing
|
|
870
|
+
*/
|
|
871
|
+
public async encrypt(decryptedData: Uint8Array): Promise<Uint8Array> {
|
|
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
|
+
|
|
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
|
+
|
|
892
|
+
/**
|
|
893
|
+
* Decrypt async
|
|
894
|
+
* @param encryptedData {Uint8Array} Encrypted buffer
|
|
895
|
+
* @returns {Promise<Uint8Array>} Decrypted buffer
|
|
896
|
+
* TODO: GPU Computing
|
|
897
|
+
*/
|
|
898
|
+
public async decrypt(encryptedData: Uint8Array): Promise<Uint8Array> {
|
|
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
|
+
|
|
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
|
+
|
|
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 < 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
|
+
|
|
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 < 8; i++) metadata[i] = Number((timestamp >> BigInt(i*8)) & 0xFFn);
|
|
945
|
+
const seq = this.sendSeq++;
|
|
946
|
+
for (let i = 0; i < 4; i++) metadata[8+i] = (seq >> (i*8)) & 0xFF;
|
|
947
|
+
return metadata;
|
|
948
|
+
}
|
|
949
|
+
|
|
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)) > 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 > 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
|
+
|
|
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
|
+
|