#include "aesopt.h"
Go to the source code of this file.
Defines | |
#define | fwd_lrnd(y, x, k, c) (s(y,c) = (k)[c] ^ four_tables(x,t_use(f,l),fwd_var,rf1,c)) |
#define | fwd_rnd(y, x, k, c) (s(y,c) = (k)[c] ^ four_tables(x,t_use(f,n),fwd_var,rf1,c)) |
#define | fwd_var(x, r, c) |
#define | inv_lrnd(y, x, k, c) (s(y,c) = (k)[c] ^ four_tables(x,t_use(i,l),inv_var,rf1,c)) |
#define | inv_rnd(y, x, k, c) (s(y,c) = (k)[c] ^ four_tables(x,t_use(i,n),inv_var,rf1,c)) |
#define | inv_var(x, r, c) |
#define | l_copy(y, x) |
#define | locals(y, x) x[4],y[4] |
#define | round(rm, y, x, k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3) |
#define | si(y, x, k, c) (s(y,c) = word_in(x, c) ^ (k)[c]) |
#define | so(y, x, c) word_out(y, c, s(x,c)) |
#define | state_in(y, x, k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3) |
#define | state_out(y, x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3) |
Functions | |
aes_rval | aes_decrypt (const void *in_blk, void *out_blk, const aes_decrypt_ctx cx[1]) |
aes_rval | aes_encrypt (const void *in_blk, void *out_blk, const aes_encrypt_ctx cx[1]) |
Definition in file aescrypt.c.
#define fwd_lrnd | ( | y, | |||
x, | |||||
k, | |||||
c | ) | (s(y,c) = (k)[c] ^ four_tables(x,t_use(f,l),fwd_var,rf1,c)) |
#define fwd_rnd | ( | y, | |||
x, | |||||
k, | |||||
c | ) | (s(y,c) = (k)[c] ^ four_tables(x,t_use(f,n),fwd_var,rf1,c)) |
#define fwd_var | ( | x, | |||
r, | |||||
c | ) |
Value:
( r == 0 ? ( c == 0 ? s(x,0) : c == 1 ? s(x,1) : c == 2 ? s(x,2) : s(x,3))\ : r == 1 ? ( c == 0 ? s(x,1) : c == 1 ? s(x,2) : c == 2 ? s(x,3) : s(x,0))\ : r == 2 ? ( c == 0 ? s(x,2) : c == 1 ? s(x,3) : c == 2 ? s(x,0) : s(x,1))\ : ( c == 0 ? s(x,3) : c == 1 ? s(x,0) : c == 2 ? s(x,1) : s(x,2)))
Definition at line 91 of file aescrypt.c.
#define inv_lrnd | ( | y, | |||
x, | |||||
k, | |||||
c | ) | (s(y,c) = (k)[c] ^ four_tables(x,t_use(i,l),inv_var,rf1,c)) |
#define inv_rnd | ( | y, | |||
x, | |||||
k, | |||||
c | ) | (s(y,c) = (k)[c] ^ four_tables(x,t_use(i,n),inv_var,rf1,c)) |
#define inv_var | ( | x, | |||
r, | |||||
c | ) |
Value:
( r == 0 ? ( c == 0 ? s(x,0) : c == 1 ? s(x,1) : c == 2 ? s(x,2) : s(x,3))\ : r == 1 ? ( c == 0 ? s(x,3) : c == 1 ? s(x,0) : c == 2 ? s(x,1) : s(x,2))\ : r == 2 ? ( c == 0 ? s(x,2) : c == 1 ? s(x,3) : c == 2 ? s(x,0) : s(x,1))\ : ( c == 0 ? s(x,1) : c == 1 ? s(x,2) : c == 2 ? s(x,3) : s(x,0)))
Definition at line 215 of file aescrypt.c.
#define l_copy | ( | y, | |||
x | ) |
#define locals | ( | y, | |||
x | ) | x[4],y[4] |
Definition at line 58 of file aescrypt.c.
Referenced by aes_decrypt(), aes_encrypt(), and unload_module().
#define round | ( | rm, | |||
y, | |||||
x, | |||||
k | ) | rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3) |
Definition at line 67 of file aescrypt.c.
Referenced by aes_decrypt(), aes_encrypt(), and usbradio_text().
#define si | ( | y, | |||
x, | |||||
k, | |||||
c | ) | (s(y,c) = word_in(x, c) ^ (k)[c]) |
Definition at line 54 of file aescrypt.c.
Referenced by destroy_callback(), speex_callback(), speex_read(), and speex_write().
#define so | ( | y, | |||
x, | |||||
c | ) | word_out(y, c, s(x,c)) |
Definition at line 55 of file aescrypt.c.
#define state_in | ( | y, | |||
x, | |||||
k | ) | si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3) |
#define state_out | ( | y, | |||
x | ) | so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3) |
aes_rval aes_decrypt | ( | const void * | in_blk, | |
void * | out_blk, | |||
const aes_decrypt_ctx | cx[1] | |||
) |
Definition at line 239 of file aescrypt.c.
References aes_error, aes_good, inv_lrnd, inv_rnd, aes_decrypt_ctx::ks, l_copy, locals, N_COLS, round, state_in, and state_out.
00240 { aes_32t locals(b0, b1); 00241 #ifdef dec_imvars 00242 dec_imvars; /* declare variables for inv_mcol() if needed */ 00243 #endif 00244 00245 aes_32t nr = (cx->ks[45] ^ cx->ks[52] ^ cx->ks[53] ? cx->ks[52] : 14); 00246 const aes_32t *kp = cx->ks + nr * N_COLS; 00247 00248 #ifdef AES_ERR_CHK 00249 if( (nr != 10 || !(cx->ks[0] | cx->ks[3] | cx->ks[4])) 00250 && (nr != 12 || !(cx->ks[0] | cx->ks[5] | cx->ks[6])) 00251 && (nr != 14 || !(cx->ks[0] | cx->ks[7] | cx->ks[8])) ) 00252 return aes_error; 00253 #endif 00254 00255 state_in(b0, in_blk, kp); 00256 00257 #if (DEC_UNROLL == FULL) 00258 00259 switch(nr) 00260 { 00261 case 14: 00262 round(inv_rnd, b1, b0, kp - 1 * N_COLS); 00263 round(inv_rnd, b0, b1, kp - 2 * N_COLS); 00264 kp -= 2 * N_COLS; 00265 case 12: 00266 round(inv_rnd, b1, b0, kp - 1 * N_COLS); 00267 round(inv_rnd, b0, b1, kp - 2 * N_COLS); 00268 kp -= 2 * N_COLS; 00269 case 10: 00270 round(inv_rnd, b1, b0, kp - 1 * N_COLS); 00271 round(inv_rnd, b0, b1, kp - 2 * N_COLS); 00272 round(inv_rnd, b1, b0, kp - 3 * N_COLS); 00273 round(inv_rnd, b0, b1, kp - 4 * N_COLS); 00274 round(inv_rnd, b1, b0, kp - 5 * N_COLS); 00275 round(inv_rnd, b0, b1, kp - 6 * N_COLS); 00276 round(inv_rnd, b1, b0, kp - 7 * N_COLS); 00277 round(inv_rnd, b0, b1, kp - 8 * N_COLS); 00278 round(inv_rnd, b1, b0, kp - 9 * N_COLS); 00279 round(inv_lrnd, b0, b1, kp - 10 * N_COLS); 00280 } 00281 00282 #else 00283 00284 #if (DEC_UNROLL == PARTIAL) 00285 { aes_32t rnd; 00286 for(rnd = 0; rnd < (nr >> 1) - 1; ++rnd) 00287 { 00288 kp -= N_COLS; 00289 round(inv_rnd, b1, b0, kp); 00290 kp -= N_COLS; 00291 round(inv_rnd, b0, b1, kp); 00292 } 00293 kp -= N_COLS; 00294 round(inv_rnd, b1, b0, kp); 00295 #else 00296 { aes_32t rnd; 00297 for(rnd = 0; rnd < nr - 1; ++rnd) 00298 { 00299 kp -= N_COLS; 00300 round(inv_rnd, b1, b0, kp); 00301 l_copy(b0, b1); 00302 } 00303 #endif 00304 kp -= N_COLS; 00305 round(inv_lrnd, b0, b1, kp); 00306 } 00307 #endif 00308 00309 state_out(out_blk, b0); 00310 #ifdef AES_ERR_CHK 00311 return aes_good; 00312 #endif 00313 }
aes_rval aes_encrypt | ( | const void * | in_blk, | |
void * | out_blk, | |||
const aes_encrypt_ctx | cx[1] | |||
) |
Definition at line 115 of file aescrypt.c.
References aes_error, aes_good, dec_fmvars, fwd_lrnd, fwd_rnd, aes_encrypt_ctx::ks, l_copy, locals, N_COLS, round, state_in, and state_out.
00116 { aes_32t locals(b0, b1); 00117 const aes_32t *kp = cx->ks; 00118 #ifdef dec_fmvars 00119 dec_fmvars; /* declare variables for fwd_mcol() if needed */ 00120 #endif 00121 00122 aes_32t nr = (kp[45] ^ kp[52] ^ kp[53] ? kp[52] : 14); 00123 00124 #ifdef AES_ERR_CHK 00125 if( (nr != 10 || !(kp[0] | kp[3] | kp[4])) 00126 && (nr != 12 || !(kp[0] | kp[5] | kp[6])) 00127 && (nr != 14 || !(kp[0] | kp[7] | kp[8])) ) 00128 return aes_error; 00129 #endif 00130 00131 state_in(b0, in_blk, kp); 00132 00133 #if (ENC_UNROLL == FULL) 00134 00135 switch(nr) 00136 { 00137 case 14: 00138 round(fwd_rnd, b1, b0, kp + 1 * N_COLS); 00139 round(fwd_rnd, b0, b1, kp + 2 * N_COLS); 00140 kp += 2 * N_COLS; 00141 case 12: 00142 round(fwd_rnd, b1, b0, kp + 1 * N_COLS); 00143 round(fwd_rnd, b0, b1, kp + 2 * N_COLS); 00144 kp += 2 * N_COLS; 00145 case 10: 00146 round(fwd_rnd, b1, b0, kp + 1 * N_COLS); 00147 round(fwd_rnd, b0, b1, kp + 2 * N_COLS); 00148 round(fwd_rnd, b1, b0, kp + 3 * N_COLS); 00149 round(fwd_rnd, b0, b1, kp + 4 * N_COLS); 00150 round(fwd_rnd, b1, b0, kp + 5 * N_COLS); 00151 round(fwd_rnd, b0, b1, kp + 6 * N_COLS); 00152 round(fwd_rnd, b1, b0, kp + 7 * N_COLS); 00153 round(fwd_rnd, b0, b1, kp + 8 * N_COLS); 00154 round(fwd_rnd, b1, b0, kp + 9 * N_COLS); 00155 round(fwd_lrnd, b0, b1, kp +10 * N_COLS); 00156 } 00157 00158 #else 00159 00160 #if (ENC_UNROLL == PARTIAL) 00161 { aes_32t rnd; 00162 for(rnd = 0; rnd < (nr >> 1) - 1; ++rnd) 00163 { 00164 kp += N_COLS; 00165 round(fwd_rnd, b1, b0, kp); 00166 kp += N_COLS; 00167 round(fwd_rnd, b0, b1, kp); 00168 } 00169 kp += N_COLS; 00170 round(fwd_rnd, b1, b0, kp); 00171 #else 00172 { aes_32t rnd; 00173 for(rnd = 0; rnd < nr - 1; ++rnd) 00174 { 00175 kp += N_COLS; 00176 round(fwd_rnd, b1, b0, kp); 00177 l_copy(b0, b1); 00178 } 00179 #endif 00180 kp += N_COLS; 00181 round(fwd_lrnd, b0, b1, kp); 00182 } 00183 #endif 00184 00185 state_out(out_blk, b0); 00186 #ifdef AES_ERR_CHK 00187 return aes_good; 00188 #endif 00189 }