diff options
| author | Herbert Xu <herbert@gondor.apana.org.au> | 2009-07-22 12:37:06 +0800 | 
|---|---|---|
| committer | Herbert Xu <herbert@gondor.apana.org.au> | 2009-07-22 14:38:13 +0800 | 
| commit | f592682f9fca18d336ac068a1abc8507b4a1d936 (patch) | |
| tree | 4f50efe420d0ecf523adff5301aaff014c357070 /crypto/shash.c | |
| parent | 9fadfd1adff28a8895de8df9e8a778c44958840f (diff) | |
| download | olio-linux-3.10-f592682f9fca18d336ac068a1abc8507b4a1d936.tar.xz olio-linux-3.10-f592682f9fca18d336ac068a1abc8507b4a1d936.zip  | |
crypto: shash - Require all algorithms to support export/import
This patch provides a default export/import function for all
shash algorithms.  It simply copies the descriptor context as
is done by sha1_generic.
This in essence means that all existing shash algorithms now
support export/import.  This is something that will be depended
upon in implementations such as hmac.  Therefore all new shash
and ahash implementations must support export/import.
For those that cannot obtain a partial result, padlock-sha's
fallback model should be used so that a partial result is always
available.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/shash.c')
| -rw-r--r-- | crypto/shash.c | 19 | 
1 files changed, 11 insertions, 8 deletions
diff --git a/crypto/shash.c b/crypto/shash.c index 7713b520bc9..98b7f46ca1e 100644 --- a/crypto/shash.c +++ b/crypto/shash.c @@ -183,14 +183,16 @@ int crypto_shash_digest(struct shash_desc *desc, const u8 *data,  }  EXPORT_SYMBOL_GPL(crypto_shash_digest); -static int shash_no_export(struct shash_desc *desc, void *out) +static int shash_default_export(struct shash_desc *desc, void *out)  { -	return -ENOSYS; +	memcpy(out, shash_desc_ctx(desc), crypto_shash_descsize(desc->tfm)); +	return 0;  } -static int shash_no_import(struct shash_desc *desc, const void *in) +static int shash_default_import(struct shash_desc *desc, const void *in)  { -	return -ENOSYS; +	memcpy(shash_desc_ctx(desc), in, crypto_shash_descsize(desc->tfm)); +	return 0;  }  static int shash_async_setkey(struct crypto_ahash *tfm, const u8 *key, @@ -563,10 +565,11 @@ static int shash_prepare_alg(struct shash_alg *alg)  		alg->finup = shash_finup_unaligned;  	if (!alg->digest)  		alg->digest = shash_digest_unaligned; -	if (!alg->import) -		alg->import = shash_no_import; -	if (!alg->export) -		alg->export = shash_no_export; +	if (!alg->export) { +		alg->export = shash_default_export; +		alg->import = shash_default_import; +		alg->statesize = alg->descsize; +	}  	if (!alg->setkey)  		alg->setkey = shash_no_setkey;  |