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