Merge branch 'for_paulus' of master.kernel.org:/pub/scm/linux/kernel/git/galak/powerpc
[pandora-kernel.git] / arch / x86_64 / crypto / aes.c
index 2b5c401..68866fa 100644 (file)
@@ -74,17 +74,14 @@ static inline u8 byte(const u32 x, const unsigned n)
        return x >> (n << 3);
 }
 
-#define u32_in(x) le32_to_cpu(*(const __le32 *)(x))
-
 struct aes_ctx
 {
        u32 key_length;
-       u32 E[60];
-       u32 D[60];
+       u32 buf[120];
 };
 
-#define E_KEY ctx->E
-#define D_KEY ctx->D
+#define E_KEY (&ctx->buf[0])
+#define D_KEY (&ctx->buf[60])
 
 static u8 pow_tab[256] __initdata;
 static u8 log_tab[256] __initdata;
@@ -230,10 +227,11 @@ static void __init gen_tabs(void)
        t ^= E_KEY[8 * i + 7]; E_KEY[8 * i + 15] = t;   \
 }
 
-static int aes_set_key(void *ctx_arg, const u8 *in_key, unsigned int key_len,
-                      u32 *flags)
+static int aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
+                      unsigned int key_len, u32 *flags)
 {
-       struct aes_ctx *ctx = ctx_arg;
+       struct aes_ctx *ctx = crypto_tfm_ctx(tfm);
+       const __le32 *key = (const __le32 *)in_key;
        u32 i, j, t, u, v, w;
 
        if (key_len != 16 && key_len != 24 && key_len != 32) {
@@ -243,10 +241,10 @@ static int aes_set_key(void *ctx_arg, const u8 *in_key, unsigned int key_len,
 
        ctx->key_length = key_len;
 
-       D_KEY[key_len + 24] = E_KEY[0] = u32_in(in_key);
-       D_KEY[key_len + 25] = E_KEY[1] = u32_in(in_key + 4);
-       D_KEY[key_len + 26] = E_KEY[2] = u32_in(in_key + 8);
-       D_KEY[key_len + 27] = E_KEY[3] = u32_in(in_key + 12);
+       D_KEY[key_len + 24] = E_KEY[0] = le32_to_cpu(key[0]);
+       D_KEY[key_len + 25] = E_KEY[1] = le32_to_cpu(key[1]);
+       D_KEY[key_len + 26] = E_KEY[2] = le32_to_cpu(key[2]);
+       D_KEY[key_len + 27] = E_KEY[3] = le32_to_cpu(key[3]);
 
        switch (key_len) {
        case 16:
@@ -256,17 +254,17 @@ static int aes_set_key(void *ctx_arg, const u8 *in_key, unsigned int key_len,
                break;
 
        case 24:
-               E_KEY[4] = u32_in(in_key + 16);
-               t = E_KEY[5] = u32_in(in_key + 20);
+               E_KEY[4] = le32_to_cpu(key[4]);
+               t = E_KEY[5] = le32_to_cpu(key[5]);
                for (i = 0; i < 8; ++i)
                        loop6 (i);
                break;
 
        case 32:
-               E_KEY[4] = u32_in(in_key + 16);
-               E_KEY[5] = u32_in(in_key + 20);
-               E_KEY[6] = u32_in(in_key + 24);
-               t = E_KEY[7] = u32_in(in_key + 28);
+               E_KEY[4] = le32_to_cpu(key[4]);
+               E_KEY[5] = le32_to_cpu(key[5]);
+               E_KEY[6] = le32_to_cpu(key[6]);
+               t = E_KEY[7] = le32_to_cpu(key[7]);
                for (i = 0; i < 7; ++i)
                        loop8(i);
                break;
@@ -285,11 +283,23 @@ static int aes_set_key(void *ctx_arg, const u8 *in_key, unsigned int key_len,
        return 0;
 }
 
-extern void aes_encrypt(void *ctx_arg, u8 *out, const u8 *in);
-extern void aes_decrypt(void *ctx_arg, u8 *out, const u8 *in);
+asmlinkage void aes_enc_blk(struct crypto_tfm *tfm, u8 *out, const u8 *in);
+asmlinkage void aes_dec_blk(struct crypto_tfm *tfm, u8 *out, const u8 *in);
+
+static void aes_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
+{
+       aes_enc_blk(tfm, dst, src);
+}
+
+static void aes_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
+{
+       aes_dec_blk(tfm, dst, src);
+}
 
 static struct crypto_alg aes_alg = {
        .cra_name               =       "aes",
+       .cra_driver_name        =       "aes-x86_64",
+       .cra_priority           =       200,
        .cra_flags              =       CRYPTO_ALG_TYPE_CIPHER,
        .cra_blocksize          =       AES_BLOCK_SIZE,
        .cra_ctxsize            =       sizeof(struct aes_ctx),
@@ -322,3 +332,4 @@ module_exit(aes_fini);
 
 MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("aes");