|
@@ -467,9 +467,6 @@ static int seqiv_aead_decrypt(struct aead_request *req)
|
|
|
aead_request_set_ad(subreq, req->assoclen + ivsize);
|
|
|
|
|
|
scatterwalk_map_and_copy(req->iv, req->src, req->assoclen, ivsize, 0);
|
|
|
- if (req->src != req->dst)
|
|
|
- scatterwalk_map_and_copy(req->iv, req->dst,
|
|
|
- req->assoclen, ivsize, 1);
|
|
|
|
|
|
return crypto_aead_decrypt(subreq);
|
|
|
}
|
|
@@ -516,9 +513,9 @@ static int seqiv_old_aead_init(struct crypto_tfm *tfm)
|
|
|
return err ?: aead_geniv_init(tfm);
|
|
|
}
|
|
|
|
|
|
-static int seqiv_aead_init_common(struct crypto_tfm *tfm, unsigned int reqsize)
|
|
|
+static int seqiv_aead_init_common(struct crypto_aead *geniv,
|
|
|
+ unsigned int reqsize)
|
|
|
{
|
|
|
- struct crypto_aead *geniv = __crypto_aead_cast(tfm);
|
|
|
struct seqiv_aead_ctx *ctx = crypto_aead_ctx(geniv);
|
|
|
int err;
|
|
|
|
|
@@ -541,7 +538,7 @@ static int seqiv_aead_init_common(struct crypto_tfm *tfm, unsigned int reqsize)
|
|
|
if (IS_ERR(ctx->null))
|
|
|
goto out;
|
|
|
|
|
|
- err = aead_geniv_init(tfm);
|
|
|
+ err = aead_geniv_init(crypto_aead_tfm(geniv));
|
|
|
if (err)
|
|
|
goto drop_null;
|
|
|
|
|
@@ -556,19 +553,19 @@ drop_null:
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
-static int seqiv_aead_init(struct crypto_tfm *tfm)
|
|
|
+static int seqiv_aead_init(struct crypto_aead *tfm)
|
|
|
{
|
|
|
return seqiv_aead_init_common(tfm, sizeof(struct aead_request));
|
|
|
}
|
|
|
|
|
|
-static int seqniv_aead_init(struct crypto_tfm *tfm)
|
|
|
+static int seqniv_aead_init(struct crypto_aead *tfm)
|
|
|
{
|
|
|
return seqiv_aead_init_common(tfm, sizeof(struct seqniv_request_ctx));
|
|
|
}
|
|
|
|
|
|
-static void seqiv_aead_exit(struct crypto_tfm *tfm)
|
|
|
+static void seqiv_aead_exit(struct crypto_aead *tfm)
|
|
|
{
|
|
|
- struct seqiv_aead_ctx *ctx = crypto_tfm_ctx(tfm);
|
|
|
+ struct seqiv_aead_ctx *ctx = crypto_aead_ctx(tfm);
|
|
|
|
|
|
crypto_free_aead(ctx->geniv.child);
|
|
|
crypto_put_default_null_skcipher();
|
|
@@ -666,11 +663,11 @@ static int seqiv_aead_create(struct crypto_template *tmpl, struct rtattr **tb)
|
|
|
inst->alg.encrypt = seqiv_aead_encrypt;
|
|
|
inst->alg.decrypt = seqiv_aead_decrypt;
|
|
|
|
|
|
- inst->alg.base.cra_init = seqiv_aead_init;
|
|
|
- inst->alg.base.cra_exit = seqiv_aead_exit;
|
|
|
+ inst->alg.init = seqiv_aead_init;
|
|
|
+ inst->alg.exit = seqiv_aead_exit;
|
|
|
|
|
|
inst->alg.base.cra_ctxsize = sizeof(struct seqiv_aead_ctx);
|
|
|
- inst->alg.base.cra_ctxsize += inst->alg.base.cra_aead.ivsize;
|
|
|
+ inst->alg.base.cra_ctxsize += inst->alg.ivsize;
|
|
|
|
|
|
done:
|
|
|
err = aead_register_instance(tmpl, inst);
|
|
@@ -727,8 +724,15 @@ static int seqniv_create(struct crypto_template *tmpl, struct rtattr **tb)
|
|
|
inst->alg.encrypt = seqniv_aead_encrypt;
|
|
|
inst->alg.decrypt = seqniv_aead_decrypt;
|
|
|
|
|
|
- inst->alg.base.cra_init = seqniv_aead_init;
|
|
|
- inst->alg.base.cra_exit = seqiv_aead_exit;
|
|
|
+ inst->alg.init = seqniv_aead_init;
|
|
|
+ inst->alg.exit = seqiv_aead_exit;
|
|
|
+
|
|
|
+ if ((alg->base.cra_flags & CRYPTO_ALG_AEAD_NEW)) {
|
|
|
+ inst->alg.encrypt = seqiv_aead_encrypt;
|
|
|
+ inst->alg.decrypt = seqiv_aead_decrypt;
|
|
|
+
|
|
|
+ inst->alg.init = seqiv_aead_init;
|
|
|
+ }
|
|
|
|
|
|
inst->alg.base.cra_alignmask |= __alignof__(u32) - 1;
|
|
|
inst->alg.base.cra_ctxsize = sizeof(struct seqiv_aead_ctx);
|