Commit e73d340d authored by Herbert Xu's avatar Herbert Xu
Browse files

crypto: ahash - Add init_tfm/exit_tfm



This patch adds the type-safe init_tfm/exit_tfm functions to the
ahash interface.  This is meant to replace the unsafe cra_init and
cra_exit interface.

Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 6779d0e6
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -444,6 +444,14 @@ static int ahash_def_finup(struct ahash_request *req)
	return ahash_def_finup_finish1(req, err);
}

static void crypto_ahash_exit_tfm(struct crypto_tfm *tfm)
{
	struct crypto_ahash *hash = __crypto_ahash_cast(tfm);
	struct ahash_alg *alg = crypto_ahash_alg(hash);

	alg->exit_tfm(hash);
}

static int crypto_ahash_init_tfm(struct crypto_tfm *tfm)
{
	struct crypto_ahash *hash = __crypto_ahash_cast(tfm);
@@ -467,7 +475,10 @@ static int crypto_ahash_init_tfm(struct crypto_tfm *tfm)
		ahash_set_needkey(hash);
	}

	return 0;
	if (alg->exit_tfm)
		tfm->exit = crypto_ahash_exit_tfm;

	return alg->init_tfm ? alg->init_tfm(hash) : 0;
}

static unsigned int crypto_ahash_extsize(struct crypto_alg *alg)
+13 −0
Original line number Diff line number Diff line
@@ -123,6 +123,17 @@ struct ahash_request {
 *	    data so the transformation can continue from this point onward. No
 *	    data processing happens at this point. Driver must not use
 *	    req->result.
 * @init_tfm: Initialize the cryptographic transformation object.
 *	      This function is called only once at the instantiation
 *	      time, right after the transformation context was
 *	      allocated. In case the cryptographic hardware has
 *	      some special requirements which need to be handled
 *	      by software, this function shall check for the precise
 *	      requirement of the transformation and put any software
 *	      fallbacks in place.
 * @exit_tfm: Deinitialize the cryptographic transformation object.
 *	      This is a counterpart to @init_tfm, used to remove
 *	      various changes set in @init_tfm.
 * @halg: see struct hash_alg_common
 */
struct ahash_alg {
@@ -135,6 +146,8 @@ struct ahash_alg {
	int (*import)(struct ahash_request *req, const void *in);
	int (*setkey)(struct crypto_ahash *tfm, const u8 *key,
		      unsigned int keylen);
	int (*init_tfm)(struct crypto_ahash *tfm);
	void (*exit_tfm)(struct crypto_ahash *tfm);

	struct hash_alg_common halg;
};