|
@@ -146,29 +146,6 @@ out:
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-static int eseqiv_givencrypt_first(struct skcipher_givcrypt_request *req)
|
|
|
-{
|
|
|
- struct crypto_ablkcipher *geniv = skcipher_givcrypt_reqtfm(req);
|
|
|
- struct eseqiv_ctx *ctx = crypto_ablkcipher_ctx(geniv);
|
|
|
- int err = 0;
|
|
|
-
|
|
|
- spin_lock_bh(&ctx->lock);
|
|
|
- if (crypto_ablkcipher_crt(geniv)->givencrypt != eseqiv_givencrypt_first)
|
|
|
- goto unlock;
|
|
|
-
|
|
|
- crypto_ablkcipher_crt(geniv)->givencrypt = eseqiv_givencrypt;
|
|
|
- err = crypto_rng_get_bytes(crypto_default_rng, ctx->salt,
|
|
|
- crypto_ablkcipher_ivsize(geniv));
|
|
|
-
|
|
|
-unlock:
|
|
|
- spin_unlock_bh(&ctx->lock);
|
|
|
-
|
|
|
- if (err)
|
|
|
- return err;
|
|
|
-
|
|
|
- return eseqiv_givencrypt(req);
|
|
|
-}
|
|
|
-
|
|
|
static int eseqiv_init(struct crypto_tfm *tfm)
|
|
|
{
|
|
|
struct crypto_ablkcipher *geniv = __crypto_ablkcipher_cast(tfm);
|
|
@@ -198,7 +175,9 @@ static int eseqiv_init(struct crypto_tfm *tfm)
|
|
|
tfm->crt_ablkcipher.reqsize = reqsize +
|
|
|
sizeof(struct ablkcipher_request);
|
|
|
|
|
|
- return skcipher_geniv_init(tfm);
|
|
|
+ return crypto_rng_get_bytes(crypto_default_rng, ctx->salt,
|
|
|
+ crypto_ablkcipher_ivsize(geniv)) ?:
|
|
|
+ skcipher_geniv_init(tfm);
|
|
|
}
|
|
|
|
|
|
static struct crypto_template eseqiv_tmpl;
|
|
@@ -220,7 +199,7 @@ static struct crypto_instance *eseqiv_alloc(struct rtattr **tb)
|
|
|
if (inst->alg.cra_ablkcipher.ivsize != inst->alg.cra_blocksize)
|
|
|
goto free_inst;
|
|
|
|
|
|
- inst->alg.cra_ablkcipher.givencrypt = eseqiv_givencrypt_first;
|
|
|
+ inst->alg.cra_ablkcipher.givencrypt = eseqiv_givencrypt;
|
|
|
|
|
|
inst->alg.cra_init = eseqiv_init;
|
|
|
inst->alg.cra_exit = skcipher_geniv_exit;
|