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