]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - crypto/khazad.c
[CRYPTO] khazad: Use 32-bit reads on key
[karo-tx-linux.git] / crypto / khazad.c
index 6809210362c1ee97a938be5b90beb30362094960..5b8dc9a2d374f91e715087e12b274deec5e29ebf 100644 (file)
@@ -758,7 +758,7 @@ static int khazad_setkey(void *ctx_arg, const u8 *in_key,
                        unsigned int key_len, u32 *flags)
 {
        struct khazad_ctx *ctx = ctx_arg;
-       const __be64 *key = (const __be64 *)in_key;
+       const __be32 *key = (const __be32 *)in_key;
        int r;
        const u64 *S = T7;
        u64 K2, K1;
@@ -769,8 +769,9 @@ static int khazad_setkey(void *ctx_arg, const u8 *in_key,
                return -EINVAL;
        }
 
-       K2 = be64_to_cpu(key[0]);
-       K1 = be64_to_cpu(key[1]);
+       /* key is supposed to be 32-bit aligned */
+       K2 = ((u64)be32_to_cpu(key[0]) << 32) | be32_to_cpu(key[1]);
+       K1 = ((u64)be32_to_cpu(key[2]) << 32) | be32_to_cpu(key[3]);
 
        /* setup the encrypt key */
        for (r = 0; r <= KHAZAD_ROUNDS; r++) {
@@ -857,6 +858,7 @@ static struct crypto_alg khazad_alg = {
        .cra_flags              =       CRYPTO_ALG_TYPE_CIPHER,
        .cra_blocksize          =       KHAZAD_BLOCK_SIZE,
        .cra_ctxsize            =       sizeof (struct khazad_ctx),
+       .cra_alignmask          =       7,
        .cra_module             =       THIS_MODULE,
        .cra_list               =       LIST_HEAD_INIT(khazad_alg.cra_list),
        .cra_u                  =       { .cipher = {