6
6
* Copyright (c) 2007 Nokia Siemens Networks
7
7
* Copyright (c) 2008 Herbert Xu <herbert@gondor.apana.org.au>
9
* Updated RFC4106 AES-GCM testing.
10
* Authors: Aidan O'Mahony (aidan.o.mahony@intel.com)
11
* Adrian Hoban <adrian.hoban@intel.com>
12
* Gabriele Paoloni <gabriele.paoloni@intel.com>
13
* Tadeusz Struk (tadeusz.struk@intel.com)
14
* Copyright (c) 2010, Intel Corporation.
9
16
* This program is free software; you can redistribute it and/or modify it
10
17
* under the terms of the GNU General Public License as published by the Free
11
18
* Software Foundation; either version 2 of the License, or (at your option)
153
171
free_page((unsigned long)buf[i]);
174
static int do_one_async_hash_op(struct ahash_request *req,
175
struct tcrypt_result *tr,
178
if (ret == -EINPROGRESS || ret == -EBUSY) {
179
ret = wait_for_completion_interruptible(&tr->completion);
182
INIT_COMPLETION(tr->completion);
156
187
static int test_hash(struct crypto_ahash *tfm, struct hash_testvec *template,
188
unsigned int tcount, bool use_digest)
159
190
const char *algo = crypto_tfm_alg_driver_name(crypto_ahash_tfm(tfm));
160
191
unsigned int i, j, k, temp;
208
239
ahash_request_set_crypt(req, sg, result, template[i].psize);
209
ret = crypto_ahash_digest(req);
215
ret = wait_for_completion_interruptible(
216
&tresult.completion);
217
if (!ret && !(ret = tresult.err)) {
218
INIT_COMPLETION(tresult.completion);
223
printk(KERN_ERR "alg: hash: digest failed on test %d "
224
"for %s: ret=%d\n", j, algo, -ret);
241
ret = do_one_async_hash_op(req, &tresult,
242
crypto_ahash_digest(req));
244
pr_err("alg: hash: digest failed on test %d "
245
"for %s: ret=%d\n", j, algo, -ret);
249
ret = do_one_async_hash_op(req, &tresult,
250
crypto_ahash_init(req));
252
pr_err("alt: hash: init failed on test %d "
253
"for %s: ret=%d\n", j, algo, -ret);
256
ret = do_one_async_hash_op(req, &tresult,
257
crypto_ahash_update(req));
259
pr_err("alt: hash: update failed on test %d "
260
"for %s: ret=%d\n", j, algo, -ret);
263
ret = do_one_async_hash_op(req, &tresult,
264
crypto_ahash_final(req));
266
pr_err("alt: hash: final failed on test %d "
267
"for %s: ret=%d\n", j, algo, -ret);
228
272
if (memcmp(result, template[i].digest,
1402
1446
return PTR_ERR(tfm);
1405
err = test_hash(tfm, desc->suite.hash.vecs, desc->suite.hash.count);
1449
err = test_hash(tfm, desc->suite.hash.vecs,
1450
desc->suite.hash.count, true);
1452
err = test_hash(tfm, desc->suite.hash.vecs,
1453
desc->suite.hash.count, false);
1407
1455
crypto_free_ahash(tfm);
1528
static int alg_test_null(const struct alg_test_desc *desc,
1529
const char *driver, u32 type, u32 mask)
1480
1534
/* Please keep this list sorted by algorithm name. */
1481
1535
static const struct alg_test_desc alg_test_descs[] = {
1537
.alg = "__driver-cbc-aes-aesni",
1538
.test = alg_test_null,
1552
.alg = "__driver-ecb-aes-aesni",
1553
.test = alg_test_null,
1567
.alg = "__ghash-pclmulqdqni",
1568
.test = alg_test_null,
1483
1576
.alg = "ansi_cprng",
1484
1577
.test = alg_test_cprng,
1485
1578
.fips_allowed = 1,
1719
.alg = "cryptd(__driver-ecb-aes-aesni)",
1720
.test = alg_test_null,
1734
.alg = "cryptd(__ghash-pclmulqdqni)",
1735
.test = alg_test_null,
1626
1743
.alg = "ctr(aes)",
1627
1744
.test = alg_test_skcipher,
1628
1745
.fips_allowed = 1,
2252
.alg = "rfc4106(gcm(aes))",
2253
.test = alg_test_aead,
2257
.vecs = aes_gcm_rfc4106_enc_tv_template,
2258
.count = AES_GCM_4106_ENC_TEST_VECTORS
2261
.vecs = aes_gcm_rfc4106_dec_tv_template,
2262
.count = AES_GCM_4106_DEC_TEST_VECTORS
2111
2269
.alg = "rfc4309(ccm(aes))",
2112
2270
.test = alg_test_aead,
2113
2271
.fips_allowed = 1,