summaryrefslogtreecommitdiffstats
path: root/freed-ora/current/f13/crypto-add-async-hash-testing.patch
diff options
context:
space:
mode:
Diffstat (limited to 'freed-ora/current/f13/crypto-add-async-hash-testing.patch')
-rw-r--r--freed-ora/current/f13/crypto-add-async-hash-testing.patch111
1 files changed, 111 insertions, 0 deletions
diff --git a/freed-ora/current/f13/crypto-add-async-hash-testing.patch b/freed-ora/current/f13/crypto-add-async-hash-testing.patch
new file mode 100644
index 000000000..8df0ad44f
--- /dev/null
+++ b/freed-ora/current/f13/crypto-add-async-hash-testing.patch
@@ -0,0 +1,111 @@
+From e45009229be6a7fae49bdfa3459905668c0b0fb1 Mon Sep 17 00:00:00 2001
+From: David S. Miller <davem@davemloft.net>
+Date: Wed, 19 May 2010 14:12:03 +1000
+Subject: crypto: testmgr - Add testing for async hashing and update/final
+
+Extend testmgr such that it tests async hash algorithms,
+and that for both sync and async hashes it tests both
+->digest() and ->update()/->final() sequences.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+---
+ crypto/testmgr.c | 66 +++++++++++++++++++++++++++++++++++++++--------------
+ 1 files changed, 48 insertions(+), 18 deletions(-)
+
+diff --git a/crypto/testmgr.c b/crypto/testmgr.c
+index c494d76..5c8aaa0 100644
+--- a/crypto/testmgr.c
++++ b/crypto/testmgr.c
+@@ -153,8 +153,21 @@ static void testmgr_free_buf(char *buf[XBUFSIZE])
+ free_page((unsigned long)buf[i]);
+ }
+
++static int do_one_async_hash_op(struct ahash_request *req,
++ struct tcrypt_result *tr,
++ int ret)
++{
++ if (ret == -EINPROGRESS || ret == -EBUSY) {
++ ret = wait_for_completion_interruptible(&tr->completion);
++ if (!ret)
++ ret = tr->err;
++ INIT_COMPLETION(tr->completion);
++ }
++ return ret;
++}
++
+ static int test_hash(struct crypto_ahash *tfm, struct hash_testvec *template,
+- unsigned int tcount)
++ unsigned int tcount, bool use_digest)
+ {
+ const char *algo = crypto_tfm_alg_driver_name(crypto_ahash_tfm(tfm));
+ unsigned int i, j, k, temp;
+@@ -206,23 +219,36 @@ static int test_hash(struct crypto_ahash *tfm, struct hash_testvec *template,
+ }
+
+ ahash_request_set_crypt(req, sg, result, template[i].psize);
+- ret = crypto_ahash_digest(req);
+- switch (ret) {
+- case 0:
+- break;
+- case -EINPROGRESS:
+- case -EBUSY:
+- ret = wait_for_completion_interruptible(
+- &tresult.completion);
+- if (!ret && !(ret = tresult.err)) {
+- INIT_COMPLETION(tresult.completion);
+- break;
++ if (use_digest) {
++ ret = do_one_async_hash_op(req, &tresult,
++ crypto_ahash_digest(req));
++ if (ret) {
++ pr_err("alg: hash: digest failed on test %d "
++ "for %s: ret=%d\n", j, algo, -ret);
++ goto out;
++ }
++ } else {
++ ret = do_one_async_hash_op(req, &tresult,
++ crypto_ahash_init(req));
++ if (ret) {
++ pr_err("alt: hash: init failed on test %d "
++ "for %s: ret=%d\n", j, algo, -ret);
++ goto out;
++ }
++ ret = do_one_async_hash_op(req, &tresult,
++ crypto_ahash_update(req));
++ if (ret) {
++ pr_err("alt: hash: update failed on test %d "
++ "for %s: ret=%d\n", j, algo, -ret);
++ goto out;
++ }
++ ret = do_one_async_hash_op(req, &tresult,
++ crypto_ahash_final(req));
++ if (ret) {
++ pr_err("alt: hash: final failed on test %d "
++ "for %s: ret=%d\n", j, algo, -ret);
++ goto out;
+ }
+- /* fall through */
+- default:
+- printk(KERN_ERR "alg: hash: digest failed on test %d "
+- "for %s: ret=%d\n", j, algo, -ret);
+- goto out;
+ }
+
+ if (memcmp(result, template[i].digest,
+@@ -1402,7 +1428,11 @@ static int alg_test_hash(const struct alg_test_desc *desc, const char *driver,
+ return PTR_ERR(tfm);
+ }
+
+- err = test_hash(tfm, desc->suite.hash.vecs, desc->suite.hash.count);
++ err = test_hash(tfm, desc->suite.hash.vecs,
++ desc->suite.hash.count, true);
++ if (!err)
++ err = test_hash(tfm, desc->suite.hash.vecs,
++ desc->suite.hash.count, false);
+
+ crypto_free_ahash(tfm);
+ return err;
+--
+1.7.0.1
+
OpenPOWER on IntegriCloud