Loading crypto/aes_generic.c +176 −149 Original line number Diff line number Diff line Loading @@ -63,8 +63,7 @@ /* * #define byte(x, nr) ((unsigned char)((x) >> (nr*8))) */ static inline u8 byte(const u32 x, const unsigned n) static inline u8 byte(const u32 x, const unsigned n) { return x >> (n << 3); } Loading @@ -88,8 +87,7 @@ static u32 it_tab[4][256]; static u32 fl_tab[4][256]; static u32 il_tab[4][256]; static inline u8 __init f_mult (u8 a, u8 b) static inline u8 __init f_mult(u8 a, u8 b) { u8 aa = log_tab[a], cc = aa + log_tab[b]; Loading @@ -98,45 +96,16 @@ f_mult (u8 a, u8 b) #define ff_mult(a, b) (a && b ? f_mult(a, b) : 0) #define f_rn(bo, bi, n, k) \ bo[n] = ft_tab[0][byte(bi[n],0)] ^ \ ft_tab[1][byte(bi[(n + 1) & 3],1)] ^ \ ft_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ ft_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n) #define i_rn(bo, bi, n, k) \ bo[n] = it_tab[0][byte(bi[n],0)] ^ \ it_tab[1][byte(bi[(n + 3) & 3],1)] ^ \ it_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ it_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n) #define ls_box(x) \ ( fl_tab[0][byte(x, 0)] ^ \ fl_tab[1][byte(x, 1)] ^ \ fl_tab[2][byte(x, 2)] ^ \ fl_tab[3][byte(x, 3)] ) #define f_rl(bo, bi, n, k) \ bo[n] = fl_tab[0][byte(bi[n],0)] ^ \ fl_tab[1][byte(bi[(n + 1) & 3],1)] ^ \ fl_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ fl_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n) #define i_rl(bo, bi, n, k) \ bo[n] = il_tab[0][byte(bi[n],0)] ^ \ il_tab[1][byte(bi[(n + 3) & 3],1)] ^ \ il_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ il_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n) static void __init gen_tabs (void) static void __init gen_tabs(void) { u32 i, t; u8 p, q; /* log and power tables for GF(2**8) finite field with 0x011b as modular polynomial - the simplest primitive root is 0x03, used here to generate the tables */ /* * log and power tables for GF(2**8) finite field with * 0x011b as modular polynomial - the simplest primitive * root is 0x03, used here to generate the tables */ for (i = 0, p = 1; i < 256; ++i) { pow_tab[i] = (u8) p; Loading Loading @@ -199,9 +168,11 @@ gen_tabs (void) } } /* initialise the key schedule from the user supplied key */ #define star_x(x) (((x) & 0x7f7f7f7f) << 1) ^ ((((x) & 0x80808080) >> 7) * 0x1b) #define imix_col(y,x) \ #define imix_col(y,x) do { \ u = star_x(x); \ v = star_x(u); \ w = star_x(v); \ Loading @@ -209,40 +180,65 @@ gen_tabs (void) (y) = u ^ v ^ w; \ (y) ^= ror32(u ^ t, 8) ^ \ ror32(v ^ t, 16) ^ \ ror32(t,24) /* initialise the key schedule from the user supplied key */ ror32(t, 24); \ } while (0) #define loop4(i) \ { t = ror32(t, 8); t = ls_box(t) ^ rco_tab[i]; \ t ^= E_KEY[4 * i]; E_KEY[4 * i + 4] = t; \ t ^= E_KEY[4 * i + 1]; E_KEY[4 * i + 5] = t; \ t ^= E_KEY[4 * i + 2]; E_KEY[4 * i + 6] = t; \ t ^= E_KEY[4 * i + 3]; E_KEY[4 * i + 7] = t; \ } #define loop6(i) \ { t = ror32(t, 8); t = ls_box(t) ^ rco_tab[i]; \ t ^= E_KEY[6 * i]; E_KEY[6 * i + 6] = t; \ t ^= E_KEY[6 * i + 1]; E_KEY[6 * i + 7] = t; \ t ^= E_KEY[6 * i + 2]; E_KEY[6 * i + 8] = t; \ t ^= E_KEY[6 * i + 3]; E_KEY[6 * i + 9] = t; \ t ^= E_KEY[6 * i + 4]; E_KEY[6 * i + 10] = t; \ t ^= E_KEY[6 * i + 5]; E_KEY[6 * i + 11] = t; \ } #define loop8(i) \ { t = ror32(t, 8); ; t = ls_box(t) ^ rco_tab[i]; \ t ^= E_KEY[8 * i]; E_KEY[8 * i + 8] = t; \ t ^= E_KEY[8 * i + 1]; E_KEY[8 * i + 9] = t; \ t ^= E_KEY[8 * i + 2]; E_KEY[8 * i + 10] = t; \ t ^= E_KEY[8 * i + 3]; E_KEY[8 * i + 11] = t; \ #define ls_box(x) \ fl_tab[0][byte(x, 0)] ^ \ fl_tab[1][byte(x, 1)] ^ \ fl_tab[2][byte(x, 2)] ^ \ fl_tab[3][byte(x, 3)] #define loop4(i) do { \ t = ror32(t, 8); \ t = ls_box(t) ^ rco_tab[i]; \ t ^= E_KEY[4 * i]; \ E_KEY[4 * i + 4] = t; \ t ^= E_KEY[4 * i + 1]; \ E_KEY[4 * i + 5] = t; \ t ^= E_KEY[4 * i + 2]; \ E_KEY[4 * i + 6] = t; \ t ^= E_KEY[4 * i + 3]; \ E_KEY[4 * i + 7] = t; \ } while (0) #define loop6(i) do { \ t = ror32(t, 8); \ t = ls_box(t) ^ rco_tab[i]; \ t ^= E_KEY[6 * i]; \ E_KEY[6 * i + 6] = t; \ t ^= E_KEY[6 * i + 1]; \ E_KEY[6 * i + 7] = t; \ t ^= E_KEY[6 * i + 2]; \ E_KEY[6 * i + 8] = t; \ t ^= E_KEY[6 * i + 3]; \ E_KEY[6 * i + 9] = t; \ t ^= E_KEY[6 * i + 4]; \ E_KEY[6 * i + 10] = t; \ t ^= E_KEY[6 * i + 5]; \ E_KEY[6 * i + 11] = t; \ } while (0) #define loop8(i) do { \ t = ror32(t, 8); \ t = ls_box(t) ^ rco_tab[i]; \ t ^= E_KEY[8 * i]; \ E_KEY[8 * i + 8] = t; \ t ^= E_KEY[8 * i + 1]; \ E_KEY[8 * i + 9] = t; \ t ^= E_KEY[8 * i + 2]; \ E_KEY[8 * i + 10] = t; \ t ^= E_KEY[8 * i + 3]; \ E_KEY[8 * i + 11] = t; \ t = E_KEY[8 * i + 4] ^ ls_box(t); \ E_KEY[8 * i + 12] = t; \ t ^= E_KEY[8 * i + 5]; E_KEY[8 * i + 13] = t; \ t ^= E_KEY[8 * i + 6]; E_KEY[8 * i + 14] = t; \ t ^= E_KEY[8 * i + 7]; E_KEY[8 * i + 15] = t; \ } t ^= E_KEY[8 * i + 5]; \ E_KEY[8 * i + 13] = t; \ t ^= E_KEY[8 * i + 6]; \ E_KEY[8 * i + 14] = t; \ t ^= E_KEY[8 * i + 7]; \ E_KEY[8 * i + 15] = t; \ } while (0) static int aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, unsigned int key_len) Loading Loading @@ -302,18 +298,34 @@ static int aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, /* encrypt a block of text */ #define f_nround(bo, bi, k) \ #define f_rn(bo, bi, n, k) do { \ bo[n] = ft_tab[0][byte(bi[n], 0)] ^ \ ft_tab[1][byte(bi[(n + 1) & 3], 1)] ^ \ ft_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \ ft_tab[3][byte(bi[(n + 3) & 3], 3)] ^ *(k + n); \ } while (0) #define f_nround(bo, bi, k) do {\ f_rn(bo, bi, 0, k); \ f_rn(bo, bi, 1, k); \ f_rn(bo, bi, 2, k); \ f_rn(bo, bi, 3, k); \ k += 4 k += 4; \ } while (0) #define f_lround(bo, bi, k) \ #define f_rl(bo, bi, n, k) do { \ bo[n] = fl_tab[0][byte(bi[n], 0)] ^ \ fl_tab[1][byte(bi[(n + 1) & 3], 1)] ^ \ fl_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \ fl_tab[3][byte(bi[(n + 3) & 3], 3)] ^ *(k + n); \ } while (0) #define f_lround(bo, bi, k) do {\ f_rl(bo, bi, 0, k); \ f_rl(bo, bi, 1, k); \ f_rl(bo, bi, 2, k); \ f_rl(bo, bi, 3, k) f_rl(bo, bi, 3, k); \ } while (0) static void aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) { Loading Loading @@ -357,18 +369,34 @@ static void aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) /* decrypt a block of text */ #define i_nround(bo, bi, k) \ #define i_rn(bo, bi, n, k) do { \ bo[n] = it_tab[0][byte(bi[n], 0)] ^ \ it_tab[1][byte(bi[(n + 3) & 3], 1)] ^ \ it_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \ it_tab[3][byte(bi[(n + 1) & 3], 3)] ^ *(k + n); \ } while (0) #define i_nround(bo, bi, k) do {\ i_rn(bo, bi, 0, k); \ i_rn(bo, bi, 1, k); \ i_rn(bo, bi, 2, k); \ i_rn(bo, bi, 3, k); \ k -= 4 k -= 4; \ } while (0) #define i_rl(bo, bi, n, k) do { \ bo[n] = il_tab[0][byte(bi[n], 0)] ^ \ il_tab[1][byte(bi[(n + 3) & 3], 1)] ^ \ il_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \ il_tab[3][byte(bi[(n + 1) & 3], 3)] ^ *(k + n); \ } while (0) #define i_lround(bo, bi, k) \ #define i_lround(bo, bi, k) do {\ i_rl(bo, bi, 0, k); \ i_rl(bo, bi, 1, k); \ i_rl(bo, bi, 2, k); \ i_rl(bo, bi, 3, k) i_rl(bo, bi, 3, k); \ } while (0) static void aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) { Loading Loading @@ -411,7 +439,6 @@ static void aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) dst[3] = cpu_to_le32(b0[3]); } static struct crypto_alg aes_alg = { .cra_name = "aes", .cra_driver_name = "aes-generic", Loading Loading
crypto/aes_generic.c +176 −149 Original line number Diff line number Diff line Loading @@ -63,8 +63,7 @@ /* * #define byte(x, nr) ((unsigned char)((x) >> (nr*8))) */ static inline u8 byte(const u32 x, const unsigned n) static inline u8 byte(const u32 x, const unsigned n) { return x >> (n << 3); } Loading @@ -88,8 +87,7 @@ static u32 it_tab[4][256]; static u32 fl_tab[4][256]; static u32 il_tab[4][256]; static inline u8 __init f_mult (u8 a, u8 b) static inline u8 __init f_mult(u8 a, u8 b) { u8 aa = log_tab[a], cc = aa + log_tab[b]; Loading @@ -98,45 +96,16 @@ f_mult (u8 a, u8 b) #define ff_mult(a, b) (a && b ? f_mult(a, b) : 0) #define f_rn(bo, bi, n, k) \ bo[n] = ft_tab[0][byte(bi[n],0)] ^ \ ft_tab[1][byte(bi[(n + 1) & 3],1)] ^ \ ft_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ ft_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n) #define i_rn(bo, bi, n, k) \ bo[n] = it_tab[0][byte(bi[n],0)] ^ \ it_tab[1][byte(bi[(n + 3) & 3],1)] ^ \ it_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ it_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n) #define ls_box(x) \ ( fl_tab[0][byte(x, 0)] ^ \ fl_tab[1][byte(x, 1)] ^ \ fl_tab[2][byte(x, 2)] ^ \ fl_tab[3][byte(x, 3)] ) #define f_rl(bo, bi, n, k) \ bo[n] = fl_tab[0][byte(bi[n],0)] ^ \ fl_tab[1][byte(bi[(n + 1) & 3],1)] ^ \ fl_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ fl_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n) #define i_rl(bo, bi, n, k) \ bo[n] = il_tab[0][byte(bi[n],0)] ^ \ il_tab[1][byte(bi[(n + 3) & 3],1)] ^ \ il_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ il_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n) static void __init gen_tabs (void) static void __init gen_tabs(void) { u32 i, t; u8 p, q; /* log and power tables for GF(2**8) finite field with 0x011b as modular polynomial - the simplest primitive root is 0x03, used here to generate the tables */ /* * log and power tables for GF(2**8) finite field with * 0x011b as modular polynomial - the simplest primitive * root is 0x03, used here to generate the tables */ for (i = 0, p = 1; i < 256; ++i) { pow_tab[i] = (u8) p; Loading Loading @@ -199,9 +168,11 @@ gen_tabs (void) } } /* initialise the key schedule from the user supplied key */ #define star_x(x) (((x) & 0x7f7f7f7f) << 1) ^ ((((x) & 0x80808080) >> 7) * 0x1b) #define imix_col(y,x) \ #define imix_col(y,x) do { \ u = star_x(x); \ v = star_x(u); \ w = star_x(v); \ Loading @@ -209,40 +180,65 @@ gen_tabs (void) (y) = u ^ v ^ w; \ (y) ^= ror32(u ^ t, 8) ^ \ ror32(v ^ t, 16) ^ \ ror32(t,24) /* initialise the key schedule from the user supplied key */ ror32(t, 24); \ } while (0) #define loop4(i) \ { t = ror32(t, 8); t = ls_box(t) ^ rco_tab[i]; \ t ^= E_KEY[4 * i]; E_KEY[4 * i + 4] = t; \ t ^= E_KEY[4 * i + 1]; E_KEY[4 * i + 5] = t; \ t ^= E_KEY[4 * i + 2]; E_KEY[4 * i + 6] = t; \ t ^= E_KEY[4 * i + 3]; E_KEY[4 * i + 7] = t; \ } #define loop6(i) \ { t = ror32(t, 8); t = ls_box(t) ^ rco_tab[i]; \ t ^= E_KEY[6 * i]; E_KEY[6 * i + 6] = t; \ t ^= E_KEY[6 * i + 1]; E_KEY[6 * i + 7] = t; \ t ^= E_KEY[6 * i + 2]; E_KEY[6 * i + 8] = t; \ t ^= E_KEY[6 * i + 3]; E_KEY[6 * i + 9] = t; \ t ^= E_KEY[6 * i + 4]; E_KEY[6 * i + 10] = t; \ t ^= E_KEY[6 * i + 5]; E_KEY[6 * i + 11] = t; \ } #define loop8(i) \ { t = ror32(t, 8); ; t = ls_box(t) ^ rco_tab[i]; \ t ^= E_KEY[8 * i]; E_KEY[8 * i + 8] = t; \ t ^= E_KEY[8 * i + 1]; E_KEY[8 * i + 9] = t; \ t ^= E_KEY[8 * i + 2]; E_KEY[8 * i + 10] = t; \ t ^= E_KEY[8 * i + 3]; E_KEY[8 * i + 11] = t; \ #define ls_box(x) \ fl_tab[0][byte(x, 0)] ^ \ fl_tab[1][byte(x, 1)] ^ \ fl_tab[2][byte(x, 2)] ^ \ fl_tab[3][byte(x, 3)] #define loop4(i) do { \ t = ror32(t, 8); \ t = ls_box(t) ^ rco_tab[i]; \ t ^= E_KEY[4 * i]; \ E_KEY[4 * i + 4] = t; \ t ^= E_KEY[4 * i + 1]; \ E_KEY[4 * i + 5] = t; \ t ^= E_KEY[4 * i + 2]; \ E_KEY[4 * i + 6] = t; \ t ^= E_KEY[4 * i + 3]; \ E_KEY[4 * i + 7] = t; \ } while (0) #define loop6(i) do { \ t = ror32(t, 8); \ t = ls_box(t) ^ rco_tab[i]; \ t ^= E_KEY[6 * i]; \ E_KEY[6 * i + 6] = t; \ t ^= E_KEY[6 * i + 1]; \ E_KEY[6 * i + 7] = t; \ t ^= E_KEY[6 * i + 2]; \ E_KEY[6 * i + 8] = t; \ t ^= E_KEY[6 * i + 3]; \ E_KEY[6 * i + 9] = t; \ t ^= E_KEY[6 * i + 4]; \ E_KEY[6 * i + 10] = t; \ t ^= E_KEY[6 * i + 5]; \ E_KEY[6 * i + 11] = t; \ } while (0) #define loop8(i) do { \ t = ror32(t, 8); \ t = ls_box(t) ^ rco_tab[i]; \ t ^= E_KEY[8 * i]; \ E_KEY[8 * i + 8] = t; \ t ^= E_KEY[8 * i + 1]; \ E_KEY[8 * i + 9] = t; \ t ^= E_KEY[8 * i + 2]; \ E_KEY[8 * i + 10] = t; \ t ^= E_KEY[8 * i + 3]; \ E_KEY[8 * i + 11] = t; \ t = E_KEY[8 * i + 4] ^ ls_box(t); \ E_KEY[8 * i + 12] = t; \ t ^= E_KEY[8 * i + 5]; E_KEY[8 * i + 13] = t; \ t ^= E_KEY[8 * i + 6]; E_KEY[8 * i + 14] = t; \ t ^= E_KEY[8 * i + 7]; E_KEY[8 * i + 15] = t; \ } t ^= E_KEY[8 * i + 5]; \ E_KEY[8 * i + 13] = t; \ t ^= E_KEY[8 * i + 6]; \ E_KEY[8 * i + 14] = t; \ t ^= E_KEY[8 * i + 7]; \ E_KEY[8 * i + 15] = t; \ } while (0) static int aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, unsigned int key_len) Loading Loading @@ -302,18 +298,34 @@ static int aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, /* encrypt a block of text */ #define f_nround(bo, bi, k) \ #define f_rn(bo, bi, n, k) do { \ bo[n] = ft_tab[0][byte(bi[n], 0)] ^ \ ft_tab[1][byte(bi[(n + 1) & 3], 1)] ^ \ ft_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \ ft_tab[3][byte(bi[(n + 3) & 3], 3)] ^ *(k + n); \ } while (0) #define f_nround(bo, bi, k) do {\ f_rn(bo, bi, 0, k); \ f_rn(bo, bi, 1, k); \ f_rn(bo, bi, 2, k); \ f_rn(bo, bi, 3, k); \ k += 4 k += 4; \ } while (0) #define f_lround(bo, bi, k) \ #define f_rl(bo, bi, n, k) do { \ bo[n] = fl_tab[0][byte(bi[n], 0)] ^ \ fl_tab[1][byte(bi[(n + 1) & 3], 1)] ^ \ fl_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \ fl_tab[3][byte(bi[(n + 3) & 3], 3)] ^ *(k + n); \ } while (0) #define f_lround(bo, bi, k) do {\ f_rl(bo, bi, 0, k); \ f_rl(bo, bi, 1, k); \ f_rl(bo, bi, 2, k); \ f_rl(bo, bi, 3, k) f_rl(bo, bi, 3, k); \ } while (0) static void aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) { Loading Loading @@ -357,18 +369,34 @@ static void aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) /* decrypt a block of text */ #define i_nround(bo, bi, k) \ #define i_rn(bo, bi, n, k) do { \ bo[n] = it_tab[0][byte(bi[n], 0)] ^ \ it_tab[1][byte(bi[(n + 3) & 3], 1)] ^ \ it_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \ it_tab[3][byte(bi[(n + 1) & 3], 3)] ^ *(k + n); \ } while (0) #define i_nround(bo, bi, k) do {\ i_rn(bo, bi, 0, k); \ i_rn(bo, bi, 1, k); \ i_rn(bo, bi, 2, k); \ i_rn(bo, bi, 3, k); \ k -= 4 k -= 4; \ } while (0) #define i_rl(bo, bi, n, k) do { \ bo[n] = il_tab[0][byte(bi[n], 0)] ^ \ il_tab[1][byte(bi[(n + 3) & 3], 1)] ^ \ il_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \ il_tab[3][byte(bi[(n + 1) & 3], 3)] ^ *(k + n); \ } while (0) #define i_lround(bo, bi, k) \ #define i_lround(bo, bi, k) do {\ i_rl(bo, bi, 0, k); \ i_rl(bo, bi, 1, k); \ i_rl(bo, bi, 2, k); \ i_rl(bo, bi, 3, k) i_rl(bo, bi, 3, k); \ } while (0) static void aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) { Loading Loading @@ -411,7 +439,6 @@ static void aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) dst[3] = cpu_to_le32(b0[3]); } static struct crypto_alg aes_alg = { .cra_name = "aes", .cra_driver_name = "aes-generic", Loading