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