OpenCores
URL https://opencores.org/ocsvn/cryptosorter/cryptosorter/trunk

Subversion Repositories cryptosorter

[/] [cryptosorter/] [trunk/] [memocodeDesignContest2008/] [ctrl/] [ref_pc/] [aes_core.c] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 kfleming
/**
2
 * MEMOCODE Hardware/Software CoDesign Contest 2008
3
 *
4
 * This source file was derived from the public-domain 32-bit version of AES
5
 * by the authors as referenced below
6
 *
7
 * rijndael-alg-fst.c
8
 *
9
 * @version 3.0 (December 2000)
10
 *
11
 * Optimised ANSI C code for the Rijndael cipher (now AES)
12
 *
13
 * @author Vincent Rijmen <vincent.rijmen@esat.kuleuven.ac.be>
14
 * @author Antoon Bosselaers <antoon.bosselaers@esat.kuleuven.ac.be>
15
 * @author Paulo Barreto <paulo.barreto@terra.com.br>
16
 *
17
 * This code is hereby placed in the public domain.
18
 *
19
 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
20
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
23
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
26
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
28
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
29
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
 */
31
 
32
#include "aes_core.h"
33
 
34
static const u32 Te0[256] = {
35
    0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU,
36
    0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U,
37
    0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU,
38
    0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU,
39
    0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U,
40
    0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU,
41
    0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU,
42
    0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU,
43
    0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU,
44
    0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU,
45
    0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U,
46
    0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU,
47
    0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU,
48
    0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U,
49
    0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU,
50
    0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU,
51
    0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU,
52
    0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU,
53
    0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU,
54
    0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U,
55
    0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU,
56
    0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU,
57
    0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU,
58
    0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU,
59
    0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U,
60
    0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U,
61
    0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U,
62
    0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U,
63
    0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU,
64
    0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U,
65
    0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U,
66
    0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU,
67
    0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU,
68
    0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U,
69
    0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U,
70
    0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U,
71
    0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU,
72
    0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U,
73
    0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU,
74
    0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U,
75
    0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU,
76
    0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U,
77
    0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U,
78
    0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU,
79
    0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U,
80
    0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U,
81
    0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U,
82
    0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U,
83
    0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U,
84
    0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U,
85
    0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U,
86
    0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U,
87
    0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU,
88
    0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U,
89
    0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U,
90
    0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U,
91
    0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U,
92
    0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U,
93
    0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U,
94
    0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU,
95
    0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U,
96
    0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U,
97
    0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U,
98
    0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU,
99
};
100
 
101
static const u32 Te1[256] = {
102
    0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU,
103
    0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U,
104
    0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU,
105
    0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U,
106
    0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU,
107
    0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U,
108
    0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU,
109
    0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U,
110
    0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U,
111
    0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU,
112
    0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U,
113
    0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U,
114
    0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U,
115
    0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU,
116
    0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U,
117
    0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U,
118
    0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU,
119
    0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U,
120
    0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U,
121
    0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U,
122
    0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU,
123
    0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU,
124
    0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U,
125
    0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU,
126
    0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU,
127
    0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U,
128
    0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU,
129
    0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U,
130
    0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU,
131
    0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U,
132
    0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U,
133
    0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U,
134
    0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU,
135
    0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U,
136
    0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU,
137
    0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U,
138
    0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU,
139
    0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U,
140
    0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U,
141
    0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU,
142
    0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU,
143
    0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU,
144
    0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U,
145
    0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U,
146
    0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU,
147
    0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U,
148
    0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU,
149
    0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U,
150
    0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU,
151
    0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U,
152
    0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU,
153
    0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU,
154
    0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U,
155
    0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU,
156
    0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U,
157
    0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU,
158
    0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U,
159
    0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U,
160
    0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U,
161
    0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU,
162
    0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU,
163
    0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U,
164
    0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU,
165
    0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U,
166
};
167
 
168
static const u32 Te2[256] = {
169
    0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU,
170
    0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U,
171
    0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU,
172
    0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U,
173
    0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU,
174
    0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U,
175
    0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU,
176
    0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U,
177
    0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U,
178
    0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU,
179
    0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U,
180
    0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U,
181
    0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U,
182
    0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU,
183
    0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U,
184
    0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U,
185
    0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU,
186
    0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U,
187
    0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U,
188
    0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U,
189
    0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU,
190
    0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU,
191
    0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U,
192
    0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU,
193
    0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU,
194
    0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U,
195
    0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU,
196
    0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U,
197
    0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU,
198
    0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U,
199
    0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U,
200
    0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U,
201
    0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU,
202
    0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U,
203
    0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU,
204
    0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U,
205
    0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU,
206
    0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U,
207
    0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U,
208
    0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU,
209
    0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU,
210
    0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU,
211
    0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U,
212
    0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U,
213
    0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU,
214
    0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U,
215
    0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU,
216
    0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U,
217
    0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU,
218
    0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U,
219
    0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU,
220
    0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU,
221
    0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U,
222
    0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU,
223
    0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U,
224
    0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU,
225
    0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U,
226
    0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U,
227
    0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U,
228
    0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU,
229
    0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU,
230
    0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U,
231
    0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU,
232
    0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U,
233
};
234
 
235
static const u32 Te3[256] = {
236
    0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U,
237
    0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U,
238
    0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U,
239
    0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU,
240
    0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU,
241
    0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU,
242
    0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U,
243
    0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU,
244
    0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU,
245
    0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U,
246
    0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U,
247
    0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU,
248
    0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU,
249
    0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU,
250
    0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU,
251
    0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU,
252
    0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U,
253
    0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU,
254
    0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU,
255
    0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U,
256
    0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U,
257
    0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U,
258
    0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U,
259
    0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U,
260
    0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU,
261
    0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U,
262
    0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU,
263
    0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU,
264
    0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U,
265
    0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U,
266
    0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U,
267
    0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU,
268
    0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U,
269
    0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU,
270
    0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU,
271
    0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U,
272
    0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U,
273
    0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU,
274
    0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U,
275
    0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU,
276
    0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U,
277
    0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U,
278
    0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U,
279
    0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U,
280
    0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU,
281
    0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U,
282
    0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU,
283
    0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U,
284
    0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU,
285
    0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U,
286
    0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU,
287
    0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU,
288
    0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU,
289
    0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU,
290
    0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U,
291
    0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U,
292
    0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U,
293
    0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U,
294
    0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U,
295
    0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U,
296
    0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU,
297
    0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U,
298
    0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU,
299
    0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU,
300
};
301
 
302
static const u32 Te4[256] = {
303
    0x63636363U, 0x7c7c7c7cU, 0x77777777U, 0x7b7b7b7bU,
304
    0xf2f2f2f2U, 0x6b6b6b6bU, 0x6f6f6f6fU, 0xc5c5c5c5U,
305
    0x30303030U, 0x01010101U, 0x67676767U, 0x2b2b2b2bU,
306
    0xfefefefeU, 0xd7d7d7d7U, 0xababababU, 0x76767676U,
307
    0xcacacacaU, 0x82828282U, 0xc9c9c9c9U, 0x7d7d7d7dU,
308
    0xfafafafaU, 0x59595959U, 0x47474747U, 0xf0f0f0f0U,
309
    0xadadadadU, 0xd4d4d4d4U, 0xa2a2a2a2U, 0xafafafafU,
310
    0x9c9c9c9cU, 0xa4a4a4a4U, 0x72727272U, 0xc0c0c0c0U,
311
    0xb7b7b7b7U, 0xfdfdfdfdU, 0x93939393U, 0x26262626U,
312
    0x36363636U, 0x3f3f3f3fU, 0xf7f7f7f7U, 0xccccccccU,
313
    0x34343434U, 0xa5a5a5a5U, 0xe5e5e5e5U, 0xf1f1f1f1U,
314
    0x71717171U, 0xd8d8d8d8U, 0x31313131U, 0x15151515U,
315
    0x04040404U, 0xc7c7c7c7U, 0x23232323U, 0xc3c3c3c3U,
316
    0x18181818U, 0x96969696U, 0x05050505U, 0x9a9a9a9aU,
317
    0x07070707U, 0x12121212U, 0x80808080U, 0xe2e2e2e2U,
318
    0xebebebebU, 0x27272727U, 0xb2b2b2b2U, 0x75757575U,
319
    0x09090909U, 0x83838383U, 0x2c2c2c2cU, 0x1a1a1a1aU,
320
    0x1b1b1b1bU, 0x6e6e6e6eU, 0x5a5a5a5aU, 0xa0a0a0a0U,
321
    0x52525252U, 0x3b3b3b3bU, 0xd6d6d6d6U, 0xb3b3b3b3U,
322
    0x29292929U, 0xe3e3e3e3U, 0x2f2f2f2fU, 0x84848484U,
323
    0x53535353U, 0xd1d1d1d1U, 0x00000000U, 0xededededU,
324
    0x20202020U, 0xfcfcfcfcU, 0xb1b1b1b1U, 0x5b5b5b5bU,
325
    0x6a6a6a6aU, 0xcbcbcbcbU, 0xbebebebeU, 0x39393939U,
326
    0x4a4a4a4aU, 0x4c4c4c4cU, 0x58585858U, 0xcfcfcfcfU,
327
    0xd0d0d0d0U, 0xefefefefU, 0xaaaaaaaaU, 0xfbfbfbfbU,
328
    0x43434343U, 0x4d4d4d4dU, 0x33333333U, 0x85858585U,
329
    0x45454545U, 0xf9f9f9f9U, 0x02020202U, 0x7f7f7f7fU,
330
    0x50505050U, 0x3c3c3c3cU, 0x9f9f9f9fU, 0xa8a8a8a8U,
331
    0x51515151U, 0xa3a3a3a3U, 0x40404040U, 0x8f8f8f8fU,
332
    0x92929292U, 0x9d9d9d9dU, 0x38383838U, 0xf5f5f5f5U,
333
    0xbcbcbcbcU, 0xb6b6b6b6U, 0xdadadadaU, 0x21212121U,
334
    0x10101010U, 0xffffffffU, 0xf3f3f3f3U, 0xd2d2d2d2U,
335
    0xcdcdcdcdU, 0x0c0c0c0cU, 0x13131313U, 0xececececU,
336
    0x5f5f5f5fU, 0x97979797U, 0x44444444U, 0x17171717U,
337
    0xc4c4c4c4U, 0xa7a7a7a7U, 0x7e7e7e7eU, 0x3d3d3d3dU,
338
    0x64646464U, 0x5d5d5d5dU, 0x19191919U, 0x73737373U,
339
    0x60606060U, 0x81818181U, 0x4f4f4f4fU, 0xdcdcdcdcU,
340
    0x22222222U, 0x2a2a2a2aU, 0x90909090U, 0x88888888U,
341
    0x46464646U, 0xeeeeeeeeU, 0xb8b8b8b8U, 0x14141414U,
342
    0xdedededeU, 0x5e5e5e5eU, 0x0b0b0b0bU, 0xdbdbdbdbU,
343
    0xe0e0e0e0U, 0x32323232U, 0x3a3a3a3aU, 0x0a0a0a0aU,
344
    0x49494949U, 0x06060606U, 0x24242424U, 0x5c5c5c5cU,
345
    0xc2c2c2c2U, 0xd3d3d3d3U, 0xacacacacU, 0x62626262U,
346
    0x91919191U, 0x95959595U, 0xe4e4e4e4U, 0x79797979U,
347
    0xe7e7e7e7U, 0xc8c8c8c8U, 0x37373737U, 0x6d6d6d6dU,
348
    0x8d8d8d8dU, 0xd5d5d5d5U, 0x4e4e4e4eU, 0xa9a9a9a9U,
349
    0x6c6c6c6cU, 0x56565656U, 0xf4f4f4f4U, 0xeaeaeaeaU,
350
    0x65656565U, 0x7a7a7a7aU, 0xaeaeaeaeU, 0x08080808U,
351
    0xbabababaU, 0x78787878U, 0x25252525U, 0x2e2e2e2eU,
352
    0x1c1c1c1cU, 0xa6a6a6a6U, 0xb4b4b4b4U, 0xc6c6c6c6U,
353
    0xe8e8e8e8U, 0xddddddddU, 0x74747474U, 0x1f1f1f1fU,
354
    0x4b4b4b4bU, 0xbdbdbdbdU, 0x8b8b8b8bU, 0x8a8a8a8aU,
355
    0x70707070U, 0x3e3e3e3eU, 0xb5b5b5b5U, 0x66666666U,
356
    0x48484848U, 0x03030303U, 0xf6f6f6f6U, 0x0e0e0e0eU,
357
    0x61616161U, 0x35353535U, 0x57575757U, 0xb9b9b9b9U,
358
    0x86868686U, 0xc1c1c1c1U, 0x1d1d1d1dU, 0x9e9e9e9eU,
359
    0xe1e1e1e1U, 0xf8f8f8f8U, 0x98989898U, 0x11111111U,
360
    0x69696969U, 0xd9d9d9d9U, 0x8e8e8e8eU, 0x94949494U,
361
    0x9b9b9b9bU, 0x1e1e1e1eU, 0x87878787U, 0xe9e9e9e9U,
362
    0xcecececeU, 0x55555555U, 0x28282828U, 0xdfdfdfdfU,
363
    0x8c8c8c8cU, 0xa1a1a1a1U, 0x89898989U, 0x0d0d0d0dU,
364
    0xbfbfbfbfU, 0xe6e6e6e6U, 0x42424242U, 0x68686868U,
365
    0x41414141U, 0x99999999U, 0x2d2d2d2dU, 0x0f0f0f0fU,
366
    0xb0b0b0b0U, 0x54545454U, 0xbbbbbbbbU, 0x16161616U,
367
};
368
 
369
static const u32 rcon[] = {
370
        0x01000000, 0x02000000, 0x04000000, 0x08000000,
371
        0x10000000, 0x20000000, 0x40000000, 0x80000000,
372
        0x1B000000, 0x36000000,
373
        /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */
374
};
375
 
376
/**
377
 * Expand the cipher key into the encryption key schedule.
378
 */
379
int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
380
                        AES_KEY *key) {
381
 
382
    u32 *rk;
383
    int i = 0;
384
    u32 temp;
385
 
386
    if (!userKey || !key)
387
        return -1;
388
    if (bits != 128 && bits != 192 && bits != 256)
389
        return -2;
390
 
391
    rk = key->rd_key;
392
 
393
    if (bits==128)
394
        key->rounds = 10;
395
    else if (bits==192)
396
        key->rounds = 12;
397
    else
398
        key->rounds = 14;
399
 
400
    rk[0] = GETU32(userKey     );
401
    rk[1] = GETU32(userKey +  4);
402
    rk[2] = GETU32(userKey +  8);
403
    rk[3] = GETU32(userKey + 12);
404
    if (bits == 128) {
405
        while (1) {
406
            temp  = rk[3];
407
            rk[4] = rk[0] ^
408
                (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
409
                (Te4[(temp >>  8) & 0xff] & 0x00ff0000) ^
410
                (Te4[(temp      ) & 0xff] & 0x0000ff00) ^
411
                (Te4[(temp >> 24)       ] & 0x000000ff) ^
412
                rcon[i];
413
            rk[5] = rk[1] ^ rk[4];
414
            rk[6] = rk[2] ^ rk[5];
415
            rk[7] = rk[3] ^ rk[6];
416
            if (++i == 10) {
417
                return 0;
418
            }
419
            rk += 4;
420
        }
421
    }
422
    rk[4] = GETU32(userKey + 16);
423
    rk[5] = GETU32(userKey + 20);
424
    if (bits == 192) {
425
        while (1) {
426
            temp = rk[ 5];
427
            rk[ 6] = rk[ 0] ^
428
                (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
429
                (Te4[(temp >>  8) & 0xff] & 0x00ff0000) ^
430
                (Te4[(temp      ) & 0xff] & 0x0000ff00) ^
431
                (Te4[(temp >> 24)       ] & 0x000000ff) ^
432
                rcon[i];
433
            rk[ 7] = rk[ 1] ^ rk[ 6];
434
            rk[ 8] = rk[ 2] ^ rk[ 7];
435
            rk[ 9] = rk[ 3] ^ rk[ 8];
436
            if (++i == 8) {
437
                return 0;
438
            }
439
            rk[10] = rk[ 4] ^ rk[ 9];
440
            rk[11] = rk[ 5] ^ rk[10];
441
            rk += 6;
442
        }
443
    }
444
    rk[6] = GETU32(userKey + 24);
445
    rk[7] = GETU32(userKey + 28);
446
    if (bits == 256) {
447
        while (1) {
448
            temp = rk[ 7];
449
            rk[ 8] = rk[ 0] ^
450
                (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
451
                (Te4[(temp >>  8) & 0xff] & 0x00ff0000) ^
452
                (Te4[(temp      ) & 0xff] & 0x0000ff00) ^
453
                (Te4[(temp >> 24)       ] & 0x000000ff) ^
454
                rcon[i];
455
            rk[ 9] = rk[ 1] ^ rk[ 8];
456
            rk[10] = rk[ 2] ^ rk[ 9];
457
            rk[11] = rk[ 3] ^ rk[10];
458
            if (++i == 7) {
459
                return 0;
460
            }
461
            temp = rk[11];
462
            rk[12] = rk[ 4] ^
463
                (Te4[(temp >> 24)       ] & 0xff000000) ^
464
                (Te4[(temp >> 16) & 0xff] & 0x00ff0000) ^
465
                (Te4[(temp >>  8) & 0xff] & 0x0000ff00) ^
466
                (Te4[(temp      ) & 0xff] & 0x000000ff);
467
            rk[13] = rk[ 5] ^ rk[12];
468
            rk[14] = rk[ 6] ^ rk[13];
469
            rk[15] = rk[ 7] ^ rk[14];
470
 
471
            rk += 8;
472
        }
473
    }
474
    return 0;
475
}
476
 
477
void AES_encrypt(const unsigned char *in, unsigned char *out,
478
                 const AES_KEY *key) {
479
 
480
    const u32 *rk;
481
    u32 s0, s1, s2, s3, t0, t1, t2, t3;
482
    int r;
483
 
484
    rk = key->rd_key;
485
 
486
    /*
487
     * map byte array block to cipher state
488
     * and add initial round key:
489
     */
490
    s0 = GETU32(in     ) ^ rk[0];
491
    s1 = GETU32(in +  4) ^ rk[1];
492
    s2 = GETU32(in +  8) ^ rk[2];
493
    s3 = GETU32(in + 12) ^ rk[3];
494
 
495
    /*
496
     * Nr - 1 full rounds:
497
     */
498
    r = key->rounds >> 1;
499
    for (;;) {
500
        t0 =
501
            Te0[(s0 >> 24)       ] ^
502
            Te1[(s1 >> 16) & 0xff] ^
503
            Te2[(s2 >>  8) & 0xff] ^
504
            Te3[(s3      ) & 0xff] ^
505
            rk[4];
506
        t1 =
507
            Te0[(s1 >> 24)       ] ^
508
            Te1[(s2 >> 16) & 0xff] ^
509
            Te2[(s3 >>  8) & 0xff] ^
510
            Te3[(s0      ) & 0xff] ^
511
            rk[5];
512
        t2 =
513
            Te0[(s2 >> 24)       ] ^
514
            Te1[(s3 >> 16) & 0xff] ^
515
            Te2[(s0 >>  8) & 0xff] ^
516
            Te3[(s1      ) & 0xff] ^
517
            rk[6];
518
        t3 =
519
            Te0[(s3 >> 24)       ] ^
520
            Te1[(s0 >> 16) & 0xff] ^
521
            Te2[(s1 >>  8) & 0xff] ^
522
            Te3[(s2      ) & 0xff] ^
523
            rk[7];
524
 
525
        rk += 8;
526
        if (--r == 0) {
527
            break;
528
        }
529
 
530
        s0 =
531
            Te0[(t0 >> 24)       ] ^
532
            Te1[(t1 >> 16) & 0xff] ^
533
            Te2[(t2 >>  8) & 0xff] ^
534
            Te3[(t3      ) & 0xff] ^
535
            rk[0];
536
        s1 =
537
            Te0[(t1 >> 24)       ] ^
538
            Te1[(t2 >> 16) & 0xff] ^
539
            Te2[(t3 >>  8) & 0xff] ^
540
            Te3[(t0      ) & 0xff] ^
541
            rk[1];
542
        s2 =
543
            Te0[(t2 >> 24)       ] ^
544
            Te1[(t3 >> 16) & 0xff] ^
545
            Te2[(t0 >>  8) & 0xff] ^
546
            Te3[(t1      ) & 0xff] ^
547
            rk[2];
548
        s3 =
549
            Te0[(t3 >> 24)       ] ^
550
            Te1[(t0 >> 16) & 0xff] ^
551
            Te2[(t1 >>  8) & 0xff] ^
552
            Te3[(t2      ) & 0xff] ^
553
            rk[3];
554
    }
555
 
556
    /*
557
     * apply last round and
558
     * map cipher state to byte array block:
559
     */
560
    s0 =
561
        (Te4[(t0 >> 24)       ] & 0xff000000) ^
562
        (Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^
563
        (Te4[(t2 >>  8) & 0xff] & 0x0000ff00) ^
564
        (Te4[(t3      ) & 0xff] & 0x000000ff) ^
565
        rk[0];
566
    PUTU32(out     , s0);
567
    s1 =
568
        (Te4[(t1 >> 24)       ] & 0xff000000) ^
569
        (Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^
570
        (Te4[(t3 >>  8) & 0xff] & 0x0000ff00) ^
571
        (Te4[(t0      ) & 0xff] & 0x000000ff) ^
572
        rk[1];
573
    PUTU32(out +  4, s1);
574
    s2 =
575
        (Te4[(t2 >> 24)       ] & 0xff000000) ^
576
        (Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^
577
        (Te4[(t0 >>  8) & 0xff] & 0x0000ff00) ^
578
        (Te4[(t1      ) & 0xff] & 0x000000ff) ^
579
        rk[2];
580
    PUTU32(out +  8, s2);
581
    s3 =
582
        (Te4[(t3 >> 24)       ] & 0xff000000) ^
583
        (Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^
584
        (Te4[(t1 >>  8) & 0xff] & 0x0000ff00) ^
585
        (Te4[(t2      ) & 0xff] & 0x000000ff) ^
586
        rk[3];
587
    PUTU32(out + 12, s3);
588
}
589
 

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.