File: aes_8h_source.html

package info (click to toggle)
python-bumps 0.9.0-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 10,776 kB
  • sloc: python: 24,586; ansic: 4,973; cpp: 4,849; javascript: 639; xml: 493; makefile: 143; perl: 108; sh: 94
file content (364 lines) | stat: -rw-r--r-- 41,424 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>Random123-1.09: Random123/aes.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javaScript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<div class="tabs"><ul class="tablist"><li style="padding-left: 1.5em; font-weight: bold">Random123-1.09  Documentation</li></ul></div>
<!-- Generated by Doxygen 1.7.1 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<div class="navigation" id="top">
  <div class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li id="searchli">
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<h1>Random123/aes.h</h1>  </div>
</div>
<div class="contents">
<a href="aes_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment">Copyright 2010-2011, D. E. Shaw Research.</span>
<a name="l00003"></a>00003 <span class="comment">All rights reserved.</span>
<a name="l00004"></a>00004 <span class="comment"></span>
<a name="l00005"></a>00005 <span class="comment">Redistribution and use in source and binary forms, with or without</span>
<a name="l00006"></a>00006 <span class="comment">modification, are permitted provided that the following conditions are</span>
<a name="l00007"></a>00007 <span class="comment">met:</span>
<a name="l00008"></a>00008 <span class="comment"></span>
<a name="l00009"></a>00009 <span class="comment">* Redistributions of source code must retain the above copyright</span>
<a name="l00010"></a>00010 <span class="comment">  notice, this list of conditions, and the following disclaimer.</span>
<a name="l00011"></a>00011 <span class="comment"></span>
<a name="l00012"></a>00012 <span class="comment">* Redistributions in binary form must reproduce the above copyright</span>
<a name="l00013"></a>00013 <span class="comment">  notice, this list of conditions, and the following disclaimer in the</span>
<a name="l00014"></a>00014 <span class="comment">  documentation and/or other materials provided with the distribution.</span>
<a name="l00015"></a>00015 <span class="comment"></span>
<a name="l00016"></a>00016 <span class="comment">* Neither the name of D. E. Shaw Research nor the names of its</span>
<a name="l00017"></a>00017 <span class="comment">  contributors may be used to endorse or promote products derived from</span>
<a name="l00018"></a>00018 <span class="comment">  this software without specific prior written permission.</span>
<a name="l00019"></a>00019 <span class="comment"></span>
<a name="l00020"></a>00020 <span class="comment">THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span>
<a name="l00021"></a>00021 <span class="comment">&quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span>
<a name="l00022"></a>00022 <span class="comment">LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span>
<a name="l00023"></a>00023 <span class="comment">A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span>
<a name="l00024"></a>00024 <span class="comment">OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span>
<a name="l00025"></a>00025 <span class="comment">SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span>
<a name="l00026"></a>00026 <span class="comment">LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span>
<a name="l00027"></a>00027 <span class="comment">DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span>
<a name="l00028"></a>00028 <span class="comment">THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span>
<a name="l00029"></a>00029 <span class="comment">(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span>
<a name="l00030"></a>00030 <span class="comment">OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
<a name="l00031"></a>00031 <span class="comment">*/</span>
<a name="l00032"></a>00032 <span class="preprocessor">#ifndef __Random123_aes_dot_hpp__</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define __Random123_aes_dot_hpp__</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span>
<a name="l00035"></a>00035 <span class="preprocessor">#include &quot;<a class="code" href="compilerfeatures_8h.html">features/compilerfeatures.h</a>&quot;</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include &quot;<a class="code" href="array_8h.html">array.h</a>&quot;</span>
<a name="l00037"></a>00037 
<a name="l00038"></a>00038 <span class="comment">/* Implement a bona fide AES block cipher.  It&#39;s minimally</span>
<a name="l00039"></a>00039 <span class="comment">// checked against the test vector in FIPS-197 in ut_aes.cpp. */</span>
<a name="l00040"></a>00040 <span class="preprocessor">#if R123_USE_AES_NI</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span>
<a name="l00043"></a><a class="code" href="group__AESNI.html#gaab0f809a22e01e6cb6135f6af73bb532">00043</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structr123array1xm128i.html">r123array1xm128i</a> <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ctr_t</a>;
<a name="l00045"></a><a class="code" href="group__AESNI.html#gaf4fa221e6387d0454e2e6399245bdead">00045</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structr123array1xm128i.html">r123array1xm128i</a> <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ukey_t</a>;
<a name="l00047"></a><a class="code" href="group__AESNI.html#gac2c3248ec3b03591d442cf634fb51af5">00047</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structr123array4x32.html">r123array4x32</a> <a class="code" href="structr123array4x32.html">aesni4x32_ukey_t</a>;
<a name="l00049"></a><a class="code" href="group__AESNI.html#ga2814629101926e23001d564630ba7b86">00049</a> <span class="keyword">enum</span> <a class="code" href="group__AESNI.html#ga2814629101926e23001d564630ba7b86">r123_enum_aesni1xm128i</a> { <a class="code" href="group__AESNI.html#gga2814629101926e23001d564630ba7b86a2c404c51fea10eeacb032081dbab2408">aesni1xm128i_rounds</a> = 10 };
<a name="l00050"></a>00050 
<a name="l00052"></a>00052 R123_STATIC_INLINE __m128i AES_128_ASSIST (__m128i temp1, __m128i temp2) { 
<a name="l00053"></a>00053     __m128i temp3; 
<a name="l00054"></a>00054     temp2 = _mm_shuffle_epi32 (temp2 ,0xff); 
<a name="l00055"></a>00055     temp3 = _mm_slli_si128 (temp1, 0x4);
<a name="l00056"></a>00056     temp1 = _mm_xor_si128 (temp1, temp3);
<a name="l00057"></a>00057     temp3 = _mm_slli_si128 (temp3, 0x4);
<a name="l00058"></a>00058     temp1 = _mm_xor_si128 (temp1, temp3);
<a name="l00059"></a>00059     temp3 = _mm_slli_si128 (temp3, 0x4);
<a name="l00060"></a>00060     temp1 = _mm_xor_si128 (temp1, temp3);
<a name="l00061"></a>00061     temp1 = _mm_xor_si128 (temp1, temp2); 
<a name="l00062"></a>00062     <span class="keywordflow">return</span> temp1; 
<a name="l00063"></a>00063 }
<a name="l00064"></a>00064 
<a name="l00065"></a>00065 R123_STATIC_INLINE <span class="keywordtype">void</span> aesni1xm128iexpand(<a class="code" href="structr123array1xm128i.html">aesni1xm128i_ukey_t</a> uk, __m128i ret[11])
<a name="l00066"></a>00066 {
<a name="l00067"></a>00067     __m128i rkey = uk.<a class="code" href="structr123array1xm128i.html#ab6d5e4b23c04e12c1aad7aaf38ff2bd5">v</a>[0].<a class="code" href="structr123m128i.html#a9b9908268281aace8028a3f34980634d">m</a>;
<a name="l00068"></a>00068     __m128i tmp2;
<a name="l00069"></a>00069 
<a name="l00070"></a>00070     ret[0] = rkey;
<a name="l00071"></a>00071     tmp2 = _mm_aeskeygenassist_si128(rkey, 0x1);
<a name="l00072"></a>00072     rkey = AES_128_ASSIST(rkey, tmp2);
<a name="l00073"></a>00073     ret[1] = rkey;
<a name="l00074"></a>00074 
<a name="l00075"></a>00075     tmp2 = _mm_aeskeygenassist_si128(rkey, 0x2);
<a name="l00076"></a>00076     rkey = AES_128_ASSIST(rkey, tmp2);
<a name="l00077"></a>00077     ret[2] = rkey;
<a name="l00078"></a>00078 
<a name="l00079"></a>00079     tmp2 = _mm_aeskeygenassist_si128(rkey, 0x4);
<a name="l00080"></a>00080     rkey = AES_128_ASSIST(rkey, tmp2);
<a name="l00081"></a>00081     ret[3] = rkey;
<a name="l00082"></a>00082 
<a name="l00083"></a>00083     tmp2 = _mm_aeskeygenassist_si128(rkey, 0x8);
<a name="l00084"></a>00084     rkey = AES_128_ASSIST(rkey, tmp2);
<a name="l00085"></a>00085     ret[4] = rkey;
<a name="l00086"></a>00086 
<a name="l00087"></a>00087     tmp2 = _mm_aeskeygenassist_si128(rkey, 0x10);
<a name="l00088"></a>00088     rkey = AES_128_ASSIST(rkey, tmp2);
<a name="l00089"></a>00089     ret[5] = rkey;
<a name="l00090"></a>00090 
<a name="l00091"></a>00091     tmp2 = _mm_aeskeygenassist_si128(rkey, 0x20);
<a name="l00092"></a>00092     rkey = AES_128_ASSIST(rkey, tmp2);
<a name="l00093"></a>00093     ret[6] = rkey;
<a name="l00094"></a>00094 
<a name="l00095"></a>00095     tmp2 = _mm_aeskeygenassist_si128(rkey, 0x40);
<a name="l00096"></a>00096     rkey = AES_128_ASSIST(rkey, tmp2);
<a name="l00097"></a>00097     ret[7] = rkey;
<a name="l00098"></a>00098 
<a name="l00099"></a>00099     tmp2 = _mm_aeskeygenassist_si128(rkey, 0x80);
<a name="l00100"></a>00100     rkey = AES_128_ASSIST(rkey, tmp2);
<a name="l00101"></a>00101     ret[8] = rkey;
<a name="l00102"></a>00102 
<a name="l00103"></a>00103     tmp2 = _mm_aeskeygenassist_si128(rkey, 0x1b);
<a name="l00104"></a>00104     rkey = AES_128_ASSIST(rkey, tmp2);
<a name="l00105"></a>00105     ret[9] = rkey;
<a name="l00106"></a>00106 
<a name="l00107"></a>00107     tmp2 = _mm_aeskeygenassist_si128(rkey, 0x36);
<a name="l00108"></a>00108     rkey = AES_128_ASSIST(rkey, tmp2);
<a name="l00109"></a>00109     ret[10] = rkey;
<a name="l00110"></a>00110 }
<a name="l00113"></a>00113 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00114"></a>00114 <span class="preprocessor"></span>
<a name="l00115"></a><a class="code" href="structaesni1xm128i__key__t.html">00115</a> <span class="keyword">struct </span><a class="code" href="structaesni1xm128i__key__t.html">aesni1xm128i_key_t</a>{ 
<a name="l00116"></a><a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">00116</a>     __m128i <a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>[11]; 
<a name="l00117"></a><a class="code" href="structaesni1xm128i__key__t.html#af1002e5b771616db8f12c793fc994c41">00117</a>     <a class="code" href="structaesni1xm128i__key__t.html#af1002e5b771616db8f12c793fc994c41">aesni1xm128i_key_t</a>(){
<a name="l00118"></a>00118         <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ukey_t</a> uk;
<a name="l00119"></a>00119         uk.<a class="code" href="structr123array1xm128i.html#ab6d5e4b23c04e12c1aad7aaf38ff2bd5">v</a>[0].<a class="code" href="structr123m128i.html#a9b9908268281aace8028a3f34980634d">m</a> = _mm_setzero_si128();
<a name="l00120"></a>00120         aesni1xm128iexpand(uk, <a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>);
<a name="l00121"></a>00121     }
<a name="l00122"></a><a class="code" href="structaesni1xm128i__key__t.html#a2076072522f671a8596a831cc93dc616">00122</a>     <a class="code" href="structaesni1xm128i__key__t.html#a2076072522f671a8596a831cc93dc616">aesni1xm128i_key_t</a>(<span class="keyword">const</span> <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ukey_t</a>&amp; uk){
<a name="l00123"></a>00123         aesni1xm128iexpand(uk, <a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>);
<a name="l00124"></a>00124     }
<a name="l00125"></a><a class="code" href="structaesni1xm128i__key__t.html#a43d53407125d4cec0d6a14586c0357e3">00125</a>     <a class="code" href="structaesni1xm128i__key__t.html#a43d53407125d4cec0d6a14586c0357e3">aesni1xm128i_key_t</a>(<span class="keyword">const</span> <a class="code" href="structr123array4x32.html">aesni4x32_ukey_t</a>&amp; uk){
<a name="l00126"></a>00126         <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ukey_t</a> uk128;
<a name="l00127"></a>00127         uk128.<a class="code" href="structr123array1xm128i.html#ab6d5e4b23c04e12c1aad7aaf38ff2bd5">v</a>[0].<a class="code" href="structr123m128i.html#a9b9908268281aace8028a3f34980634d">m</a> = _mm_set_epi32(uk.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[3], uk.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[2], uk.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[1], uk.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[0]);
<a name="l00128"></a>00128         aesni1xm128iexpand(uk128, <a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>);
<a name="l00129"></a>00129     }
<a name="l00130"></a><a class="code" href="structaesni1xm128i__key__t.html#acb24fef68c539f1a6ea217ee8ada185d">00130</a>     <a class="code" href="structaesni1xm128i__key__t.html">aesni1xm128i_key_t</a>&amp; <a class="code" href="structaesni1xm128i__key__t.html#acb24fef68c539f1a6ea217ee8ada185d">operator=</a>(<span class="keyword">const</span> <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ukey_t</a>&amp; uk){
<a name="l00131"></a>00131         aesni1xm128iexpand(uk, <a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>);
<a name="l00132"></a>00132         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00133"></a>00133     }
<a name="l00134"></a><a class="code" href="structaesni1xm128i__key__t.html#a0290dac35d6f14706247217fb49bcd60">00134</a>     <a class="code" href="structaesni1xm128i__key__t.html">aesni1xm128i_key_t</a>&amp; <a class="code" href="structaesni1xm128i__key__t.html#a0290dac35d6f14706247217fb49bcd60">operator=</a>(<span class="keyword">const</span> <a class="code" href="structr123array4x32.html">aesni4x32_ukey_t</a>&amp; uk){
<a name="l00135"></a>00135         <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ukey_t</a> uk128;
<a name="l00136"></a>00136         uk128.<a class="code" href="structr123array1xm128i.html#ab6d5e4b23c04e12c1aad7aaf38ff2bd5">v</a>[0].<a class="code" href="structr123m128i.html#a9b9908268281aace8028a3f34980634d">m</a> = _mm_set_epi32(uk.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[3], uk.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[2], uk.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[1], uk.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[0]);
<a name="l00137"></a>00137         aesni1xm128iexpand(uk128, <a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>);
<a name="l00138"></a>00138         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00139"></a>00139     }
<a name="l00140"></a>00140 };
<a name="l00141"></a>00141 <span class="preprocessor">#else</span>
<a name="l00142"></a>00142 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">struct </span>{ 
<a name="l00143"></a>00143     __m128i k[11]; 
<a name="l00144"></a>00144 }<a class="code" href="structaesni1xm128i__key__t.html">aesni1xm128i_key_t</a>;
<a name="l00145"></a>00145 
<a name="l00147"></a>00147 R123_STATIC_INLINE <a class="code" href="structaesni1xm128i__key__t.html">aesni1xm128i_key_t</a> aesni1xm128ikeyinit(<a class="code" href="structr123array1xm128i.html">aesni1xm128i_ukey_t</a> uk){
<a name="l00148"></a>00148     <a class="code" href="structaesni1xm128i__key__t.html">aesni1xm128i_key_t</a> ret;
<a name="l00149"></a>00149     aesni1xm128iexpand(uk, ret.<a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>);
<a name="l00150"></a>00150     <span class="keywordflow">return</span> ret;
<a name="l00151"></a>00151 }
<a name="l00152"></a>00152 <span class="preprocessor">#endif</span>
<a name="l00153"></a>00153 <span class="preprocessor"></span>
<a name="l00155"></a><a class="code" href="group__AESNI.html#ga3ba5daca2d4d076ece24900084e71311">00155</a> R123_STATIC_INLINE <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ctr_t</a> <a class="code" href="group__AESNI.html#ga3ba5daca2d4d076ece24900084e71311">aesni1xm128i</a>(<a class="code" href="structr123array1xm128i.html">aesni1xm128i_ctr_t</a> in, <a class="code" href="structaesni1xm128i__key__t.html">aesni1xm128i_key_t</a> k) {
<a name="l00156"></a>00156     __m128i x = _mm_xor_si128(k.<a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>[0], in.<a class="code" href="structr123array1xm128i.html#ab6d5e4b23c04e12c1aad7aaf38ff2bd5">v</a>[0].<a class="code" href="structr123m128i.html#a9b9908268281aace8028a3f34980634d">m</a>);
<a name="l00157"></a>00157     x = _mm_aesenc_si128(x, k.<a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>[1]);
<a name="l00158"></a>00158     x = _mm_aesenc_si128(x, k.<a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>[2]);
<a name="l00159"></a>00159     x = _mm_aesenc_si128(x, k.<a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>[3]);
<a name="l00160"></a>00160     x = _mm_aesenc_si128(x, k.<a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>[4]);
<a name="l00161"></a>00161     x = _mm_aesenc_si128(x, k.<a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>[5]);
<a name="l00162"></a>00162     x = _mm_aesenc_si128(x, k.<a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>[6]);
<a name="l00163"></a>00163     x = _mm_aesenc_si128(x, k.<a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>[7]);
<a name="l00164"></a>00164     x = _mm_aesenc_si128(x, k.<a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>[8]);
<a name="l00165"></a>00165     x = _mm_aesenc_si128(x, k.<a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>[9]);
<a name="l00166"></a>00166     x = _mm_aesenclast_si128(x, k.<a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>[10]);
<a name="l00167"></a>00167     {
<a name="l00168"></a>00168       <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ctr_t</a> ret;
<a name="l00169"></a>00169       ret.<a class="code" href="structr123array1xm128i.html#ab6d5e4b23c04e12c1aad7aaf38ff2bd5">v</a>[0].<a class="code" href="structr123m128i.html#a9b9908268281aace8028a3f34980634d">m</a> = x;
<a name="l00170"></a>00170       <span class="keywordflow">return</span> ret;
<a name="l00171"></a>00171     }
<a name="l00172"></a>00172 }
<a name="l00173"></a>00173 
<a name="l00175"></a><a class="code" href="group__AESNI.html#ga89d9042c08ae5eef4c98bfb9609ebd34">00175</a> R123_STATIC_INLINE <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ctr_t</a> <a class="code" href="group__AESNI.html#ga89d9042c08ae5eef4c98bfb9609ebd34">aesni1xm128i_R</a>(<span class="keywordtype">unsigned</span> R, <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ctr_t</a> in, <a class="code" href="structaesni1xm128i__key__t.html">aesni1xm128i_key_t</a> k){
<a name="l00176"></a>00176     R123_ASSERT(R==10);
<a name="l00177"></a>00177     <span class="keywordflow">return</span> <a class="code" href="group__AESNI.html#ga3ba5daca2d4d076ece24900084e71311">aesni1xm128i</a>(in, k);
<a name="l00178"></a>00178 }
<a name="l00179"></a>00179 
<a name="l00180"></a>00180 
<a name="l00182"></a><a class="code" href="group__AESNI.html#gae7459b3f4ee0e424cb4f13b4d5efc1fe">00182</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structr123array4x32.html">r123array4x32</a> <a class="code" href="structr123array4x32.html">aesni4x32_ctr_t</a>;
<a name="l00184"></a><a class="code" href="group__AESNI.html#ga6d88accdcfa339b48e14021a572e269b">00184</a> <span class="keyword">typedef</span> <a class="code" href="structaesni1xm128i__key__t.html">aesni1xm128i_key_t</a> <a class="code" href="structaesni1xm128i__key__t.html">aesni4x32_key_t</a>;
<a name="l00186"></a><a class="code" href="group__AESNI.html#ga1557a9d6e95543a3c4ca9082a4c14b0d">00186</a> <span class="keyword">enum</span> <a class="code" href="group__AESNI.html#ga1557a9d6e95543a3c4ca9082a4c14b0d">r123_enum_aesni4x32</a> { <a class="code" href="aes_8h.html#a0e4c28ad2773dac7eb59004947c9e02b">aesni4x32_rounds</a> = 10 };
<a name="l00188"></a><a class="code" href="group__AESNI.html#ga2aa21ba4a3d3850faa96e7834114d8e1">00188</a> R123_STATIC_INLINE <a class="code" href="structaesni1xm128i__key__t.html">aesni4x32_key_t</a> <a class="code" href="group__AESNI.html#ga2aa21ba4a3d3850faa96e7834114d8e1">aesni4x32keyinit</a>(<a class="code" href="structr123array4x32.html">aesni4x32_ukey_t</a> uk){
<a name="l00189"></a>00189     <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ukey_t</a> uk128;
<a name="l00190"></a>00190     <a class="code" href="structaesni1xm128i__key__t.html">aesni4x32_key_t</a> ret;
<a name="l00191"></a>00191     uk128.<a class="code" href="structr123array1xm128i.html#ab6d5e4b23c04e12c1aad7aaf38ff2bd5">v</a>[0].<a class="code" href="structr123m128i.html#a9b9908268281aace8028a3f34980634d">m</a> = _mm_set_epi32(uk.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[3], uk.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[2], uk.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[1], uk.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[0]);
<a name="l00192"></a>00192     aesni1xm128iexpand(uk128, ret.<a class="code" href="structaesni1xm128i__key__t.html#a60cefca96e55b73732f570e844efbe54">k</a>);
<a name="l00193"></a>00193     <span class="keywordflow">return</span> ret;
<a name="l00194"></a>00194 }
<a name="l00195"></a>00195 
<a name="l00198"></a><a class="code" href="group__AESNI.html#gae28b030e9786a6f36a47df8f211a750b">00198</a> R123_STATIC_INLINE <a class="code" href="structr123array4x32.html">aesni4x32_ctr_t</a> <a class="code" href="group__AESNI.html#gae28b030e9786a6f36a47df8f211a750b">aesni4x32_R</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Nrounds, <a class="code" href="structr123array4x32.html">aesni4x32_ctr_t</a> c, <a class="code" href="structaesni1xm128i__key__t.html">aesni4x32_key_t</a> k){
<a name="l00199"></a>00199     <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ctr_t</a> c128;
<a name="l00200"></a>00200     c128.<a class="code" href="structr123array1xm128i.html#ab6d5e4b23c04e12c1aad7aaf38ff2bd5">v</a>[0].<a class="code" href="structr123m128i.html#a9b9908268281aace8028a3f34980634d">m</a> = _mm_set_epi32(c.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[3], c.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[2], c.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[1], c.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[0]);
<a name="l00201"></a>00201     c128 = <a class="code" href="group__AESNI.html#ga89d9042c08ae5eef4c98bfb9609ebd34">aesni1xm128i_R</a>(Nrounds, c128, k);
<a name="l00202"></a>00202     _mm_storeu_si128((__m128i*)&amp;c.<a class="code" href="structr123array4x32.html#ac8e6785120a3031b211fc8aa7d03d83f">v</a>[0], c128.<a class="code" href="structr123array1xm128i.html#ab6d5e4b23c04e12c1aad7aaf38ff2bd5">v</a>[0].<a class="code" href="structr123m128i.html#a9b9908268281aace8028a3f34980634d">m</a>);
<a name="l00203"></a>00203     <span class="keywordflow">return</span> c;
<a name="l00204"></a>00204 }
<a name="l00205"></a>00205 
<a name="l00206"></a><a class="code" href="aes_8h.html#a0e4c28ad2773dac7eb59004947c9e02b">00206</a> <span class="preprocessor">#define aesni4x32_rounds aesni1xm128i_rounds</span>
<a name="l00207"></a>00207 <span class="preprocessor"></span>
<a name="l00210"></a><a class="code" href="group__AESNI.html#gae3950c524818b49d1cdfad481880a33a">00210</a> <span class="preprocessor">#define aesni4x32(c,k) aesni4x32_R(aesni4x32_rounds, c, k)</span>
<a name="l00211"></a>00211 <span class="preprocessor"></span>
<a name="l00212"></a>00212 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00213"></a><a class="code" href="namespacer123.html">00213</a> <span class="preprocessor"></span><span class="keyword">namespace </span>r123{
<a name="l00245"></a><a class="code" href="structr123_1_1AESNI1xm128i.html">00245</a> <span class="keyword">struct </span><a class="code" href="structr123_1_1AESNI1xm128i.html">AESNI1xm128i</a>{
<a name="l00246"></a><a class="code" href="structr123_1_1AESNI1xm128i.html#aaa136c21db9806859fa7cd4e2dbaaaa6">00246</a>     <span class="keyword">typedef</span> <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ctr_t</a> <a class="code" href="structr123array1xm128i.html">ctr_type</a>;
<a name="l00247"></a><a class="code" href="structr123_1_1AESNI1xm128i.html#a1f405533da84d98b938030190a63cec5">00247</a>     <span class="keyword">typedef</span> <a class="code" href="structr123array1xm128i.html">aesni1xm128i_ukey_t</a> <a class="code" href="structr123array1xm128i.html">ukey_type</a>;
<a name="l00248"></a><a class="code" href="structr123_1_1AESNI1xm128i.html#a7dc33fd5abf509d9d16b571b23867a6b">00248</a>     <span class="keyword">typedef</span> <a class="code" href="structaesni1xm128i__key__t.html">aesni1xm128i_key_t</a> <a class="code" href="structaesni1xm128i__key__t.html">key_type</a>;
<a name="l00249"></a><a class="code" href="structr123_1_1AESNI1xm128i.html#a1b5a44afde814ba844d8f5442e2a3a5f">00249</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structr123_1_1AESNI1xm128i.html#a1b5a44afde814ba844d8f5442e2a3a5f">rounds</a>=10;
<a name="l00250"></a><a class="code" href="structr123_1_1AESNI1xm128i.html#a9bff0ac8478400c1006136e9bde91dc3">00250</a>     <a class="code" href="structr123array1xm128i.html">ctr_type</a> <a class="code" href="structr123_1_1AESNI1xm128i.html#a9bff0ac8478400c1006136e9bde91dc3">operator()</a>(<a class="code" href="structr123array1xm128i.html">ctr_type</a> ctr, <a class="code" href="structaesni1xm128i__key__t.html">key_type</a> key)<span class="keyword"> const</span>{
<a name="l00251"></a>00251         <span class="keywordflow">return</span> <a class="code" href="group__AESNI.html#ga3ba5daca2d4d076ece24900084e71311">aesni1xm128i</a>(ctr, key);
<a name="l00252"></a>00252     }
<a name="l00253"></a>00253 };
<a name="l00254"></a>00254 
<a name="l00255"></a>00255 <span class="comment">/* @class AESNI4x32 */</span>
<a name="l00256"></a><a class="code" href="structr123_1_1AESNI4x32.html">00256</a> <span class="keyword">struct </span><a class="code" href="structr123_1_1AESNI4x32.html">AESNI4x32</a>{
<a name="l00257"></a><a class="code" href="structr123_1_1AESNI4x32.html#ab8a1f8a822eecfc9e587bad76792df32">00257</a>     <span class="keyword">typedef</span> <a class="code" href="structr123array4x32.html">aesni4x32_ctr_t</a> <a class="code" href="structr123array4x32.html">ctr_type</a>;
<a name="l00258"></a><a class="code" href="structr123_1_1AESNI4x32.html#a3fbb6113e70575dce3b6047a22a751f4">00258</a>     <span class="keyword">typedef</span> <a class="code" href="structr123array4x32.html">aesni4x32_ukey_t</a> <a class="code" href="structr123array4x32.html">ukey_type</a>;
<a name="l00259"></a><a class="code" href="structr123_1_1AESNI4x32.html#a3f47cb319d03ede5fd557800b618d28a">00259</a>     <span class="keyword">typedef</span> <a class="code" href="structaesni1xm128i__key__t.html">aesni4x32_key_t</a> <a class="code" href="structaesni1xm128i__key__t.html">key_type</a>;
<a name="l00260"></a><a class="code" href="structr123_1_1AESNI4x32.html#a725aad79b8d496d97bed24390f624be6">00260</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structr123_1_1AESNI4x32.html#a725aad79b8d496d97bed24390f624be6">rounds</a>=10;
<a name="l00261"></a><a class="code" href="structr123_1_1AESNI4x32.html#a981102e5bc0a7df916a95a40af8fd4c0">00261</a>     <a class="code" href="structr123array4x32.html">ctr_type</a> <a class="code" href="structr123_1_1AESNI4x32.html#a981102e5bc0a7df916a95a40af8fd4c0">operator()</a>(<a class="code" href="structr123array4x32.html">ctr_type</a> ctr, <a class="code" href="structaesni1xm128i__key__t.html">key_type</a> key)<span class="keyword"> const</span>{
<a name="l00262"></a>00262         <span class="keywordflow">return</span> <a class="code" href="group__AESNI.html#gae3950c524818b49d1cdfad481880a33a">aesni4x32</a>(ctr, key);
<a name="l00263"></a>00263     }
<a name="l00264"></a>00264 };
<a name="l00265"></a>00265 
<a name="l00271"></a>00271 <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> ROUNDS=10&gt; 
<a name="l00272"></a><a class="code" href="structr123_1_1AESNI1xm128i__R.html">00272</a> <span class="keyword">struct </span><a class="code" href="structr123_1_1AESNI1xm128i__R.html">AESNI1xm128i_R</a> : <span class="keyword">public</span> <a class="code" href="structr123_1_1AESNI1xm128i.html">AESNI1xm128i</a>{
<a name="l00273"></a>00273     R123_STATIC_ASSERT(ROUNDS==10, <span class="stringliteral">&quot;AESNI1xm128i_R&lt;R&gt; is only valid with R=10&quot;</span>);
<a name="l00274"></a>00274 };
<a name="l00275"></a>00275 
<a name="l00277"></a>00277 <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> ROUNDS=10&gt; 
<a name="l00278"></a><a class="code" href="structr123_1_1AESNI4x32__R.html">00278</a> <span class="keyword">struct </span><a class="code" href="structr123_1_1AESNI4x32__R.html">AESNI4x32_R</a> : <span class="keyword">public</span> <a class="code" href="structr123_1_1AESNI4x32.html">AESNI4x32</a>{
<a name="l00279"></a>00279     R123_STATIC_ASSERT(ROUNDS==10, <span class="stringliteral">&quot;AESNI4x32_R&lt;R&gt; is only valid with R=10&quot;</span>);
<a name="l00280"></a>00280 };
<a name="l00281"></a>00281 } <span class="comment">// namespace r123</span>
<a name="l00282"></a>00282 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
<a name="l00283"></a>00283 
<a name="l00284"></a>00284 <span class="preprocessor">#endif </span><span class="comment">/* R123_USE_AES_NI */</span>
<a name="l00285"></a>00285 
<a name="l00286"></a>00286 <span class="preprocessor">#if R123_USE_AES_OPENSSL</span>
<a name="l00287"></a>00287 <span class="preprocessor"></span><span class="preprocessor">#include &lt;openssl/aes.h&gt;</span>
<a name="l00288"></a>00288 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structr123array16x8.html">r123array16x8</a> aesopenssl16x8_ctr_t;
<a name="l00289"></a>00289 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structr123array16x8.html">r123array16x8</a> aesopenssl16x8_ukey_t;
<a name="l00290"></a>00290 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00291"></a>00291 <span class="preprocessor"></span><span class="keyword">struct </span>aesopenssl16x8_key_t{
<a name="l00292"></a>00292     AES_KEY k;
<a name="l00293"></a>00293     aesopenssl16x8_key_t(){
<a name="l00294"></a>00294         aesopenssl16x8_ukey_t ukey={{}};
<a name="l00295"></a>00295         AES_set_encrypt_key((<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)&amp;ukey.v[0], 128, &amp;k);
<a name="l00296"></a>00296     }
<a name="l00297"></a>00297     aesopenssl16x8_key_t(<span class="keyword">const</span> aesopenssl16x8_ukey_t&amp; ukey){
<a name="l00298"></a>00298         AES_set_encrypt_key((<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)&amp;ukey.v[0], 128, &amp;k);
<a name="l00299"></a>00299     }
<a name="l00300"></a>00300     aesopenssl16x8_key_t&amp; operator=(<span class="keyword">const</span> aesopenssl16x8_ukey_t&amp; ukey){
<a name="l00301"></a>00301         AES_set_encrypt_key((<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)&amp;ukey.v[0], 128, &amp;k);
<a name="l00302"></a>00302         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00303"></a>00303     }
<a name="l00304"></a>00304 };
<a name="l00305"></a>00305 <span class="preprocessor">#else</span>
<a name="l00306"></a>00306 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">struct </span>aesopenssl16x8_key_t{
<a name="l00307"></a>00307     AES_KEY k;
<a name="l00308"></a>00308 }aesopenssl16x8_key_t;
<a name="l00309"></a>00309 R123_STATIC_INLINE <span class="keyword">struct </span>aesopenssl16x8_key_t aesopenssl16x8keyinit(aesopenssl16x8_ukey_t uk){
<a name="l00310"></a>00310     aesopenssl16x8_key_t ret;
<a name="l00311"></a>00311     AES_set_encrypt_key((<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)&amp;uk.v[0], 128, &amp;ret.k);
<a name="l00312"></a>00312     <span class="keywordflow">return</span> ret;
<a name="l00313"></a>00313 }
<a name="l00314"></a>00314 <span class="preprocessor">#endif</span>
<a name="l00315"></a>00315 <span class="preprocessor"></span>
<a name="l00316"></a>00316 R123_STATIC_INLINE R123_FORCE_INLINE(aesopenssl16x8_ctr_t aesopenssl16x8_R(aesopenssl16x8_ctr_t ctr, aesopenssl16x8_key_t key));
<a name="l00317"></a>00317 R123_STATIC_INLINE
<a name="l00318"></a>00318 aesopenssl16x8_ctr_t aesopenssl16x8_R(aesopenssl16x8_ctr_t ctr, aesopenssl16x8_key_t key){
<a name="l00319"></a>00319     aesopenssl16x8_ctr_t ret;
<a name="l00320"></a>00320     AES_encrypt((<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)&amp;ctr.v[0], (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)&amp;ret.v[0], &amp;key.k);
<a name="l00321"></a>00321     <span class="keywordflow">return</span> ret;
<a name="l00322"></a>00322 }
<a name="l00323"></a>00323 
<a name="l00324"></a>00324 <span class="preprocessor">#define aesopenssl16x8_rounds aesni4x32_rounds</span>
<a name="l00325"></a>00325 <span class="preprocessor"></span><span class="preprocessor">#define aesopenssl16x8(c,k) aesopenssl16x8_R(aesopenssl16x8_rounds)</span>
<a name="l00326"></a>00326 <span class="preprocessor"></span>
<a name="l00327"></a>00327 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00328"></a>00328 <span class="preprocessor"></span><span class="keyword">namespace </span>r123{
<a name="l00329"></a>00329 <span class="keyword">struct </span>AESOpenSSL16x8{
<a name="l00330"></a>00330     <span class="keyword">typedef</span> aesopenssl16x8_ctr_t ctr_type;
<a name="l00331"></a>00331     <span class="keyword">typedef</span> aesopenssl16x8_key_t key_type;
<a name="l00332"></a>00332     <span class="keyword">typedef</span> aesopenssl16x8_ukey_t ukey_type;
<a name="l00333"></a>00333     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rounds=10;
<a name="l00334"></a>00334     ctr_type operator()(<span class="keyword">const</span> ctr_type&amp; in, <span class="keyword">const</span> key_type&amp; k){
<a name="l00335"></a>00335         ctr_type out;
<a name="l00336"></a>00336         AES_encrypt((<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)&amp;in[0], (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)&amp;out[0], &amp;k.k);
<a name="l00337"></a>00337         <span class="keywordflow">return</span> out;
<a name="l00338"></a>00338     }
<a name="l00339"></a>00339 };
<a name="l00340"></a>00340 } <span class="comment">// namespace r123</span>
<a name="l00341"></a>00341 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
<a name="l00342"></a>00342 <span class="preprocessor">#endif </span><span class="comment">/* R123_USE_AES_OPENSSL */</span>
<a name="l00343"></a>00343 
<a name="l00344"></a>00344 <span class="preprocessor">#endif</span>
</pre></div></div>
</div>
<!--- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&nbsp;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&nbsp;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&nbsp;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&nbsp;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&nbsp;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&nbsp;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&nbsp;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&nbsp;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&nbsp;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&nbsp;</span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&nbsp;</span>Defines</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<hr class="footer"/><address class="footer"><small>Generated on Mon Mar 7 2016 18:34:00 for Random123-1.09 by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>