aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crypto/shash.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/crypto/shash.c b/crypto/shash.c
index 7713b520bc98..98b7f46ca1ed 100644
--- a/crypto/shash.c
+++ b/crypto/shash.c
@@ -183,14 +183,16 @@ int crypto_shash_digest(struct shash_desc *desc, const u8 *data,
183} 183}
184EXPORT_SYMBOL_GPL(crypto_shash_digest); 184EXPORT_SYMBOL_GPL(crypto_shash_digest);
185 185
186static int shash_no_export(struct shash_desc *desc, void *out) 186static int shash_default_export(struct shash_desc *desc, void *out)
187{ 187{
188 return -ENOSYS; 188 memcpy(out, shash_desc_ctx(desc), crypto_shash_descsize(desc->tfm));
189 return 0;
189} 190}
190 191
191static int shash_no_import(struct shash_desc *desc, const void *in) 192static int shash_default_import(struct shash_desc *desc, const void *in)
192{ 193{
193 return -ENOSYS; 194 memcpy(shash_desc_ctx(desc), in, crypto_shash_descsize(desc->tfm));
195 return 0;
194} 196}
195 197
196static int shash_async_setkey(struct crypto_ahash *tfm, const u8 *key, 198static int shash_async_setkey(struct crypto_ahash *tfm, const u8 *key,
@@ -563,10 +565,11 @@ static int shash_prepare_alg(struct shash_alg *alg)
563 alg->finup = shash_finup_unaligned; 565 alg->finup = shash_finup_unaligned;
564 if (!alg->digest) 566 if (!alg->digest)
565 alg->digest = shash_digest_unaligned; 567 alg->digest = shash_digest_unaligned;
566 if (!alg->import) 568 if (!alg->export) {
567 alg->import = shash_no_import; 569 alg->export = shash_default_export;
568 if (!alg->export) 570 alg->import = shash_default_import;
569 alg->export = shash_no_export; 571 alg->statesize = alg->descsize;
572 }
570 if (!alg->setkey) 573 if (!alg->setkey)
571 alg->setkey = shash_no_setkey; 574 alg->setkey = shash_no_setkey;
572 575