Botan
2.1.0
Crypto and TLS for C++11
Main Page
Namespaces
Classes
Files
File List
File Members
src
lib
block
serpent
serpent_sbox.h
Go to the documentation of this file.
1
/*
2
* Serpent SBox Expressions
3
* (C) 1999-2007,2013 Jack Lloyd
4
*
5
* The sbox expressions used here were discovered by Dag Arne Osvik and
6
* are described in his paper "Speeding Up Serpent".
7
*
8
* Botan is released under the Simplified BSD License (see license.txt)
9
*/
10
11
#ifndef BOTAN_SERPENT_SBOX_H__
12
#define BOTAN_SERPENT_SBOX_H__
13
14
#define SBoxE1(B0, B1, B2, B3) \
15
do { \
16
B3 ^= B0; \
17
auto B4 = B1; \
18
B1 &= B3; \
19
B4 ^= B2; \
20
B1 ^= B0; \
21
B0 |= B3; \
22
B0 ^= B4; \
23
B4 ^= B3; \
24
B3 ^= B2; \
25
B2 |= B1; \
26
B2 ^= B4; \
27
B4 = ~B4; \
28
B4 |= B1; \
29
B1 ^= B3; \
30
B1 ^= B4; \
31
B3 |= B0; \
32
B1 ^= B3; \
33
B4 ^= B3; \
34
B3 = B0; \
35
B0 = B1; \
36
B1 = B4; \
37
} while(0);
38
39
#define SBoxE2(B0, B1, B2, B3) \
40
do { \
41
B0 = ~B0; \
42
B2 = ~B2; \
43
auto B4 = B0; \
44
B0 &= B1; \
45
B2 ^= B0; \
46
B0 |= B3; \
47
B3 ^= B2; \
48
B1 ^= B0; \
49
B0 ^= B4; \
50
B4 |= B1; \
51
B1 ^= B3; \
52
B2 |= B0; \
53
B2 &= B4; \
54
B0 ^= B1; \
55
B1 &= B2; \
56
B1 ^= B0; \
57
B0 &= B2; \
58
B4 ^= B0; \
59
B0 = B2; \
60
B2 = B3; \
61
B3 = B1; \
62
B1 = B4; \
63
} while(0);
64
65
#define SBoxE3(B0, B1, B2, B3) \
66
do { \
67
auto B4 = B0; \
68
B0 &= B2; \
69
B0 ^= B3; \
70
B2 ^= B1; \
71
B2 ^= B0; \
72
B3 |= B4; \
73
B3 ^= B1; \
74
B4 ^= B2; \
75
B1 = B3; \
76
B3 |= B4; \
77
B3 ^= B0; \
78
B0 &= B1; \
79
B4 ^= B0; \
80
B1 ^= B3; \
81
B1 ^= B4; \
82
B0 = B2; \
83
B2 = B1; \
84
B1 = B3; \
85
B3 = ~B4; \
86
} while(0);
87
88
#define SBoxE4(B0, B1, B2, B3) \
89
do { \
90
auto B4 = B0; \
91
B0 |= B3; \
92
B3 ^= B1; \
93
B1 &= B4; \
94
B4 ^= B2; \
95
B2 ^= B3; \
96
B3 &= B0; \
97
B4 |= B1; \
98
B3 ^= B4; \
99
B0 ^= B1; \
100
B4 &= B0; \
101
B1 ^= B3; \
102
B4 ^= B2; \
103
B1 |= B0; \
104
B1 ^= B2; \
105
B0 ^= B3; \
106
B2 = B1; \
107
B1 |= B3; \
108
B0 ^= B1; \
109
B1 = B2; \
110
B2 = B3; \
111
B3 = B4; \
112
} while(0);
113
114
#define SBoxE5(B0, B1, B2, B3) \
115
do { \
116
B1 ^= B3; \
117
B3 = ~B3; \
118
B2 ^= B3; \
119
B3 ^= B0; \
120
auto B4 = B1; \
121
B1 &= B3; \
122
B1 ^= B2; \
123
B4 ^= B3; \
124
B0 ^= B4; \
125
B2 &= B4; \
126
B2 ^= B0; \
127
B0 &= B1; \
128
B3 ^= B0; \
129
B4 |= B1; \
130
B4 ^= B0; \
131
B0 |= B3; \
132
B0 ^= B2; \
133
B2 &= B3; \
134
B0 = ~B0; \
135
B4 ^= B2; \
136
B2 = B0; \
137
B0 = B1; \
138
B1 = B4; \
139
} while(0);
140
141
#define SBoxE6(B0, B1, B2, B3) \
142
do { \
143
B0 ^= B1; \
144
B1 ^= B3; \
145
B3 = ~B3; \
146
auto B4 = B1; \
147
B1 &= B0; \
148
B2 ^= B3; \
149
B1 ^= B2; \
150
B2 |= B4; \
151
B4 ^= B3; \
152
B3 &= B1; \
153
B3 ^= B0; \
154
B4 ^= B1; \
155
B4 ^= B2; \
156
B2 ^= B0; \
157
B0 &= B3; \
158
B2 = ~B2; \
159
B0 ^= B4; \
160
B4 |= B3; \
161
B4 ^= B2; \
162
B2 = B0; \
163
B0 = B1; \
164
B1 = B3; \
165
B3 = B4; \
166
} while(0);
167
168
#define SBoxE7(B0, B1, B2, B3) \
169
do { \
170
B2 = ~B2; \
171
auto B4 = B3; \
172
B3 &= B0; \
173
B0 ^= B4; \
174
B3 ^= B2; \
175
B2 |= B4; \
176
B1 ^= B3; \
177
B2 ^= B0; \
178
B0 |= B1; \
179
B2 ^= B1; \
180
B4 ^= B0; \
181
B0 |= B3; \
182
B0 ^= B2; \
183
B4 ^= B3; \
184
B4 ^= B0; \
185
B3 = ~B3; \
186
B2 &= B4; \
187
B3 ^= B2; \
188
B2 = B4; \
189
} while(0);
190
191
#define SBoxE8(B0, B1, B2, B3) \
192
do { \
193
auto B4 = B1; \
194
B1 |= B2; \
195
B1 ^= B3; \
196
B4 ^= B2; \
197
B2 ^= B1; \
198
B3 |= B4; \
199
B3 &= B0; \
200
B4 ^= B2; \
201
B3 ^= B1; \
202
B1 |= B4; \
203
B1 ^= B0; \
204
B0 |= B4; \
205
B0 ^= B2; \
206
B1 ^= B4; \
207
B2 ^= B1; \
208
B1 &= B0; \
209
B1 ^= B4; \
210
B2 = ~B2; \
211
B2 |= B0; \
212
B4 ^= B2; \
213
B2 = B1; \
214
B1 = B3; \
215
B3 = B0; \
216
B0 = B4; \
217
} while(0);
218
219
#define SBoxD1(B0, B1, B2, B3) \
220
do { \
221
B2 = ~B2; \
222
auto B4 = B1; \
223
B1 |= B0; \
224
B4 = ~B4; \
225
B1 ^= B2; \
226
B2 |= B4; \
227
B1 ^= B3; \
228
B0 ^= B4; \
229
B2 ^= B0; \
230
B0 &= B3; \
231
B4 ^= B0; \
232
B0 |= B1; \
233
B0 ^= B2; \
234
B3 ^= B4; \
235
B2 ^= B1; \
236
B3 ^= B0; \
237
B3 ^= B1; \
238
B2 &= B3; \
239
B4 ^= B2; \
240
B2 = B1; \
241
B1 = B4; \
242
} while(0);
243
244
#define SBoxD2(B0, B1, B2, B3) \
245
do { \
246
auto B4 = B1; \
247
B1 ^= B3; \
248
B3 &= B1; \
249
B4 ^= B2; \
250
B3 ^= B0; \
251
B0 |= B1; \
252
B2 ^= B3; \
253
B0 ^= B4; \
254
B0 |= B2; \
255
B1 ^= B3; \
256
B0 ^= B1; \
257
B1 |= B3; \
258
B1 ^= B0; \
259
B4 = ~B4; \
260
B4 ^= B1; \
261
B1 |= B0; \
262
B1 ^= B0; \
263
B1 |= B4; \
264
B3 ^= B1; \
265
B1 = B0; \
266
B0 = B4; \
267
B4 = B2; \
268
B2 = B3; \
269
B3 = B4; \
270
} while(0);
271
272
#define SBoxD3(B0, B1, B2, B3) \
273
do { \
274
B2 ^= B3; \
275
B3 ^= B0; \
276
auto B4 = B3; \
277
B3 &= B2; \
278
B3 ^= B1; \
279
B1 |= B2; \
280
B1 ^= B4; \
281
B4 &= B3; \
282
B2 ^= B3; \
283
B4 &= B0; \
284
B4 ^= B2; \
285
B2 &= B1; \
286
B2 |= B0; \
287
B3 = ~B3; \
288
B2 ^= B3; \
289
B0 ^= B3; \
290
B0 &= B1; \
291
B3 ^= B4; \
292
B3 ^= B0; \
293
B0 = B1; \
294
B1 = B4; \
295
} while(0);
296
297
#define SBoxD4(B0, B1, B2, B3) \
298
do { \
299
auto B4 = B2; \
300
B2 ^= B1; \
301
B0 ^= B2; \
302
B4 &= B2; \
303
B4 ^= B0; \
304
B0 &= B1; \
305
B1 ^= B3; \
306
B3 |= B4; \
307
B2 ^= B3; \
308
B0 ^= B3; \
309
B1 ^= B4; \
310
B3 &= B2; \
311
B3 ^= B1; \
312
B1 ^= B0; \
313
B1 |= B2; \
314
B0 ^= B3; \
315
B1 ^= B4; \
316
B0 ^= B1; \
317
B4 = B0; \
318
B0 = B2; \
319
B2 = B3; \
320
B3 = B4; \
321
} while(0);
322
323
#define SBoxD5(B0, B1, B2, B3) \
324
do { \
325
auto B4 = B2; \
326
B2 &= B3; \
327
B2 ^= B1; \
328
B1 |= B3; \
329
B1 &= B0; \
330
B4 ^= B2; \
331
B4 ^= B1; \
332
B1 &= B2; \
333
B0 = ~B0; \
334
B3 ^= B4; \
335
B1 ^= B3; \
336
B3 &= B0; \
337
B3 ^= B2; \
338
B0 ^= B1; \
339
B2 &= B0; \
340
B3 ^= B0; \
341
B2 ^= B4; \
342
B2 |= B3; \
343
B3 ^= B0; \
344
B2 ^= B1; \
345
B1 = B3; \
346
B3 = B4; \
347
} while(0);
348
349
#define SBoxD6(B0, B1, B2, B3) \
350
do { \
351
B1 = ~B1; \
352
auto B4 = B3; \
353
B2 ^= B1; \
354
B3 |= B0; \
355
B3 ^= B2; \
356
B2 |= B1; \
357
B2 &= B0; \
358
B4 ^= B3; \
359
B2 ^= B4; \
360
B4 |= B0; \
361
B4 ^= B1; \
362
B1 &= B2; \
363
B1 ^= B3; \
364
B4 ^= B2; \
365
B3 &= B4; \
366
B4 ^= B1; \
367
B3 ^= B4; \
368
B4 = ~B4; \
369
B3 ^= B0; \
370
B0 = B1; \
371
B1 = B4; \
372
B4 = B3; \
373
B3 = B2; \
374
B2 = B4; \
375
} while(0);
376
377
#define SBoxD7(B0, B1, B2, B3) \
378
do { \
379
B0 ^= B2; \
380
auto B4 = B2; \
381
B2 &= B0; \
382
B4 ^= B3; \
383
B2 = ~B2; \
384
B3 ^= B1; \
385
B2 ^= B3; \
386
B4 |= B0; \
387
B0 ^= B2; \
388
B3 ^= B4; \
389
B4 ^= B1; \
390
B1 &= B3; \
391
B1 ^= B0; \
392
B0 ^= B3; \
393
B0 |= B2; \
394
B3 ^= B1; \
395
B4 ^= B0; \
396
B0 = B1; \
397
B1 = B2; \
398
B2 = B4; \
399
} while(0);
400
401
#define SBoxD8(B0, B1, B2, B3) \
402
do { \
403
auto B4 = B2; \
404
B2 ^= B0; \
405
B0 &= B3; \
406
B4 |= B3; \
407
B2 = ~B2; \
408
B3 ^= B1; \
409
B1 |= B0; \
410
B0 ^= B2; \
411
B2 &= B4; \
412
B3 &= B4; \
413
B1 ^= B2; \
414
B2 ^= B0; \
415
B0 |= B2; \
416
B4 ^= B1; \
417
B0 ^= B3; \
418
B3 ^= B4; \
419
B4 |= B0; \
420
B3 ^= B2; \
421
B4 ^= B2; \
422
B2 = B1; \
423
B1 = B0; \
424
B0 = B3; \
425
B3 = B4; \
426
} while(0);
427
428
#endif
Generated on Fri Aug 4 2017 19:29:38 for Botan by
1.8.9.1