#include <crypto/scatterwalk.h>
#include <crypto/xts.h>
#include <linux/module.h>
-#include "aes-cipher.h"
MODULE_AUTHOR("Ard Biesheuvel <ard.biesheuvel@linaro.org>");
MODULE_DESCRIPTION("Bit sliced AES using NEON instructions");
struct aesbs_cbc_ctx {
struct aesbs_ctx key;
- struct crypto_aes_ctx fallback;
+ struct aes_enckey fallback;
};
struct aesbs_xts_ctx {
struct aesbs_ctx key;
- struct crypto_aes_ctx fallback;
- struct crypto_aes_ctx tweak_key;
+ struct aes_key fallback;
+ struct aes_enckey tweak_key;
};
static int aesbs_setkey(struct crypto_skcipher *tfm, const u8 *in_key,
struct aesbs_cbc_ctx *ctx = crypto_skcipher_ctx(tfm);
int err;
- err = aes_expandkey(&ctx->fallback, in_key, key_len);
+ err = aes_prepareenckey(&ctx->fallback, in_key, key_len);
if (err)
return err;
ctx->key.rounds = 6 + key_len / 4;
+ /*
+ * Note: this assumes that the arm implementation of the AES library
+ * stores the standard round keys in k.rndkeys.
+ */
kernel_neon_begin();
- aesbs_convert_key(ctx->key.rk, ctx->fallback.key_enc, ctx->key.rounds);
+ aesbs_convert_key(ctx->key.rk, ctx->fallback.k.rndkeys,
+ ctx->key.rounds);
kernel_neon_end();
return 0;
do {
crypto_xor_cpy(dst, src, prev, AES_BLOCK_SIZE);
- __aes_arm_encrypt(ctx->fallback.key_enc,
- ctx->key.rounds, dst, dst);
+ aes_encrypt(&ctx->fallback, dst, dst);
prev = dst;
src += AES_BLOCK_SIZE;
dst += AES_BLOCK_SIZE;
return err;
key_len /= 2;
- err = aes_expandkey(&ctx->fallback, in_key, key_len);
+ err = aes_preparekey(&ctx->fallback, in_key, key_len);
if (err)
return err;
- err = aes_expandkey(&ctx->tweak_key, in_key + key_len, key_len);
+ err = aes_prepareenckey(&ctx->tweak_key, in_key + key_len, key_len);
if (err)
return err;
if (err)
return err;
- __aes_arm_encrypt(ctx->tweak_key.key_enc, rounds, walk.iv, walk.iv);
+ aes_encrypt(&ctx->tweak_key, walk.iv, walk.iv);
while (walk.nbytes >= AES_BLOCK_SIZE) {
unsigned int blocks = walk.nbytes / AES_BLOCK_SIZE;
crypto_xor(buf, req->iv, AES_BLOCK_SIZE);
if (encrypt)
- __aes_arm_encrypt(ctx->fallback.key_enc, rounds, buf, buf);
+ aes_encrypt(&ctx->fallback, buf, buf);
else
- __aes_arm_decrypt(ctx->fallback.key_dec, rounds, buf, buf);
+ aes_decrypt(&ctx->fallback, buf, buf);
crypto_xor(buf, req->iv, AES_BLOCK_SIZE);