WIP: update tizen_qemu_defconfig
[platform/kernel/linux-starfive.git] / crypto / tcrypt.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Quick & dirty crypto testing module.
4  *
5  * This will only exist until we have a better testing mechanism
6  * (e.g. a char device).
7  *
8  * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
9  * Copyright (c) 2002 Jean-Francois Dive <jef@linuxbe.org>
10  * Copyright (c) 2007 Nokia Siemens Networks
11  *
12  * Updated RFC4106 AES-GCM testing.
13  *    Authors: Aidan O'Mahony (aidan.o.mahony@intel.com)
14  *             Adrian Hoban <adrian.hoban@intel.com>
15  *             Gabriele Paoloni <gabriele.paoloni@intel.com>
16  *             Tadeusz Struk (tadeusz.struk@intel.com)
17  *             Copyright (c) 2010, Intel Corporation.
18  */
19
20 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
21
22 #include <crypto/aead.h>
23 #include <crypto/hash.h>
24 #include <crypto/skcipher.h>
25 #include <linux/err.h>
26 #include <linux/fips.h>
27 #include <linux/init.h>
28 #include <linux/gfp.h>
29 #include <linux/module.h>
30 #include <linux/scatterlist.h>
31 #include <linux/string.h>
32 #include <linux/moduleparam.h>
33 #include <linux/jiffies.h>
34 #include <linux/timex.h>
35 #include <linux/interrupt.h>
36 #include "tcrypt.h"
37
38 /*
39  * Need slab memory for testing (size in number of pages).
40  */
41 #define TVMEMSIZE       4
42
43 /*
44 * Used by test_cipher_speed()
45 */
46 #define ENCRYPT 1
47 #define DECRYPT 0
48
49 #define MAX_DIGEST_SIZE         64
50
51 /*
52  * return a string with the driver name
53  */
54 #define get_driver_name(tfm_type, tfm) crypto_tfm_alg_driver_name(tfm_type ## _tfm(tfm))
55
56 /*
57  * Used by test_cipher_speed()
58  */
59 static unsigned int sec;
60
61 static char *alg;
62 static u32 type;
63 static u32 mask;
64 static int mode;
65 static u32 num_mb = 8;
66 static unsigned int klen;
67 static char *tvmem[TVMEMSIZE];
68
69 static const int block_sizes[] = { 16, 64, 128, 256, 1024, 1420, 4096, 0 };
70 static const int aead_sizes[] = { 16, 64, 256, 512, 1024, 1420, 4096, 8192, 0 };
71
72 #define XBUFSIZE 8
73 #define MAX_IVLEN 32
74
75 static int testmgr_alloc_buf(char *buf[XBUFSIZE])
76 {
77         int i;
78
79         for (i = 0; i < XBUFSIZE; i++) {
80                 buf[i] = (void *)__get_free_page(GFP_KERNEL);
81                 if (!buf[i])
82                         goto err_free_buf;
83         }
84
85         return 0;
86
87 err_free_buf:
88         while (i-- > 0)
89                 free_page((unsigned long)buf[i]);
90
91         return -ENOMEM;
92 }
93
94 static void testmgr_free_buf(char *buf[XBUFSIZE])
95 {
96         int i;
97
98         for (i = 0; i < XBUFSIZE; i++)
99                 free_page((unsigned long)buf[i]);
100 }
101
102 static void sg_init_aead(struct scatterlist *sg, char *xbuf[XBUFSIZE],
103                          unsigned int buflen, const void *assoc,
104                          unsigned int aad_size)
105 {
106         int np = (buflen + PAGE_SIZE - 1)/PAGE_SIZE;
107         int k, rem;
108
109         if (np > XBUFSIZE) {
110                 rem = PAGE_SIZE;
111                 np = XBUFSIZE;
112         } else {
113                 rem = buflen % PAGE_SIZE;
114         }
115
116         sg_init_table(sg, np + 1);
117
118         sg_set_buf(&sg[0], assoc, aad_size);
119
120         if (rem)
121                 np--;
122         for (k = 0; k < np; k++)
123                 sg_set_buf(&sg[k + 1], xbuf[k], PAGE_SIZE);
124
125         if (rem)
126                 sg_set_buf(&sg[k + 1], xbuf[k], rem);
127 }
128
129 static inline int do_one_aead_op(struct aead_request *req, int ret)
130 {
131         struct crypto_wait *wait = req->base.data;
132
133         return crypto_wait_req(ret, wait);
134 }
135
136 struct test_mb_aead_data {
137         struct scatterlist sg[XBUFSIZE];
138         struct scatterlist sgout[XBUFSIZE];
139         struct aead_request *req;
140         struct crypto_wait wait;
141         char *xbuf[XBUFSIZE];
142         char *xoutbuf[XBUFSIZE];
143         char *axbuf[XBUFSIZE];
144 };
145
146 static int do_mult_aead_op(struct test_mb_aead_data *data, int enc,
147                                 u32 num_mb, int *rc)
148 {
149         int i, err = 0;
150
151         /* Fire up a bunch of concurrent requests */
152         for (i = 0; i < num_mb; i++) {
153                 if (enc == ENCRYPT)
154                         rc[i] = crypto_aead_encrypt(data[i].req);
155                 else
156                         rc[i] = crypto_aead_decrypt(data[i].req);
157         }
158
159         /* Wait for all requests to finish */
160         for (i = 0; i < num_mb; i++) {
161                 rc[i] = crypto_wait_req(rc[i], &data[i].wait);
162
163                 if (rc[i]) {
164                         pr_info("concurrent request %d error %d\n", i, rc[i]);
165                         err = rc[i];
166                 }
167         }
168
169         return err;
170 }
171
172 static int test_mb_aead_jiffies(struct test_mb_aead_data *data, int enc,
173                                 int blen, int secs, u32 num_mb)
174 {
175         unsigned long start, end;
176         int bcount;
177         int ret = 0;
178         int *rc;
179
180         rc = kcalloc(num_mb, sizeof(*rc), GFP_KERNEL);
181         if (!rc)
182                 return -ENOMEM;
183
184         for (start = jiffies, end = start + secs * HZ, bcount = 0;
185              time_before(jiffies, end); bcount++) {
186                 ret = do_mult_aead_op(data, enc, num_mb, rc);
187                 if (ret)
188                         goto out;
189         }
190
191         pr_cont("%d operations in %d seconds (%llu bytes)\n",
192                 bcount * num_mb, secs, (u64)bcount * blen * num_mb);
193
194 out:
195         kfree(rc);
196         return ret;
197 }
198
199 static int test_mb_aead_cycles(struct test_mb_aead_data *data, int enc,
200                                int blen, u32 num_mb)
201 {
202         unsigned long cycles = 0;
203         int ret = 0;
204         int i;
205         int *rc;
206
207         rc = kcalloc(num_mb, sizeof(*rc), GFP_KERNEL);
208         if (!rc)
209                 return -ENOMEM;
210
211         /* Warm-up run. */
212         for (i = 0; i < 4; i++) {
213                 ret = do_mult_aead_op(data, enc, num_mb, rc);
214                 if (ret)
215                         goto out;
216         }
217
218         /* The real thing. */
219         for (i = 0; i < 8; i++) {
220                 cycles_t start, end;
221
222                 start = get_cycles();
223                 ret = do_mult_aead_op(data, enc, num_mb, rc);
224                 end = get_cycles();
225
226                 if (ret)
227                         goto out;
228
229                 cycles += end - start;
230         }
231
232         pr_cont("1 operation in %lu cycles (%d bytes)\n",
233                 (cycles + 4) / (8 * num_mb), blen);
234
235 out:
236         kfree(rc);
237         return ret;
238 }
239
240 static void test_mb_aead_speed(const char *algo, int enc, int secs,
241                                struct aead_speed_template *template,
242                                unsigned int tcount, u8 authsize,
243                                unsigned int aad_size, u8 *keysize, u32 num_mb)
244 {
245         struct test_mb_aead_data *data;
246         struct crypto_aead *tfm;
247         unsigned int i, j, iv_len;
248         const int *b_size;
249         const char *key;
250         const char *e;
251         void *assoc;
252         char *iv;
253         int ret;
254
255
256         if (aad_size >= PAGE_SIZE) {
257                 pr_err("associate data length (%u) too big\n", aad_size);
258                 return;
259         }
260
261         iv = kzalloc(MAX_IVLEN, GFP_KERNEL);
262         if (!iv)
263                 return;
264
265         if (enc == ENCRYPT)
266                 e = "encryption";
267         else
268                 e = "decryption";
269
270         data = kcalloc(num_mb, sizeof(*data), GFP_KERNEL);
271         if (!data)
272                 goto out_free_iv;
273
274         tfm = crypto_alloc_aead(algo, 0, 0);
275         if (IS_ERR(tfm)) {
276                 pr_err("failed to load transform for %s: %ld\n",
277                         algo, PTR_ERR(tfm));
278                 goto out_free_data;
279         }
280
281         ret = crypto_aead_setauthsize(tfm, authsize);
282         if (ret) {
283                 pr_err("alg: aead: Failed to setauthsize for %s: %d\n", algo,
284                        ret);
285                 goto out_free_tfm;
286         }
287
288         for (i = 0; i < num_mb; ++i)
289                 if (testmgr_alloc_buf(data[i].xbuf)) {
290                         while (i--)
291                                 testmgr_free_buf(data[i].xbuf);
292                         goto out_free_tfm;
293                 }
294
295         for (i = 0; i < num_mb; ++i)
296                 if (testmgr_alloc_buf(data[i].axbuf)) {
297                         while (i--)
298                                 testmgr_free_buf(data[i].axbuf);
299                         goto out_free_xbuf;
300                 }
301
302         for (i = 0; i < num_mb; ++i)
303                 if (testmgr_alloc_buf(data[i].xoutbuf)) {
304                         while (i--)
305                                 testmgr_free_buf(data[i].xoutbuf);
306                         goto out_free_axbuf;
307                 }
308
309         for (i = 0; i < num_mb; ++i) {
310                 data[i].req = aead_request_alloc(tfm, GFP_KERNEL);
311                 if (!data[i].req) {
312                         pr_err("alg: aead: Failed to allocate request for %s\n",
313                                algo);
314                         while (i--)
315                                 aead_request_free(data[i].req);
316                         goto out_free_xoutbuf;
317                 }
318         }
319
320         for (i = 0; i < num_mb; ++i) {
321                 crypto_init_wait(&data[i].wait);
322                 aead_request_set_callback(data[i].req,
323                                           CRYPTO_TFM_REQ_MAY_BACKLOG,
324                                           crypto_req_done, &data[i].wait);
325         }
326
327         pr_info("\ntesting speed of multibuffer %s (%s) %s\n", algo,
328                 get_driver_name(crypto_aead, tfm), e);
329
330         i = 0;
331         do {
332                 b_size = aead_sizes;
333                 do {
334                         int bs = round_up(*b_size, crypto_aead_blocksize(tfm));
335
336                         if (bs + authsize > XBUFSIZE * PAGE_SIZE) {
337                                 pr_err("template (%u) too big for buffer (%lu)\n",
338                                        authsize + bs,
339                                        XBUFSIZE * PAGE_SIZE);
340                                 goto out;
341                         }
342
343                         pr_info("test %u (%d bit key, %d byte blocks): ", i,
344                                 *keysize * 8, bs);
345
346                         /* Set up tfm global state, i.e. the key */
347
348                         memset(tvmem[0], 0xff, PAGE_SIZE);
349                         key = tvmem[0];
350                         for (j = 0; j < tcount; j++) {
351                                 if (template[j].klen == *keysize) {
352                                         key = template[j].key;
353                                         break;
354                                 }
355                         }
356
357                         crypto_aead_clear_flags(tfm, ~0);
358
359                         ret = crypto_aead_setkey(tfm, key, *keysize);
360                         if (ret) {
361                                 pr_err("setkey() failed flags=%x\n",
362                                        crypto_aead_get_flags(tfm));
363                                 goto out;
364                         }
365
366                         iv_len = crypto_aead_ivsize(tfm);
367                         if (iv_len)
368                                 memset(iv, 0xff, iv_len);
369
370                         /* Now setup per request stuff, i.e. buffers */
371
372                         for (j = 0; j < num_mb; ++j) {
373                                 struct test_mb_aead_data *cur = &data[j];
374
375                                 assoc = cur->axbuf[0];
376                                 memset(assoc, 0xff, aad_size);
377
378                                 sg_init_aead(cur->sg, cur->xbuf,
379                                              bs + (enc ? 0 : authsize),
380                                              assoc, aad_size);
381
382                                 sg_init_aead(cur->sgout, cur->xoutbuf,
383                                              bs + (enc ? authsize : 0),
384                                              assoc, aad_size);
385
386                                 aead_request_set_ad(cur->req, aad_size);
387
388                                 if (!enc) {
389
390                                         aead_request_set_crypt(cur->req,
391                                                                cur->sgout,
392                                                                cur->sg,
393                                                                bs, iv);
394                                         ret = crypto_aead_encrypt(cur->req);
395                                         ret = do_one_aead_op(cur->req, ret);
396
397                                         if (ret) {
398                                                 pr_err("calculating auth failed (%d)\n",
399                                                        ret);
400                                                 break;
401                                         }
402                                 }
403
404                                 aead_request_set_crypt(cur->req, cur->sg,
405                                                        cur->sgout, bs +
406                                                        (enc ? 0 : authsize),
407                                                        iv);
408
409                         }
410
411                         if (secs) {
412                                 ret = test_mb_aead_jiffies(data, enc, bs,
413                                                            secs, num_mb);
414                                 cond_resched();
415                         } else {
416                                 ret = test_mb_aead_cycles(data, enc, bs,
417                                                           num_mb);
418                         }
419
420                         if (ret) {
421                                 pr_err("%s() failed return code=%d\n", e, ret);
422                                 break;
423                         }
424                         b_size++;
425                         i++;
426                 } while (*b_size);
427                 keysize++;
428         } while (*keysize);
429
430 out:
431         for (i = 0; i < num_mb; ++i)
432                 aead_request_free(data[i].req);
433 out_free_xoutbuf:
434         for (i = 0; i < num_mb; ++i)
435                 testmgr_free_buf(data[i].xoutbuf);
436 out_free_axbuf:
437         for (i = 0; i < num_mb; ++i)
438                 testmgr_free_buf(data[i].axbuf);
439 out_free_xbuf:
440         for (i = 0; i < num_mb; ++i)
441                 testmgr_free_buf(data[i].xbuf);
442 out_free_tfm:
443         crypto_free_aead(tfm);
444 out_free_data:
445         kfree(data);
446 out_free_iv:
447         kfree(iv);
448 }
449
450 static int test_aead_jiffies(struct aead_request *req, int enc,
451                                 int blen, int secs)
452 {
453         unsigned long start, end;
454         int bcount;
455         int ret;
456
457         for (start = jiffies, end = start + secs * HZ, bcount = 0;
458              time_before(jiffies, end); bcount++) {
459                 if (enc)
460                         ret = do_one_aead_op(req, crypto_aead_encrypt(req));
461                 else
462                         ret = do_one_aead_op(req, crypto_aead_decrypt(req));
463
464                 if (ret)
465                         return ret;
466         }
467
468         pr_cont("%d operations in %d seconds (%llu bytes)\n",
469                 bcount, secs, (u64)bcount * blen);
470         return 0;
471 }
472
473 static int test_aead_cycles(struct aead_request *req, int enc, int blen)
474 {
475         unsigned long cycles = 0;
476         int ret = 0;
477         int i;
478
479         /* Warm-up run. */
480         for (i = 0; i < 4; i++) {
481                 if (enc)
482                         ret = do_one_aead_op(req, crypto_aead_encrypt(req));
483                 else
484                         ret = do_one_aead_op(req, crypto_aead_decrypt(req));
485
486                 if (ret)
487                         goto out;
488         }
489
490         /* The real thing. */
491         for (i = 0; i < 8; i++) {
492                 cycles_t start, end;
493
494                 start = get_cycles();
495                 if (enc)
496                         ret = do_one_aead_op(req, crypto_aead_encrypt(req));
497                 else
498                         ret = do_one_aead_op(req, crypto_aead_decrypt(req));
499                 end = get_cycles();
500
501                 if (ret)
502                         goto out;
503
504                 cycles += end - start;
505         }
506
507 out:
508         if (ret == 0)
509                 printk("1 operation in %lu cycles (%d bytes)\n",
510                        (cycles + 4) / 8, blen);
511
512         return ret;
513 }
514
515 static void test_aead_speed(const char *algo, int enc, unsigned int secs,
516                             struct aead_speed_template *template,
517                             unsigned int tcount, u8 authsize,
518                             unsigned int aad_size, u8 *keysize)
519 {
520         unsigned int i, j;
521         struct crypto_aead *tfm;
522         int ret = -ENOMEM;
523         const char *key;
524         struct aead_request *req;
525         struct scatterlist *sg;
526         struct scatterlist *sgout;
527         const char *e;
528         void *assoc;
529         char *iv;
530         char *xbuf[XBUFSIZE];
531         char *xoutbuf[XBUFSIZE];
532         char *axbuf[XBUFSIZE];
533         const int *b_size;
534         unsigned int iv_len;
535         struct crypto_wait wait;
536
537         iv = kzalloc(MAX_IVLEN, GFP_KERNEL);
538         if (!iv)
539                 return;
540
541         if (aad_size >= PAGE_SIZE) {
542                 pr_err("associate data length (%u) too big\n", aad_size);
543                 goto out_noxbuf;
544         }
545
546         if (enc == ENCRYPT)
547                 e = "encryption";
548         else
549                 e = "decryption";
550
551         if (testmgr_alloc_buf(xbuf))
552                 goto out_noxbuf;
553         if (testmgr_alloc_buf(axbuf))
554                 goto out_noaxbuf;
555         if (testmgr_alloc_buf(xoutbuf))
556                 goto out_nooutbuf;
557
558         sg = kmalloc(sizeof(*sg) * 9 * 2, GFP_KERNEL);
559         if (!sg)
560                 goto out_nosg;
561         sgout = &sg[9];
562
563         tfm = crypto_alloc_aead(algo, 0, 0);
564         if (IS_ERR(tfm)) {
565                 pr_err("alg: aead: Failed to load transform for %s: %ld\n", algo,
566                        PTR_ERR(tfm));
567                 goto out_notfm;
568         }
569
570         ret = crypto_aead_setauthsize(tfm, authsize);
571         if (ret) {
572                 pr_err("alg: aead: Failed to setauthsize for %s: %d\n", algo,
573                        ret);
574                 goto out_noreq;
575         }
576
577         crypto_init_wait(&wait);
578         printk(KERN_INFO "\ntesting speed of %s (%s) %s\n", algo,
579                         get_driver_name(crypto_aead, tfm), e);
580
581         req = aead_request_alloc(tfm, GFP_KERNEL);
582         if (!req) {
583                 pr_err("alg: aead: Failed to allocate request for %s\n",
584                        algo);
585                 goto out_noreq;
586         }
587
588         aead_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
589                                   crypto_req_done, &wait);
590
591         i = 0;
592         do {
593                 b_size = aead_sizes;
594                 do {
595                         u32 bs = round_up(*b_size, crypto_aead_blocksize(tfm));
596
597                         assoc = axbuf[0];
598                         memset(assoc, 0xff, aad_size);
599
600                         if ((*keysize + bs) > TVMEMSIZE * PAGE_SIZE) {
601                                 pr_err("template (%u) too big for tvmem (%lu)\n",
602                                        *keysize + bs,
603                                         TVMEMSIZE * PAGE_SIZE);
604                                 goto out;
605                         }
606
607                         key = tvmem[0];
608                         for (j = 0; j < tcount; j++) {
609                                 if (template[j].klen == *keysize) {
610                                         key = template[j].key;
611                                         break;
612                                 }
613                         }
614
615                         ret = crypto_aead_setkey(tfm, key, *keysize);
616                         if (ret) {
617                                 pr_err("setkey() failed flags=%x: %d\n",
618                                         crypto_aead_get_flags(tfm), ret);
619                                 goto out;
620                         }
621
622                         iv_len = crypto_aead_ivsize(tfm);
623                         if (iv_len)
624                                 memset(iv, 0xff, iv_len);
625
626                         crypto_aead_clear_flags(tfm, ~0);
627                         printk(KERN_INFO "test %u (%d bit key, %d byte blocks): ",
628                                         i, *keysize * 8, bs);
629
630                         memset(tvmem[0], 0xff, PAGE_SIZE);
631
632                         sg_init_aead(sg, xbuf, bs + (enc ? 0 : authsize),
633                                      assoc, aad_size);
634
635                         sg_init_aead(sgout, xoutbuf,
636                                      bs + (enc ? authsize : 0), assoc,
637                                      aad_size);
638
639                         aead_request_set_ad(req, aad_size);
640
641                         if (!enc) {
642
643                                 /*
644                                  * For decryption we need a proper auth so
645                                  * we do the encryption path once with buffers
646                                  * reversed (input <-> output) to calculate it
647                                  */
648                                 aead_request_set_crypt(req, sgout, sg,
649                                                        bs, iv);
650                                 ret = do_one_aead_op(req,
651                                                      crypto_aead_encrypt(req));
652
653                                 if (ret) {
654                                         pr_err("calculating auth failed (%d)\n",
655                                                ret);
656                                         break;
657                                 }
658                         }
659
660                         aead_request_set_crypt(req, sg, sgout,
661                                                bs + (enc ? 0 : authsize),
662                                                iv);
663
664                         if (secs) {
665                                 ret = test_aead_jiffies(req, enc, bs,
666                                                         secs);
667                                 cond_resched();
668                         } else {
669                                 ret = test_aead_cycles(req, enc, bs);
670                         }
671
672                         if (ret) {
673                                 pr_err("%s() failed return code=%d\n", e, ret);
674                                 break;
675                         }
676                         b_size++;
677                         i++;
678                 } while (*b_size);
679                 keysize++;
680         } while (*keysize);
681
682 out:
683         aead_request_free(req);
684 out_noreq:
685         crypto_free_aead(tfm);
686 out_notfm:
687         kfree(sg);
688 out_nosg:
689         testmgr_free_buf(xoutbuf);
690 out_nooutbuf:
691         testmgr_free_buf(axbuf);
692 out_noaxbuf:
693         testmgr_free_buf(xbuf);
694 out_noxbuf:
695         kfree(iv);
696 }
697
698 static void test_hash_sg_init(struct scatterlist *sg)
699 {
700         int i;
701
702         sg_init_table(sg, TVMEMSIZE);
703         for (i = 0; i < TVMEMSIZE; i++) {
704                 sg_set_buf(sg + i, tvmem[i], PAGE_SIZE);
705                 memset(tvmem[i], 0xff, PAGE_SIZE);
706         }
707 }
708
709 static inline int do_one_ahash_op(struct ahash_request *req, int ret)
710 {
711         struct crypto_wait *wait = req->base.data;
712
713         return crypto_wait_req(ret, wait);
714 }
715
716 static int test_ahash_jiffies_digest(struct ahash_request *req, int blen,
717                                      char *out, int secs)
718 {
719         unsigned long start, end;
720         int bcount;
721         int ret;
722
723         for (start = jiffies, end = start + secs * HZ, bcount = 0;
724              time_before(jiffies, end); bcount++) {
725                 ret = do_one_ahash_op(req, crypto_ahash_digest(req));
726                 if (ret)
727                         return ret;
728         }
729
730         printk("%6u opers/sec, %9lu bytes/sec\n",
731                bcount / secs, ((long)bcount * blen) / secs);
732
733         return 0;
734 }
735
736 static int test_ahash_jiffies(struct ahash_request *req, int blen,
737                               int plen, char *out, int secs)
738 {
739         unsigned long start, end;
740         int bcount, pcount;
741         int ret;
742
743         if (plen == blen)
744                 return test_ahash_jiffies_digest(req, blen, out, secs);
745
746         for (start = jiffies, end = start + secs * HZ, bcount = 0;
747              time_before(jiffies, end); bcount++) {
748                 ret = do_one_ahash_op(req, crypto_ahash_init(req));
749                 if (ret)
750                         return ret;
751                 for (pcount = 0; pcount < blen; pcount += plen) {
752                         ret = do_one_ahash_op(req, crypto_ahash_update(req));
753                         if (ret)
754                                 return ret;
755                 }
756                 /* we assume there is enough space in 'out' for the result */
757                 ret = do_one_ahash_op(req, crypto_ahash_final(req));
758                 if (ret)
759                         return ret;
760         }
761
762         pr_cont("%6u opers/sec, %9lu bytes/sec\n",
763                 bcount / secs, ((long)bcount * blen) / secs);
764
765         return 0;
766 }
767
768 static int test_ahash_cycles_digest(struct ahash_request *req, int blen,
769                                     char *out)
770 {
771         unsigned long cycles = 0;
772         int ret, i;
773
774         /* Warm-up run. */
775         for (i = 0; i < 4; i++) {
776                 ret = do_one_ahash_op(req, crypto_ahash_digest(req));
777                 if (ret)
778                         goto out;
779         }
780
781         /* The real thing. */
782         for (i = 0; i < 8; i++) {
783                 cycles_t start, end;
784
785                 start = get_cycles();
786
787                 ret = do_one_ahash_op(req, crypto_ahash_digest(req));
788                 if (ret)
789                         goto out;
790
791                 end = get_cycles();
792
793                 cycles += end - start;
794         }
795
796 out:
797         if (ret)
798                 return ret;
799
800         pr_cont("%6lu cycles/operation, %4lu cycles/byte\n",
801                 cycles / 8, cycles / (8 * blen));
802
803         return 0;
804 }
805
806 static int test_ahash_cycles(struct ahash_request *req, int blen,
807                              int plen, char *out)
808 {
809         unsigned long cycles = 0;
810         int i, pcount, ret;
811
812         if (plen == blen)
813                 return test_ahash_cycles_digest(req, blen, out);
814
815         /* Warm-up run. */
816         for (i = 0; i < 4; i++) {
817                 ret = do_one_ahash_op(req, crypto_ahash_init(req));
818                 if (ret)
819                         goto out;
820                 for (pcount = 0; pcount < blen; pcount += plen) {
821                         ret = do_one_ahash_op(req, crypto_ahash_update(req));
822                         if (ret)
823                                 goto out;
824                 }
825                 ret = do_one_ahash_op(req, crypto_ahash_final(req));
826                 if (ret)
827                         goto out;
828         }
829
830         /* The real thing. */
831         for (i = 0; i < 8; i++) {
832                 cycles_t start, end;
833
834                 start = get_cycles();
835
836                 ret = do_one_ahash_op(req, crypto_ahash_init(req));
837                 if (ret)
838                         goto out;
839                 for (pcount = 0; pcount < blen; pcount += plen) {
840                         ret = do_one_ahash_op(req, crypto_ahash_update(req));
841                         if (ret)
842                                 goto out;
843                 }
844                 ret = do_one_ahash_op(req, crypto_ahash_final(req));
845                 if (ret)
846                         goto out;
847
848                 end = get_cycles();
849
850                 cycles += end - start;
851         }
852
853 out:
854         if (ret)
855                 return ret;
856
857         pr_cont("%6lu cycles/operation, %4lu cycles/byte\n",
858                 cycles / 8, cycles / (8 * blen));
859
860         return 0;
861 }
862
863 static void test_ahash_speed_common(const char *algo, unsigned int secs,
864                                     struct hash_speed *speed, unsigned mask)
865 {
866         struct scatterlist sg[TVMEMSIZE];
867         struct crypto_wait wait;
868         struct ahash_request *req;
869         struct crypto_ahash *tfm;
870         char *output;
871         int i, ret;
872
873         tfm = crypto_alloc_ahash(algo, 0, mask);
874         if (IS_ERR(tfm)) {
875                 pr_err("failed to load transform for %s: %ld\n",
876                        algo, PTR_ERR(tfm));
877                 return;
878         }
879
880         printk(KERN_INFO "\ntesting speed of async %s (%s)\n", algo,
881                         get_driver_name(crypto_ahash, tfm));
882
883         if (crypto_ahash_digestsize(tfm) > MAX_DIGEST_SIZE) {
884                 pr_err("digestsize(%u) > %d\n", crypto_ahash_digestsize(tfm),
885                        MAX_DIGEST_SIZE);
886                 goto out;
887         }
888
889         test_hash_sg_init(sg);
890         req = ahash_request_alloc(tfm, GFP_KERNEL);
891         if (!req) {
892                 pr_err("ahash request allocation failure\n");
893                 goto out;
894         }
895
896         crypto_init_wait(&wait);
897         ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
898                                    crypto_req_done, &wait);
899
900         output = kmalloc(MAX_DIGEST_SIZE, GFP_KERNEL);
901         if (!output)
902                 goto out_nomem;
903
904         for (i = 0; speed[i].blen != 0; i++) {
905                 if (speed[i].blen > TVMEMSIZE * PAGE_SIZE) {
906                         pr_err("template (%u) too big for tvmem (%lu)\n",
907                                speed[i].blen, TVMEMSIZE * PAGE_SIZE);
908                         break;
909                 }
910
911                 if (klen)
912                         crypto_ahash_setkey(tfm, tvmem[0], klen);
913
914                 pr_info("test%3u "
915                         "(%5u byte blocks,%5u bytes per update,%4u updates): ",
916                         i, speed[i].blen, speed[i].plen, speed[i].blen / speed[i].plen);
917
918                 ahash_request_set_crypt(req, sg, output, speed[i].plen);
919
920                 if (secs) {
921                         ret = test_ahash_jiffies(req, speed[i].blen,
922                                                  speed[i].plen, output, secs);
923                         cond_resched();
924                 } else {
925                         ret = test_ahash_cycles(req, speed[i].blen,
926                                                 speed[i].plen, output);
927                 }
928
929                 if (ret) {
930                         pr_err("hashing failed ret=%d\n", ret);
931                         break;
932                 }
933         }
934
935         kfree(output);
936
937 out_nomem:
938         ahash_request_free(req);
939
940 out:
941         crypto_free_ahash(tfm);
942 }
943
944 static void test_ahash_speed(const char *algo, unsigned int secs,
945                              struct hash_speed *speed)
946 {
947         return test_ahash_speed_common(algo, secs, speed, 0);
948 }
949
950 static void test_hash_speed(const char *algo, unsigned int secs,
951                             struct hash_speed *speed)
952 {
953         return test_ahash_speed_common(algo, secs, speed, CRYPTO_ALG_ASYNC);
954 }
955
956 struct test_mb_skcipher_data {
957         struct scatterlist sg[XBUFSIZE];
958         struct skcipher_request *req;
959         struct crypto_wait wait;
960         char *xbuf[XBUFSIZE];
961 };
962
963 static int do_mult_acipher_op(struct test_mb_skcipher_data *data, int enc,
964                                 u32 num_mb, int *rc)
965 {
966         int i, err = 0;
967
968         /* Fire up a bunch of concurrent requests */
969         for (i = 0; i < num_mb; i++) {
970                 if (enc == ENCRYPT)
971                         rc[i] = crypto_skcipher_encrypt(data[i].req);
972                 else
973                         rc[i] = crypto_skcipher_decrypt(data[i].req);
974         }
975
976         /* Wait for all requests to finish */
977         for (i = 0; i < num_mb; i++) {
978                 rc[i] = crypto_wait_req(rc[i], &data[i].wait);
979
980                 if (rc[i]) {
981                         pr_info("concurrent request %d error %d\n", i, rc[i]);
982                         err = rc[i];
983                 }
984         }
985
986         return err;
987 }
988
989 static int test_mb_acipher_jiffies(struct test_mb_skcipher_data *data, int enc,
990                                 int blen, int secs, u32 num_mb)
991 {
992         unsigned long start, end;
993         int bcount;
994         int ret = 0;
995         int *rc;
996
997         rc = kcalloc(num_mb, sizeof(*rc), GFP_KERNEL);
998         if (!rc)
999                 return -ENOMEM;
1000
1001         for (start = jiffies, end = start + secs * HZ, bcount = 0;
1002              time_before(jiffies, end); bcount++) {
1003                 ret = do_mult_acipher_op(data, enc, num_mb, rc);
1004                 if (ret)
1005                         goto out;
1006         }
1007
1008         pr_cont("%d operations in %d seconds (%llu bytes)\n",
1009                 bcount * num_mb, secs, (u64)bcount * blen * num_mb);
1010
1011 out:
1012         kfree(rc);
1013         return ret;
1014 }
1015
1016 static int test_mb_acipher_cycles(struct test_mb_skcipher_data *data, int enc,
1017                                int blen, u32 num_mb)
1018 {
1019         unsigned long cycles = 0;
1020         int ret = 0;
1021         int i;
1022         int *rc;
1023
1024         rc = kcalloc(num_mb, sizeof(*rc), GFP_KERNEL);
1025         if (!rc)
1026                 return -ENOMEM;
1027
1028         /* Warm-up run. */
1029         for (i = 0; i < 4; i++) {
1030                 ret = do_mult_acipher_op(data, enc, num_mb, rc);
1031                 if (ret)
1032                         goto out;
1033         }
1034
1035         /* The real thing. */
1036         for (i = 0; i < 8; i++) {
1037                 cycles_t start, end;
1038
1039                 start = get_cycles();
1040                 ret = do_mult_acipher_op(data, enc, num_mb, rc);
1041                 end = get_cycles();
1042
1043                 if (ret)
1044                         goto out;
1045
1046                 cycles += end - start;
1047         }
1048
1049         pr_cont("1 operation in %lu cycles (%d bytes)\n",
1050                 (cycles + 4) / (8 * num_mb), blen);
1051
1052 out:
1053         kfree(rc);
1054         return ret;
1055 }
1056
1057 static void test_mb_skcipher_speed(const char *algo, int enc, int secs,
1058                                    struct cipher_speed_template *template,
1059                                    unsigned int tcount, u8 *keysize, u32 num_mb)
1060 {
1061         struct test_mb_skcipher_data *data;
1062         struct crypto_skcipher *tfm;
1063         unsigned int i, j, iv_len;
1064         const int *b_size;
1065         const char *key;
1066         const char *e;
1067         char iv[128];
1068         int ret;
1069
1070         if (enc == ENCRYPT)
1071                 e = "encryption";
1072         else
1073                 e = "decryption";
1074
1075         data = kcalloc(num_mb, sizeof(*data), GFP_KERNEL);
1076         if (!data)
1077                 return;
1078
1079         tfm = crypto_alloc_skcipher(algo, 0, 0);
1080         if (IS_ERR(tfm)) {
1081                 pr_err("failed to load transform for %s: %ld\n",
1082                         algo, PTR_ERR(tfm));
1083                 goto out_free_data;
1084         }
1085
1086         for (i = 0; i < num_mb; ++i)
1087                 if (testmgr_alloc_buf(data[i].xbuf)) {
1088                         while (i--)
1089                                 testmgr_free_buf(data[i].xbuf);
1090                         goto out_free_tfm;
1091                 }
1092
1093         for (i = 0; i < num_mb; ++i) {
1094                 data[i].req = skcipher_request_alloc(tfm, GFP_KERNEL);
1095                 if (!data[i].req) {
1096                         pr_err("alg: skcipher: Failed to allocate request for %s\n",
1097                                algo);
1098                         while (i--)
1099                                 skcipher_request_free(data[i].req);
1100                         goto out_free_xbuf;
1101                 }
1102         }
1103
1104         for (i = 0; i < num_mb; ++i) {
1105                 skcipher_request_set_callback(data[i].req,
1106                                               CRYPTO_TFM_REQ_MAY_BACKLOG,
1107                                               crypto_req_done, &data[i].wait);
1108                 crypto_init_wait(&data[i].wait);
1109         }
1110
1111         pr_info("\ntesting speed of multibuffer %s (%s) %s\n", algo,
1112                 get_driver_name(crypto_skcipher, tfm), e);
1113
1114         i = 0;
1115         do {
1116                 b_size = block_sizes;
1117                 do {
1118                         u32 bs = round_up(*b_size, crypto_skcipher_blocksize(tfm));
1119
1120                         if (bs > XBUFSIZE * PAGE_SIZE) {
1121                                 pr_err("template (%u) too big for buffer (%lu)\n",
1122                                        bs, XBUFSIZE * PAGE_SIZE);
1123                                 goto out;
1124                         }
1125
1126                         pr_info("test %u (%d bit key, %d byte blocks): ", i,
1127                                 *keysize * 8, bs);
1128
1129                         /* Set up tfm global state, i.e. the key */
1130
1131                         memset(tvmem[0], 0xff, PAGE_SIZE);
1132                         key = tvmem[0];
1133                         for (j = 0; j < tcount; j++) {
1134                                 if (template[j].klen == *keysize) {
1135                                         key = template[j].key;
1136                                         break;
1137                                 }
1138                         }
1139
1140                         crypto_skcipher_clear_flags(tfm, ~0);
1141
1142                         ret = crypto_skcipher_setkey(tfm, key, *keysize);
1143                         if (ret) {
1144                                 pr_err("setkey() failed flags=%x\n",
1145                                        crypto_skcipher_get_flags(tfm));
1146                                 goto out;
1147                         }
1148
1149                         iv_len = crypto_skcipher_ivsize(tfm);
1150                         if (iv_len)
1151                                 memset(&iv, 0xff, iv_len);
1152
1153                         /* Now setup per request stuff, i.e. buffers */
1154
1155                         for (j = 0; j < num_mb; ++j) {
1156                                 struct test_mb_skcipher_data *cur = &data[j];
1157                                 unsigned int k = bs;
1158                                 unsigned int pages = DIV_ROUND_UP(k, PAGE_SIZE);
1159                                 unsigned int p = 0;
1160
1161                                 sg_init_table(cur->sg, pages);
1162
1163                                 while (k > PAGE_SIZE) {
1164                                         sg_set_buf(cur->sg + p, cur->xbuf[p],
1165                                                    PAGE_SIZE);
1166                                         memset(cur->xbuf[p], 0xff, PAGE_SIZE);
1167                                         p++;
1168                                         k -= PAGE_SIZE;
1169                                 }
1170
1171                                 sg_set_buf(cur->sg + p, cur->xbuf[p], k);
1172                                 memset(cur->xbuf[p], 0xff, k);
1173
1174                                 skcipher_request_set_crypt(cur->req, cur->sg,
1175                                                            cur->sg, bs, iv);
1176                         }
1177
1178                         if (secs) {
1179                                 ret = test_mb_acipher_jiffies(data, enc,
1180                                                               bs, secs,
1181                                                               num_mb);
1182                                 cond_resched();
1183                         } else {
1184                                 ret = test_mb_acipher_cycles(data, enc,
1185                                                              bs, num_mb);
1186                         }
1187
1188                         if (ret) {
1189                                 pr_err("%s() failed flags=%x\n", e,
1190                                        crypto_skcipher_get_flags(tfm));
1191                                 break;
1192                         }
1193                         b_size++;
1194                         i++;
1195                 } while (*b_size);
1196                 keysize++;
1197         } while (*keysize);
1198
1199 out:
1200         for (i = 0; i < num_mb; ++i)
1201                 skcipher_request_free(data[i].req);
1202 out_free_xbuf:
1203         for (i = 0; i < num_mb; ++i)
1204                 testmgr_free_buf(data[i].xbuf);
1205 out_free_tfm:
1206         crypto_free_skcipher(tfm);
1207 out_free_data:
1208         kfree(data);
1209 }
1210
1211 static inline int do_one_acipher_op(struct skcipher_request *req, int ret)
1212 {
1213         struct crypto_wait *wait = req->base.data;
1214
1215         return crypto_wait_req(ret, wait);
1216 }
1217
1218 static int test_acipher_jiffies(struct skcipher_request *req, int enc,
1219                                 int blen, int secs)
1220 {
1221         unsigned long start, end;
1222         int bcount;
1223         int ret;
1224
1225         for (start = jiffies, end = start + secs * HZ, bcount = 0;
1226              time_before(jiffies, end); bcount++) {
1227                 if (enc)
1228                         ret = do_one_acipher_op(req,
1229                                                 crypto_skcipher_encrypt(req));
1230                 else
1231                         ret = do_one_acipher_op(req,
1232                                                 crypto_skcipher_decrypt(req));
1233
1234                 if (ret)
1235                         return ret;
1236         }
1237
1238         pr_cont("%d operations in %d seconds (%llu bytes)\n",
1239                 bcount, secs, (u64)bcount * blen);
1240         return 0;
1241 }
1242
1243 static int test_acipher_cycles(struct skcipher_request *req, int enc,
1244                                int blen)
1245 {
1246         unsigned long cycles = 0;
1247         int ret = 0;
1248         int i;
1249
1250         /* Warm-up run. */
1251         for (i = 0; i < 4; i++) {
1252                 if (enc)
1253                         ret = do_one_acipher_op(req,
1254                                                 crypto_skcipher_encrypt(req));
1255                 else
1256                         ret = do_one_acipher_op(req,
1257                                                 crypto_skcipher_decrypt(req));
1258
1259                 if (ret)
1260                         goto out;
1261         }
1262
1263         /* The real thing. */
1264         for (i = 0; i < 8; i++) {
1265                 cycles_t start, end;
1266
1267                 start = get_cycles();
1268                 if (enc)
1269                         ret = do_one_acipher_op(req,
1270                                                 crypto_skcipher_encrypt(req));
1271                 else
1272                         ret = do_one_acipher_op(req,
1273                                                 crypto_skcipher_decrypt(req));
1274                 end = get_cycles();
1275
1276                 if (ret)
1277                         goto out;
1278
1279                 cycles += end - start;
1280         }
1281
1282 out:
1283         if (ret == 0)
1284                 pr_cont("1 operation in %lu cycles (%d bytes)\n",
1285                         (cycles + 4) / 8, blen);
1286
1287         return ret;
1288 }
1289
1290 static void test_skcipher_speed(const char *algo, int enc, unsigned int secs,
1291                                 struct cipher_speed_template *template,
1292                                 unsigned int tcount, u8 *keysize, bool async)
1293 {
1294         unsigned int ret, i, j, k, iv_len;
1295         struct crypto_wait wait;
1296         const char *key;
1297         char iv[128];
1298         struct skcipher_request *req;
1299         struct crypto_skcipher *tfm;
1300         const int *b_size;
1301         const char *e;
1302
1303         if (enc == ENCRYPT)
1304                 e = "encryption";
1305         else
1306                 e = "decryption";
1307
1308         crypto_init_wait(&wait);
1309
1310         tfm = crypto_alloc_skcipher(algo, 0, async ? 0 : CRYPTO_ALG_ASYNC);
1311
1312         if (IS_ERR(tfm)) {
1313                 pr_err("failed to load transform for %s: %ld\n", algo,
1314                        PTR_ERR(tfm));
1315                 return;
1316         }
1317
1318         pr_info("\ntesting speed of %s %s (%s) %s\n", async ? "async" : "sync",
1319                 algo, get_driver_name(crypto_skcipher, tfm), e);
1320
1321         req = skcipher_request_alloc(tfm, GFP_KERNEL);
1322         if (!req) {
1323                 pr_err("tcrypt: skcipher: Failed to allocate request for %s\n",
1324                        algo);
1325                 goto out;
1326         }
1327
1328         skcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
1329                                       crypto_req_done, &wait);
1330
1331         i = 0;
1332         do {
1333                 b_size = block_sizes;
1334
1335                 do {
1336                         u32 bs = round_up(*b_size, crypto_skcipher_blocksize(tfm));
1337                         struct scatterlist sg[TVMEMSIZE];
1338
1339                         if ((*keysize + bs) > TVMEMSIZE * PAGE_SIZE) {
1340                                 pr_err("template (%u) too big for "
1341                                        "tvmem (%lu)\n", *keysize + bs,
1342                                        TVMEMSIZE * PAGE_SIZE);
1343                                 goto out_free_req;
1344                         }
1345
1346                         pr_info("test %u (%d bit key, %d byte blocks): ", i,
1347                                 *keysize * 8, bs);
1348
1349                         memset(tvmem[0], 0xff, PAGE_SIZE);
1350
1351                         /* set key, plain text and IV */
1352                         key = tvmem[0];
1353                         for (j = 0; j < tcount; j++) {
1354                                 if (template[j].klen == *keysize) {
1355                                         key = template[j].key;
1356                                         break;
1357                                 }
1358                         }
1359
1360                         crypto_skcipher_clear_flags(tfm, ~0);
1361
1362                         ret = crypto_skcipher_setkey(tfm, key, *keysize);
1363                         if (ret) {
1364                                 pr_err("setkey() failed flags=%x\n",
1365                                         crypto_skcipher_get_flags(tfm));
1366                                 goto out_free_req;
1367                         }
1368
1369                         k = *keysize + bs;
1370                         sg_init_table(sg, DIV_ROUND_UP(k, PAGE_SIZE));
1371
1372                         if (k > PAGE_SIZE) {
1373                                 sg_set_buf(sg, tvmem[0] + *keysize,
1374                                    PAGE_SIZE - *keysize);
1375                                 k -= PAGE_SIZE;
1376                                 j = 1;
1377                                 while (k > PAGE_SIZE) {
1378                                         sg_set_buf(sg + j, tvmem[j], PAGE_SIZE);
1379                                         memset(tvmem[j], 0xff, PAGE_SIZE);
1380                                         j++;
1381                                         k -= PAGE_SIZE;
1382                                 }
1383                                 sg_set_buf(sg + j, tvmem[j], k);
1384                                 memset(tvmem[j], 0xff, k);
1385                         } else {
1386                                 sg_set_buf(sg, tvmem[0] + *keysize, bs);
1387                         }
1388
1389                         iv_len = crypto_skcipher_ivsize(tfm);
1390                         if (iv_len)
1391                                 memset(&iv, 0xff, iv_len);
1392
1393                         skcipher_request_set_crypt(req, sg, sg, bs, iv);
1394
1395                         if (secs) {
1396                                 ret = test_acipher_jiffies(req, enc,
1397                                                            bs, secs);
1398                                 cond_resched();
1399                         } else {
1400                                 ret = test_acipher_cycles(req, enc,
1401                                                           bs);
1402                         }
1403
1404                         if (ret) {
1405                                 pr_err("%s() failed flags=%x\n", e,
1406                                        crypto_skcipher_get_flags(tfm));
1407                                 break;
1408                         }
1409                         b_size++;
1410                         i++;
1411                 } while (*b_size);
1412                 keysize++;
1413         } while (*keysize);
1414
1415 out_free_req:
1416         skcipher_request_free(req);
1417 out:
1418         crypto_free_skcipher(tfm);
1419 }
1420
1421 static void test_acipher_speed(const char *algo, int enc, unsigned int secs,
1422                                struct cipher_speed_template *template,
1423                                unsigned int tcount, u8 *keysize)
1424 {
1425         return test_skcipher_speed(algo, enc, secs, template, tcount, keysize,
1426                                    true);
1427 }
1428
1429 static void test_cipher_speed(const char *algo, int enc, unsigned int secs,
1430                               struct cipher_speed_template *template,
1431                               unsigned int tcount, u8 *keysize)
1432 {
1433         return test_skcipher_speed(algo, enc, secs, template, tcount, keysize,
1434                                    false);
1435 }
1436
1437 static inline int tcrypt_test(const char *alg)
1438 {
1439         int ret;
1440
1441         pr_debug("testing %s\n", alg);
1442
1443         ret = alg_test(alg, alg, 0, 0);
1444         /* non-fips algs return -EINVAL or -ECANCELED in fips mode */
1445         if (fips_enabled && (ret == -EINVAL || ret == -ECANCELED))
1446                 ret = 0;
1447         return ret;
1448 }
1449
1450 static int do_test(const char *alg, u32 type, u32 mask, int m, u32 num_mb)
1451 {
1452         int i;
1453         int ret = 0;
1454
1455         switch (m) {
1456         case 0:
1457                 if (alg) {
1458                         if (!crypto_has_alg(alg, type,
1459                                             mask ?: CRYPTO_ALG_TYPE_MASK))
1460                                 ret = -ENOENT;
1461                         break;
1462                 }
1463
1464                 for (i = 1; i < 200; i++)
1465                         ret = min(ret, do_test(NULL, 0, 0, i, num_mb));
1466                 break;
1467
1468         case 1:
1469                 ret = min(ret, tcrypt_test("md5"));
1470                 break;
1471
1472         case 2:
1473                 ret = min(ret, tcrypt_test("sha1"));
1474                 break;
1475
1476         case 3:
1477                 ret = min(ret, tcrypt_test("ecb(des)"));
1478                 ret = min(ret, tcrypt_test("cbc(des)"));
1479                 ret = min(ret, tcrypt_test("ctr(des)"));
1480                 break;
1481
1482         case 4:
1483                 ret = min(ret, tcrypt_test("ecb(des3_ede)"));
1484                 ret = min(ret, tcrypt_test("cbc(des3_ede)"));
1485                 ret = min(ret, tcrypt_test("ctr(des3_ede)"));
1486                 break;
1487
1488         case 5:
1489                 ret = min(ret, tcrypt_test("md4"));
1490                 break;
1491
1492         case 6:
1493                 ret = min(ret, tcrypt_test("sha256"));
1494                 break;
1495
1496         case 7:
1497                 ret = min(ret, tcrypt_test("ecb(blowfish)"));
1498                 ret = min(ret, tcrypt_test("cbc(blowfish)"));
1499                 ret = min(ret, tcrypt_test("ctr(blowfish)"));
1500                 break;
1501
1502         case 8:
1503                 ret = min(ret, tcrypt_test("ecb(twofish)"));
1504                 ret = min(ret, tcrypt_test("cbc(twofish)"));
1505                 ret = min(ret, tcrypt_test("ctr(twofish)"));
1506                 ret = min(ret, tcrypt_test("lrw(twofish)"));
1507                 ret = min(ret, tcrypt_test("xts(twofish)"));
1508                 break;
1509
1510         case 9:
1511                 ret = min(ret, tcrypt_test("ecb(serpent)"));
1512                 ret = min(ret, tcrypt_test("cbc(serpent)"));
1513                 ret = min(ret, tcrypt_test("ctr(serpent)"));
1514                 ret = min(ret, tcrypt_test("lrw(serpent)"));
1515                 ret = min(ret, tcrypt_test("xts(serpent)"));
1516                 break;
1517
1518         case 10:
1519                 ret = min(ret, tcrypt_test("ecb(aes)"));
1520                 ret = min(ret, tcrypt_test("cbc(aes)"));
1521                 ret = min(ret, tcrypt_test("lrw(aes)"));
1522                 ret = min(ret, tcrypt_test("xts(aes)"));
1523                 ret = min(ret, tcrypt_test("ctr(aes)"));
1524                 ret = min(ret, tcrypt_test("rfc3686(ctr(aes))"));
1525                 ret = min(ret, tcrypt_test("ofb(aes)"));
1526                 ret = min(ret, tcrypt_test("cfb(aes)"));
1527                 ret = min(ret, tcrypt_test("xctr(aes)"));
1528                 break;
1529
1530         case 11:
1531                 ret = min(ret, tcrypt_test("sha384"));
1532                 break;
1533
1534         case 12:
1535                 ret = min(ret, tcrypt_test("sha512"));
1536                 break;
1537
1538         case 13:
1539                 ret = min(ret, tcrypt_test("deflate"));
1540                 break;
1541
1542         case 14:
1543                 ret = min(ret, tcrypt_test("ecb(cast5)"));
1544                 ret = min(ret, tcrypt_test("cbc(cast5)"));
1545                 ret = min(ret, tcrypt_test("ctr(cast5)"));
1546                 break;
1547
1548         case 15:
1549                 ret = min(ret, tcrypt_test("ecb(cast6)"));
1550                 ret = min(ret, tcrypt_test("cbc(cast6)"));
1551                 ret = min(ret, tcrypt_test("ctr(cast6)"));
1552                 ret = min(ret, tcrypt_test("lrw(cast6)"));
1553                 ret = min(ret, tcrypt_test("xts(cast6)"));
1554                 break;
1555
1556         case 16:
1557                 ret = min(ret, tcrypt_test("ecb(arc4)"));
1558                 break;
1559
1560         case 17:
1561                 ret = min(ret, tcrypt_test("michael_mic"));
1562                 break;
1563
1564         case 18:
1565                 ret = min(ret, tcrypt_test("crc32c"));
1566                 break;
1567
1568         case 19:
1569                 ret = min(ret, tcrypt_test("ecb(tea)"));
1570                 break;
1571
1572         case 20:
1573                 ret = min(ret, tcrypt_test("ecb(xtea)"));
1574                 break;
1575
1576         case 21:
1577                 ret = min(ret, tcrypt_test("ecb(khazad)"));
1578                 break;
1579
1580         case 22:
1581                 ret = min(ret, tcrypt_test("wp512"));
1582                 break;
1583
1584         case 23:
1585                 ret = min(ret, tcrypt_test("wp384"));
1586                 break;
1587
1588         case 24:
1589                 ret = min(ret, tcrypt_test("wp256"));
1590                 break;
1591
1592         case 26:
1593                 ret = min(ret, tcrypt_test("ecb(anubis)"));
1594                 ret = min(ret, tcrypt_test("cbc(anubis)"));
1595                 break;
1596
1597         case 30:
1598                 ret = min(ret, tcrypt_test("ecb(xeta)"));
1599                 break;
1600
1601         case 31:
1602                 ret = min(ret, tcrypt_test("pcbc(fcrypt)"));
1603                 break;
1604
1605         case 32:
1606                 ret = min(ret, tcrypt_test("ecb(camellia)"));
1607                 ret = min(ret, tcrypt_test("cbc(camellia)"));
1608                 ret = min(ret, tcrypt_test("ctr(camellia)"));
1609                 ret = min(ret, tcrypt_test("lrw(camellia)"));
1610                 ret = min(ret, tcrypt_test("xts(camellia)"));
1611                 break;
1612
1613         case 33:
1614                 ret = min(ret, tcrypt_test("sha224"));
1615                 break;
1616
1617         case 35:
1618                 ret = min(ret, tcrypt_test("gcm(aes)"));
1619                 break;
1620
1621         case 36:
1622                 ret = min(ret, tcrypt_test("lzo"));
1623                 break;
1624
1625         case 37:
1626                 ret = min(ret, tcrypt_test("ccm(aes)"));
1627                 break;
1628
1629         case 38:
1630                 ret = min(ret, tcrypt_test("cts(cbc(aes))"));
1631                 break;
1632
1633         case 39:
1634                 ret = min(ret, tcrypt_test("xxhash64"));
1635                 break;
1636
1637         case 40:
1638                 ret = min(ret, tcrypt_test("rmd160"));
1639                 break;
1640
1641         case 42:
1642                 ret = min(ret, tcrypt_test("blake2b-512"));
1643                 break;
1644
1645         case 43:
1646                 ret = min(ret, tcrypt_test("ecb(seed)"));
1647                 break;
1648
1649         case 45:
1650                 ret = min(ret, tcrypt_test("rfc4309(ccm(aes))"));
1651                 break;
1652
1653         case 46:
1654                 ret = min(ret, tcrypt_test("ghash"));
1655                 break;
1656
1657         case 47:
1658                 ret = min(ret, tcrypt_test("crct10dif"));
1659                 break;
1660
1661         case 48:
1662                 ret = min(ret, tcrypt_test("sha3-224"));
1663                 break;
1664
1665         case 49:
1666                 ret = min(ret, tcrypt_test("sha3-256"));
1667                 break;
1668
1669         case 50:
1670                 ret = min(ret, tcrypt_test("sha3-384"));
1671                 break;
1672
1673         case 51:
1674                 ret = min(ret, tcrypt_test("sha3-512"));
1675                 break;
1676
1677         case 52:
1678                 ret = min(ret, tcrypt_test("sm3"));
1679                 break;
1680
1681         case 53:
1682                 ret = min(ret, tcrypt_test("streebog256"));
1683                 break;
1684
1685         case 54:
1686                 ret = min(ret, tcrypt_test("streebog512"));
1687                 break;
1688
1689         case 55:
1690                 ret = min(ret, tcrypt_test("gcm(sm4)"));
1691                 break;
1692
1693         case 56:
1694                 ret = min(ret, tcrypt_test("ccm(sm4)"));
1695                 break;
1696
1697         case 57:
1698                 ret = min(ret, tcrypt_test("polyval"));
1699                 break;
1700
1701         case 58:
1702                 ret = min(ret, tcrypt_test("gcm(aria)"));
1703                 break;
1704
1705         case 100:
1706                 ret = min(ret, tcrypt_test("hmac(md5)"));
1707                 break;
1708
1709         case 101:
1710                 ret = min(ret, tcrypt_test("hmac(sha1)"));
1711                 break;
1712
1713         case 102:
1714                 ret = min(ret, tcrypt_test("hmac(sha256)"));
1715                 break;
1716
1717         case 103:
1718                 ret = min(ret, tcrypt_test("hmac(sha384)"));
1719                 break;
1720
1721         case 104:
1722                 ret = min(ret, tcrypt_test("hmac(sha512)"));
1723                 break;
1724
1725         case 105:
1726                 ret = min(ret, tcrypt_test("hmac(sha224)"));
1727                 break;
1728
1729         case 106:
1730                 ret = min(ret, tcrypt_test("xcbc(aes)"));
1731                 break;
1732
1733         case 108:
1734                 ret = min(ret, tcrypt_test("hmac(rmd160)"));
1735                 break;
1736
1737         case 109:
1738                 ret = min(ret, tcrypt_test("vmac64(aes)"));
1739                 break;
1740
1741         case 111:
1742                 ret = min(ret, tcrypt_test("hmac(sha3-224)"));
1743                 break;
1744
1745         case 112:
1746                 ret = min(ret, tcrypt_test("hmac(sha3-256)"));
1747                 break;
1748
1749         case 113:
1750                 ret = min(ret, tcrypt_test("hmac(sha3-384)"));
1751                 break;
1752
1753         case 114:
1754                 ret = min(ret, tcrypt_test("hmac(sha3-512)"));
1755                 break;
1756
1757         case 115:
1758                 ret = min(ret, tcrypt_test("hmac(streebog256)"));
1759                 break;
1760
1761         case 116:
1762                 ret = min(ret, tcrypt_test("hmac(streebog512)"));
1763                 break;
1764
1765         case 150:
1766                 ret = min(ret, tcrypt_test("ansi_cprng"));
1767                 break;
1768
1769         case 151:
1770                 ret = min(ret, tcrypt_test("rfc4106(gcm(aes))"));
1771                 break;
1772
1773         case 152:
1774                 ret = min(ret, tcrypt_test("rfc4543(gcm(aes))"));
1775                 break;
1776
1777         case 153:
1778                 ret = min(ret, tcrypt_test("cmac(aes)"));
1779                 break;
1780
1781         case 154:
1782                 ret = min(ret, tcrypt_test("cmac(des3_ede)"));
1783                 break;
1784
1785         case 155:
1786                 ret = min(ret, tcrypt_test("authenc(hmac(sha1),cbc(aes))"));
1787                 break;
1788
1789         case 156:
1790                 ret = min(ret, tcrypt_test("authenc(hmac(md5),ecb(cipher_null))"));
1791                 break;
1792
1793         case 157:
1794                 ret = min(ret, tcrypt_test("authenc(hmac(sha1),ecb(cipher_null))"));
1795                 break;
1796
1797         case 158:
1798                 ret = min(ret, tcrypt_test("cbcmac(sm4)"));
1799                 break;
1800
1801         case 159:
1802                 ret = min(ret, tcrypt_test("cmac(sm4)"));
1803                 break;
1804
1805         case 181:
1806                 ret = min(ret, tcrypt_test("authenc(hmac(sha1),cbc(des))"));
1807                 break;
1808         case 182:
1809                 ret = min(ret, tcrypt_test("authenc(hmac(sha1),cbc(des3_ede))"));
1810                 break;
1811         case 183:
1812                 ret = min(ret, tcrypt_test("authenc(hmac(sha224),cbc(des))"));
1813                 break;
1814         case 184:
1815                 ret = min(ret, tcrypt_test("authenc(hmac(sha224),cbc(des3_ede))"));
1816                 break;
1817         case 185:
1818                 ret = min(ret, tcrypt_test("authenc(hmac(sha256),cbc(des))"));
1819                 break;
1820         case 186:
1821                 ret = min(ret, tcrypt_test("authenc(hmac(sha256),cbc(des3_ede))"));
1822                 break;
1823         case 187:
1824                 ret = min(ret, tcrypt_test("authenc(hmac(sha384),cbc(des))"));
1825                 break;
1826         case 188:
1827                 ret = min(ret, tcrypt_test("authenc(hmac(sha384),cbc(des3_ede))"));
1828                 break;
1829         case 189:
1830                 ret = min(ret, tcrypt_test("authenc(hmac(sha512),cbc(des))"));
1831                 break;
1832         case 190:
1833                 ret = min(ret, tcrypt_test("authenc(hmac(sha512),cbc(des3_ede))"));
1834                 break;
1835         case 191:
1836                 ret = min(ret, tcrypt_test("ecb(sm4)"));
1837                 ret = min(ret, tcrypt_test("cbc(sm4)"));
1838                 ret = min(ret, tcrypt_test("cfb(sm4)"));
1839                 ret = min(ret, tcrypt_test("ctr(sm4)"));
1840                 break;
1841         case 192:
1842                 ret = min(ret, tcrypt_test("ecb(aria)"));
1843                 ret = min(ret, tcrypt_test("cbc(aria)"));
1844                 ret = min(ret, tcrypt_test("cfb(aria)"));
1845                 ret = min(ret, tcrypt_test("ctr(aria)"));
1846                 break;
1847         case 200:
1848                 test_cipher_speed("ecb(aes)", ENCRYPT, sec, NULL, 0,
1849                                 speed_template_16_24_32);
1850                 test_cipher_speed("ecb(aes)", DECRYPT, sec, NULL, 0,
1851                                 speed_template_16_24_32);
1852                 test_cipher_speed("cbc(aes)", ENCRYPT, sec, NULL, 0,
1853                                 speed_template_16_24_32);
1854                 test_cipher_speed("cbc(aes)", DECRYPT, sec, NULL, 0,
1855                                 speed_template_16_24_32);
1856                 test_cipher_speed("lrw(aes)", ENCRYPT, sec, NULL, 0,
1857                                 speed_template_32_40_48);
1858                 test_cipher_speed("lrw(aes)", DECRYPT, sec, NULL, 0,
1859                                 speed_template_32_40_48);
1860                 test_cipher_speed("xts(aes)", ENCRYPT, sec, NULL, 0,
1861                                 speed_template_32_64);
1862                 test_cipher_speed("xts(aes)", DECRYPT, sec, NULL, 0,
1863                                 speed_template_32_64);
1864                 test_cipher_speed("cts(cbc(aes))", ENCRYPT, sec, NULL, 0,
1865                                 speed_template_16_24_32);
1866                 test_cipher_speed("cts(cbc(aes))", DECRYPT, sec, NULL, 0,
1867                                 speed_template_16_24_32);
1868                 test_cipher_speed("ctr(aes)", ENCRYPT, sec, NULL, 0,
1869                                 speed_template_16_24_32);
1870                 test_cipher_speed("ctr(aes)", DECRYPT, sec, NULL, 0,
1871                                 speed_template_16_24_32);
1872                 test_cipher_speed("cfb(aes)", ENCRYPT, sec, NULL, 0,
1873                                 speed_template_16_24_32);
1874                 test_cipher_speed("cfb(aes)", DECRYPT, sec, NULL, 0,
1875                                 speed_template_16_24_32);
1876                 break;
1877
1878         case 201:
1879                 test_cipher_speed("ecb(des3_ede)", ENCRYPT, sec,
1880                                 des3_speed_template, DES3_SPEED_VECTORS,
1881                                 speed_template_24);
1882                 test_cipher_speed("ecb(des3_ede)", DECRYPT, sec,
1883                                 des3_speed_template, DES3_SPEED_VECTORS,
1884                                 speed_template_24);
1885                 test_cipher_speed("cbc(des3_ede)", ENCRYPT, sec,
1886                                 des3_speed_template, DES3_SPEED_VECTORS,
1887                                 speed_template_24);
1888                 test_cipher_speed("cbc(des3_ede)", DECRYPT, sec,
1889                                 des3_speed_template, DES3_SPEED_VECTORS,
1890                                 speed_template_24);
1891                 test_cipher_speed("ctr(des3_ede)", ENCRYPT, sec,
1892                                 des3_speed_template, DES3_SPEED_VECTORS,
1893                                 speed_template_24);
1894                 test_cipher_speed("ctr(des3_ede)", DECRYPT, sec,
1895                                 des3_speed_template, DES3_SPEED_VECTORS,
1896                                 speed_template_24);
1897                 break;
1898
1899         case 202:
1900                 test_cipher_speed("ecb(twofish)", ENCRYPT, sec, NULL, 0,
1901                                 speed_template_16_24_32);
1902                 test_cipher_speed("ecb(twofish)", DECRYPT, sec, NULL, 0,
1903                                 speed_template_16_24_32);
1904                 test_cipher_speed("cbc(twofish)", ENCRYPT, sec, NULL, 0,
1905                                 speed_template_16_24_32);
1906                 test_cipher_speed("cbc(twofish)", DECRYPT, sec, NULL, 0,
1907                                 speed_template_16_24_32);
1908                 test_cipher_speed("ctr(twofish)", ENCRYPT, sec, NULL, 0,
1909                                 speed_template_16_24_32);
1910                 test_cipher_speed("ctr(twofish)", DECRYPT, sec, NULL, 0,
1911                                 speed_template_16_24_32);
1912                 test_cipher_speed("lrw(twofish)", ENCRYPT, sec, NULL, 0,
1913                                 speed_template_32_40_48);
1914                 test_cipher_speed("lrw(twofish)", DECRYPT, sec, NULL, 0,
1915                                 speed_template_32_40_48);
1916                 test_cipher_speed("xts(twofish)", ENCRYPT, sec, NULL, 0,
1917                                 speed_template_32_48_64);
1918                 test_cipher_speed("xts(twofish)", DECRYPT, sec, NULL, 0,
1919                                 speed_template_32_48_64);
1920                 break;
1921
1922         case 203:
1923                 test_cipher_speed("ecb(blowfish)", ENCRYPT, sec, NULL, 0,
1924                                   speed_template_8_32);
1925                 test_cipher_speed("ecb(blowfish)", DECRYPT, sec, NULL, 0,
1926                                   speed_template_8_32);
1927                 test_cipher_speed("cbc(blowfish)", ENCRYPT, sec, NULL, 0,
1928                                   speed_template_8_32);
1929                 test_cipher_speed("cbc(blowfish)", DECRYPT, sec, NULL, 0,
1930                                   speed_template_8_32);
1931                 test_cipher_speed("ctr(blowfish)", ENCRYPT, sec, NULL, 0,
1932                                   speed_template_8_32);
1933                 test_cipher_speed("ctr(blowfish)", DECRYPT, sec, NULL, 0,
1934                                   speed_template_8_32);
1935                 break;
1936
1937         case 204:
1938                 test_cipher_speed("ecb(des)", ENCRYPT, sec, NULL, 0,
1939                                   speed_template_8);
1940                 test_cipher_speed("ecb(des)", DECRYPT, sec, NULL, 0,
1941                                   speed_template_8);
1942                 test_cipher_speed("cbc(des)", ENCRYPT, sec, NULL, 0,
1943                                   speed_template_8);
1944                 test_cipher_speed("cbc(des)", DECRYPT, sec, NULL, 0,
1945                                   speed_template_8);
1946                 break;
1947
1948         case 205:
1949                 test_cipher_speed("ecb(camellia)", ENCRYPT, sec, NULL, 0,
1950                                 speed_template_16_24_32);
1951                 test_cipher_speed("ecb(camellia)", DECRYPT, sec, NULL, 0,
1952                                 speed_template_16_24_32);
1953                 test_cipher_speed("cbc(camellia)", ENCRYPT, sec, NULL, 0,
1954                                 speed_template_16_24_32);
1955                 test_cipher_speed("cbc(camellia)", DECRYPT, sec, NULL, 0,
1956                                 speed_template_16_24_32);
1957                 test_cipher_speed("ctr(camellia)", ENCRYPT, sec, NULL, 0,
1958                                 speed_template_16_24_32);
1959                 test_cipher_speed("ctr(camellia)", DECRYPT, sec, NULL, 0,
1960                                 speed_template_16_24_32);
1961                 test_cipher_speed("lrw(camellia)", ENCRYPT, sec, NULL, 0,
1962                                 speed_template_32_40_48);
1963                 test_cipher_speed("lrw(camellia)", DECRYPT, sec, NULL, 0,
1964                                 speed_template_32_40_48);
1965                 test_cipher_speed("xts(camellia)", ENCRYPT, sec, NULL, 0,
1966                                 speed_template_32_48_64);
1967                 test_cipher_speed("xts(camellia)", DECRYPT, sec, NULL, 0,
1968                                 speed_template_32_48_64);
1969                 break;
1970
1971         case 207:
1972                 test_cipher_speed("ecb(serpent)", ENCRYPT, sec, NULL, 0,
1973                                   speed_template_16_32);
1974                 test_cipher_speed("ecb(serpent)", DECRYPT, sec, NULL, 0,
1975                                   speed_template_16_32);
1976                 test_cipher_speed("cbc(serpent)", ENCRYPT, sec, NULL, 0,
1977                                   speed_template_16_32);
1978                 test_cipher_speed("cbc(serpent)", DECRYPT, sec, NULL, 0,
1979                                   speed_template_16_32);
1980                 test_cipher_speed("ctr(serpent)", ENCRYPT, sec, NULL, 0,
1981                                   speed_template_16_32);
1982                 test_cipher_speed("ctr(serpent)", DECRYPT, sec, NULL, 0,
1983                                   speed_template_16_32);
1984                 test_cipher_speed("lrw(serpent)", ENCRYPT, sec, NULL, 0,
1985                                   speed_template_32_48);
1986                 test_cipher_speed("lrw(serpent)", DECRYPT, sec, NULL, 0,
1987                                   speed_template_32_48);
1988                 test_cipher_speed("xts(serpent)", ENCRYPT, sec, NULL, 0,
1989                                   speed_template_32_64);
1990                 test_cipher_speed("xts(serpent)", DECRYPT, sec, NULL, 0,
1991                                   speed_template_32_64);
1992                 break;
1993
1994         case 208:
1995                 test_cipher_speed("ecb(arc4)", ENCRYPT, sec, NULL, 0,
1996                                   speed_template_8);
1997                 break;
1998
1999         case 209:
2000                 test_cipher_speed("ecb(cast5)", ENCRYPT, sec, NULL, 0,
2001                                   speed_template_8_16);
2002                 test_cipher_speed("ecb(cast5)", DECRYPT, sec, NULL, 0,
2003                                   speed_template_8_16);
2004                 test_cipher_speed("cbc(cast5)", ENCRYPT, sec, NULL, 0,
2005                                   speed_template_8_16);
2006                 test_cipher_speed("cbc(cast5)", DECRYPT, sec, NULL, 0,
2007                                   speed_template_8_16);
2008                 test_cipher_speed("ctr(cast5)", ENCRYPT, sec, NULL, 0,
2009                                   speed_template_8_16);
2010                 test_cipher_speed("ctr(cast5)", DECRYPT, sec, NULL, 0,
2011                                   speed_template_8_16);
2012                 break;
2013
2014         case 210:
2015                 test_cipher_speed("ecb(cast6)", ENCRYPT, sec, NULL, 0,
2016                                   speed_template_16_32);
2017                 test_cipher_speed("ecb(cast6)", DECRYPT, sec, NULL, 0,
2018                                   speed_template_16_32);
2019                 test_cipher_speed("cbc(cast6)", ENCRYPT, sec, NULL, 0,
2020                                   speed_template_16_32);
2021                 test_cipher_speed("cbc(cast6)", DECRYPT, sec, NULL, 0,
2022                                   speed_template_16_32);
2023                 test_cipher_speed("ctr(cast6)", ENCRYPT, sec, NULL, 0,
2024                                   speed_template_16_32);
2025                 test_cipher_speed("ctr(cast6)", DECRYPT, sec, NULL, 0,
2026                                   speed_template_16_32);
2027                 test_cipher_speed("lrw(cast6)", ENCRYPT, sec, NULL, 0,
2028                                   speed_template_32_48);
2029                 test_cipher_speed("lrw(cast6)", DECRYPT, sec, NULL, 0,
2030                                   speed_template_32_48);
2031                 test_cipher_speed("xts(cast6)", ENCRYPT, sec, NULL, 0,
2032                                   speed_template_32_64);
2033                 test_cipher_speed("xts(cast6)", DECRYPT, sec, NULL, 0,
2034                                   speed_template_32_64);
2035                 break;
2036
2037         case 211:
2038                 test_aead_speed("rfc4106(gcm(aes))", ENCRYPT, sec,
2039                                 NULL, 0, 16, 16, aead_speed_template_20);
2040                 test_aead_speed("gcm(aes)", ENCRYPT, sec,
2041                                 NULL, 0, 16, 8, speed_template_16_24_32);
2042                 test_aead_speed("rfc4106(gcm(aes))", DECRYPT, sec,
2043                                 NULL, 0, 16, 16, aead_speed_template_20);
2044                 test_aead_speed("gcm(aes)", DECRYPT, sec,
2045                                 NULL, 0, 16, 8, speed_template_16_24_32);
2046                 break;
2047
2048         case 212:
2049                 test_aead_speed("rfc4309(ccm(aes))", ENCRYPT, sec,
2050                                 NULL, 0, 16, 16, aead_speed_template_19);
2051                 test_aead_speed("rfc4309(ccm(aes))", DECRYPT, sec,
2052                                 NULL, 0, 16, 16, aead_speed_template_19);
2053                 break;
2054
2055         case 213:
2056                 test_aead_speed("rfc7539esp(chacha20,poly1305)", ENCRYPT, sec,
2057                                 NULL, 0, 16, 8, aead_speed_template_36);
2058                 test_aead_speed("rfc7539esp(chacha20,poly1305)", DECRYPT, sec,
2059                                 NULL, 0, 16, 8, aead_speed_template_36);
2060                 break;
2061
2062         case 214:
2063                 test_cipher_speed("chacha20", ENCRYPT, sec, NULL, 0,
2064                                   speed_template_32);
2065                 break;
2066
2067         case 215:
2068                 test_mb_aead_speed("rfc4106(gcm(aes))", ENCRYPT, sec, NULL,
2069                                    0, 16, 16, aead_speed_template_20, num_mb);
2070                 test_mb_aead_speed("gcm(aes)", ENCRYPT, sec, NULL, 0, 16, 8,
2071                                    speed_template_16_24_32, num_mb);
2072                 test_mb_aead_speed("rfc4106(gcm(aes))", DECRYPT, sec, NULL,
2073                                    0, 16, 16, aead_speed_template_20, num_mb);
2074                 test_mb_aead_speed("gcm(aes)", DECRYPT, sec, NULL, 0, 16, 8,
2075                                    speed_template_16_24_32, num_mb);
2076                 break;
2077
2078         case 216:
2079                 test_mb_aead_speed("rfc4309(ccm(aes))", ENCRYPT, sec, NULL, 0,
2080                                    16, 16, aead_speed_template_19, num_mb);
2081                 test_mb_aead_speed("rfc4309(ccm(aes))", DECRYPT, sec, NULL, 0,
2082                                    16, 16, aead_speed_template_19, num_mb);
2083                 break;
2084
2085         case 217:
2086                 test_mb_aead_speed("rfc7539esp(chacha20,poly1305)", ENCRYPT,
2087                                    sec, NULL, 0, 16, 8, aead_speed_template_36,
2088                                    num_mb);
2089                 test_mb_aead_speed("rfc7539esp(chacha20,poly1305)", DECRYPT,
2090                                    sec, NULL, 0, 16, 8, aead_speed_template_36,
2091                                    num_mb);
2092                 break;
2093
2094         case 218:
2095                 test_cipher_speed("ecb(sm4)", ENCRYPT, sec, NULL, 0,
2096                                 speed_template_16);
2097                 test_cipher_speed("ecb(sm4)", DECRYPT, sec, NULL, 0,
2098                                 speed_template_16);
2099                 test_cipher_speed("cbc(sm4)", ENCRYPT, sec, NULL, 0,
2100                                 speed_template_16);
2101                 test_cipher_speed("cbc(sm4)", DECRYPT, sec, NULL, 0,
2102                                 speed_template_16);
2103                 test_cipher_speed("cfb(sm4)", ENCRYPT, sec, NULL, 0,
2104                                 speed_template_16);
2105                 test_cipher_speed("cfb(sm4)", DECRYPT, sec, NULL, 0,
2106                                 speed_template_16);
2107                 test_cipher_speed("ctr(sm4)", ENCRYPT, sec, NULL, 0,
2108                                 speed_template_16);
2109                 test_cipher_speed("ctr(sm4)", DECRYPT, sec, NULL, 0,
2110                                 speed_template_16);
2111                 break;
2112
2113         case 219:
2114                 test_cipher_speed("adiantum(xchacha12,aes)", ENCRYPT, sec, NULL,
2115                                   0, speed_template_32);
2116                 test_cipher_speed("adiantum(xchacha12,aes)", DECRYPT, sec, NULL,
2117                                   0, speed_template_32);
2118                 test_cipher_speed("adiantum(xchacha20,aes)", ENCRYPT, sec, NULL,
2119                                   0, speed_template_32);
2120                 test_cipher_speed("adiantum(xchacha20,aes)", DECRYPT, sec, NULL,
2121                                   0, speed_template_32);
2122                 break;
2123
2124         case 220:
2125                 test_acipher_speed("essiv(cbc(aes),sha256)",
2126                                   ENCRYPT, sec, NULL, 0,
2127                                   speed_template_16_24_32);
2128                 test_acipher_speed("essiv(cbc(aes),sha256)",
2129                                   DECRYPT, sec, NULL, 0,
2130                                   speed_template_16_24_32);
2131                 break;
2132
2133         case 221:
2134                 test_aead_speed("aegis128", ENCRYPT, sec,
2135                                 NULL, 0, 16, 8, speed_template_16);
2136                 test_aead_speed("aegis128", DECRYPT, sec,
2137                                 NULL, 0, 16, 8, speed_template_16);
2138                 break;
2139
2140         case 222:
2141                 test_aead_speed("gcm(sm4)", ENCRYPT, sec,
2142                                 NULL, 0, 16, 8, speed_template_16);
2143                 test_aead_speed("gcm(sm4)", DECRYPT, sec,
2144                                 NULL, 0, 16, 8, speed_template_16);
2145                 break;
2146
2147         case 223:
2148                 test_aead_speed("rfc4309(ccm(sm4))", ENCRYPT, sec,
2149                                 NULL, 0, 16, 16, aead_speed_template_19);
2150                 test_aead_speed("rfc4309(ccm(sm4))", DECRYPT, sec,
2151                                 NULL, 0, 16, 16, aead_speed_template_19);
2152                 break;
2153
2154         case 224:
2155                 test_mb_aead_speed("gcm(sm4)", ENCRYPT, sec, NULL, 0, 16, 8,
2156                                    speed_template_16, num_mb);
2157                 test_mb_aead_speed("gcm(sm4)", DECRYPT, sec, NULL, 0, 16, 8,
2158                                    speed_template_16, num_mb);
2159                 break;
2160
2161         case 225:
2162                 test_mb_aead_speed("rfc4309(ccm(sm4))", ENCRYPT, sec, NULL, 0,
2163                                    16, 16, aead_speed_template_19, num_mb);
2164                 test_mb_aead_speed("rfc4309(ccm(sm4))", DECRYPT, sec, NULL, 0,
2165                                    16, 16, aead_speed_template_19, num_mb);
2166                 break;
2167
2168         case 226:
2169                 test_cipher_speed("hctr2(aes)", ENCRYPT, sec, NULL,
2170                                   0, speed_template_32);
2171                 break;
2172
2173         case 227:
2174                 test_cipher_speed("ecb(aria)", ENCRYPT, sec, NULL, 0,
2175                                   speed_template_16_24_32);
2176                 test_cipher_speed("ecb(aria)", DECRYPT, sec, NULL, 0,
2177                                   speed_template_16_24_32);
2178                 test_cipher_speed("cbc(aria)", ENCRYPT, sec, NULL, 0,
2179                                   speed_template_16_24_32);
2180                 test_cipher_speed("cbc(aria)", DECRYPT, sec, NULL, 0,
2181                                   speed_template_16_24_32);
2182                 test_cipher_speed("cfb(aria)", ENCRYPT, sec, NULL, 0,
2183                                   speed_template_16_24_32);
2184                 test_cipher_speed("cfb(aria)", DECRYPT, sec, NULL, 0,
2185                                   speed_template_16_24_32);
2186                 test_cipher_speed("ctr(aria)", ENCRYPT, sec, NULL, 0,
2187                                   speed_template_16_24_32);
2188                 test_cipher_speed("ctr(aria)", DECRYPT, sec, NULL, 0,
2189                                   speed_template_16_24_32);
2190                 break;
2191
2192         case 228:
2193                 test_aead_speed("gcm(aria)", ENCRYPT, sec,
2194                                 NULL, 0, 16, 8, speed_template_16_24_32);
2195                 test_aead_speed("gcm(aria)", DECRYPT, sec,
2196                                 NULL, 0, 16, 8, speed_template_16_24_32);
2197                 break;
2198
2199         case 229:
2200                 test_mb_aead_speed("gcm(aria)", ENCRYPT, sec, NULL, 0, 16, 8,
2201                                    speed_template_16, num_mb);
2202                 test_mb_aead_speed("gcm(aria)", DECRYPT, sec, NULL, 0, 16, 8,
2203                                    speed_template_16, num_mb);
2204                 break;
2205
2206         case 300:
2207                 if (alg) {
2208                         test_hash_speed(alg, sec, generic_hash_speed_template);
2209                         break;
2210                 }
2211                 fallthrough;
2212         case 301:
2213                 test_hash_speed("md4", sec, generic_hash_speed_template);
2214                 if (mode > 300 && mode < 400) break;
2215                 fallthrough;
2216         case 302:
2217                 test_hash_speed("md5", sec, generic_hash_speed_template);
2218                 if (mode > 300 && mode < 400) break;
2219                 fallthrough;
2220         case 303:
2221                 test_hash_speed("sha1", sec, generic_hash_speed_template);
2222                 if (mode > 300 && mode < 400) break;
2223                 fallthrough;
2224         case 304:
2225                 test_hash_speed("sha256", sec, generic_hash_speed_template);
2226                 if (mode > 300 && mode < 400) break;
2227                 fallthrough;
2228         case 305:
2229                 test_hash_speed("sha384", sec, generic_hash_speed_template);
2230                 if (mode > 300 && mode < 400) break;
2231                 fallthrough;
2232         case 306:
2233                 test_hash_speed("sha512", sec, generic_hash_speed_template);
2234                 if (mode > 300 && mode < 400) break;
2235                 fallthrough;
2236         case 307:
2237                 test_hash_speed("wp256", sec, generic_hash_speed_template);
2238                 if (mode > 300 && mode < 400) break;
2239                 fallthrough;
2240         case 308:
2241                 test_hash_speed("wp384", sec, generic_hash_speed_template);
2242                 if (mode > 300 && mode < 400) break;
2243                 fallthrough;
2244         case 309:
2245                 test_hash_speed("wp512", sec, generic_hash_speed_template);
2246                 if (mode > 300 && mode < 400) break;
2247                 fallthrough;
2248         case 313:
2249                 test_hash_speed("sha224", sec, generic_hash_speed_template);
2250                 if (mode > 300 && mode < 400) break;
2251                 fallthrough;
2252         case 314:
2253                 test_hash_speed("xxhash64", sec, generic_hash_speed_template);
2254                 if (mode > 300 && mode < 400) break;
2255                 fallthrough;
2256         case 315:
2257                 test_hash_speed("rmd160", sec, generic_hash_speed_template);
2258                 if (mode > 300 && mode < 400) break;
2259                 fallthrough;
2260         case 317:
2261                 test_hash_speed("blake2b-512", sec, generic_hash_speed_template);
2262                 if (mode > 300 && mode < 400) break;
2263                 fallthrough;
2264         case 318:
2265                 klen = 16;
2266                 test_hash_speed("ghash", sec, generic_hash_speed_template);
2267                 if (mode > 300 && mode < 400) break;
2268                 fallthrough;
2269         case 319:
2270                 test_hash_speed("crc32c", sec, generic_hash_speed_template);
2271                 if (mode > 300 && mode < 400) break;
2272                 fallthrough;
2273         case 320:
2274                 test_hash_speed("crct10dif", sec, generic_hash_speed_template);
2275                 if (mode > 300 && mode < 400) break;
2276                 fallthrough;
2277         case 321:
2278                 test_hash_speed("poly1305", sec, poly1305_speed_template);
2279                 if (mode > 300 && mode < 400) break;
2280                 fallthrough;
2281         case 322:
2282                 test_hash_speed("sha3-224", sec, generic_hash_speed_template);
2283                 if (mode > 300 && mode < 400) break;
2284                 fallthrough;
2285         case 323:
2286                 test_hash_speed("sha3-256", sec, generic_hash_speed_template);
2287                 if (mode > 300 && mode < 400) break;
2288                 fallthrough;
2289         case 324:
2290                 test_hash_speed("sha3-384", sec, generic_hash_speed_template);
2291                 if (mode > 300 && mode < 400) break;
2292                 fallthrough;
2293         case 325:
2294                 test_hash_speed("sha3-512", sec, generic_hash_speed_template);
2295                 if (mode > 300 && mode < 400) break;
2296                 fallthrough;
2297         case 326:
2298                 test_hash_speed("sm3", sec, generic_hash_speed_template);
2299                 if (mode > 300 && mode < 400) break;
2300                 fallthrough;
2301         case 327:
2302                 test_hash_speed("streebog256", sec,
2303                                 generic_hash_speed_template);
2304                 if (mode > 300 && mode < 400) break;
2305                 fallthrough;
2306         case 328:
2307                 test_hash_speed("streebog512", sec,
2308                                 generic_hash_speed_template);
2309                 if (mode > 300 && mode < 400) break;
2310                 fallthrough;
2311         case 399:
2312                 break;
2313
2314         case 400:
2315                 if (alg) {
2316                         test_ahash_speed(alg, sec, generic_hash_speed_template);
2317                         break;
2318                 }
2319                 fallthrough;
2320         case 401:
2321                 test_ahash_speed("md4", sec, generic_hash_speed_template);
2322                 if (mode > 400 && mode < 500) break;
2323                 fallthrough;
2324         case 402:
2325                 test_ahash_speed("md5", sec, generic_hash_speed_template);
2326                 if (mode > 400 && mode < 500) break;
2327                 fallthrough;
2328         case 403:
2329                 test_ahash_speed("sha1", sec, generic_hash_speed_template);
2330                 if (mode > 400 && mode < 500) break;
2331                 fallthrough;
2332         case 404:
2333                 test_ahash_speed("sha256", sec, generic_hash_speed_template);
2334                 if (mode > 400 && mode < 500) break;
2335                 fallthrough;
2336         case 405:
2337                 test_ahash_speed("sha384", sec, generic_hash_speed_template);
2338                 if (mode > 400 && mode < 500) break;
2339                 fallthrough;
2340         case 406:
2341                 test_ahash_speed("sha512", sec, generic_hash_speed_template);
2342                 if (mode > 400 && mode < 500) break;
2343                 fallthrough;
2344         case 407:
2345                 test_ahash_speed("wp256", sec, generic_hash_speed_template);
2346                 if (mode > 400 && mode < 500) break;
2347                 fallthrough;
2348         case 408:
2349                 test_ahash_speed("wp384", sec, generic_hash_speed_template);
2350                 if (mode > 400 && mode < 500) break;
2351                 fallthrough;
2352         case 409:
2353                 test_ahash_speed("wp512", sec, generic_hash_speed_template);
2354                 if (mode > 400 && mode < 500) break;
2355                 fallthrough;
2356         case 413:
2357                 test_ahash_speed("sha224", sec, generic_hash_speed_template);
2358                 if (mode > 400 && mode < 500) break;
2359                 fallthrough;
2360         case 414:
2361                 test_ahash_speed("xxhash64", sec, generic_hash_speed_template);
2362                 if (mode > 400 && mode < 500) break;
2363                 fallthrough;
2364         case 415:
2365                 test_ahash_speed("rmd160", sec, generic_hash_speed_template);
2366                 if (mode > 400 && mode < 500) break;
2367                 fallthrough;
2368         case 417:
2369                 test_ahash_speed("blake2b-512", sec, generic_hash_speed_template);
2370                 if (mode > 400 && mode < 500) break;
2371                 fallthrough;
2372         case 418:
2373                 test_ahash_speed("sha3-224", sec, generic_hash_speed_template);
2374                 if (mode > 400 && mode < 500) break;
2375                 fallthrough;
2376         case 419:
2377                 test_ahash_speed("sha3-256", sec, generic_hash_speed_template);
2378                 if (mode > 400 && mode < 500) break;
2379                 fallthrough;
2380         case 420:
2381                 test_ahash_speed("sha3-384", sec, generic_hash_speed_template);
2382                 if (mode > 400 && mode < 500) break;
2383                 fallthrough;
2384         case 421:
2385                 test_ahash_speed("sha3-512", sec, generic_hash_speed_template);
2386                 if (mode > 400 && mode < 500) break;
2387                 fallthrough;
2388         case 422:
2389                 test_ahash_speed("sm3", sec, generic_hash_speed_template);
2390                 if (mode > 400 && mode < 500) break;
2391                 fallthrough;
2392         case 499:
2393                 break;
2394
2395         case 500:
2396                 test_acipher_speed("ecb(aes)", ENCRYPT, sec, NULL, 0,
2397                                    speed_template_16_24_32);
2398                 test_acipher_speed("ecb(aes)", DECRYPT, sec, NULL, 0,
2399                                    speed_template_16_24_32);
2400                 test_acipher_speed("cbc(aes)", ENCRYPT, sec, NULL, 0,
2401                                    speed_template_16_24_32);
2402                 test_acipher_speed("cbc(aes)", DECRYPT, sec, NULL, 0,
2403                                    speed_template_16_24_32);
2404                 test_acipher_speed("lrw(aes)", ENCRYPT, sec, NULL, 0,
2405                                    speed_template_32_40_48);
2406                 test_acipher_speed("lrw(aes)", DECRYPT, sec, NULL, 0,
2407                                    speed_template_32_40_48);
2408                 test_acipher_speed("xts(aes)", ENCRYPT, sec, NULL, 0,
2409                                    speed_template_32_64);
2410                 test_acipher_speed("xts(aes)", DECRYPT, sec, NULL, 0,
2411                                    speed_template_32_64);
2412                 test_acipher_speed("cts(cbc(aes))", ENCRYPT, sec, NULL, 0,
2413                                    speed_template_16_24_32);
2414                 test_acipher_speed("cts(cbc(aes))", DECRYPT, sec, NULL, 0,
2415                                    speed_template_16_24_32);
2416                 test_acipher_speed("ctr(aes)", ENCRYPT, sec, NULL, 0,
2417                                    speed_template_16_24_32);
2418                 test_acipher_speed("ctr(aes)", DECRYPT, sec, NULL, 0,
2419                                    speed_template_16_24_32);
2420                 test_acipher_speed("cfb(aes)", ENCRYPT, sec, NULL, 0,
2421                                    speed_template_16_24_32);
2422                 test_acipher_speed("cfb(aes)", DECRYPT, sec, NULL, 0,
2423                                    speed_template_16_24_32);
2424                 test_acipher_speed("ofb(aes)", ENCRYPT, sec, NULL, 0,
2425                                    speed_template_16_24_32);
2426                 test_acipher_speed("ofb(aes)", DECRYPT, sec, NULL, 0,
2427                                    speed_template_16_24_32);
2428                 test_acipher_speed("rfc3686(ctr(aes))", ENCRYPT, sec, NULL, 0,
2429                                    speed_template_20_28_36);
2430                 test_acipher_speed("rfc3686(ctr(aes))", DECRYPT, sec, NULL, 0,
2431                                    speed_template_20_28_36);
2432                 break;
2433
2434         case 501:
2435                 test_acipher_speed("ecb(des3_ede)", ENCRYPT, sec,
2436                                    des3_speed_template, DES3_SPEED_VECTORS,
2437                                    speed_template_24);
2438                 test_acipher_speed("ecb(des3_ede)", DECRYPT, sec,
2439                                    des3_speed_template, DES3_SPEED_VECTORS,
2440                                    speed_template_24);
2441                 test_acipher_speed("cbc(des3_ede)", ENCRYPT, sec,
2442                                    des3_speed_template, DES3_SPEED_VECTORS,
2443                                    speed_template_24);
2444                 test_acipher_speed("cbc(des3_ede)", DECRYPT, sec,
2445                                    des3_speed_template, DES3_SPEED_VECTORS,
2446                                    speed_template_24);
2447                 test_acipher_speed("cfb(des3_ede)", ENCRYPT, sec,
2448                                    des3_speed_template, DES3_SPEED_VECTORS,
2449                                    speed_template_24);
2450                 test_acipher_speed("cfb(des3_ede)", DECRYPT, sec,
2451                                    des3_speed_template, DES3_SPEED_VECTORS,
2452                                    speed_template_24);
2453                 test_acipher_speed("ofb(des3_ede)", ENCRYPT, sec,
2454                                    des3_speed_template, DES3_SPEED_VECTORS,
2455                                    speed_template_24);
2456                 test_acipher_speed("ofb(des3_ede)", DECRYPT, sec,
2457                                    des3_speed_template, DES3_SPEED_VECTORS,
2458                                    speed_template_24);
2459                 break;
2460
2461         case 502:
2462                 test_acipher_speed("ecb(des)", ENCRYPT, sec, NULL, 0,
2463                                    speed_template_8);
2464                 test_acipher_speed("ecb(des)", DECRYPT, sec, NULL, 0,
2465                                    speed_template_8);
2466                 test_acipher_speed("cbc(des)", ENCRYPT, sec, NULL, 0,
2467                                    speed_template_8);
2468                 test_acipher_speed("cbc(des)", DECRYPT, sec, NULL, 0,
2469                                    speed_template_8);
2470                 test_acipher_speed("cfb(des)", ENCRYPT, sec, NULL, 0,
2471                                    speed_template_8);
2472                 test_acipher_speed("cfb(des)", DECRYPT, sec, NULL, 0,
2473                                    speed_template_8);
2474                 test_acipher_speed("ofb(des)", ENCRYPT, sec, NULL, 0,
2475                                    speed_template_8);
2476                 test_acipher_speed("ofb(des)", DECRYPT, sec, NULL, 0,
2477                                    speed_template_8);
2478                 break;
2479
2480         case 503:
2481                 test_acipher_speed("ecb(serpent)", ENCRYPT, sec, NULL, 0,
2482                                    speed_template_16_32);
2483                 test_acipher_speed("ecb(serpent)", DECRYPT, sec, NULL, 0,
2484                                    speed_template_16_32);
2485                 test_acipher_speed("cbc(serpent)", ENCRYPT, sec, NULL, 0,
2486                                    speed_template_16_32);
2487                 test_acipher_speed("cbc(serpent)", DECRYPT, sec, NULL, 0,
2488                                    speed_template_16_32);
2489                 test_acipher_speed("ctr(serpent)", ENCRYPT, sec, NULL, 0,
2490                                    speed_template_16_32);
2491                 test_acipher_speed("ctr(serpent)", DECRYPT, sec, NULL, 0,
2492                                    speed_template_16_32);
2493                 test_acipher_speed("lrw(serpent)", ENCRYPT, sec, NULL, 0,
2494                                    speed_template_32_48);
2495                 test_acipher_speed("lrw(serpent)", DECRYPT, sec, NULL, 0,
2496                                    speed_template_32_48);
2497                 test_acipher_speed("xts(serpent)", ENCRYPT, sec, NULL, 0,
2498                                    speed_template_32_64);
2499                 test_acipher_speed("xts(serpent)", DECRYPT, sec, NULL, 0,
2500                                    speed_template_32_64);
2501                 break;
2502
2503         case 504:
2504                 test_acipher_speed("ecb(twofish)", ENCRYPT, sec, NULL, 0,
2505                                    speed_template_16_24_32);
2506                 test_acipher_speed("ecb(twofish)", DECRYPT, sec, NULL, 0,
2507                                    speed_template_16_24_32);
2508                 test_acipher_speed("cbc(twofish)", ENCRYPT, sec, NULL, 0,
2509                                    speed_template_16_24_32);
2510                 test_acipher_speed("cbc(twofish)", DECRYPT, sec, NULL, 0,
2511                                    speed_template_16_24_32);
2512                 test_acipher_speed("ctr(twofish)", ENCRYPT, sec, NULL, 0,
2513                                    speed_template_16_24_32);
2514                 test_acipher_speed("ctr(twofish)", DECRYPT, sec, NULL, 0,
2515                                    speed_template_16_24_32);
2516                 test_acipher_speed("lrw(twofish)", ENCRYPT, sec, NULL, 0,
2517                                    speed_template_32_40_48);
2518                 test_acipher_speed("lrw(twofish)", DECRYPT, sec, NULL, 0,
2519                                    speed_template_32_40_48);
2520                 test_acipher_speed("xts(twofish)", ENCRYPT, sec, NULL, 0,
2521                                    speed_template_32_48_64);
2522                 test_acipher_speed("xts(twofish)", DECRYPT, sec, NULL, 0,
2523                                    speed_template_32_48_64);
2524                 break;
2525
2526         case 505:
2527                 test_acipher_speed("ecb(arc4)", ENCRYPT, sec, NULL, 0,
2528                                    speed_template_8);
2529                 break;
2530
2531         case 506:
2532                 test_acipher_speed("ecb(cast5)", ENCRYPT, sec, NULL, 0,
2533                                    speed_template_8_16);
2534                 test_acipher_speed("ecb(cast5)", DECRYPT, sec, NULL, 0,
2535                                    speed_template_8_16);
2536                 test_acipher_speed("cbc(cast5)", ENCRYPT, sec, NULL, 0,
2537                                    speed_template_8_16);
2538                 test_acipher_speed("cbc(cast5)", DECRYPT, sec, NULL, 0,
2539                                    speed_template_8_16);
2540                 test_acipher_speed("ctr(cast5)", ENCRYPT, sec, NULL, 0,
2541                                    speed_template_8_16);
2542                 test_acipher_speed("ctr(cast5)", DECRYPT, sec, NULL, 0,
2543                                    speed_template_8_16);
2544                 break;
2545
2546         case 507:
2547                 test_acipher_speed("ecb(cast6)", ENCRYPT, sec, NULL, 0,
2548                                    speed_template_16_32);
2549                 test_acipher_speed("ecb(cast6)", DECRYPT, sec, NULL, 0,
2550                                    speed_template_16_32);
2551                 test_acipher_speed("cbc(cast6)", ENCRYPT, sec, NULL, 0,
2552                                    speed_template_16_32);
2553                 test_acipher_speed("cbc(cast6)", DECRYPT, sec, NULL, 0,
2554                                    speed_template_16_32);
2555                 test_acipher_speed("ctr(cast6)", ENCRYPT, sec, NULL, 0,
2556                                    speed_template_16_32);
2557                 test_acipher_speed("ctr(cast6)", DECRYPT, sec, NULL, 0,
2558                                    speed_template_16_32);
2559                 test_acipher_speed("lrw(cast6)", ENCRYPT, sec, NULL, 0,
2560                                    speed_template_32_48);
2561                 test_acipher_speed("lrw(cast6)", DECRYPT, sec, NULL, 0,
2562                                    speed_template_32_48);
2563                 test_acipher_speed("xts(cast6)", ENCRYPT, sec, NULL, 0,
2564                                    speed_template_32_64);
2565                 test_acipher_speed("xts(cast6)", DECRYPT, sec, NULL, 0,
2566                                    speed_template_32_64);
2567                 break;
2568
2569         case 508:
2570                 test_acipher_speed("ecb(camellia)", ENCRYPT, sec, NULL, 0,
2571                                    speed_template_16_32);
2572                 test_acipher_speed("ecb(camellia)", DECRYPT, sec, NULL, 0,
2573                                    speed_template_16_32);
2574                 test_acipher_speed("cbc(camellia)", ENCRYPT, sec, NULL, 0,
2575                                    speed_template_16_32);
2576                 test_acipher_speed("cbc(camellia)", DECRYPT, sec, NULL, 0,
2577                                    speed_template_16_32);
2578                 test_acipher_speed("ctr(camellia)", ENCRYPT, sec, NULL, 0,
2579                                    speed_template_16_32);
2580                 test_acipher_speed("ctr(camellia)", DECRYPT, sec, NULL, 0,
2581                                    speed_template_16_32);
2582                 test_acipher_speed("lrw(camellia)", ENCRYPT, sec, NULL, 0,
2583                                    speed_template_32_48);
2584                 test_acipher_speed("lrw(camellia)", DECRYPT, sec, NULL, 0,
2585                                    speed_template_32_48);
2586                 test_acipher_speed("xts(camellia)", ENCRYPT, sec, NULL, 0,
2587                                    speed_template_32_64);
2588                 test_acipher_speed("xts(camellia)", DECRYPT, sec, NULL, 0,
2589                                    speed_template_32_64);
2590                 break;
2591
2592         case 509:
2593                 test_acipher_speed("ecb(blowfish)", ENCRYPT, sec, NULL, 0,
2594                                    speed_template_8_32);
2595                 test_acipher_speed("ecb(blowfish)", DECRYPT, sec, NULL, 0,
2596                                    speed_template_8_32);
2597                 test_acipher_speed("cbc(blowfish)", ENCRYPT, sec, NULL, 0,
2598                                    speed_template_8_32);
2599                 test_acipher_speed("cbc(blowfish)", DECRYPT, sec, NULL, 0,
2600                                    speed_template_8_32);
2601                 test_acipher_speed("ctr(blowfish)", ENCRYPT, sec, NULL, 0,
2602                                    speed_template_8_32);
2603                 test_acipher_speed("ctr(blowfish)", DECRYPT, sec, NULL, 0,
2604                                    speed_template_8_32);
2605                 break;
2606
2607         case 518:
2608                 test_acipher_speed("ecb(sm4)", ENCRYPT, sec, NULL, 0,
2609                                 speed_template_16);
2610                 test_acipher_speed("ecb(sm4)", DECRYPT, sec, NULL, 0,
2611                                 speed_template_16);
2612                 test_acipher_speed("cbc(sm4)", ENCRYPT, sec, NULL, 0,
2613                                 speed_template_16);
2614                 test_acipher_speed("cbc(sm4)", DECRYPT, sec, NULL, 0,
2615                                 speed_template_16);
2616                 test_acipher_speed("cfb(sm4)", ENCRYPT, sec, NULL, 0,
2617                                 speed_template_16);
2618                 test_acipher_speed("cfb(sm4)", DECRYPT, sec, NULL, 0,
2619                                 speed_template_16);
2620                 test_acipher_speed("ctr(sm4)", ENCRYPT, sec, NULL, 0,
2621                                 speed_template_16);
2622                 test_acipher_speed("ctr(sm4)", DECRYPT, sec, NULL, 0,
2623                                 speed_template_16);
2624                 break;
2625
2626         case 519:
2627                 test_acipher_speed("ecb(aria)", ENCRYPT, sec, NULL, 0,
2628                                    speed_template_16_24_32);
2629                 test_acipher_speed("ecb(aria)", DECRYPT, sec, NULL, 0,
2630                                    speed_template_16_24_32);
2631                 test_acipher_speed("ctr(aria)", ENCRYPT, sec, NULL, 0,
2632                                    speed_template_16_24_32);
2633                 test_acipher_speed("ctr(aria)", DECRYPT, sec, NULL, 0,
2634                                    speed_template_16_24_32);
2635                 break;
2636
2637         case 600:
2638                 test_mb_skcipher_speed("ecb(aes)", ENCRYPT, sec, NULL, 0,
2639                                        speed_template_16_24_32, num_mb);
2640                 test_mb_skcipher_speed("ecb(aes)", DECRYPT, sec, NULL, 0,
2641                                        speed_template_16_24_32, num_mb);
2642                 test_mb_skcipher_speed("cbc(aes)", ENCRYPT, sec, NULL, 0,
2643                                        speed_template_16_24_32, num_mb);
2644                 test_mb_skcipher_speed("cbc(aes)", DECRYPT, sec, NULL, 0,
2645                                        speed_template_16_24_32, num_mb);
2646                 test_mb_skcipher_speed("lrw(aes)", ENCRYPT, sec, NULL, 0,
2647                                        speed_template_32_40_48, num_mb);
2648                 test_mb_skcipher_speed("lrw(aes)", DECRYPT, sec, NULL, 0,
2649                                        speed_template_32_40_48, num_mb);
2650                 test_mb_skcipher_speed("xts(aes)", ENCRYPT, sec, NULL, 0,
2651                                        speed_template_32_64, num_mb);
2652                 test_mb_skcipher_speed("xts(aes)", DECRYPT, sec, NULL, 0,
2653                                        speed_template_32_64, num_mb);
2654                 test_mb_skcipher_speed("cts(cbc(aes))", ENCRYPT, sec, NULL, 0,
2655                                        speed_template_16_24_32, num_mb);
2656                 test_mb_skcipher_speed("cts(cbc(aes))", DECRYPT, sec, NULL, 0,
2657                                        speed_template_16_24_32, num_mb);
2658                 test_mb_skcipher_speed("ctr(aes)", ENCRYPT, sec, NULL, 0,
2659                                        speed_template_16_24_32, num_mb);
2660                 test_mb_skcipher_speed("ctr(aes)", DECRYPT, sec, NULL, 0,
2661                                        speed_template_16_24_32, num_mb);
2662                 test_mb_skcipher_speed("cfb(aes)", ENCRYPT, sec, NULL, 0,
2663                                        speed_template_16_24_32, num_mb);
2664                 test_mb_skcipher_speed("cfb(aes)", DECRYPT, sec, NULL, 0,
2665                                        speed_template_16_24_32, num_mb);
2666                 test_mb_skcipher_speed("ofb(aes)", ENCRYPT, sec, NULL, 0,
2667                                        speed_template_16_24_32, num_mb);
2668                 test_mb_skcipher_speed("ofb(aes)", DECRYPT, sec, NULL, 0,
2669                                        speed_template_16_24_32, num_mb);
2670                 test_mb_skcipher_speed("rfc3686(ctr(aes))", ENCRYPT, sec, NULL,
2671                                        0, speed_template_20_28_36, num_mb);
2672                 test_mb_skcipher_speed("rfc3686(ctr(aes))", DECRYPT, sec, NULL,
2673                                        0, speed_template_20_28_36, num_mb);
2674                 break;
2675
2676         case 601:
2677                 test_mb_skcipher_speed("ecb(des3_ede)", ENCRYPT, sec,
2678                                        des3_speed_template, DES3_SPEED_VECTORS,
2679                                        speed_template_24, num_mb);
2680                 test_mb_skcipher_speed("ecb(des3_ede)", DECRYPT, sec,
2681                                        des3_speed_template, DES3_SPEED_VECTORS,
2682                                        speed_template_24, num_mb);
2683                 test_mb_skcipher_speed("cbc(des3_ede)", ENCRYPT, sec,
2684                                        des3_speed_template, DES3_SPEED_VECTORS,
2685                                        speed_template_24, num_mb);
2686                 test_mb_skcipher_speed("cbc(des3_ede)", DECRYPT, sec,
2687                                        des3_speed_template, DES3_SPEED_VECTORS,
2688                                        speed_template_24, num_mb);
2689                 test_mb_skcipher_speed("cfb(des3_ede)", ENCRYPT, sec,
2690                                        des3_speed_template, DES3_SPEED_VECTORS,
2691                                        speed_template_24, num_mb);
2692                 test_mb_skcipher_speed("cfb(des3_ede)", DECRYPT, sec,
2693                                        des3_speed_template, DES3_SPEED_VECTORS,
2694                                        speed_template_24, num_mb);
2695                 test_mb_skcipher_speed("ofb(des3_ede)", ENCRYPT, sec,
2696                                        des3_speed_template, DES3_SPEED_VECTORS,
2697                                        speed_template_24, num_mb);
2698                 test_mb_skcipher_speed("ofb(des3_ede)", DECRYPT, sec,
2699                                        des3_speed_template, DES3_SPEED_VECTORS,
2700                                        speed_template_24, num_mb);
2701                 break;
2702
2703         case 602:
2704                 test_mb_skcipher_speed("ecb(des)", ENCRYPT, sec, NULL, 0,
2705                                        speed_template_8, num_mb);
2706                 test_mb_skcipher_speed("ecb(des)", DECRYPT, sec, NULL, 0,
2707                                        speed_template_8, num_mb);
2708                 test_mb_skcipher_speed("cbc(des)", ENCRYPT, sec, NULL, 0,
2709                                        speed_template_8, num_mb);
2710                 test_mb_skcipher_speed("cbc(des)", DECRYPT, sec, NULL, 0,
2711                                        speed_template_8, num_mb);
2712                 test_mb_skcipher_speed("cfb(des)", ENCRYPT, sec, NULL, 0,
2713                                        speed_template_8, num_mb);
2714                 test_mb_skcipher_speed("cfb(des)", DECRYPT, sec, NULL, 0,
2715                                        speed_template_8, num_mb);
2716                 test_mb_skcipher_speed("ofb(des)", ENCRYPT, sec, NULL, 0,
2717                                        speed_template_8, num_mb);
2718                 test_mb_skcipher_speed("ofb(des)", DECRYPT, sec, NULL, 0,
2719                                        speed_template_8, num_mb);
2720                 break;
2721
2722         case 603:
2723                 test_mb_skcipher_speed("ecb(serpent)", ENCRYPT, sec, NULL, 0,
2724                                        speed_template_16_32, num_mb);
2725                 test_mb_skcipher_speed("ecb(serpent)", DECRYPT, sec, NULL, 0,
2726                                        speed_template_16_32, num_mb);
2727                 test_mb_skcipher_speed("cbc(serpent)", ENCRYPT, sec, NULL, 0,
2728                                        speed_template_16_32, num_mb);
2729                 test_mb_skcipher_speed("cbc(serpent)", DECRYPT, sec, NULL, 0,
2730                                        speed_template_16_32, num_mb);
2731                 test_mb_skcipher_speed("ctr(serpent)", ENCRYPT, sec, NULL, 0,
2732                                        speed_template_16_32, num_mb);
2733                 test_mb_skcipher_speed("ctr(serpent)", DECRYPT, sec, NULL, 0,
2734                                        speed_template_16_32, num_mb);
2735                 test_mb_skcipher_speed("lrw(serpent)", ENCRYPT, sec, NULL, 0,
2736                                        speed_template_32_48, num_mb);
2737                 test_mb_skcipher_speed("lrw(serpent)", DECRYPT, sec, NULL, 0,
2738                                        speed_template_32_48, num_mb);
2739                 test_mb_skcipher_speed("xts(serpent)", ENCRYPT, sec, NULL, 0,
2740                                        speed_template_32_64, num_mb);
2741                 test_mb_skcipher_speed("xts(serpent)", DECRYPT, sec, NULL, 0,
2742                                        speed_template_32_64, num_mb);
2743                 break;
2744
2745         case 604:
2746                 test_mb_skcipher_speed("ecb(twofish)", ENCRYPT, sec, NULL, 0,
2747                                        speed_template_16_24_32, num_mb);
2748                 test_mb_skcipher_speed("ecb(twofish)", DECRYPT, sec, NULL, 0,
2749                                        speed_template_16_24_32, num_mb);
2750                 test_mb_skcipher_speed("cbc(twofish)", ENCRYPT, sec, NULL, 0,
2751                                        speed_template_16_24_32, num_mb);
2752                 test_mb_skcipher_speed("cbc(twofish)", DECRYPT, sec, NULL, 0,
2753                                        speed_template_16_24_32, num_mb);
2754                 test_mb_skcipher_speed("ctr(twofish)", ENCRYPT, sec, NULL, 0,
2755                                        speed_template_16_24_32, num_mb);
2756                 test_mb_skcipher_speed("ctr(twofish)", DECRYPT, sec, NULL, 0,
2757                                        speed_template_16_24_32, num_mb);
2758                 test_mb_skcipher_speed("lrw(twofish)", ENCRYPT, sec, NULL, 0,
2759                                        speed_template_32_40_48, num_mb);
2760                 test_mb_skcipher_speed("lrw(twofish)", DECRYPT, sec, NULL, 0,
2761                                        speed_template_32_40_48, num_mb);
2762                 test_mb_skcipher_speed("xts(twofish)", ENCRYPT, sec, NULL, 0,
2763                                        speed_template_32_48_64, num_mb);
2764                 test_mb_skcipher_speed("xts(twofish)", DECRYPT, sec, NULL, 0,
2765                                        speed_template_32_48_64, num_mb);
2766                 break;
2767
2768         case 605:
2769                 test_mb_skcipher_speed("ecb(arc4)", ENCRYPT, sec, NULL, 0,
2770                                        speed_template_8, num_mb);
2771                 break;
2772
2773         case 606:
2774                 test_mb_skcipher_speed("ecb(cast5)", ENCRYPT, sec, NULL, 0,
2775                                        speed_template_8_16, num_mb);
2776                 test_mb_skcipher_speed("ecb(cast5)", DECRYPT, sec, NULL, 0,
2777                                        speed_template_8_16, num_mb);
2778                 test_mb_skcipher_speed("cbc(cast5)", ENCRYPT, sec, NULL, 0,
2779                                        speed_template_8_16, num_mb);
2780                 test_mb_skcipher_speed("cbc(cast5)", DECRYPT, sec, NULL, 0,
2781                                        speed_template_8_16, num_mb);
2782                 test_mb_skcipher_speed("ctr(cast5)", ENCRYPT, sec, NULL, 0,
2783                                        speed_template_8_16, num_mb);
2784                 test_mb_skcipher_speed("ctr(cast5)", DECRYPT, sec, NULL, 0,
2785                                        speed_template_8_16, num_mb);
2786                 break;
2787
2788         case 607:
2789                 test_mb_skcipher_speed("ecb(cast6)", ENCRYPT, sec, NULL, 0,
2790                                        speed_template_16_32, num_mb);
2791                 test_mb_skcipher_speed("ecb(cast6)", DECRYPT, sec, NULL, 0,
2792                                        speed_template_16_32, num_mb);
2793                 test_mb_skcipher_speed("cbc(cast6)", ENCRYPT, sec, NULL, 0,
2794                                        speed_template_16_32, num_mb);
2795                 test_mb_skcipher_speed("cbc(cast6)", DECRYPT, sec, NULL, 0,
2796                                        speed_template_16_32, num_mb);
2797                 test_mb_skcipher_speed("ctr(cast6)", ENCRYPT, sec, NULL, 0,
2798                                        speed_template_16_32, num_mb);
2799                 test_mb_skcipher_speed("ctr(cast6)", DECRYPT, sec, NULL, 0,
2800                                        speed_template_16_32, num_mb);
2801                 test_mb_skcipher_speed("lrw(cast6)", ENCRYPT, sec, NULL, 0,
2802                                        speed_template_32_48, num_mb);
2803                 test_mb_skcipher_speed("lrw(cast6)", DECRYPT, sec, NULL, 0,
2804                                        speed_template_32_48, num_mb);
2805                 test_mb_skcipher_speed("xts(cast6)", ENCRYPT, sec, NULL, 0,
2806                                        speed_template_32_64, num_mb);
2807                 test_mb_skcipher_speed("xts(cast6)", DECRYPT, sec, NULL, 0,
2808                                        speed_template_32_64, num_mb);
2809                 break;
2810
2811         case 608:
2812                 test_mb_skcipher_speed("ecb(camellia)", ENCRYPT, sec, NULL, 0,
2813                                        speed_template_16_32, num_mb);
2814                 test_mb_skcipher_speed("ecb(camellia)", DECRYPT, sec, NULL, 0,
2815                                        speed_template_16_32, num_mb);
2816                 test_mb_skcipher_speed("cbc(camellia)", ENCRYPT, sec, NULL, 0,
2817                                        speed_template_16_32, num_mb);
2818                 test_mb_skcipher_speed("cbc(camellia)", DECRYPT, sec, NULL, 0,
2819                                        speed_template_16_32, num_mb);
2820                 test_mb_skcipher_speed("ctr(camellia)", ENCRYPT, sec, NULL, 0,
2821                                        speed_template_16_32, num_mb);
2822                 test_mb_skcipher_speed("ctr(camellia)", DECRYPT, sec, NULL, 0,
2823                                        speed_template_16_32, num_mb);
2824                 test_mb_skcipher_speed("lrw(camellia)", ENCRYPT, sec, NULL, 0,
2825                                        speed_template_32_48, num_mb);
2826                 test_mb_skcipher_speed("lrw(camellia)", DECRYPT, sec, NULL, 0,
2827                                        speed_template_32_48, num_mb);
2828                 test_mb_skcipher_speed("xts(camellia)", ENCRYPT, sec, NULL, 0,
2829                                        speed_template_32_64, num_mb);
2830                 test_mb_skcipher_speed("xts(camellia)", DECRYPT, sec, NULL, 0,
2831                                        speed_template_32_64, num_mb);
2832                 break;
2833
2834         case 609:
2835                 test_mb_skcipher_speed("ecb(blowfish)", ENCRYPT, sec, NULL, 0,
2836                                        speed_template_8_32, num_mb);
2837                 test_mb_skcipher_speed("ecb(blowfish)", DECRYPT, sec, NULL, 0,
2838                                        speed_template_8_32, num_mb);
2839                 test_mb_skcipher_speed("cbc(blowfish)", ENCRYPT, sec, NULL, 0,
2840                                        speed_template_8_32, num_mb);
2841                 test_mb_skcipher_speed("cbc(blowfish)", DECRYPT, sec, NULL, 0,
2842                                        speed_template_8_32, num_mb);
2843                 test_mb_skcipher_speed("ctr(blowfish)", ENCRYPT, sec, NULL, 0,
2844                                        speed_template_8_32, num_mb);
2845                 test_mb_skcipher_speed("ctr(blowfish)", DECRYPT, sec, NULL, 0,
2846                                        speed_template_8_32, num_mb);
2847                 break;
2848
2849         case 610:
2850                 test_mb_skcipher_speed("ecb(aria)", ENCRYPT, sec, NULL, 0,
2851                                        speed_template_16_32, num_mb);
2852                 test_mb_skcipher_speed("ecb(aria)", DECRYPT, sec, NULL, 0,
2853                                        speed_template_16_32, num_mb);
2854                 test_mb_skcipher_speed("ctr(aria)", ENCRYPT, sec, NULL, 0,
2855                                        speed_template_16_32, num_mb);
2856                 test_mb_skcipher_speed("ctr(aria)", DECRYPT, sec, NULL, 0,
2857                                        speed_template_16_32, num_mb);
2858                 break;
2859
2860         }
2861
2862         return ret;
2863 }
2864
2865 static int __init tcrypt_mod_init(void)
2866 {
2867         int err = -ENOMEM;
2868         int i;
2869
2870         for (i = 0; i < TVMEMSIZE; i++) {
2871                 tvmem[i] = (void *)__get_free_page(GFP_KERNEL);
2872                 if (!tvmem[i])
2873                         goto err_free_tv;
2874         }
2875
2876         err = do_test(alg, type, mask, mode, num_mb);
2877
2878         if (err) {
2879                 printk(KERN_ERR "tcrypt: one or more tests failed!\n");
2880                 goto err_free_tv;
2881         } else {
2882                 pr_debug("all tests passed\n");
2883         }
2884
2885         /* We intentionaly return -EAGAIN to prevent keeping the module,
2886          * unless we're running in fips mode. It does all its work from
2887          * init() and doesn't offer any runtime functionality, but in
2888          * the fips case, checking for a successful load is helpful.
2889          * => we don't need it in the memory, do we?
2890          *                                        -- mludvig
2891          */
2892         if (!fips_enabled)
2893                 err = -EAGAIN;
2894
2895 err_free_tv:
2896         for (i = 0; i < TVMEMSIZE && tvmem[i]; i++)
2897                 free_page((unsigned long)tvmem[i]);
2898
2899         return err;
2900 }
2901
2902 /*
2903  * If an init function is provided, an exit function must also be provided
2904  * to allow module unload.
2905  */
2906 static void __exit tcrypt_mod_fini(void) { }
2907
2908 late_initcall(tcrypt_mod_init);
2909 module_exit(tcrypt_mod_fini);
2910
2911 module_param(alg, charp, 0);
2912 module_param(type, uint, 0);
2913 module_param(mask, uint, 0);
2914 module_param(mode, int, 0);
2915 module_param(sec, uint, 0);
2916 MODULE_PARM_DESC(sec, "Length in seconds of speed tests "
2917                       "(defaults to zero which uses CPU cycles instead)");
2918 module_param(num_mb, uint, 0000);
2919 MODULE_PARM_DESC(num_mb, "Number of concurrent requests to be used in mb speed tests (defaults to 8)");
2920 module_param(klen, uint, 0);
2921 MODULE_PARM_DESC(klen, "Key length (defaults to 0)");
2922
2923 MODULE_LICENSE("GPL");
2924 MODULE_DESCRIPTION("Quick & dirty crypto testing module");
2925 MODULE_AUTHOR("James Morris <jmorris@intercode.com.au>");