xref: /openbmc/linux/crypto/tcrypt.c (revision 78700c0a)
1 /*
2  * Quick & dirty crypto testing module.
3  *
4  * This will only exist until we have a better testing mechanism
5  * (e.g. a char device).
6  *
7  * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
8  * Copyright (c) 2002 Jean-Francois Dive <jef@linuxbe.org>
9  * Copyright (c) 2007 Nokia Siemens Networks
10  *
11  * Updated RFC4106 AES-GCM testing.
12  *    Authors: Aidan O'Mahony (aidan.o.mahony@intel.com)
13  *             Adrian Hoban <adrian.hoban@intel.com>
14  *             Gabriele Paoloni <gabriele.paoloni@intel.com>
15  *             Tadeusz Struk (tadeusz.struk@intel.com)
16  *             Copyright (c) 2010, Intel Corporation.
17  *
18  * This program is free software; you can redistribute it and/or modify it
19  * under the terms of the GNU General Public License as published by the Free
20  * Software Foundation; either version 2 of the License, or (at your option)
21  * any later version.
22  *
23  */
24 
25 #include <crypto/aead.h>
26 #include <crypto/hash.h>
27 #include <linux/err.h>
28 #include <linux/fips.h>
29 #include <linux/init.h>
30 #include <linux/gfp.h>
31 #include <linux/module.h>
32 #include <linux/scatterlist.h>
33 #include <linux/string.h>
34 #include <linux/moduleparam.h>
35 #include <linux/jiffies.h>
36 #include <linux/timex.h>
37 #include <linux/interrupt.h>
38 #include "tcrypt.h"
39 
40 /*
41  * Need slab memory for testing (size in number of pages).
42  */
43 #define TVMEMSIZE	4
44 
45 /*
46 * Used by test_cipher_speed()
47 */
48 #define ENCRYPT 1
49 #define DECRYPT 0
50 
51 #define MAX_DIGEST_SIZE		64
52 
53 /*
54  * return a string with the driver name
55  */
56 #define get_driver_name(tfm_type, tfm) crypto_tfm_alg_driver_name(tfm_type ## _tfm(tfm))
57 
58 /*
59  * Used by test_cipher_speed()
60  */
61 static unsigned int sec;
62 
63 static char *alg = NULL;
64 static u32 type;
65 static u32 mask;
66 static int mode;
67 static char *tvmem[TVMEMSIZE];
68 
69 static char *check[] = {
70 	"des", "md5", "des3_ede", "rot13", "sha1", "sha224", "sha256",
71 	"blowfish", "twofish", "serpent", "sha384", "sha512", "md4", "aes",
72 	"cast6", "arc4", "michael_mic", "deflate", "crc32c", "tea", "xtea",
73 	"khazad", "wp512", "wp384", "wp256", "tnepres", "xeta",  "fcrypt",
74 	"camellia", "seed", "salsa20", "rmd128", "rmd160", "rmd256", "rmd320",
75 	"lzo", "cts", "zlib", NULL
76 };
77 
78 struct tcrypt_result {
79 	struct completion completion;
80 	int err;
81 };
82 
83 static void tcrypt_complete(struct crypto_async_request *req, int err)
84 {
85 	struct tcrypt_result *res = req->data;
86 
87 	if (err == -EINPROGRESS)
88 		return;
89 
90 	res->err = err;
91 	complete(&res->completion);
92 }
93 
94 static int test_cipher_jiffies(struct blkcipher_desc *desc, int enc,
95 			       struct scatterlist *sg, int blen, int secs)
96 {
97 	unsigned long start, end;
98 	int bcount;
99 	int ret;
100 
101 	for (start = jiffies, end = start + secs * HZ, bcount = 0;
102 	     time_before(jiffies, end); bcount++) {
103 		if (enc)
104 			ret = crypto_blkcipher_encrypt(desc, sg, sg, blen);
105 		else
106 			ret = crypto_blkcipher_decrypt(desc, sg, sg, blen);
107 
108 		if (ret)
109 			return ret;
110 	}
111 
112 	printk("%d operations in %d seconds (%ld bytes)\n",
113 	       bcount, secs, (long)bcount * blen);
114 	return 0;
115 }
116 
117 static int test_cipher_cycles(struct blkcipher_desc *desc, int enc,
118 			      struct scatterlist *sg, int blen)
119 {
120 	unsigned long cycles = 0;
121 	int ret = 0;
122 	int i;
123 
124 	local_irq_disable();
125 
126 	/* Warm-up run. */
127 	for (i = 0; i < 4; i++) {
128 		if (enc)
129 			ret = crypto_blkcipher_encrypt(desc, sg, sg, blen);
130 		else
131 			ret = crypto_blkcipher_decrypt(desc, sg, sg, blen);
132 
133 		if (ret)
134 			goto out;
135 	}
136 
137 	/* The real thing. */
138 	for (i = 0; i < 8; i++) {
139 		cycles_t start, end;
140 
141 		start = get_cycles();
142 		if (enc)
143 			ret = crypto_blkcipher_encrypt(desc, sg, sg, blen);
144 		else
145 			ret = crypto_blkcipher_decrypt(desc, sg, sg, blen);
146 		end = get_cycles();
147 
148 		if (ret)
149 			goto out;
150 
151 		cycles += end - start;
152 	}
153 
154 out:
155 	local_irq_enable();
156 
157 	if (ret == 0)
158 		printk("1 operation in %lu cycles (%d bytes)\n",
159 		       (cycles + 4) / 8, blen);
160 
161 	return ret;
162 }
163 
164 static inline int do_one_aead_op(struct aead_request *req, int ret)
165 {
166 	if (ret == -EINPROGRESS || ret == -EBUSY) {
167 		struct tcrypt_result *tr = req->base.data;
168 
169 		ret = wait_for_completion_interruptible(&tr->completion);
170 		if (!ret)
171 			ret = tr->err;
172 		reinit_completion(&tr->completion);
173 	}
174 
175 	return ret;
176 }
177 
178 static int test_aead_jiffies(struct aead_request *req, int enc,
179 				int blen, int secs)
180 {
181 	unsigned long start, end;
182 	int bcount;
183 	int ret;
184 
185 	for (start = jiffies, end = start + secs * HZ, bcount = 0;
186 	     time_before(jiffies, end); bcount++) {
187 		if (enc)
188 			ret = do_one_aead_op(req, crypto_aead_encrypt(req));
189 		else
190 			ret = do_one_aead_op(req, crypto_aead_decrypt(req));
191 
192 		if (ret)
193 			return ret;
194 	}
195 
196 	printk("%d operations in %d seconds (%ld bytes)\n",
197 	       bcount, secs, (long)bcount * blen);
198 	return 0;
199 }
200 
201 static int test_aead_cycles(struct aead_request *req, int enc, int blen)
202 {
203 	unsigned long cycles = 0;
204 	int ret = 0;
205 	int i;
206 
207 	local_irq_disable();
208 
209 	/* Warm-up run. */
210 	for (i = 0; i < 4; i++) {
211 		if (enc)
212 			ret = do_one_aead_op(req, crypto_aead_encrypt(req));
213 		else
214 			ret = do_one_aead_op(req, crypto_aead_decrypt(req));
215 
216 		if (ret)
217 			goto out;
218 	}
219 
220 	/* The real thing. */
221 	for (i = 0; i < 8; i++) {
222 		cycles_t start, end;
223 
224 		start = get_cycles();
225 		if (enc)
226 			ret = do_one_aead_op(req, crypto_aead_encrypt(req));
227 		else
228 			ret = do_one_aead_op(req, crypto_aead_decrypt(req));
229 		end = get_cycles();
230 
231 		if (ret)
232 			goto out;
233 
234 		cycles += end - start;
235 	}
236 
237 out:
238 	local_irq_enable();
239 
240 	if (ret == 0)
241 		printk("1 operation in %lu cycles (%d bytes)\n",
242 		       (cycles + 4) / 8, blen);
243 
244 	return ret;
245 }
246 
247 static u32 block_sizes[] = { 16, 64, 256, 1024, 8192, 0 };
248 static u32 aead_sizes[] = { 16, 64, 256, 512, 1024, 2048, 4096, 8192, 0 };
249 
250 #define XBUFSIZE 8
251 #define MAX_IVLEN 32
252 
253 static int testmgr_alloc_buf(char *buf[XBUFSIZE])
254 {
255 	int i;
256 
257 	for (i = 0; i < XBUFSIZE; i++) {
258 		buf[i] = (void *)__get_free_page(GFP_KERNEL);
259 		if (!buf[i])
260 			goto err_free_buf;
261 	}
262 
263 	return 0;
264 
265 err_free_buf:
266 	while (i-- > 0)
267 		free_page((unsigned long)buf[i]);
268 
269 	return -ENOMEM;
270 }
271 
272 static void testmgr_free_buf(char *buf[XBUFSIZE])
273 {
274 	int i;
275 
276 	for (i = 0; i < XBUFSIZE; i++)
277 		free_page((unsigned long)buf[i]);
278 }
279 
280 static void sg_init_aead(struct scatterlist *sg, char *xbuf[XBUFSIZE],
281 			unsigned int buflen)
282 {
283 	int np = (buflen + PAGE_SIZE - 1)/PAGE_SIZE;
284 	int k, rem;
285 
286 	if (np > XBUFSIZE) {
287 		rem = PAGE_SIZE;
288 		np = XBUFSIZE;
289 	} else {
290 		rem = buflen % PAGE_SIZE;
291 	}
292 
293 	sg_init_table(sg, np + 1);
294 	np--;
295 	for (k = 0; k < np; k++)
296 		sg_set_buf(&sg[k + 1], xbuf[k], PAGE_SIZE);
297 
298 	sg_set_buf(&sg[k + 1], xbuf[k], rem);
299 }
300 
301 static void test_aead_speed(const char *algo, int enc, unsigned int secs,
302 			    struct aead_speed_template *template,
303 			    unsigned int tcount, u8 authsize,
304 			    unsigned int aad_size, u8 *keysize)
305 {
306 	unsigned int i, j;
307 	struct crypto_aead *tfm;
308 	int ret = -ENOMEM;
309 	const char *key;
310 	struct aead_request *req;
311 	struct scatterlist *sg;
312 	struct scatterlist *sgout;
313 	const char *e;
314 	void *assoc;
315 	char *iv;
316 	char *xbuf[XBUFSIZE];
317 	char *xoutbuf[XBUFSIZE];
318 	char *axbuf[XBUFSIZE];
319 	unsigned int *b_size;
320 	unsigned int iv_len;
321 	struct tcrypt_result result;
322 
323 	iv = kzalloc(MAX_IVLEN, GFP_KERNEL);
324 	if (!iv)
325 		return;
326 
327 	if (aad_size >= PAGE_SIZE) {
328 		pr_err("associate data length (%u) too big\n", aad_size);
329 		goto out_noxbuf;
330 	}
331 
332 	if (enc == ENCRYPT)
333 		e = "encryption";
334 	else
335 		e = "decryption";
336 
337 	if (testmgr_alloc_buf(xbuf))
338 		goto out_noxbuf;
339 	if (testmgr_alloc_buf(axbuf))
340 		goto out_noaxbuf;
341 	if (testmgr_alloc_buf(xoutbuf))
342 		goto out_nooutbuf;
343 
344 	sg = kmalloc(sizeof(*sg) * 9 * 2, GFP_KERNEL);
345 	if (!sg)
346 		goto out_nosg;
347 	sgout = &sg[9];
348 
349 	tfm = crypto_alloc_aead(algo, 0, 0);
350 
351 	if (IS_ERR(tfm)) {
352 		pr_err("alg: aead: Failed to load transform for %s: %ld\n", algo,
353 		       PTR_ERR(tfm));
354 		goto out_notfm;
355 	}
356 
357 	init_completion(&result.completion);
358 	printk(KERN_INFO "\ntesting speed of %s (%s) %s\n", algo,
359 			get_driver_name(crypto_aead, tfm), e);
360 
361 	req = aead_request_alloc(tfm, GFP_KERNEL);
362 	if (!req) {
363 		pr_err("alg: aead: Failed to allocate request for %s\n",
364 		       algo);
365 		goto out_noreq;
366 	}
367 
368 	aead_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
369 				  tcrypt_complete, &result);
370 
371 	i = 0;
372 	do {
373 		b_size = aead_sizes;
374 		do {
375 			assoc = axbuf[0];
376 			memset(assoc, 0xff, aad_size);
377 
378 			if ((*keysize + *b_size) > TVMEMSIZE * PAGE_SIZE) {
379 				pr_err("template (%u) too big for tvmem (%lu)\n",
380 				       *keysize + *b_size,
381 					TVMEMSIZE * PAGE_SIZE);
382 				goto out;
383 			}
384 
385 			key = tvmem[0];
386 			for (j = 0; j < tcount; j++) {
387 				if (template[j].klen == *keysize) {
388 					key = template[j].key;
389 					break;
390 				}
391 			}
392 			ret = crypto_aead_setkey(tfm, key, *keysize);
393 			ret = crypto_aead_setauthsize(tfm, authsize);
394 
395 			iv_len = crypto_aead_ivsize(tfm);
396 			if (iv_len)
397 				memset(iv, 0xff, iv_len);
398 
399 			crypto_aead_clear_flags(tfm, ~0);
400 			printk(KERN_INFO "test %u (%d bit key, %d byte blocks): ",
401 					i, *keysize * 8, *b_size);
402 
403 
404 			memset(tvmem[0], 0xff, PAGE_SIZE);
405 
406 			if (ret) {
407 				pr_err("setkey() failed flags=%x\n",
408 						crypto_aead_get_flags(tfm));
409 				goto out;
410 			}
411 
412 			sg_init_aead(sg, xbuf,
413 				    *b_size + (enc ? authsize : 0));
414 
415 			sg_init_aead(sgout, xoutbuf,
416 				    *b_size + (enc ? authsize : 0));
417 
418 			sg_set_buf(&sg[0], assoc, aad_size);
419 			sg_set_buf(&sgout[0], assoc, aad_size);
420 
421 			aead_request_set_crypt(req, sg, sgout, *b_size, iv);
422 			aead_request_set_ad(req, aad_size);
423 
424 			if (secs)
425 				ret = test_aead_jiffies(req, enc, *b_size,
426 							secs);
427 			else
428 				ret = test_aead_cycles(req, enc, *b_size);
429 
430 			if (ret) {
431 				pr_err("%s() failed return code=%d\n", e, ret);
432 				break;
433 			}
434 			b_size++;
435 			i++;
436 		} while (*b_size);
437 		keysize++;
438 	} while (*keysize);
439 
440 out:
441 	aead_request_free(req);
442 out_noreq:
443 	crypto_free_aead(tfm);
444 out_notfm:
445 	kfree(sg);
446 out_nosg:
447 	testmgr_free_buf(xoutbuf);
448 out_nooutbuf:
449 	testmgr_free_buf(axbuf);
450 out_noaxbuf:
451 	testmgr_free_buf(xbuf);
452 out_noxbuf:
453 	kfree(iv);
454 	return;
455 }
456 
457 static void test_cipher_speed(const char *algo, int enc, unsigned int secs,
458 			      struct cipher_speed_template *template,
459 			      unsigned int tcount, u8 *keysize)
460 {
461 	unsigned int ret, i, j, iv_len;
462 	const char *key;
463 	char iv[128];
464 	struct crypto_blkcipher *tfm;
465 	struct blkcipher_desc desc;
466 	const char *e;
467 	u32 *b_size;
468 
469 	if (enc == ENCRYPT)
470 	        e = "encryption";
471 	else
472 		e = "decryption";
473 
474 	tfm = crypto_alloc_blkcipher(algo, 0, CRYPTO_ALG_ASYNC);
475 
476 	if (IS_ERR(tfm)) {
477 		printk("failed to load transform for %s: %ld\n", algo,
478 		       PTR_ERR(tfm));
479 		return;
480 	}
481 	desc.tfm = tfm;
482 	desc.flags = 0;
483 
484 	printk(KERN_INFO "\ntesting speed of %s (%s) %s\n", algo,
485 			get_driver_name(crypto_blkcipher, tfm), e);
486 
487 	i = 0;
488 	do {
489 
490 		b_size = block_sizes;
491 		do {
492 			struct scatterlist sg[TVMEMSIZE];
493 
494 			if ((*keysize + *b_size) > TVMEMSIZE * PAGE_SIZE) {
495 				printk("template (%u) too big for "
496 				       "tvmem (%lu)\n", *keysize + *b_size,
497 				       TVMEMSIZE * PAGE_SIZE);
498 				goto out;
499 			}
500 
501 			printk("test %u (%d bit key, %d byte blocks): ", i,
502 					*keysize * 8, *b_size);
503 
504 			memset(tvmem[0], 0xff, PAGE_SIZE);
505 
506 			/* set key, plain text and IV */
507 			key = tvmem[0];
508 			for (j = 0; j < tcount; j++) {
509 				if (template[j].klen == *keysize) {
510 					key = template[j].key;
511 					break;
512 				}
513 			}
514 
515 			ret = crypto_blkcipher_setkey(tfm, key, *keysize);
516 			if (ret) {
517 				printk("setkey() failed flags=%x\n",
518 						crypto_blkcipher_get_flags(tfm));
519 				goto out;
520 			}
521 
522 			sg_init_table(sg, TVMEMSIZE);
523 			sg_set_buf(sg, tvmem[0] + *keysize,
524 				   PAGE_SIZE - *keysize);
525 			for (j = 1; j < TVMEMSIZE; j++) {
526 				sg_set_buf(sg + j, tvmem[j], PAGE_SIZE);
527 				memset (tvmem[j], 0xff, PAGE_SIZE);
528 			}
529 
530 			iv_len = crypto_blkcipher_ivsize(tfm);
531 			if (iv_len) {
532 				memset(&iv, 0xff, iv_len);
533 				crypto_blkcipher_set_iv(tfm, iv, iv_len);
534 			}
535 
536 			if (secs)
537 				ret = test_cipher_jiffies(&desc, enc, sg,
538 							  *b_size, secs);
539 			else
540 				ret = test_cipher_cycles(&desc, enc, sg,
541 							 *b_size);
542 
543 			if (ret) {
544 				printk("%s() failed flags=%x\n", e, desc.flags);
545 				break;
546 			}
547 			b_size++;
548 			i++;
549 		} while (*b_size);
550 		keysize++;
551 	} while (*keysize);
552 
553 out:
554 	crypto_free_blkcipher(tfm);
555 }
556 
557 static void test_hash_sg_init(struct scatterlist *sg)
558 {
559 	int i;
560 
561 	sg_init_table(sg, TVMEMSIZE);
562 	for (i = 0; i < TVMEMSIZE; i++) {
563 		sg_set_buf(sg + i, tvmem[i], PAGE_SIZE);
564 		memset(tvmem[i], 0xff, PAGE_SIZE);
565 	}
566 }
567 
568 static inline int do_one_ahash_op(struct ahash_request *req, int ret)
569 {
570 	if (ret == -EINPROGRESS || ret == -EBUSY) {
571 		struct tcrypt_result *tr = req->base.data;
572 
573 		wait_for_completion(&tr->completion);
574 		reinit_completion(&tr->completion);
575 		ret = tr->err;
576 	}
577 	return ret;
578 }
579 
580 static int test_ahash_jiffies_digest(struct ahash_request *req, int blen,
581 				     char *out, int secs)
582 {
583 	unsigned long start, end;
584 	int bcount;
585 	int ret;
586 
587 	for (start = jiffies, end = start + secs * HZ, bcount = 0;
588 	     time_before(jiffies, end); bcount++) {
589 		ret = do_one_ahash_op(req, crypto_ahash_digest(req));
590 		if (ret)
591 			return ret;
592 	}
593 
594 	printk("%6u opers/sec, %9lu bytes/sec\n",
595 	       bcount / secs, ((long)bcount * blen) / secs);
596 
597 	return 0;
598 }
599 
600 static int test_ahash_jiffies(struct ahash_request *req, int blen,
601 			      int plen, char *out, int secs)
602 {
603 	unsigned long start, end;
604 	int bcount, pcount;
605 	int ret;
606 
607 	if (plen == blen)
608 		return test_ahash_jiffies_digest(req, blen, out, secs);
609 
610 	for (start = jiffies, end = start + secs * HZ, bcount = 0;
611 	     time_before(jiffies, end); bcount++) {
612 		ret = do_one_ahash_op(req, crypto_ahash_init(req));
613 		if (ret)
614 			return ret;
615 		for (pcount = 0; pcount < blen; pcount += plen) {
616 			ret = do_one_ahash_op(req, crypto_ahash_update(req));
617 			if (ret)
618 				return ret;
619 		}
620 		/* we assume there is enough space in 'out' for the result */
621 		ret = do_one_ahash_op(req, crypto_ahash_final(req));
622 		if (ret)
623 			return ret;
624 	}
625 
626 	pr_cont("%6u opers/sec, %9lu bytes/sec\n",
627 		bcount / secs, ((long)bcount * blen) / secs);
628 
629 	return 0;
630 }
631 
632 static int test_ahash_cycles_digest(struct ahash_request *req, int blen,
633 				    char *out)
634 {
635 	unsigned long cycles = 0;
636 	int ret, i;
637 
638 	/* Warm-up run. */
639 	for (i = 0; i < 4; i++) {
640 		ret = do_one_ahash_op(req, crypto_ahash_digest(req));
641 		if (ret)
642 			goto out;
643 	}
644 
645 	/* The real thing. */
646 	for (i = 0; i < 8; i++) {
647 		cycles_t start, end;
648 
649 		start = get_cycles();
650 
651 		ret = do_one_ahash_op(req, crypto_ahash_digest(req));
652 		if (ret)
653 			goto out;
654 
655 		end = get_cycles();
656 
657 		cycles += end - start;
658 	}
659 
660 out:
661 	if (ret)
662 		return ret;
663 
664 	pr_cont("%6lu cycles/operation, %4lu cycles/byte\n",
665 		cycles / 8, cycles / (8 * blen));
666 
667 	return 0;
668 }
669 
670 static int test_ahash_cycles(struct ahash_request *req, int blen,
671 			     int plen, char *out)
672 {
673 	unsigned long cycles = 0;
674 	int i, pcount, ret;
675 
676 	if (plen == blen)
677 		return test_ahash_cycles_digest(req, blen, out);
678 
679 	/* Warm-up run. */
680 	for (i = 0; i < 4; i++) {
681 		ret = do_one_ahash_op(req, crypto_ahash_init(req));
682 		if (ret)
683 			goto out;
684 		for (pcount = 0; pcount < blen; pcount += plen) {
685 			ret = do_one_ahash_op(req, crypto_ahash_update(req));
686 			if (ret)
687 				goto out;
688 		}
689 		ret = do_one_ahash_op(req, crypto_ahash_final(req));
690 		if (ret)
691 			goto out;
692 	}
693 
694 	/* The real thing. */
695 	for (i = 0; i < 8; i++) {
696 		cycles_t start, end;
697 
698 		start = get_cycles();
699 
700 		ret = do_one_ahash_op(req, crypto_ahash_init(req));
701 		if (ret)
702 			goto out;
703 		for (pcount = 0; pcount < blen; pcount += plen) {
704 			ret = do_one_ahash_op(req, crypto_ahash_update(req));
705 			if (ret)
706 				goto out;
707 		}
708 		ret = do_one_ahash_op(req, crypto_ahash_final(req));
709 		if (ret)
710 			goto out;
711 
712 		end = get_cycles();
713 
714 		cycles += end - start;
715 	}
716 
717 out:
718 	if (ret)
719 		return ret;
720 
721 	pr_cont("%6lu cycles/operation, %4lu cycles/byte\n",
722 		cycles / 8, cycles / (8 * blen));
723 
724 	return 0;
725 }
726 
727 static void test_ahash_speed_common(const char *algo, unsigned int secs,
728 				    struct hash_speed *speed, unsigned mask)
729 {
730 	struct scatterlist sg[TVMEMSIZE];
731 	struct tcrypt_result tresult;
732 	struct ahash_request *req;
733 	struct crypto_ahash *tfm;
734 	char *output;
735 	int i, ret;
736 
737 	tfm = crypto_alloc_ahash(algo, 0, mask);
738 	if (IS_ERR(tfm)) {
739 		pr_err("failed to load transform for %s: %ld\n",
740 		       algo, PTR_ERR(tfm));
741 		return;
742 	}
743 
744 	printk(KERN_INFO "\ntesting speed of async %s (%s)\n", algo,
745 			get_driver_name(crypto_ahash, tfm));
746 
747 	if (crypto_ahash_digestsize(tfm) > MAX_DIGEST_SIZE) {
748 		pr_err("digestsize(%u) > %d\n", crypto_ahash_digestsize(tfm),
749 		       MAX_DIGEST_SIZE);
750 		goto out;
751 	}
752 
753 	test_hash_sg_init(sg);
754 	req = ahash_request_alloc(tfm, GFP_KERNEL);
755 	if (!req) {
756 		pr_err("ahash request allocation failure\n");
757 		goto out;
758 	}
759 
760 	init_completion(&tresult.completion);
761 	ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
762 				   tcrypt_complete, &tresult);
763 
764 	output = kmalloc(MAX_DIGEST_SIZE, GFP_KERNEL);
765 	if (!output)
766 		goto out_nomem;
767 
768 	for (i = 0; speed[i].blen != 0; i++) {
769 		if (speed[i].blen > TVMEMSIZE * PAGE_SIZE) {
770 			pr_err("template (%u) too big for tvmem (%lu)\n",
771 			       speed[i].blen, TVMEMSIZE * PAGE_SIZE);
772 			break;
773 		}
774 
775 		pr_info("test%3u "
776 			"(%5u byte blocks,%5u bytes per update,%4u updates): ",
777 			i, speed[i].blen, speed[i].plen, speed[i].blen / speed[i].plen);
778 
779 		ahash_request_set_crypt(req, sg, output, speed[i].plen);
780 
781 		if (secs)
782 			ret = test_ahash_jiffies(req, speed[i].blen,
783 						 speed[i].plen, output, secs);
784 		else
785 			ret = test_ahash_cycles(req, speed[i].blen,
786 						speed[i].plen, output);
787 
788 		if (ret) {
789 			pr_err("hashing failed ret=%d\n", ret);
790 			break;
791 		}
792 	}
793 
794 	kfree(output);
795 
796 out_nomem:
797 	ahash_request_free(req);
798 
799 out:
800 	crypto_free_ahash(tfm);
801 }
802 
803 static void test_ahash_speed(const char *algo, unsigned int secs,
804 			     struct hash_speed *speed)
805 {
806 	return test_ahash_speed_common(algo, secs, speed, 0);
807 }
808 
809 static void test_hash_speed(const char *algo, unsigned int secs,
810 			    struct hash_speed *speed)
811 {
812 	return test_ahash_speed_common(algo, secs, speed, CRYPTO_ALG_ASYNC);
813 }
814 
815 static inline int do_one_acipher_op(struct ablkcipher_request *req, int ret)
816 {
817 	if (ret == -EINPROGRESS || ret == -EBUSY) {
818 		struct tcrypt_result *tr = req->base.data;
819 
820 		wait_for_completion(&tr->completion);
821 		reinit_completion(&tr->completion);
822 		ret = tr->err;
823 	}
824 
825 	return ret;
826 }
827 
828 static int test_acipher_jiffies(struct ablkcipher_request *req, int enc,
829 				int blen, int secs)
830 {
831 	unsigned long start, end;
832 	int bcount;
833 	int ret;
834 
835 	for (start = jiffies, end = start + secs * HZ, bcount = 0;
836 	     time_before(jiffies, end); bcount++) {
837 		if (enc)
838 			ret = do_one_acipher_op(req,
839 						crypto_ablkcipher_encrypt(req));
840 		else
841 			ret = do_one_acipher_op(req,
842 						crypto_ablkcipher_decrypt(req));
843 
844 		if (ret)
845 			return ret;
846 	}
847 
848 	pr_cont("%d operations in %d seconds (%ld bytes)\n",
849 		bcount, secs, (long)bcount * blen);
850 	return 0;
851 }
852 
853 static int test_acipher_cycles(struct ablkcipher_request *req, int enc,
854 			       int blen)
855 {
856 	unsigned long cycles = 0;
857 	int ret = 0;
858 	int i;
859 
860 	/* Warm-up run. */
861 	for (i = 0; i < 4; i++) {
862 		if (enc)
863 			ret = do_one_acipher_op(req,
864 						crypto_ablkcipher_encrypt(req));
865 		else
866 			ret = do_one_acipher_op(req,
867 						crypto_ablkcipher_decrypt(req));
868 
869 		if (ret)
870 			goto out;
871 	}
872 
873 	/* The real thing. */
874 	for (i = 0; i < 8; i++) {
875 		cycles_t start, end;
876 
877 		start = get_cycles();
878 		if (enc)
879 			ret = do_one_acipher_op(req,
880 						crypto_ablkcipher_encrypt(req));
881 		else
882 			ret = do_one_acipher_op(req,
883 						crypto_ablkcipher_decrypt(req));
884 		end = get_cycles();
885 
886 		if (ret)
887 			goto out;
888 
889 		cycles += end - start;
890 	}
891 
892 out:
893 	if (ret == 0)
894 		pr_cont("1 operation in %lu cycles (%d bytes)\n",
895 			(cycles + 4) / 8, blen);
896 
897 	return ret;
898 }
899 
900 static void test_acipher_speed(const char *algo, int enc, unsigned int secs,
901 			       struct cipher_speed_template *template,
902 			       unsigned int tcount, u8 *keysize)
903 {
904 	unsigned int ret, i, j, k, iv_len;
905 	struct tcrypt_result tresult;
906 	const char *key;
907 	char iv[128];
908 	struct ablkcipher_request *req;
909 	struct crypto_ablkcipher *tfm;
910 	const char *e;
911 	u32 *b_size;
912 
913 	if (enc == ENCRYPT)
914 		e = "encryption";
915 	else
916 		e = "decryption";
917 
918 	init_completion(&tresult.completion);
919 
920 	tfm = crypto_alloc_ablkcipher(algo, 0, 0);
921 
922 	if (IS_ERR(tfm)) {
923 		pr_err("failed to load transform for %s: %ld\n", algo,
924 		       PTR_ERR(tfm));
925 		return;
926 	}
927 
928 	pr_info("\ntesting speed of async %s (%s) %s\n", algo,
929 			get_driver_name(crypto_ablkcipher, tfm), e);
930 
931 	req = ablkcipher_request_alloc(tfm, GFP_KERNEL);
932 	if (!req) {
933 		pr_err("tcrypt: skcipher: Failed to allocate request for %s\n",
934 		       algo);
935 		goto out;
936 	}
937 
938 	ablkcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
939 					tcrypt_complete, &tresult);
940 
941 	i = 0;
942 	do {
943 		b_size = block_sizes;
944 
945 		do {
946 			struct scatterlist sg[TVMEMSIZE];
947 
948 			if ((*keysize + *b_size) > TVMEMSIZE * PAGE_SIZE) {
949 				pr_err("template (%u) too big for "
950 				       "tvmem (%lu)\n", *keysize + *b_size,
951 				       TVMEMSIZE * PAGE_SIZE);
952 				goto out_free_req;
953 			}
954 
955 			pr_info("test %u (%d bit key, %d byte blocks): ", i,
956 				*keysize * 8, *b_size);
957 
958 			memset(tvmem[0], 0xff, PAGE_SIZE);
959 
960 			/* set key, plain text and IV */
961 			key = tvmem[0];
962 			for (j = 0; j < tcount; j++) {
963 				if (template[j].klen == *keysize) {
964 					key = template[j].key;
965 					break;
966 				}
967 			}
968 
969 			crypto_ablkcipher_clear_flags(tfm, ~0);
970 
971 			ret = crypto_ablkcipher_setkey(tfm, key, *keysize);
972 			if (ret) {
973 				pr_err("setkey() failed flags=%x\n",
974 					crypto_ablkcipher_get_flags(tfm));
975 				goto out_free_req;
976 			}
977 
978 			k = *keysize + *b_size;
979 			sg_init_table(sg, DIV_ROUND_UP(k, PAGE_SIZE));
980 
981 			if (k > PAGE_SIZE) {
982 				sg_set_buf(sg, tvmem[0] + *keysize,
983 				   PAGE_SIZE - *keysize);
984 				k -= PAGE_SIZE;
985 				j = 1;
986 				while (k > PAGE_SIZE) {
987 					sg_set_buf(sg + j, tvmem[j], PAGE_SIZE);
988 					memset(tvmem[j], 0xff, PAGE_SIZE);
989 					j++;
990 					k -= PAGE_SIZE;
991 				}
992 				sg_set_buf(sg + j, tvmem[j], k);
993 				memset(tvmem[j], 0xff, k);
994 			} else {
995 				sg_set_buf(sg, tvmem[0] + *keysize, *b_size);
996 			}
997 
998 			iv_len = crypto_ablkcipher_ivsize(tfm);
999 			if (iv_len)
1000 				memset(&iv, 0xff, iv_len);
1001 
1002 			ablkcipher_request_set_crypt(req, sg, sg, *b_size, iv);
1003 
1004 			if (secs)
1005 				ret = test_acipher_jiffies(req, enc,
1006 							   *b_size, secs);
1007 			else
1008 				ret = test_acipher_cycles(req, enc,
1009 							  *b_size);
1010 
1011 			if (ret) {
1012 				pr_err("%s() failed flags=%x\n", e,
1013 					crypto_ablkcipher_get_flags(tfm));
1014 				break;
1015 			}
1016 			b_size++;
1017 			i++;
1018 		} while (*b_size);
1019 		keysize++;
1020 	} while (*keysize);
1021 
1022 out_free_req:
1023 	ablkcipher_request_free(req);
1024 out:
1025 	crypto_free_ablkcipher(tfm);
1026 }
1027 
1028 static void test_available(void)
1029 {
1030 	char **name = check;
1031 
1032 	while (*name) {
1033 		printk("alg %s ", *name);
1034 		printk(crypto_has_alg(*name, 0, 0) ?
1035 		       "found\n" : "not found\n");
1036 		name++;
1037 	}
1038 }
1039 
1040 static inline int tcrypt_test(const char *alg)
1041 {
1042 	int ret;
1043 
1044 	ret = alg_test(alg, alg, 0, 0);
1045 	/* non-fips algs return -EINVAL in fips mode */
1046 	if (fips_enabled && ret == -EINVAL)
1047 		ret = 0;
1048 	return ret;
1049 }
1050 
1051 static int do_test(const char *alg, u32 type, u32 mask, int m)
1052 {
1053 	int i;
1054 	int ret = 0;
1055 
1056 	switch (m) {
1057 	case 0:
1058 		if (alg) {
1059 			if (!crypto_has_alg(alg, type,
1060 					    mask ?: CRYPTO_ALG_TYPE_MASK))
1061 				ret = -ENOENT;
1062 			break;
1063 		}
1064 
1065 		for (i = 1; i < 200; i++)
1066 			ret += do_test(NULL, 0, 0, i);
1067 		break;
1068 
1069 	case 1:
1070 		ret += tcrypt_test("md5");
1071 		break;
1072 
1073 	case 2:
1074 		ret += tcrypt_test("sha1");
1075 		break;
1076 
1077 	case 3:
1078 		ret += tcrypt_test("ecb(des)");
1079 		ret += tcrypt_test("cbc(des)");
1080 		ret += tcrypt_test("ctr(des)");
1081 		break;
1082 
1083 	case 4:
1084 		ret += tcrypt_test("ecb(des3_ede)");
1085 		ret += tcrypt_test("cbc(des3_ede)");
1086 		ret += tcrypt_test("ctr(des3_ede)");
1087 		break;
1088 
1089 	case 5:
1090 		ret += tcrypt_test("md4");
1091 		break;
1092 
1093 	case 6:
1094 		ret += tcrypt_test("sha256");
1095 		break;
1096 
1097 	case 7:
1098 		ret += tcrypt_test("ecb(blowfish)");
1099 		ret += tcrypt_test("cbc(blowfish)");
1100 		ret += tcrypt_test("ctr(blowfish)");
1101 		break;
1102 
1103 	case 8:
1104 		ret += tcrypt_test("ecb(twofish)");
1105 		ret += tcrypt_test("cbc(twofish)");
1106 		ret += tcrypt_test("ctr(twofish)");
1107 		ret += tcrypt_test("lrw(twofish)");
1108 		ret += tcrypt_test("xts(twofish)");
1109 		break;
1110 
1111 	case 9:
1112 		ret += tcrypt_test("ecb(serpent)");
1113 		ret += tcrypt_test("cbc(serpent)");
1114 		ret += tcrypt_test("ctr(serpent)");
1115 		ret += tcrypt_test("lrw(serpent)");
1116 		ret += tcrypt_test("xts(serpent)");
1117 		break;
1118 
1119 	case 10:
1120 		ret += tcrypt_test("ecb(aes)");
1121 		ret += tcrypt_test("cbc(aes)");
1122 		ret += tcrypt_test("lrw(aes)");
1123 		ret += tcrypt_test("xts(aes)");
1124 		ret += tcrypt_test("ctr(aes)");
1125 		ret += tcrypt_test("rfc3686(ctr(aes))");
1126 		break;
1127 
1128 	case 11:
1129 		ret += tcrypt_test("sha384");
1130 		break;
1131 
1132 	case 12:
1133 		ret += tcrypt_test("sha512");
1134 		break;
1135 
1136 	case 13:
1137 		ret += tcrypt_test("deflate");
1138 		break;
1139 
1140 	case 14:
1141 		ret += tcrypt_test("ecb(cast5)");
1142 		ret += tcrypt_test("cbc(cast5)");
1143 		ret += tcrypt_test("ctr(cast5)");
1144 		break;
1145 
1146 	case 15:
1147 		ret += tcrypt_test("ecb(cast6)");
1148 		ret += tcrypt_test("cbc(cast6)");
1149 		ret += tcrypt_test("ctr(cast6)");
1150 		ret += tcrypt_test("lrw(cast6)");
1151 		ret += tcrypt_test("xts(cast6)");
1152 		break;
1153 
1154 	case 16:
1155 		ret += tcrypt_test("ecb(arc4)");
1156 		break;
1157 
1158 	case 17:
1159 		ret += tcrypt_test("michael_mic");
1160 		break;
1161 
1162 	case 18:
1163 		ret += tcrypt_test("crc32c");
1164 		break;
1165 
1166 	case 19:
1167 		ret += tcrypt_test("ecb(tea)");
1168 		break;
1169 
1170 	case 20:
1171 		ret += tcrypt_test("ecb(xtea)");
1172 		break;
1173 
1174 	case 21:
1175 		ret += tcrypt_test("ecb(khazad)");
1176 		break;
1177 
1178 	case 22:
1179 		ret += tcrypt_test("wp512");
1180 		break;
1181 
1182 	case 23:
1183 		ret += tcrypt_test("wp384");
1184 		break;
1185 
1186 	case 24:
1187 		ret += tcrypt_test("wp256");
1188 		break;
1189 
1190 	case 25:
1191 		ret += tcrypt_test("ecb(tnepres)");
1192 		break;
1193 
1194 	case 26:
1195 		ret += tcrypt_test("ecb(anubis)");
1196 		ret += tcrypt_test("cbc(anubis)");
1197 		break;
1198 
1199 	case 27:
1200 		ret += tcrypt_test("tgr192");
1201 		break;
1202 
1203 	case 28:
1204 		ret += tcrypt_test("tgr160");
1205 		break;
1206 
1207 	case 29:
1208 		ret += tcrypt_test("tgr128");
1209 		break;
1210 
1211 	case 30:
1212 		ret += tcrypt_test("ecb(xeta)");
1213 		break;
1214 
1215 	case 31:
1216 		ret += tcrypt_test("pcbc(fcrypt)");
1217 		break;
1218 
1219 	case 32:
1220 		ret += tcrypt_test("ecb(camellia)");
1221 		ret += tcrypt_test("cbc(camellia)");
1222 		ret += tcrypt_test("ctr(camellia)");
1223 		ret += tcrypt_test("lrw(camellia)");
1224 		ret += tcrypt_test("xts(camellia)");
1225 		break;
1226 
1227 	case 33:
1228 		ret += tcrypt_test("sha224");
1229 		break;
1230 
1231 	case 34:
1232 		ret += tcrypt_test("salsa20");
1233 		break;
1234 
1235 	case 35:
1236 		ret += tcrypt_test("gcm(aes)");
1237 		break;
1238 
1239 	case 36:
1240 		ret += tcrypt_test("lzo");
1241 		break;
1242 
1243 	case 37:
1244 		ret += tcrypt_test("ccm(aes)");
1245 		break;
1246 
1247 	case 38:
1248 		ret += tcrypt_test("cts(cbc(aes))");
1249 		break;
1250 
1251         case 39:
1252 		ret += tcrypt_test("rmd128");
1253 		break;
1254 
1255         case 40:
1256 		ret += tcrypt_test("rmd160");
1257 		break;
1258 
1259 	case 41:
1260 		ret += tcrypt_test("rmd256");
1261 		break;
1262 
1263 	case 42:
1264 		ret += tcrypt_test("rmd320");
1265 		break;
1266 
1267 	case 43:
1268 		ret += tcrypt_test("ecb(seed)");
1269 		break;
1270 
1271 	case 44:
1272 		ret += tcrypt_test("zlib");
1273 		break;
1274 
1275 	case 45:
1276 		ret += tcrypt_test("rfc4309(ccm(aes))");
1277 		break;
1278 
1279 	case 46:
1280 		ret += tcrypt_test("ghash");
1281 		break;
1282 
1283 	case 47:
1284 		ret += tcrypt_test("crct10dif");
1285 		break;
1286 
1287 	case 100:
1288 		ret += tcrypt_test("hmac(md5)");
1289 		break;
1290 
1291 	case 101:
1292 		ret += tcrypt_test("hmac(sha1)");
1293 		break;
1294 
1295 	case 102:
1296 		ret += tcrypt_test("hmac(sha256)");
1297 		break;
1298 
1299 	case 103:
1300 		ret += tcrypt_test("hmac(sha384)");
1301 		break;
1302 
1303 	case 104:
1304 		ret += tcrypt_test("hmac(sha512)");
1305 		break;
1306 
1307 	case 105:
1308 		ret += tcrypt_test("hmac(sha224)");
1309 		break;
1310 
1311 	case 106:
1312 		ret += tcrypt_test("xcbc(aes)");
1313 		break;
1314 
1315 	case 107:
1316 		ret += tcrypt_test("hmac(rmd128)");
1317 		break;
1318 
1319 	case 108:
1320 		ret += tcrypt_test("hmac(rmd160)");
1321 		break;
1322 
1323 	case 109:
1324 		ret += tcrypt_test("vmac(aes)");
1325 		break;
1326 
1327 	case 110:
1328 		ret += tcrypt_test("hmac(crc32)");
1329 		break;
1330 
1331 	case 150:
1332 		ret += tcrypt_test("ansi_cprng");
1333 		break;
1334 
1335 	case 151:
1336 		ret += tcrypt_test("rfc4106(gcm(aes))");
1337 		break;
1338 
1339 	case 152:
1340 		ret += tcrypt_test("rfc4543(gcm(aes))");
1341 		break;
1342 
1343 	case 153:
1344 		ret += tcrypt_test("cmac(aes)");
1345 		break;
1346 
1347 	case 154:
1348 		ret += tcrypt_test("cmac(des3_ede)");
1349 		break;
1350 
1351 	case 155:
1352 		ret += tcrypt_test("authenc(hmac(sha1),cbc(aes))");
1353 		break;
1354 
1355 	case 156:
1356 		ret += tcrypt_test("authenc(hmac(md5),ecb(cipher_null))");
1357 		break;
1358 
1359 	case 157:
1360 		ret += tcrypt_test("authenc(hmac(sha1),ecb(cipher_null))");
1361 		break;
1362 	case 181:
1363 		ret += tcrypt_test("authenc(hmac(sha1),cbc(des))");
1364 		break;
1365 	case 182:
1366 		ret += tcrypt_test("authenc(hmac(sha1),cbc(des3_ede))");
1367 		break;
1368 	case 183:
1369 		ret += tcrypt_test("authenc(hmac(sha224),cbc(des))");
1370 		break;
1371 	case 184:
1372 		ret += tcrypt_test("authenc(hmac(sha224),cbc(des3_ede))");
1373 		break;
1374 	case 185:
1375 		ret += tcrypt_test("authenc(hmac(sha256),cbc(des))");
1376 		break;
1377 	case 186:
1378 		ret += tcrypt_test("authenc(hmac(sha256),cbc(des3_ede))");
1379 		break;
1380 	case 187:
1381 		ret += tcrypt_test("authenc(hmac(sha384),cbc(des))");
1382 		break;
1383 	case 188:
1384 		ret += tcrypt_test("authenc(hmac(sha384),cbc(des3_ede))");
1385 		break;
1386 	case 189:
1387 		ret += tcrypt_test("authenc(hmac(sha512),cbc(des))");
1388 		break;
1389 	case 190:
1390 		ret += tcrypt_test("authenc(hmac(sha512),cbc(des3_ede))");
1391 		break;
1392 	case 200:
1393 		test_cipher_speed("ecb(aes)", ENCRYPT, sec, NULL, 0,
1394 				speed_template_16_24_32);
1395 		test_cipher_speed("ecb(aes)", DECRYPT, sec, NULL, 0,
1396 				speed_template_16_24_32);
1397 		test_cipher_speed("cbc(aes)", ENCRYPT, sec, NULL, 0,
1398 				speed_template_16_24_32);
1399 		test_cipher_speed("cbc(aes)", DECRYPT, sec, NULL, 0,
1400 				speed_template_16_24_32);
1401 		test_cipher_speed("lrw(aes)", ENCRYPT, sec, NULL, 0,
1402 				speed_template_32_40_48);
1403 		test_cipher_speed("lrw(aes)", DECRYPT, sec, NULL, 0,
1404 				speed_template_32_40_48);
1405 		test_cipher_speed("xts(aes)", ENCRYPT, sec, NULL, 0,
1406 				speed_template_32_48_64);
1407 		test_cipher_speed("xts(aes)", DECRYPT, sec, NULL, 0,
1408 				speed_template_32_48_64);
1409 		test_cipher_speed("ctr(aes)", ENCRYPT, sec, NULL, 0,
1410 				speed_template_16_24_32);
1411 		test_cipher_speed("ctr(aes)", DECRYPT, sec, NULL, 0,
1412 				speed_template_16_24_32);
1413 		break;
1414 
1415 	case 201:
1416 		test_cipher_speed("ecb(des3_ede)", ENCRYPT, sec,
1417 				des3_speed_template, DES3_SPEED_VECTORS,
1418 				speed_template_24);
1419 		test_cipher_speed("ecb(des3_ede)", DECRYPT, sec,
1420 				des3_speed_template, DES3_SPEED_VECTORS,
1421 				speed_template_24);
1422 		test_cipher_speed("cbc(des3_ede)", ENCRYPT, sec,
1423 				des3_speed_template, DES3_SPEED_VECTORS,
1424 				speed_template_24);
1425 		test_cipher_speed("cbc(des3_ede)", DECRYPT, sec,
1426 				des3_speed_template, DES3_SPEED_VECTORS,
1427 				speed_template_24);
1428 		test_cipher_speed("ctr(des3_ede)", ENCRYPT, sec,
1429 				des3_speed_template, DES3_SPEED_VECTORS,
1430 				speed_template_24);
1431 		test_cipher_speed("ctr(des3_ede)", DECRYPT, sec,
1432 				des3_speed_template, DES3_SPEED_VECTORS,
1433 				speed_template_24);
1434 		break;
1435 
1436 	case 202:
1437 		test_cipher_speed("ecb(twofish)", ENCRYPT, sec, NULL, 0,
1438 				speed_template_16_24_32);
1439 		test_cipher_speed("ecb(twofish)", DECRYPT, sec, NULL, 0,
1440 				speed_template_16_24_32);
1441 		test_cipher_speed("cbc(twofish)", ENCRYPT, sec, NULL, 0,
1442 				speed_template_16_24_32);
1443 		test_cipher_speed("cbc(twofish)", DECRYPT, sec, NULL, 0,
1444 				speed_template_16_24_32);
1445 		test_cipher_speed("ctr(twofish)", ENCRYPT, sec, NULL, 0,
1446 				speed_template_16_24_32);
1447 		test_cipher_speed("ctr(twofish)", DECRYPT, sec, NULL, 0,
1448 				speed_template_16_24_32);
1449 		test_cipher_speed("lrw(twofish)", ENCRYPT, sec, NULL, 0,
1450 				speed_template_32_40_48);
1451 		test_cipher_speed("lrw(twofish)", DECRYPT, sec, NULL, 0,
1452 				speed_template_32_40_48);
1453 		test_cipher_speed("xts(twofish)", ENCRYPT, sec, NULL, 0,
1454 				speed_template_32_48_64);
1455 		test_cipher_speed("xts(twofish)", DECRYPT, sec, NULL, 0,
1456 				speed_template_32_48_64);
1457 		break;
1458 
1459 	case 203:
1460 		test_cipher_speed("ecb(blowfish)", ENCRYPT, sec, NULL, 0,
1461 				  speed_template_8_32);
1462 		test_cipher_speed("ecb(blowfish)", DECRYPT, sec, NULL, 0,
1463 				  speed_template_8_32);
1464 		test_cipher_speed("cbc(blowfish)", ENCRYPT, sec, NULL, 0,
1465 				  speed_template_8_32);
1466 		test_cipher_speed("cbc(blowfish)", DECRYPT, sec, NULL, 0,
1467 				  speed_template_8_32);
1468 		test_cipher_speed("ctr(blowfish)", ENCRYPT, sec, NULL, 0,
1469 				  speed_template_8_32);
1470 		test_cipher_speed("ctr(blowfish)", DECRYPT, sec, NULL, 0,
1471 				  speed_template_8_32);
1472 		break;
1473 
1474 	case 204:
1475 		test_cipher_speed("ecb(des)", ENCRYPT, sec, NULL, 0,
1476 				  speed_template_8);
1477 		test_cipher_speed("ecb(des)", DECRYPT, sec, NULL, 0,
1478 				  speed_template_8);
1479 		test_cipher_speed("cbc(des)", ENCRYPT, sec, NULL, 0,
1480 				  speed_template_8);
1481 		test_cipher_speed("cbc(des)", DECRYPT, sec, NULL, 0,
1482 				  speed_template_8);
1483 		break;
1484 
1485 	case 205:
1486 		test_cipher_speed("ecb(camellia)", ENCRYPT, sec, NULL, 0,
1487 				speed_template_16_24_32);
1488 		test_cipher_speed("ecb(camellia)", DECRYPT, sec, NULL, 0,
1489 				speed_template_16_24_32);
1490 		test_cipher_speed("cbc(camellia)", ENCRYPT, sec, NULL, 0,
1491 				speed_template_16_24_32);
1492 		test_cipher_speed("cbc(camellia)", DECRYPT, sec, NULL, 0,
1493 				speed_template_16_24_32);
1494 		test_cipher_speed("ctr(camellia)", ENCRYPT, sec, NULL, 0,
1495 				speed_template_16_24_32);
1496 		test_cipher_speed("ctr(camellia)", DECRYPT, sec, NULL, 0,
1497 				speed_template_16_24_32);
1498 		test_cipher_speed("lrw(camellia)", ENCRYPT, sec, NULL, 0,
1499 				speed_template_32_40_48);
1500 		test_cipher_speed("lrw(camellia)", DECRYPT, sec, NULL, 0,
1501 				speed_template_32_40_48);
1502 		test_cipher_speed("xts(camellia)", ENCRYPT, sec, NULL, 0,
1503 				speed_template_32_48_64);
1504 		test_cipher_speed("xts(camellia)", DECRYPT, sec, NULL, 0,
1505 				speed_template_32_48_64);
1506 		break;
1507 
1508 	case 206:
1509 		test_cipher_speed("salsa20", ENCRYPT, sec, NULL, 0,
1510 				  speed_template_16_32);
1511 		break;
1512 
1513 	case 207:
1514 		test_cipher_speed("ecb(serpent)", ENCRYPT, sec, NULL, 0,
1515 				  speed_template_16_32);
1516 		test_cipher_speed("ecb(serpent)", DECRYPT, sec, NULL, 0,
1517 				  speed_template_16_32);
1518 		test_cipher_speed("cbc(serpent)", ENCRYPT, sec, NULL, 0,
1519 				  speed_template_16_32);
1520 		test_cipher_speed("cbc(serpent)", DECRYPT, sec, NULL, 0,
1521 				  speed_template_16_32);
1522 		test_cipher_speed("ctr(serpent)", ENCRYPT, sec, NULL, 0,
1523 				  speed_template_16_32);
1524 		test_cipher_speed("ctr(serpent)", DECRYPT, sec, NULL, 0,
1525 				  speed_template_16_32);
1526 		test_cipher_speed("lrw(serpent)", ENCRYPT, sec, NULL, 0,
1527 				  speed_template_32_48);
1528 		test_cipher_speed("lrw(serpent)", DECRYPT, sec, NULL, 0,
1529 				  speed_template_32_48);
1530 		test_cipher_speed("xts(serpent)", ENCRYPT, sec, NULL, 0,
1531 				  speed_template_32_64);
1532 		test_cipher_speed("xts(serpent)", DECRYPT, sec, NULL, 0,
1533 				  speed_template_32_64);
1534 		break;
1535 
1536 	case 208:
1537 		test_cipher_speed("ecb(arc4)", ENCRYPT, sec, NULL, 0,
1538 				  speed_template_8);
1539 		break;
1540 
1541 	case 209:
1542 		test_cipher_speed("ecb(cast5)", ENCRYPT, sec, NULL, 0,
1543 				  speed_template_8_16);
1544 		test_cipher_speed("ecb(cast5)", DECRYPT, sec, NULL, 0,
1545 				  speed_template_8_16);
1546 		test_cipher_speed("cbc(cast5)", ENCRYPT, sec, NULL, 0,
1547 				  speed_template_8_16);
1548 		test_cipher_speed("cbc(cast5)", DECRYPT, sec, NULL, 0,
1549 				  speed_template_8_16);
1550 		test_cipher_speed("ctr(cast5)", ENCRYPT, sec, NULL, 0,
1551 				  speed_template_8_16);
1552 		test_cipher_speed("ctr(cast5)", DECRYPT, sec, NULL, 0,
1553 				  speed_template_8_16);
1554 		break;
1555 
1556 	case 210:
1557 		test_cipher_speed("ecb(cast6)", ENCRYPT, sec, NULL, 0,
1558 				  speed_template_16_32);
1559 		test_cipher_speed("ecb(cast6)", DECRYPT, sec, NULL, 0,
1560 				  speed_template_16_32);
1561 		test_cipher_speed("cbc(cast6)", ENCRYPT, sec, NULL, 0,
1562 				  speed_template_16_32);
1563 		test_cipher_speed("cbc(cast6)", DECRYPT, sec, NULL, 0,
1564 				  speed_template_16_32);
1565 		test_cipher_speed("ctr(cast6)", ENCRYPT, sec, NULL, 0,
1566 				  speed_template_16_32);
1567 		test_cipher_speed("ctr(cast6)", DECRYPT, sec, NULL, 0,
1568 				  speed_template_16_32);
1569 		test_cipher_speed("lrw(cast6)", ENCRYPT, sec, NULL, 0,
1570 				  speed_template_32_48);
1571 		test_cipher_speed("lrw(cast6)", DECRYPT, sec, NULL, 0,
1572 				  speed_template_32_48);
1573 		test_cipher_speed("xts(cast6)", ENCRYPT, sec, NULL, 0,
1574 				  speed_template_32_64);
1575 		test_cipher_speed("xts(cast6)", DECRYPT, sec, NULL, 0,
1576 				  speed_template_32_64);
1577 		break;
1578 
1579 	case 211:
1580 		test_aead_speed("rfc4106(gcm(aes))", ENCRYPT, sec,
1581 				NULL, 0, 16, 16, aead_speed_template_20);
1582 		test_aead_speed("gcm(aes)", ENCRYPT, sec,
1583 				NULL, 0, 16, 8, speed_template_16_24_32);
1584 		break;
1585 
1586 	case 212:
1587 		test_aead_speed("rfc4309(ccm(aes))", ENCRYPT, sec,
1588 				NULL, 0, 16, 16, aead_speed_template_19);
1589 		break;
1590 
1591 	case 213:
1592 		test_aead_speed("rfc7539esp(chacha20,poly1305)", ENCRYPT, sec,
1593 				NULL, 0, 16, 8, aead_speed_template_36);
1594 		break;
1595 
1596 	case 214:
1597 		test_cipher_speed("chacha20", ENCRYPT, sec, NULL, 0,
1598 				  speed_template_32);
1599 		break;
1600 
1601 
1602 	case 300:
1603 		if (alg) {
1604 			test_hash_speed(alg, sec, generic_hash_speed_template);
1605 			break;
1606 		}
1607 
1608 		/* fall through */
1609 
1610 	case 301:
1611 		test_hash_speed("md4", sec, generic_hash_speed_template);
1612 		if (mode > 300 && mode < 400) break;
1613 
1614 	case 302:
1615 		test_hash_speed("md5", sec, generic_hash_speed_template);
1616 		if (mode > 300 && mode < 400) break;
1617 
1618 	case 303:
1619 		test_hash_speed("sha1", sec, generic_hash_speed_template);
1620 		if (mode > 300 && mode < 400) break;
1621 
1622 	case 304:
1623 		test_hash_speed("sha256", sec, generic_hash_speed_template);
1624 		if (mode > 300 && mode < 400) break;
1625 
1626 	case 305:
1627 		test_hash_speed("sha384", sec, generic_hash_speed_template);
1628 		if (mode > 300 && mode < 400) break;
1629 
1630 	case 306:
1631 		test_hash_speed("sha512", sec, generic_hash_speed_template);
1632 		if (mode > 300 && mode < 400) break;
1633 
1634 	case 307:
1635 		test_hash_speed("wp256", sec, generic_hash_speed_template);
1636 		if (mode > 300 && mode < 400) break;
1637 
1638 	case 308:
1639 		test_hash_speed("wp384", sec, generic_hash_speed_template);
1640 		if (mode > 300 && mode < 400) break;
1641 
1642 	case 309:
1643 		test_hash_speed("wp512", sec, generic_hash_speed_template);
1644 		if (mode > 300 && mode < 400) break;
1645 
1646 	case 310:
1647 		test_hash_speed("tgr128", sec, generic_hash_speed_template);
1648 		if (mode > 300 && mode < 400) break;
1649 
1650 	case 311:
1651 		test_hash_speed("tgr160", sec, generic_hash_speed_template);
1652 		if (mode > 300 && mode < 400) break;
1653 
1654 	case 312:
1655 		test_hash_speed("tgr192", sec, generic_hash_speed_template);
1656 		if (mode > 300 && mode < 400) break;
1657 
1658 	case 313:
1659 		test_hash_speed("sha224", sec, generic_hash_speed_template);
1660 		if (mode > 300 && mode < 400) break;
1661 
1662 	case 314:
1663 		test_hash_speed("rmd128", sec, generic_hash_speed_template);
1664 		if (mode > 300 && mode < 400) break;
1665 
1666 	case 315:
1667 		test_hash_speed("rmd160", sec, generic_hash_speed_template);
1668 		if (mode > 300 && mode < 400) break;
1669 
1670 	case 316:
1671 		test_hash_speed("rmd256", sec, generic_hash_speed_template);
1672 		if (mode > 300 && mode < 400) break;
1673 
1674 	case 317:
1675 		test_hash_speed("rmd320", sec, generic_hash_speed_template);
1676 		if (mode > 300 && mode < 400) break;
1677 
1678 	case 318:
1679 		test_hash_speed("ghash-generic", sec, hash_speed_template_16);
1680 		if (mode > 300 && mode < 400) break;
1681 
1682 	case 319:
1683 		test_hash_speed("crc32c", sec, generic_hash_speed_template);
1684 		if (mode > 300 && mode < 400) break;
1685 
1686 	case 320:
1687 		test_hash_speed("crct10dif", sec, generic_hash_speed_template);
1688 		if (mode > 300 && mode < 400) break;
1689 
1690 	case 321:
1691 		test_hash_speed("poly1305", sec, poly1305_speed_template);
1692 		if (mode > 300 && mode < 400) break;
1693 
1694 	case 399:
1695 		break;
1696 
1697 	case 400:
1698 		if (alg) {
1699 			test_ahash_speed(alg, sec, generic_hash_speed_template);
1700 			break;
1701 		}
1702 
1703 		/* fall through */
1704 
1705 	case 401:
1706 		test_ahash_speed("md4", sec, generic_hash_speed_template);
1707 		if (mode > 400 && mode < 500) break;
1708 
1709 	case 402:
1710 		test_ahash_speed("md5", sec, generic_hash_speed_template);
1711 		if (mode > 400 && mode < 500) break;
1712 
1713 	case 403:
1714 		test_ahash_speed("sha1", sec, generic_hash_speed_template);
1715 		if (mode > 400 && mode < 500) break;
1716 
1717 	case 404:
1718 		test_ahash_speed("sha256", sec, generic_hash_speed_template);
1719 		if (mode > 400 && mode < 500) break;
1720 
1721 	case 405:
1722 		test_ahash_speed("sha384", sec, generic_hash_speed_template);
1723 		if (mode > 400 && mode < 500) break;
1724 
1725 	case 406:
1726 		test_ahash_speed("sha512", sec, generic_hash_speed_template);
1727 		if (mode > 400 && mode < 500) break;
1728 
1729 	case 407:
1730 		test_ahash_speed("wp256", sec, generic_hash_speed_template);
1731 		if (mode > 400 && mode < 500) break;
1732 
1733 	case 408:
1734 		test_ahash_speed("wp384", sec, generic_hash_speed_template);
1735 		if (mode > 400 && mode < 500) break;
1736 
1737 	case 409:
1738 		test_ahash_speed("wp512", sec, generic_hash_speed_template);
1739 		if (mode > 400 && mode < 500) break;
1740 
1741 	case 410:
1742 		test_ahash_speed("tgr128", sec, generic_hash_speed_template);
1743 		if (mode > 400 && mode < 500) break;
1744 
1745 	case 411:
1746 		test_ahash_speed("tgr160", sec, generic_hash_speed_template);
1747 		if (mode > 400 && mode < 500) break;
1748 
1749 	case 412:
1750 		test_ahash_speed("tgr192", sec, generic_hash_speed_template);
1751 		if (mode > 400 && mode < 500) break;
1752 
1753 	case 413:
1754 		test_ahash_speed("sha224", sec, generic_hash_speed_template);
1755 		if (mode > 400 && mode < 500) break;
1756 
1757 	case 414:
1758 		test_ahash_speed("rmd128", sec, generic_hash_speed_template);
1759 		if (mode > 400 && mode < 500) break;
1760 
1761 	case 415:
1762 		test_ahash_speed("rmd160", sec, generic_hash_speed_template);
1763 		if (mode > 400 && mode < 500) break;
1764 
1765 	case 416:
1766 		test_ahash_speed("rmd256", sec, generic_hash_speed_template);
1767 		if (mode > 400 && mode < 500) break;
1768 
1769 	case 417:
1770 		test_ahash_speed("rmd320", sec, generic_hash_speed_template);
1771 		if (mode > 400 && mode < 500) break;
1772 
1773 	case 499:
1774 		break;
1775 
1776 	case 500:
1777 		test_acipher_speed("ecb(aes)", ENCRYPT, sec, NULL, 0,
1778 				   speed_template_16_24_32);
1779 		test_acipher_speed("ecb(aes)", DECRYPT, sec, NULL, 0,
1780 				   speed_template_16_24_32);
1781 		test_acipher_speed("cbc(aes)", ENCRYPT, sec, NULL, 0,
1782 				   speed_template_16_24_32);
1783 		test_acipher_speed("cbc(aes)", DECRYPT, sec, NULL, 0,
1784 				   speed_template_16_24_32);
1785 		test_acipher_speed("lrw(aes)", ENCRYPT, sec, NULL, 0,
1786 				   speed_template_32_40_48);
1787 		test_acipher_speed("lrw(aes)", DECRYPT, sec, NULL, 0,
1788 				   speed_template_32_40_48);
1789 		test_acipher_speed("xts(aes)", ENCRYPT, sec, NULL, 0,
1790 				   speed_template_32_48_64);
1791 		test_acipher_speed("xts(aes)", DECRYPT, sec, NULL, 0,
1792 				   speed_template_32_48_64);
1793 		test_acipher_speed("ctr(aes)", ENCRYPT, sec, NULL, 0,
1794 				   speed_template_16_24_32);
1795 		test_acipher_speed("ctr(aes)", DECRYPT, sec, NULL, 0,
1796 				   speed_template_16_24_32);
1797 		test_acipher_speed("cfb(aes)", ENCRYPT, sec, NULL, 0,
1798 				   speed_template_16_24_32);
1799 		test_acipher_speed("cfb(aes)", DECRYPT, sec, NULL, 0,
1800 				   speed_template_16_24_32);
1801 		test_acipher_speed("ofb(aes)", ENCRYPT, sec, NULL, 0,
1802 				   speed_template_16_24_32);
1803 		test_acipher_speed("ofb(aes)", DECRYPT, sec, NULL, 0,
1804 				   speed_template_16_24_32);
1805 		test_acipher_speed("rfc3686(ctr(aes))", ENCRYPT, sec, NULL, 0,
1806 				   speed_template_20_28_36);
1807 		test_acipher_speed("rfc3686(ctr(aes))", DECRYPT, sec, NULL, 0,
1808 				   speed_template_20_28_36);
1809 		break;
1810 
1811 	case 501:
1812 		test_acipher_speed("ecb(des3_ede)", ENCRYPT, sec,
1813 				   des3_speed_template, DES3_SPEED_VECTORS,
1814 				   speed_template_24);
1815 		test_acipher_speed("ecb(des3_ede)", DECRYPT, sec,
1816 				   des3_speed_template, DES3_SPEED_VECTORS,
1817 				   speed_template_24);
1818 		test_acipher_speed("cbc(des3_ede)", ENCRYPT, sec,
1819 				   des3_speed_template, DES3_SPEED_VECTORS,
1820 				   speed_template_24);
1821 		test_acipher_speed("cbc(des3_ede)", DECRYPT, sec,
1822 				   des3_speed_template, DES3_SPEED_VECTORS,
1823 				   speed_template_24);
1824 		test_acipher_speed("cfb(des3_ede)", ENCRYPT, sec,
1825 				   des3_speed_template, DES3_SPEED_VECTORS,
1826 				   speed_template_24);
1827 		test_acipher_speed("cfb(des3_ede)", DECRYPT, sec,
1828 				   des3_speed_template, DES3_SPEED_VECTORS,
1829 				   speed_template_24);
1830 		test_acipher_speed("ofb(des3_ede)", ENCRYPT, sec,
1831 				   des3_speed_template, DES3_SPEED_VECTORS,
1832 				   speed_template_24);
1833 		test_acipher_speed("ofb(des3_ede)", DECRYPT, sec,
1834 				   des3_speed_template, DES3_SPEED_VECTORS,
1835 				   speed_template_24);
1836 		break;
1837 
1838 	case 502:
1839 		test_acipher_speed("ecb(des)", ENCRYPT, sec, NULL, 0,
1840 				   speed_template_8);
1841 		test_acipher_speed("ecb(des)", DECRYPT, sec, NULL, 0,
1842 				   speed_template_8);
1843 		test_acipher_speed("cbc(des)", ENCRYPT, sec, NULL, 0,
1844 				   speed_template_8);
1845 		test_acipher_speed("cbc(des)", DECRYPT, sec, NULL, 0,
1846 				   speed_template_8);
1847 		test_acipher_speed("cfb(des)", ENCRYPT, sec, NULL, 0,
1848 				   speed_template_8);
1849 		test_acipher_speed("cfb(des)", DECRYPT, sec, NULL, 0,
1850 				   speed_template_8);
1851 		test_acipher_speed("ofb(des)", ENCRYPT, sec, NULL, 0,
1852 				   speed_template_8);
1853 		test_acipher_speed("ofb(des)", DECRYPT, sec, NULL, 0,
1854 				   speed_template_8);
1855 		break;
1856 
1857 	case 503:
1858 		test_acipher_speed("ecb(serpent)", ENCRYPT, sec, NULL, 0,
1859 				   speed_template_16_32);
1860 		test_acipher_speed("ecb(serpent)", DECRYPT, sec, NULL, 0,
1861 				   speed_template_16_32);
1862 		test_acipher_speed("cbc(serpent)", ENCRYPT, sec, NULL, 0,
1863 				   speed_template_16_32);
1864 		test_acipher_speed("cbc(serpent)", DECRYPT, sec, NULL, 0,
1865 				   speed_template_16_32);
1866 		test_acipher_speed("ctr(serpent)", ENCRYPT, sec, NULL, 0,
1867 				   speed_template_16_32);
1868 		test_acipher_speed("ctr(serpent)", DECRYPT, sec, NULL, 0,
1869 				   speed_template_16_32);
1870 		test_acipher_speed("lrw(serpent)", ENCRYPT, sec, NULL, 0,
1871 				   speed_template_32_48);
1872 		test_acipher_speed("lrw(serpent)", DECRYPT, sec, NULL, 0,
1873 				   speed_template_32_48);
1874 		test_acipher_speed("xts(serpent)", ENCRYPT, sec, NULL, 0,
1875 				   speed_template_32_64);
1876 		test_acipher_speed("xts(serpent)", DECRYPT, sec, NULL, 0,
1877 				   speed_template_32_64);
1878 		break;
1879 
1880 	case 504:
1881 		test_acipher_speed("ecb(twofish)", ENCRYPT, sec, NULL, 0,
1882 				   speed_template_16_24_32);
1883 		test_acipher_speed("ecb(twofish)", DECRYPT, sec, NULL, 0,
1884 				   speed_template_16_24_32);
1885 		test_acipher_speed("cbc(twofish)", ENCRYPT, sec, NULL, 0,
1886 				   speed_template_16_24_32);
1887 		test_acipher_speed("cbc(twofish)", DECRYPT, sec, NULL, 0,
1888 				   speed_template_16_24_32);
1889 		test_acipher_speed("ctr(twofish)", ENCRYPT, sec, NULL, 0,
1890 				   speed_template_16_24_32);
1891 		test_acipher_speed("ctr(twofish)", DECRYPT, sec, NULL, 0,
1892 				   speed_template_16_24_32);
1893 		test_acipher_speed("lrw(twofish)", ENCRYPT, sec, NULL, 0,
1894 				   speed_template_32_40_48);
1895 		test_acipher_speed("lrw(twofish)", DECRYPT, sec, NULL, 0,
1896 				   speed_template_32_40_48);
1897 		test_acipher_speed("xts(twofish)", ENCRYPT, sec, NULL, 0,
1898 				   speed_template_32_48_64);
1899 		test_acipher_speed("xts(twofish)", DECRYPT, sec, NULL, 0,
1900 				   speed_template_32_48_64);
1901 		break;
1902 
1903 	case 505:
1904 		test_acipher_speed("ecb(arc4)", ENCRYPT, sec, NULL, 0,
1905 				   speed_template_8);
1906 		break;
1907 
1908 	case 506:
1909 		test_acipher_speed("ecb(cast5)", ENCRYPT, sec, NULL, 0,
1910 				   speed_template_8_16);
1911 		test_acipher_speed("ecb(cast5)", DECRYPT, sec, NULL, 0,
1912 				   speed_template_8_16);
1913 		test_acipher_speed("cbc(cast5)", ENCRYPT, sec, NULL, 0,
1914 				   speed_template_8_16);
1915 		test_acipher_speed("cbc(cast5)", DECRYPT, sec, NULL, 0,
1916 				   speed_template_8_16);
1917 		test_acipher_speed("ctr(cast5)", ENCRYPT, sec, NULL, 0,
1918 				   speed_template_8_16);
1919 		test_acipher_speed("ctr(cast5)", DECRYPT, sec, NULL, 0,
1920 				   speed_template_8_16);
1921 		break;
1922 
1923 	case 507:
1924 		test_acipher_speed("ecb(cast6)", ENCRYPT, sec, NULL, 0,
1925 				   speed_template_16_32);
1926 		test_acipher_speed("ecb(cast6)", DECRYPT, sec, NULL, 0,
1927 				   speed_template_16_32);
1928 		test_acipher_speed("cbc(cast6)", ENCRYPT, sec, NULL, 0,
1929 				   speed_template_16_32);
1930 		test_acipher_speed("cbc(cast6)", DECRYPT, sec, NULL, 0,
1931 				   speed_template_16_32);
1932 		test_acipher_speed("ctr(cast6)", ENCRYPT, sec, NULL, 0,
1933 				   speed_template_16_32);
1934 		test_acipher_speed("ctr(cast6)", DECRYPT, sec, NULL, 0,
1935 				   speed_template_16_32);
1936 		test_acipher_speed("lrw(cast6)", ENCRYPT, sec, NULL, 0,
1937 				   speed_template_32_48);
1938 		test_acipher_speed("lrw(cast6)", DECRYPT, sec, NULL, 0,
1939 				   speed_template_32_48);
1940 		test_acipher_speed("xts(cast6)", ENCRYPT, sec, NULL, 0,
1941 				   speed_template_32_64);
1942 		test_acipher_speed("xts(cast6)", DECRYPT, sec, NULL, 0,
1943 				   speed_template_32_64);
1944 		break;
1945 
1946 	case 508:
1947 		test_acipher_speed("ecb(camellia)", ENCRYPT, sec, NULL, 0,
1948 				   speed_template_16_32);
1949 		test_acipher_speed("ecb(camellia)", DECRYPT, sec, NULL, 0,
1950 				   speed_template_16_32);
1951 		test_acipher_speed("cbc(camellia)", ENCRYPT, sec, NULL, 0,
1952 				   speed_template_16_32);
1953 		test_acipher_speed("cbc(camellia)", DECRYPT, sec, NULL, 0,
1954 				   speed_template_16_32);
1955 		test_acipher_speed("ctr(camellia)", ENCRYPT, sec, NULL, 0,
1956 				   speed_template_16_32);
1957 		test_acipher_speed("ctr(camellia)", DECRYPT, sec, NULL, 0,
1958 				   speed_template_16_32);
1959 		test_acipher_speed("lrw(camellia)", ENCRYPT, sec, NULL, 0,
1960 				   speed_template_32_48);
1961 		test_acipher_speed("lrw(camellia)", DECRYPT, sec, NULL, 0,
1962 				   speed_template_32_48);
1963 		test_acipher_speed("xts(camellia)", ENCRYPT, sec, NULL, 0,
1964 				   speed_template_32_64);
1965 		test_acipher_speed("xts(camellia)", DECRYPT, sec, NULL, 0,
1966 				   speed_template_32_64);
1967 		break;
1968 
1969 	case 509:
1970 		test_acipher_speed("ecb(blowfish)", ENCRYPT, sec, NULL, 0,
1971 				   speed_template_8_32);
1972 		test_acipher_speed("ecb(blowfish)", DECRYPT, sec, NULL, 0,
1973 				   speed_template_8_32);
1974 		test_acipher_speed("cbc(blowfish)", ENCRYPT, sec, NULL, 0,
1975 				   speed_template_8_32);
1976 		test_acipher_speed("cbc(blowfish)", DECRYPT, sec, NULL, 0,
1977 				   speed_template_8_32);
1978 		test_acipher_speed("ctr(blowfish)", ENCRYPT, sec, NULL, 0,
1979 				   speed_template_8_32);
1980 		test_acipher_speed("ctr(blowfish)", DECRYPT, sec, NULL, 0,
1981 				   speed_template_8_32);
1982 		break;
1983 
1984 	case 1000:
1985 		test_available();
1986 		break;
1987 	}
1988 
1989 	return ret;
1990 }
1991 
1992 static int __init tcrypt_mod_init(void)
1993 {
1994 	int err = -ENOMEM;
1995 	int i;
1996 
1997 	for (i = 0; i < TVMEMSIZE; i++) {
1998 		tvmem[i] = (void *)__get_free_page(GFP_KERNEL);
1999 		if (!tvmem[i])
2000 			goto err_free_tv;
2001 	}
2002 
2003 	err = do_test(alg, type, mask, mode);
2004 
2005 	if (err) {
2006 		printk(KERN_ERR "tcrypt: one or more tests failed!\n");
2007 		goto err_free_tv;
2008 	}
2009 
2010 	/* We intentionaly return -EAGAIN to prevent keeping the module,
2011 	 * unless we're running in fips mode. It does all its work from
2012 	 * init() and doesn't offer any runtime functionality, but in
2013 	 * the fips case, checking for a successful load is helpful.
2014 	 * => we don't need it in the memory, do we?
2015 	 *                                        -- mludvig
2016 	 */
2017 	if (!fips_enabled)
2018 		err = -EAGAIN;
2019 
2020 err_free_tv:
2021 	for (i = 0; i < TVMEMSIZE && tvmem[i]; i++)
2022 		free_page((unsigned long)tvmem[i]);
2023 
2024 	return err;
2025 }
2026 
2027 /*
2028  * If an init function is provided, an exit function must also be provided
2029  * to allow module unload.
2030  */
2031 static void __exit tcrypt_mod_fini(void) { }
2032 
2033 module_init(tcrypt_mod_init);
2034 module_exit(tcrypt_mod_fini);
2035 
2036 module_param(alg, charp, 0);
2037 module_param(type, uint, 0);
2038 module_param(mask, uint, 0);
2039 module_param(mode, int, 0);
2040 module_param(sec, uint, 0);
2041 MODULE_PARM_DESC(sec, "Length in seconds of speed tests "
2042 		      "(defaults to zero which uses CPU cycles instead)");
2043 
2044 MODULE_LICENSE("GPL");
2045 MODULE_DESCRIPTION("Quick & dirty crypto testing module");
2046 MODULE_AUTHOR("James Morris <jmorris@intercode.com.au>");
2047