f8623dd2e77bf33c67abfe395192310865a3ba22
[trex.git] /
1 /* Author: Peter Schwabe, ported from an assembly implementation by Emilia Käsper
2  * Date: 2009-03-19
3  * Public domain */
4
5 #include "api.h"
6 #include "consts.h"
7 #include "int128.h"
8 #include "common.h"
9
10 int crypto_stream_beforenm(unsigned char *c, const unsigned char *k)
11 {
12
13   /*
14      int64 x0;
15      int64 x1;
16      int64 x2;
17      int64 x3;
18      int64 e;
19      int64 q0;
20      int64 q1;
21      int64 q2;
22      int64 q3;
23      */
24
25   int128 xmm0;
26   int128 xmm1;
27   int128 xmm2;
28   int128 xmm3;
29   int128 xmm4;
30   int128 xmm5;
31   int128 xmm6;
32   int128 xmm7;
33   int128 xmm8;
34   int128 xmm9;
35   int128 xmm10;
36   int128 xmm11;
37   int128 xmm12;
38   int128 xmm13;
39   int128 xmm14;
40   int128 xmm15;
41   int128 t;
42
43   bitslicekey0(k, c)
44
45     keyexpbs1(xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,c)
46     keyexpbs(xmm0, xmm1, xmm4, xmm6, xmm3, xmm7, xmm2, xmm5, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm1);, 2,c)
47     keyexpbs(xmm0, xmm1, xmm3, xmm2, xmm6, xmm5, xmm4, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm6);, 3,c)
48     keyexpbs(xmm0, xmm1, xmm6, xmm4, xmm2, xmm7, xmm3, xmm5, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm3);, 4,c)
49
50     keyexpbs(xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm3);, 5,c)
51     keyexpbs(xmm0, xmm1, xmm4, xmm6, xmm3, xmm7, xmm2, xmm5, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm5);, 6,c)
52     keyexpbs(xmm0, xmm1, xmm3, xmm2, xmm6, xmm5, xmm4, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm3);, 7,c)
53     keyexpbs(xmm0, xmm1, xmm6, xmm4, xmm2, xmm7, xmm3, xmm5, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm7);, 8,c)
54
55     keyexpbs(xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm0); xor_rcon(&xmm1); xor_rcon(&xmm6); xor_rcon(&xmm3);, 9,c)
56     keyexpbs10(xmm0, xmm1, xmm4, xmm6, xmm3, xmm7, xmm2, xmm5, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,c)
57
58     return 0;
59 }