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