summaryrefslogtreecommitdiff
path: root/rijndael.c
diff options
context:
space:
mode:
authorKevin Steves <stevesk@pobox.com>2001-02-05 12:42:17 +0000
committerKevin Steves <stevesk@pobox.com>2001-02-05 12:42:17 +0000
commitef4eea9badfb65f05ac24f786b710cc3f27f0e43 (patch)
treef54abef181ccd6ad5285a5c16b4c159d8b74e932 /rijndael.c
parentd2ddda4efab29fd8663757634773fa10e557e0f3 (diff)
- stevesk@cvs.openbsd.org 2001/02/04 08:32:27
[many files; did this manually to our top-level source dir] unexpand and remove end-of-line whitespace; ok markus@
Diffstat (limited to 'rijndael.c')
-rw-r--r--rijndael.c114
1 files changed, 57 insertions, 57 deletions
diff --git a/rijndael.c b/rijndael.c
index 10c779b4c..aa32be514 100644
--- a/rijndael.c
+++ b/rijndael.c
@@ -54,7 +54,7 @@ void gen_tabs __P((void));
54 54
55#define bswap(x) ((rotl(x, 8) & 0x00ff00ff) | (rotr(x, 8) & 0xff00ff00)) 55#define bswap(x) ((rotl(x, 8) & 0x00ff00ff) | (rotr(x, 8) & 0xff00ff00))
56 56
57/* Extract byte from a 32 bit quantity (little endian notation) */ 57/* Extract byte from a 32 bit quantity (little endian notation) */
58 58
59#define byte(x,n) ((u1byte)((x) >> (8 * n))) 59#define byte(x,n) ((u1byte)((x) >> (8 * n)))
60 60
@@ -89,15 +89,15 @@ u4byte tab_gen = 0;
89 89
90#define f_rn(bo, bi, n, k) \ 90#define f_rn(bo, bi, n, k) \
91 bo[n] = ft_tab[0][byte(bi[n],0)] ^ \ 91 bo[n] = ft_tab[0][byte(bi[n],0)] ^ \
92 ft_tab[1][byte(bi[(n + 1) & 3],1)] ^ \ 92 ft_tab[1][byte(bi[(n + 1) & 3],1)] ^ \
93 ft_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ 93 ft_tab[2][byte(bi[(n + 2) & 3],2)] ^ \
94 ft_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n) 94 ft_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n)
95 95
96#define i_rn(bo, bi, n, k) \ 96#define i_rn(bo, bi, n, k) \
97 bo[n] = it_tab[0][byte(bi[n],0)] ^ \ 97 bo[n] = it_tab[0][byte(bi[n],0)] ^ \
98 it_tab[1][byte(bi[(n + 3) & 3],1)] ^ \ 98 it_tab[1][byte(bi[(n + 3) & 3],1)] ^ \
99 it_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ 99 it_tab[2][byte(bi[(n + 2) & 3],2)] ^ \
100 it_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n) 100 it_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n)
101 101
102#ifdef LARGE_TABLES 102#ifdef LARGE_TABLES
103 103
@@ -109,15 +109,15 @@ u4byte tab_gen = 0;
109 109
110#define f_rl(bo, bi, n, k) \ 110#define f_rl(bo, bi, n, k) \
111 bo[n] = fl_tab[0][byte(bi[n],0)] ^ \ 111 bo[n] = fl_tab[0][byte(bi[n],0)] ^ \
112 fl_tab[1][byte(bi[(n + 1) & 3],1)] ^ \ 112 fl_tab[1][byte(bi[(n + 1) & 3],1)] ^ \
113 fl_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ 113 fl_tab[2][byte(bi[(n + 2) & 3],2)] ^ \
114 fl_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n) 114 fl_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n)
115 115
116#define i_rl(bo, bi, n, k) \ 116#define i_rl(bo, bi, n, k) \
117 bo[n] = il_tab[0][byte(bi[n],0)] ^ \ 117 bo[n] = il_tab[0][byte(bi[n],0)] ^ \
118 il_tab[1][byte(bi[(n + 3) & 3],1)] ^ \ 118 il_tab[1][byte(bi[(n + 3) & 3],1)] ^ \
119 il_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ 119 il_tab[2][byte(bi[(n + 2) & 3],2)] ^ \
120 il_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n) 120 il_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n)
121 121
122#else 122#else
123 123
@@ -129,15 +129,15 @@ u4byte tab_gen = 0;
129 129
130#define f_rl(bo, bi, n, k) \ 130#define f_rl(bo, bi, n, k) \
131 bo[n] = (u4byte)sbx_tab[byte(bi[n],0)] ^ \ 131 bo[n] = (u4byte)sbx_tab[byte(bi[n],0)] ^ \
132 rotl(((u4byte)sbx_tab[byte(bi[(n + 1) & 3],1)]), 8) ^ \ 132 rotl(((u4byte)sbx_tab[byte(bi[(n + 1) & 3],1)]), 8) ^ \
133 rotl(((u4byte)sbx_tab[byte(bi[(n + 2) & 3],2)]), 16) ^ \ 133 rotl(((u4byte)sbx_tab[byte(bi[(n + 2) & 3],2)]), 16) ^ \
134 rotl(((u4byte)sbx_tab[byte(bi[(n + 3) & 3],3)]), 24) ^ *(k + n) 134 rotl(((u4byte)sbx_tab[byte(bi[(n + 3) & 3],3)]), 24) ^ *(k + n)
135 135
136#define i_rl(bo, bi, n, k) \ 136#define i_rl(bo, bi, n, k) \
137 bo[n] = (u4byte)isb_tab[byte(bi[n],0)] ^ \ 137 bo[n] = (u4byte)isb_tab[byte(bi[n],0)] ^ \
138 rotl(((u4byte)isb_tab[byte(bi[(n + 3) & 3],1)]), 8) ^ \ 138 rotl(((u4byte)isb_tab[byte(bi[(n + 3) & 3],1)]), 8) ^ \
139 rotl(((u4byte)isb_tab[byte(bi[(n + 2) & 3],2)]), 16) ^ \ 139 rotl(((u4byte)isb_tab[byte(bi[(n + 2) & 3],2)]), 16) ^ \
140 rotl(((u4byte)isb_tab[byte(bi[(n + 1) & 3],3)]), 24) ^ *(k + n) 140 rotl(((u4byte)isb_tab[byte(bi[(n + 1) & 3],3)]), 24) ^ *(k + n)
141 141
142#endif 142#endif
143 143
@@ -160,7 +160,7 @@ gen_tabs(void)
160 log_tab[1] = 0; p = 1; 160 log_tab[1] = 0; p = 1;
161 161
162 for(i = 0; i < 10; ++i) { 162 for(i = 0; i < 10; ++i) {
163 rco_tab[i] = p; 163 rco_tab[i] = p;
164 164
165 p = (p << 1) ^ (p & 0x80 ? 0x1b : 0); 165 p = (p << 1) ^ (p & 0x80 ? 0x1b : 0);
166 } 166 }
@@ -172,19 +172,19 @@ gen_tabs(void)
172 /* least significant end of a byte. */ 172 /* least significant end of a byte. */
173 173
174 for(i = 0; i < 256; ++i) { 174 for(i = 0; i < 256; ++i) {
175 p = (i ? pow_tab[255 - log_tab[i]] : 0); q = p; 175 p = (i ? pow_tab[255 - log_tab[i]] : 0); q = p;
176 q = (q >> 7) | (q << 1); p ^= q; 176 q = (q >> 7) | (q << 1); p ^= q;
177 q = (q >> 7) | (q << 1); p ^= q; 177 q = (q >> 7) | (q << 1); p ^= q;
178 q = (q >> 7) | (q << 1); p ^= q; 178 q = (q >> 7) | (q << 1); p ^= q;
179 q = (q >> 7) | (q << 1); p ^= q ^ 0x63; 179 q = (q >> 7) | (q << 1); p ^= q ^ 0x63;
180 sbx_tab[i] = (u1byte)p; isb_tab[p] = (u1byte)i; 180 sbx_tab[i] = (u1byte)p; isb_tab[p] = (u1byte)i;
181 } 181 }
182 182
183 for(i = 0; i < 256; ++i) { 183 for(i = 0; i < 256; ++i) {
184 p = sbx_tab[i]; 184 p = sbx_tab[i];
185
186#ifdef LARGE_TABLES
185 187
186#ifdef LARGE_TABLES
187
188 t = p; fl_tab[0][i] = t; 188 t = p; fl_tab[0][i] = t;
189 fl_tab[1][i] = rotl(t, 8); 189 fl_tab[1][i] = rotl(t, 8);
190 fl_tab[2][i] = rotl(t, 16); 190 fl_tab[2][i] = rotl(t, 16);
@@ -194,30 +194,30 @@ gen_tabs(void)
194 ((u4byte)p << 8) | 194 ((u4byte)p << 8) |
195 ((u4byte)p << 16) | 195 ((u4byte)p << 16) |
196 ((u4byte)ff_mult(3, p) << 24); 196 ((u4byte)ff_mult(3, p) << 24);
197 197
198 ft_tab[0][i] = t; 198 ft_tab[0][i] = t;
199 ft_tab[1][i] = rotl(t, 8); 199 ft_tab[1][i] = rotl(t, 8);
200 ft_tab[2][i] = rotl(t, 16); 200 ft_tab[2][i] = rotl(t, 16);
201 ft_tab[3][i] = rotl(t, 24); 201 ft_tab[3][i] = rotl(t, 24);
202 202
203 p = isb_tab[i]; 203 p = isb_tab[i];
204 204
205#ifdef LARGE_TABLES 205#ifdef LARGE_TABLES
206 206
207 t = p; il_tab[0][i] = t; 207 t = p; il_tab[0][i] = t;
208 il_tab[1][i] = rotl(t, 8); 208 il_tab[1][i] = rotl(t, 8);
209 il_tab[2][i] = rotl(t, 16); 209 il_tab[2][i] = rotl(t, 16);
210 il_tab[3][i] = rotl(t, 24); 210 il_tab[3][i] = rotl(t, 24);
211#endif 211#endif
212 t = ((u4byte)ff_mult(14, p)) | 212 t = ((u4byte)ff_mult(14, p)) |
213 ((u4byte)ff_mult( 9, p) << 8) | 213 ((u4byte)ff_mult( 9, p) << 8) |
214 ((u4byte)ff_mult(13, p) << 16) | 214 ((u4byte)ff_mult(13, p) << 16) |
215 ((u4byte)ff_mult(11, p) << 24); 215 ((u4byte)ff_mult(11, p) << 24);
216 216
217 it_tab[0][i] = t; 217 it_tab[0][i] = t;
218 it_tab[1][i] = rotl(t, 8); 218 it_tab[1][i] = rotl(t, 8);
219 it_tab[2][i] = rotl(t, 16); 219 it_tab[2][i] = rotl(t, 16);
220 it_tab[3][i] = rotl(t, 24); 220 it_tab[3][i] = rotl(t, 24);
221 } 221 }
222 222
223 tab_gen = 1; 223 tab_gen = 1;
@@ -232,8 +232,8 @@ gen_tabs(void)
232 t = w ^ (x); \ 232 t = w ^ (x); \
233 (y) = u ^ v ^ w; \ 233 (y) = u ^ v ^ w; \
234 (y) ^= rotr(u ^ t, 8) ^ \ 234 (y) ^= rotr(u ^ t, 8) ^ \
235 rotr(v ^ t, 16) ^ \ 235 rotr(v ^ t, 16) ^ \
236 rotr(t,24) 236 rotr(t,24)
237 237
238/* initialise the key schedule from the user supplied key */ 238/* initialise the key schedule from the user supplied key */
239 239
@@ -271,7 +271,7 @@ gen_tabs(void)
271rijndael_ctx * 271rijndael_ctx *
272rijndael_set_key(rijndael_ctx *ctx, const u4byte *in_key, const u4byte key_len, 272rijndael_set_key(rijndael_ctx *ctx, const u4byte *in_key, const u4byte key_len,
273 int encrypt) 273 int encrypt)
274{ 274{
275 u4byte i, t, u, v, w; 275 u4byte i, t, u, v, w;
276 u4byte *e_key = ctx->e_key; 276 u4byte *e_key = ctx->e_key;
277 u4byte *d_key = ctx->d_key; 277 u4byte *d_key = ctx->d_key;
@@ -285,23 +285,23 @@ rijndael_set_key(rijndael_ctx *ctx, const u4byte *in_key, const u4byte key_len,
285 285
286 e_key[0] = io_swap(in_key[0]); e_key[1] = io_swap(in_key[1]); 286 e_key[0] = io_swap(in_key[0]); e_key[1] = io_swap(in_key[1]);
287 e_key[2] = io_swap(in_key[2]); e_key[3] = io_swap(in_key[3]); 287 e_key[2] = io_swap(in_key[2]); e_key[3] = io_swap(in_key[3]);
288 288
289 switch(ctx->k_len) { 289 switch(ctx->k_len) {
290 case 4: t = e_key[3]; 290 case 4: t = e_key[3];
291 for(i = 0; i < 10; ++i) 291 for(i = 0; i < 10; ++i)
292 loop4(i); 292 loop4(i);
293 break; 293 break;
294 294
295 case 6: e_key[4] = io_swap(in_key[4]); t = e_key[5] = io_swap(in_key[5]); 295 case 6: e_key[4] = io_swap(in_key[4]); t = e_key[5] = io_swap(in_key[5]);
296 for(i = 0; i < 8; ++i) 296 for(i = 0; i < 8; ++i)
297 loop6(i); 297 loop6(i);
298 break; 298 break;
299 299
300 case 8: e_key[4] = io_swap(in_key[4]); e_key[5] = io_swap(in_key[5]); 300 case 8: e_key[4] = io_swap(in_key[4]); e_key[5] = io_swap(in_key[5]);
301 e_key[6] = io_swap(in_key[6]); t = e_key[7] = io_swap(in_key[7]); 301 e_key[6] = io_swap(in_key[6]); t = e_key[7] = io_swap(in_key[7]);
302 for(i = 0; i < 7; ++i) 302 for(i = 0; i < 7; ++i)
303 loop8(i); 303 loop8(i);
304 break; 304 break;
305 } 305 }
306 306
307 if (!encrypt) { 307 if (!encrypt) {
@@ -333,7 +333,7 @@ rijndael_set_key(rijndael_ctx *ctx, const u4byte *in_key, const u4byte key_len,
333 333
334void 334void
335rijndael_encrypt(rijndael_ctx *ctx, const u4byte *in_blk, u4byte *out_blk) 335rijndael_encrypt(rijndael_ctx *ctx, const u4byte *in_blk, u4byte *out_blk)
336{ 336{
337 u4byte k_len = ctx->k_len; 337 u4byte k_len = ctx->k_len;
338 u4byte *e_key = ctx->e_key; 338 u4byte *e_key = ctx->e_key;
339 u4byte b0[4], b1[4], *kp; 339 u4byte b0[4], b1[4], *kp;
@@ -380,7 +380,7 @@ rijndael_encrypt(rijndael_ctx *ctx, const u4byte *in_blk, u4byte *out_blk)
380 380
381void 381void
382rijndael_decrypt(rijndael_ctx *ctx, const u4byte *in_blk, u4byte *out_blk) 382rijndael_decrypt(rijndael_ctx *ctx, const u4byte *in_blk, u4byte *out_blk)
383{ 383{
384 u4byte b0[4], b1[4], *kp; 384 u4byte b0[4], b1[4], *kp;
385 u4byte k_len = ctx->k_len; 385 u4byte k_len = ctx->k_len;
386 u4byte *e_key = ctx->e_key; 386 u4byte *e_key = ctx->e_key;