2 * Quick & dirty crypto testing module.
4 * This will only exist until we have a better testing mechanism
5 * (e.g. a char device).
7 * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
8 * Copyright (c) 2002 Jean-Francois Dive <jef@linuxbe.org>
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the Free
12 * Software Foundation; either version 2 of the License, or (at your option)
16 #include <linux/init.h>
17 #include <linux/module.h>
18 #include <linux/string.h>
20 #include <linux/slab.h>
21 #include <asm/scatterlist.h>
22 #include <linux/string.h>
23 #include <linux/crypto.h>
24 #include <linux/highmem.h>
28 * Need to kmalloc() memory for testing kmap().
30 #define TVMEMSIZE 4096
31 #define XBUFSIZE 32768
34 * Indexes into the xbuf to simulate cross-page access.
49 static char *check[] = {
50 "des", "md5", "des3_ede", "rot13", "sha1", "sha256", "blowfish",
51 "twofish", "serpent", "sha384", "sha512", "md4", "aes", "deflate",
56 hexdump(unsigned char *buf, unsigned int len)
59 printk("%02x", *buf++);
69 struct scatterlist sg[2];
71 struct crypto_tfm *tfm;
72 struct md5_testvec *md5_tv;
75 printk("\ntesting md5\n");
77 tsize = sizeof (md5_tv_template);
78 if (tsize > TVMEMSIZE) {
79 printk("template (%u) too big for tvmem (%u)\n", tsize,
84 memcpy(tvmem, md5_tv_template, tsize);
85 md5_tv = (void *) tvmem;
87 tfm = crypto_alloc_tfm("md5", 0);
89 printk("failed to load transform for md5\n");
93 for (i = 0; i < MD5_TEST_VECTORS; i++) {
94 printk("test %u:\n", i + 1);
95 memset(result, 0, sizeof (result));
97 p = md5_tv[i].plaintext;
98 sg[0].page = virt_to_page(p);
99 sg[0].offset = ((long) p & ~PAGE_MASK);
100 sg[0].length = strlen(md5_tv[i].plaintext);
102 crypto_digest_init(tfm);
103 crypto_digest_update(tfm, sg, 1);
104 crypto_digest_final(tfm, result);
106 hexdump(result, crypto_tfm_alg_digestsize(tfm));
108 memcmp(result, md5_tv[i].digest,
109 crypto_tfm_alg_digestsize(tfm)) ? "fail" :
113 printk("\ntesting md5 across pages\n");
115 /* setup the dummy buffer first */
116 memset(xbuf, 0, XBUFSIZE);
117 memcpy(&xbuf[IDX1], "abcdefghijklm", 13);
118 memcpy(&xbuf[IDX2], "nopqrstuvwxyz", 13);
121 sg[0].page = virt_to_page(p);
122 sg[0].offset = ((long) p & ~PAGE_MASK);
126 sg[1].page = virt_to_page(p);
127 sg[1].offset = ((long) p & ~PAGE_MASK);
130 memset(result, 0, sizeof (result));
131 crypto_digest_digest(tfm, sg, 2, result);
132 hexdump(result, crypto_tfm_alg_digestsize(tfm));
135 memcmp(result, md5_tv[4].digest,
136 crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass");
137 crypto_free_tfm(tfm);
140 #ifdef CONFIG_CRYPTO_HMAC
145 unsigned int i, klen;
146 struct scatterlist sg[2];
148 struct crypto_tfm *tfm;
149 struct hmac_md5_testvec *hmac_md5_tv;
152 tfm = crypto_alloc_tfm("md5", 0);
154 printk("failed to load transform for md5\n");
158 printk("\ntesting hmac_md5\n");
160 tsize = sizeof (hmac_md5_tv_template);
161 if (tsize > TVMEMSIZE) {
162 printk("template (%u) too big for tvmem (%u)\n", tsize,
167 memcpy(tvmem, hmac_md5_tv_template, tsize);
168 hmac_md5_tv = (void *) tvmem;
170 for (i = 0; i < HMAC_MD5_TEST_VECTORS; i++) {
171 printk("test %u:\n", i + 1);
172 memset(result, 0, sizeof (result));
174 p = hmac_md5_tv[i].plaintext;
175 sg[0].page = virt_to_page(p);
176 sg[0].offset = ((long) p & ~PAGE_MASK);
177 sg[0].length = strlen(hmac_md5_tv[i].plaintext);
179 klen = strlen(hmac_md5_tv[i].key);
180 crypto_hmac(tfm, hmac_md5_tv[i].key, &klen, sg, 1, result);
182 hexdump(result, crypto_tfm_alg_digestsize(tfm));
184 memcmp(result, hmac_md5_tv[i].digest,
185 crypto_tfm_alg_digestsize(tfm)) ? "fail" :
189 printk("\ntesting hmac_md5 across pages\n");
191 memset(xbuf, 0, XBUFSIZE);
193 memcpy(&xbuf[IDX1], "what do ya want ", 16);
194 memcpy(&xbuf[IDX2], "for nothing?", 12);
197 sg[0].page = virt_to_page(p);
198 sg[0].offset = ((long) p & ~PAGE_MASK);
202 sg[1].page = virt_to_page(p);
203 sg[1].offset = ((long) p & ~PAGE_MASK);
206 memset(result, 0, sizeof (result));
207 klen = strlen(hmac_md5_tv[7].key);
208 crypto_hmac(tfm, hmac_md5_tv[7].key, &klen, sg, 2, result);
209 hexdump(result, crypto_tfm_alg_digestsize(tfm));
212 memcmp(result, hmac_md5_tv[7].digest,
213 crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass");
215 crypto_free_tfm(tfm);
222 unsigned int i, klen;
223 struct crypto_tfm *tfm;
224 struct hmac_sha1_testvec *hmac_sha1_tv;
225 struct scatterlist sg[2];
227 char result[SHA1_DIGEST_SIZE];
229 tfm = crypto_alloc_tfm("sha1", 0);
231 printk("failed to load transform for sha1\n");
235 printk("\ntesting hmac_sha1\n");
237 tsize = sizeof (hmac_sha1_tv_template);
238 if (tsize > TVMEMSIZE) {
239 printk("template (%u) too big for tvmem (%u)\n", tsize,
244 memcpy(tvmem, hmac_sha1_tv_template, tsize);
245 hmac_sha1_tv = (void *) tvmem;
247 for (i = 0; i < HMAC_SHA1_TEST_VECTORS; i++) {
248 printk("test %u:\n", i + 1);
249 memset(result, 0, sizeof (result));
251 p = hmac_sha1_tv[i].plaintext;
252 sg[0].page = virt_to_page(p);
253 sg[0].offset = ((long) p & ~PAGE_MASK);
254 sg[0].length = strlen(hmac_sha1_tv[i].plaintext);
256 klen = strlen(hmac_sha1_tv[i].key);
258 crypto_hmac(tfm, hmac_sha1_tv[i].key, &klen, sg, 1, result);
260 hexdump(result, sizeof (result));
262 memcmp(result, hmac_sha1_tv[i].digest,
263 crypto_tfm_alg_digestsize(tfm)) ? "fail" :
267 printk("\ntesting hmac_sha1 across pages\n");
269 /* setup the dummy buffer first */
270 memset(xbuf, 0, XBUFSIZE);
272 memcpy(&xbuf[IDX1], "what do ya want ", 16);
273 memcpy(&xbuf[IDX2], "for nothing?", 12);
276 sg[0].page = virt_to_page(p);
277 sg[0].offset = ((long) p & ~PAGE_MASK);
281 sg[1].page = virt_to_page(p);
282 sg[1].offset = ((long) p & ~PAGE_MASK);
285 memset(result, 0, sizeof (result));
286 klen = strlen(hmac_sha1_tv[7].key);
287 crypto_hmac(tfm, hmac_sha1_tv[7].key, &klen, sg, 2, result);
288 hexdump(result, crypto_tfm_alg_digestsize(tfm));
291 memcmp(result, hmac_sha1_tv[7].digest,
292 crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass");
294 crypto_free_tfm(tfm);
298 test_hmac_sha256(void)
301 unsigned int i, klen;
302 struct crypto_tfm *tfm;
303 struct hmac_sha256_testvec *hmac_sha256_tv;
304 struct scatterlist sg[2];
306 char result[SHA256_DIGEST_SIZE];
308 tfm = crypto_alloc_tfm("sha256", 0);
310 printk("failed to load transform for sha256\n");
314 printk("\ntesting hmac_sha256\n");
316 tsize = sizeof (hmac_sha256_tv_template);
317 if (tsize > TVMEMSIZE) {
318 printk("template (%u) too big for tvmem (%u)\n", tsize,
323 memcpy(tvmem, hmac_sha256_tv_template, tsize);
324 hmac_sha256_tv = (void *) tvmem;
326 for (i = 0; i < HMAC_SHA256_TEST_VECTORS; i++) {
327 printk("test %u:\n", i + 1);
328 memset(result, 0, sizeof (result));
330 p = hmac_sha256_tv[i].plaintext;
331 sg[0].page = virt_to_page(p);
332 sg[0].offset = ((long) p & ~PAGE_MASK);
333 sg[0].length = strlen(hmac_sha256_tv[i].plaintext);
335 klen = strlen(hmac_sha256_tv[i].key);
337 hexdump(hmac_sha256_tv[i].key, strlen(hmac_sha256_tv[i].key));
338 crypto_hmac(tfm, hmac_sha256_tv[i].key, &klen, sg, 1, result);
339 hexdump(result, crypto_tfm_alg_digestsize(tfm));
341 memcmp(result, hmac_sha256_tv[i].digest,
342 crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass");
346 crypto_free_tfm(tfm);
349 #endif /* CONFIG_CRYPTO_HMAC */
356 struct scatterlist sg[1];
358 struct crypto_tfm *tfm;
359 struct md4_testvec *md4_tv;
362 printk("\ntesting md4\n");
364 tsize = sizeof (md4_tv_template);
365 if (tsize > TVMEMSIZE) {
366 printk("template (%u) too big for tvmem (%u)\n", tsize,
371 memcpy(tvmem, md4_tv_template, tsize);
372 md4_tv = (void *) tvmem;
374 tfm = crypto_alloc_tfm("md4", 0);
376 printk("failed to load transform for md4\n");
380 for (i = 0; i < MD4_TEST_VECTORS; i++) {
381 printk("test %u:\n", i + 1);
382 memset(result, 0, sizeof (result));
384 p = md4_tv[i].plaintext;
385 sg[0].page = virt_to_page(p);
386 sg[0].offset = ((long) p & ~PAGE_MASK);
387 sg[0].length = strlen(md4_tv[i].plaintext);
389 crypto_digest_digest(tfm, sg, 1, result);
391 hexdump(result, crypto_tfm_alg_digestsize(tfm));
393 memcmp(result, md4_tv[i].digest,
394 crypto_tfm_alg_digestsize(tfm)) ? "fail" :
398 crypto_free_tfm(tfm);
406 struct crypto_tfm *tfm;
407 struct sha1_testvec *sha1_tv;
408 struct scatterlist sg[2];
410 char result[SHA1_DIGEST_SIZE];
412 printk("\ntesting sha1\n");
414 tsize = sizeof (sha1_tv_template);
415 if (tsize > TVMEMSIZE) {
416 printk("template (%u) too big for tvmem (%u)\n", tsize,
421 memcpy(tvmem, sha1_tv_template, tsize);
422 sha1_tv = (void *) tvmem;
424 tfm = crypto_alloc_tfm("sha1", 0);
426 printk("failed to load transform for sha1\n");
430 for (i = 0; i < SHA1_TEST_VECTORS; i++) {
431 printk("test %u:\n", i + 1);
432 memset(result, 0, sizeof (result));
434 p = sha1_tv[i].plaintext;
435 sg[0].page = virt_to_page(p);
436 sg[0].offset = ((long) p & ~PAGE_MASK);
437 sg[0].length = strlen(sha1_tv[i].plaintext);
439 crypto_digest_init(tfm);
440 crypto_digest_update(tfm, sg, 1);
441 crypto_digest_final(tfm, result);
443 hexdump(result, crypto_tfm_alg_digestsize(tfm));
445 memcmp(result, sha1_tv[i].digest,
446 crypto_tfm_alg_digestsize(tfm)) ? "fail" :
450 printk("\ntesting sha1 across pages\n");
452 /* setup the dummy buffer first */
453 memset(xbuf, 0, XBUFSIZE);
454 memcpy(&xbuf[IDX1], "abcdbcdecdefdefgefghfghighij", 28);
455 memcpy(&xbuf[IDX2], "hijkijkljklmklmnlmnomnopnopq", 28);
458 sg[0].page = virt_to_page(p);
459 sg[0].offset = ((long) p & ~PAGE_MASK);
463 sg[1].page = virt_to_page(p);
464 sg[1].offset = ((long) p & ~PAGE_MASK);
467 memset(result, 0, sizeof (result));
468 crypto_digest_digest(tfm, sg, 2, result);
469 hexdump(result, crypto_tfm_alg_digestsize(tfm));
471 memcmp(result, sha1_tv[1].digest,
472 crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass");
473 crypto_free_tfm(tfm);
481 struct crypto_tfm *tfm;
482 struct sha256_testvec *sha256_tv;
483 struct scatterlist sg[2];
485 char result[SHA256_DIGEST_SIZE];
487 printk("\ntesting sha256\n");
489 tsize = sizeof (sha256_tv_template);
490 if (tsize > TVMEMSIZE) {
491 printk("template (%u) too big for tvmem (%u)\n", tsize,
496 memcpy(tvmem, sha256_tv_template, tsize);
497 sha256_tv = (void *) tvmem;
499 tfm = crypto_alloc_tfm("sha256", 0);
501 printk("failed to load transform for sha256\n");
505 for (i = 0; i < SHA256_TEST_VECTORS; i++) {
506 printk("test %u:\n", i + 1);
507 memset(result, 0, sizeof (result));
509 p = sha256_tv[i].plaintext;
510 sg[0].page = virt_to_page(p);
511 sg[0].offset = ((long) p & ~PAGE_MASK);
512 sg[0].length = strlen(sha256_tv[i].plaintext);
514 crypto_digest_init(tfm);
515 crypto_digest_update(tfm, sg, 1);
516 crypto_digest_final(tfm, result);
518 hexdump(result, crypto_tfm_alg_digestsize(tfm));
520 memcmp(result, sha256_tv[i].digest,
521 crypto_tfm_alg_digestsize(tfm)) ? "fail" :
525 printk("\ntesting sha256 across pages\n");
527 /* setup the dummy buffer first */
528 memset(xbuf, 0, XBUFSIZE);
529 memcpy(&xbuf[IDX1], "abcdbcdecdefdefgefghfghighij", 28);
530 memcpy(&xbuf[IDX2], "hijkijkljklmklmnlmnomnopnopq", 28);
533 sg[0].page = virt_to_page(p);
534 sg[0].offset = ((long) p & ~PAGE_MASK);
538 sg[1].page = virt_to_page(p);
539 sg[1].offset = ((long) p & ~PAGE_MASK);
542 memset(result, 0, sizeof (result));
543 crypto_digest_digest(tfm, sg, 2, result);
544 hexdump(result, crypto_tfm_alg_digestsize(tfm));
546 memcmp(result, sha256_tv[1].digest,
547 crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass");
549 crypto_free_tfm(tfm);
557 struct crypto_tfm *tfm;
558 struct sha384_testvec *sha384_tv;
559 struct scatterlist sg[2];
561 char result[SHA384_DIGEST_SIZE];
563 printk("\ntesting sha384\n");
565 tsize = sizeof (sha384_tv_template);
566 if (tsize > TVMEMSIZE) {
567 printk("template (%u) too big for tvmem (%u)\n", tsize,
572 memcpy(tvmem, sha384_tv_template, tsize);
573 sha384_tv = (void *) tvmem;
575 tfm = crypto_alloc_tfm("sha384", 0);
577 printk("failed to load transform for sha384\n");
581 for (i = 0; i < SHA384_TEST_VECTORS; i++) {
582 printk("test %u:\n", i + 1);
583 memset(result, 0, sizeof (result));
585 p = sha384_tv[i].plaintext;
586 sg[0].page = virt_to_page(p);
587 sg[0].offset = ((long) p & ~PAGE_MASK);
588 sg[0].length = strlen(sha384_tv[i].plaintext);
590 crypto_digest_init(tfm);
591 crypto_digest_update(tfm, sg, 1);
592 crypto_digest_final(tfm, result);
594 hexdump(result, crypto_tfm_alg_digestsize(tfm));
596 memcmp(result, sha384_tv[i].digest,
597 crypto_tfm_alg_digestsize(tfm)) ? "fail" :
601 crypto_free_tfm(tfm);
609 struct crypto_tfm *tfm;
610 struct sha512_testvec *sha512_tv;
611 struct scatterlist sg[2];
613 char result[SHA512_DIGEST_SIZE];
615 printk("\ntesting sha512\n");
617 tsize = sizeof (sha512_tv_template);
618 if (tsize > TVMEMSIZE) {
619 printk("template (%u) too big for tvmem (%u)\n", tsize,
624 memcpy(tvmem, sha512_tv_template, tsize);
625 sha512_tv = (void *) tvmem;
627 tfm = crypto_alloc_tfm("sha512", 0);
629 printk("failed to load transform for sha512\n");
633 for (i = 0; i < SHA512_TEST_VECTORS; i++) {
634 printk("test %u:\n", i + 1);
635 memset(result, 0, sizeof (result));
637 p = sha512_tv[i].plaintext;
638 sg[0].page = virt_to_page(p);
639 sg[0].offset = ((long) p & ~PAGE_MASK);
640 sg[0].length = strlen(sha512_tv[i].plaintext);
642 crypto_digest_init(tfm);
643 crypto_digest_update(tfm, sg, 1);
644 crypto_digest_final(tfm, result);
646 hexdump(result, crypto_tfm_alg_digestsize(tfm));
648 memcmp(result, sha512_tv[i].digest,
649 crypto_tfm_alg_digestsize(tfm)) ? "fail" :
653 crypto_free_tfm(tfm);
659 unsigned int ret, i, len;
662 struct crypto_tfm *tfm;
665 struct des_tv *des_tv;
666 struct scatterlist sg[8];
668 printk("\ntesting des encryption\n");
670 tsize = sizeof (des_enc_tv_template);
671 if (tsize > TVMEMSIZE) {
672 printk("template (%u) too big for tvmem (%u)\n", tsize,
677 memcpy(tvmem, des_enc_tv_template, tsize);
678 des_tv = (void *) tvmem;
680 tfm = crypto_alloc_tfm("des", 0);
682 printk("failed to load transform for des (default ecb)\n");
686 for (i = 0; i < DES_ENC_TEST_VECTORS; i++) {
687 printk("test %u:\n", i + 1);
690 tfm->crt_flags |= CRYPTO_TFM_REQ_WEAK_KEY;
692 ret = crypto_cipher_setkey(tfm, key, 8);
694 printk("setkey() failed flags=%x\n", tfm->crt_flags);
702 p = des_tv[i].plaintext;
703 sg[0].page = virt_to_page(p);
704 sg[0].offset = ((long) p & ~PAGE_MASK);
706 ret = crypto_cipher_encrypt(tfm, sg, sg, len);
708 printk("encrypt() failed flags=%x\n", tfm->crt_flags);
712 q = kmap(sg[0].page) + sg[0].offset;
716 memcmp(q, des_tv[i].result, len) ? "fail" : "pass");
720 printk("\ntesting des ecb encryption across pages\n");
728 ret = crypto_cipher_setkey(tfm, key, 8);
730 printk("setkey() failed flags=%x\n", tfm->crt_flags);
734 /* setup the dummy buffer first */
735 memset(xbuf, 0, sizeof (xbuf));
736 memcpy(&xbuf[IDX1], des_tv[i].plaintext, 8);
737 memcpy(&xbuf[IDX2], des_tv[i].plaintext + 8, 8);
740 sg[0].page = virt_to_page(p);
741 sg[0].offset = ((long) p & ~PAGE_MASK);
745 sg[1].page = virt_to_page(p);
746 sg[1].offset = ((long) p & ~PAGE_MASK);
749 ret = crypto_cipher_encrypt(tfm, sg, sg, 16);
751 printk("encrypt() failed flags=%x\n", tfm->crt_flags);
756 q = kmap(sg[0].page) + sg[0].offset;
758 printk("%s\n", memcmp(q, des_tv[i].result, 8) ? "fail" : "pass");
761 q = kmap(sg[1].page) + sg[1].offset;
763 printk("%s\n", memcmp(q, des_tv[i].result + 8, 8) ? "fail" : "pass");
765 printk("\ntesting des ecb encryption chunking scenario A\n");
771 * [8 + 6] [2 + 8] [8]
775 * Chunking should begin at a, then end with b, and
776 * continue encrypting at an offset of 2 until c.
784 ret = crypto_cipher_setkey(tfm, key, 8);
786 printk("setkey() failed flags=%x\n", tfm->crt_flags);
790 /* setup the dummy buffer first */
791 memset(xbuf, 0, sizeof (xbuf));
794 memcpy(&xbuf[IDX3], des_tv[i].plaintext, 14);
797 memcpy(&xbuf[IDX4], des_tv[i].plaintext + 14, 10);
800 memcpy(&xbuf[IDX5], des_tv[i].plaintext + 24, 8);
803 sg[0].page = virt_to_page(p);
804 sg[0].offset = ((long) p & ~PAGE_MASK);
808 sg[1].page = virt_to_page(p);
809 sg[1].offset = ((long) p & ~PAGE_MASK);
813 sg[2].page = virt_to_page(p);
814 sg[2].offset = ((long) p & ~PAGE_MASK);
817 ret = crypto_cipher_encrypt(tfm, sg, sg, 32);
820 printk("decrypt() failed flags=%x\n", tfm->crt_flags);
825 q = kmap(sg[0].page) + sg[0].offset;
827 printk("%s\n", memcmp(q, des_tv[i].result, 14) ? "fail" : "pass");
830 q = kmap(sg[1].page) + sg[1].offset;
832 printk("%s\n", memcmp(q, des_tv[i].result + 14, 10) ? "fail" : "pass");
835 q = kmap(sg[2].page) + sg[2].offset;
837 printk("%s\n", memcmp(q, des_tv[i].result + 24, 8) ? "fail" : "pass");
839 printk("\ntesting des ecb encryption chunking scenario B\n");
845 * [2] [1] [3] [2 + 8 + 8]
852 ret = crypto_cipher_setkey(tfm, key, 8);
854 printk("setkey() failed flags=%x\n", tfm->crt_flags);
858 /* setup the dummy buffer first */
859 memset(xbuf, 0, sizeof (xbuf));
862 memcpy(&xbuf[IDX3], des_tv[i].plaintext, 2);
865 memcpy(&xbuf[IDX4], des_tv[i].plaintext + 2, 1);
868 memcpy(&xbuf[IDX5], des_tv[i].plaintext + 3, 3);
870 /* Frag 4: 2 + 8 + 8 */
871 memcpy(&xbuf[IDX6], des_tv[i].plaintext + 6, 18);
874 sg[0].page = virt_to_page(p);
875 sg[0].offset = ((long) p & ~PAGE_MASK);
879 sg[1].page = virt_to_page(p);
880 sg[1].offset = ((long) p & ~PAGE_MASK);
884 sg[2].page = virt_to_page(p);
885 sg[2].offset = ((long) p & ~PAGE_MASK);
889 sg[3].page = virt_to_page(p);
890 sg[3].offset = ((long) p & ~PAGE_MASK);
893 ret = crypto_cipher_encrypt(tfm, sg, sg, 24);
896 printk("encrypt() failed flags=%x\n", tfm->crt_flags);
901 q = kmap(sg[0].page) + sg[0].offset;
903 printk("%s\n", memcmp(q, des_tv[i].result, 2) ? "fail" : "pass");
906 q = kmap(sg[1].page) + sg[1].offset;
908 printk("%s\n", memcmp(q, des_tv[i].result + 2, 1) ? "fail" : "pass");
911 q = kmap(sg[2].page) + sg[2].offset;
913 printk("%s\n", memcmp(q, des_tv[i].result + 3, 3) ? "fail" : "pass");
916 q = kmap(sg[3].page) + sg[3].offset;
918 printk("%s\n", memcmp(q, des_tv[i].result + 6, 18) ? "fail" : "pass");
920 printk("\ntesting des ecb encryption chunking scenario C\n");
926 * [2] [2] [2] [2] [8]
933 ret = crypto_cipher_setkey(tfm, key, 8);
935 printk("setkey() failed flags=%x\n", tfm->crt_flags);
939 /* setup the dummy buffer first */
940 memset(xbuf, 0, sizeof (xbuf));
943 memcpy(&xbuf[IDX3], des_tv[i].plaintext, 2);
946 memcpy(&xbuf[IDX4], des_tv[i].plaintext + 2, 2);
949 memcpy(&xbuf[IDX5], des_tv[i].plaintext + 4, 2);
952 memcpy(&xbuf[IDX6], des_tv[i].plaintext + 6, 2);
955 memcpy(&xbuf[IDX7], des_tv[i].plaintext + 8, 8);
958 sg[0].page = virt_to_page(p);
959 sg[0].offset = ((long) p & ~PAGE_MASK);
963 sg[1].page = virt_to_page(p);
964 sg[1].offset = ((long) p & ~PAGE_MASK);
968 sg[2].page = virt_to_page(p);
969 sg[2].offset = ((long) p & ~PAGE_MASK);
973 sg[3].page = virt_to_page(p);
974 sg[3].offset = ((long) p & ~PAGE_MASK);
978 sg[4].page = virt_to_page(p);
979 sg[4].offset = ((long) p & ~PAGE_MASK);
982 ret = crypto_cipher_encrypt(tfm, sg, sg, 16);
985 printk("encrypt() failed flags=%x\n", tfm->crt_flags);
990 q = kmap(sg[0].page) + sg[0].offset;
992 printk("%s\n", memcmp(q, des_tv[i].result, 2) ? "fail" : "pass");
995 q = kmap(sg[1].page) + sg[1].offset;
997 printk("%s\n", memcmp(q, des_tv[i].result + 2, 2) ? "fail" : "pass");
1000 q = kmap(sg[2].page) + sg[2].offset;
1002 printk("%s\n", memcmp(q, des_tv[i].result + 4, 2) ? "fail" : "pass");
1005 q = kmap(sg[3].page) + sg[3].offset;
1007 printk("%s\n", memcmp(q, des_tv[i].result + 6, 2) ? "fail" : "pass");
1010 q = kmap(sg[4].page) + sg[4].offset;
1012 printk("%s\n", memcmp(q, des_tv[i].result + 8, 8) ? "fail" : "pass");
1014 printk("\ntesting des ecb encryption chunking scenario D\n");
1017 * Scenario D, torture test, one byte per frag.
1020 key = des_tv[i].key;
1023 ret = crypto_cipher_setkey(tfm, key, 8);
1025 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1029 /* setup the dummy buffer first */
1030 memset(xbuf, 0, XBUFSIZE);
1032 xbuf[IDX1] = des_tv[i].plaintext[0];
1033 xbuf[IDX2] = des_tv[i].plaintext[1];
1034 xbuf[IDX3] = des_tv[i].plaintext[2];
1035 xbuf[IDX4] = des_tv[i].plaintext[3];
1036 xbuf[IDX5] = des_tv[i].plaintext[4];
1037 xbuf[IDX6] = des_tv[i].plaintext[5];
1038 xbuf[IDX7] = des_tv[i].plaintext[6];
1039 xbuf[IDX8] = des_tv[i].plaintext[7];
1042 sg[0].page = virt_to_page(p);
1043 sg[0].offset = ((long) p & ~PAGE_MASK);
1047 sg[1].page = virt_to_page(p);
1048 sg[1].offset = ((long) p & ~PAGE_MASK);
1052 sg[2].page = virt_to_page(p);
1053 sg[2].offset = ((long) p & ~PAGE_MASK);
1057 sg[3].page = virt_to_page(p);
1058 sg[3].offset = ((long) p & ~PAGE_MASK);
1062 sg[4].page = virt_to_page(p);
1063 sg[4].offset = ((long) p & ~PAGE_MASK);
1067 sg[5].page = virt_to_page(p);
1068 sg[5].offset = ((long) p & ~PAGE_MASK);
1072 sg[6].page = virt_to_page(p);
1073 sg[6].offset = ((long) p & ~PAGE_MASK);
1077 sg[7].page = virt_to_page(p);
1078 sg[7].offset = ((long) p & ~PAGE_MASK);
1081 ret = crypto_cipher_encrypt(tfm, sg, sg, 8);
1083 printk("encrypt() failed flags=%x\n", tfm->crt_flags);
1087 for (i = 0; i < 8; i++)
1088 res[i] = *(char *) (kmap(sg[i].page) + sg[i].offset);
1091 printk("%s\n", memcmp(res, des_tv[7].result, 8) ? "fail" : "pass");
1093 printk("\ntesting des decryption\n");
1095 tsize = sizeof (des_dec_tv_template);
1096 if (tsize > TVMEMSIZE) {
1097 printk("template (%u) too big for tvmem (%u)\n", tsize,
1101 memcpy(tvmem, des_dec_tv_template, tsize);
1102 des_tv = (void *) tvmem;
1104 for (i = 0; i < DES_DEC_TEST_VECTORS; i++) {
1105 printk("test %u:\n", i + 1);
1107 key = des_tv[i].key;
1110 ret = crypto_cipher_setkey(tfm, key, 8);
1112 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1116 len = des_tv[i].len;
1118 p = des_tv[i].plaintext;
1119 sg[0].page = virt_to_page(p);
1120 sg[0].offset = ((long) p & ~PAGE_MASK);
1123 ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
1125 printk("des_decrypt() failed flags=%x\n",
1130 q = kmap(sg[0].page) + sg[0].offset;
1134 memcmp(q, des_tv[i].result, len) ? "fail" : "pass");
1138 printk("\ntesting des ecb decryption across pages\n");
1142 key = des_tv[i].key;
1145 ret = crypto_cipher_setkey(tfm, key, 8);
1147 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1151 /* setup the dummy buffer first */
1152 memset(xbuf, 0, sizeof (xbuf));
1153 memcpy(&xbuf[IDX1], des_tv[i].plaintext, 8);
1154 memcpy(&xbuf[IDX2], des_tv[i].plaintext + 8, 8);
1157 sg[0].page = virt_to_page(p);
1158 sg[0].offset = ((long) p & ~PAGE_MASK);
1162 sg[1].page = virt_to_page(p);
1163 sg[1].offset = ((long) p & ~PAGE_MASK);
1166 ret = crypto_cipher_decrypt(tfm, sg, sg, 16);
1168 printk("decrypt() failed flags=%x\n", tfm->crt_flags);
1173 q = kmap(sg[0].page) + sg[0].offset;
1175 printk("%s\n", memcmp(q, des_tv[i].result, 8) ? "fail" : "pass");
1178 q = kmap(sg[1].page) + sg[1].offset;
1180 printk("%s\n", memcmp(q, des_tv[i].result + 8, 8) ? "fail" : "pass");
1189 printk("\ntesting des ecb decryption chunking scenario E\n");
1192 key = des_tv[i].key;
1195 ret = crypto_cipher_setkey(tfm, key, 8);
1197 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1201 /* setup the dummy buffer first */
1202 memset(xbuf, 0, sizeof (xbuf));
1204 memcpy(&xbuf[IDX1], des_tv[i].plaintext, 3);
1205 memcpy(&xbuf[IDX2], des_tv[i].plaintext + 3, 12);
1206 memcpy(&xbuf[IDX3], des_tv[i].plaintext + 15, 1);
1209 sg[0].page = virt_to_page(p);
1210 sg[0].offset = ((long) p & ~PAGE_MASK);
1214 sg[1].page = virt_to_page(p);
1215 sg[1].offset = ((long) p & ~PAGE_MASK);
1219 sg[2].page = virt_to_page(p);
1220 sg[2].offset = ((long) p & ~PAGE_MASK);
1223 ret = crypto_cipher_decrypt(tfm, sg, sg, 16);
1226 printk("decrypt() failed flags=%x\n", tfm->crt_flags);
1231 q = kmap(sg[0].page) + sg[0].offset;
1233 printk("%s\n", memcmp(q, des_tv[i].result, 3) ? "fail" : "pass");
1236 q = kmap(sg[1].page) + sg[1].offset;
1238 printk("%s\n", memcmp(q, des_tv[i].result + 3, 12) ? "fail" : "pass");
1241 q = kmap(sg[2].page) + sg[2].offset;
1243 printk("%s\n", memcmp(q, des_tv[i].result + 15, 1) ? "fail" : "pass");
1245 crypto_free_tfm(tfm);
1247 tfm = crypto_alloc_tfm("des", CRYPTO_TFM_MODE_CBC);
1249 printk("failed to load transform for des cbc\n");
1253 printk("\ntesting des cbc encryption\n");
1255 tsize = sizeof (des_cbc_enc_tv_template);
1256 if (tsize > TVMEMSIZE) {
1257 printk("template (%u) too big for tvmem (%u)\n", tsize,
1261 memcpy(tvmem, des_cbc_enc_tv_template, tsize);
1262 des_tv = (void *) tvmem;
1264 crypto_cipher_set_iv(tfm, des_tv[i].iv, crypto_tfm_alg_ivsize(tfm));
1265 crypto_cipher_get_iv(tfm, res, crypto_tfm_alg_ivsize(tfm));
1267 if (memcmp(res, des_tv[i].iv, sizeof(res))) {
1268 printk("crypto_cipher_[set|get]_iv() failed\n");
1272 for (i = 0; i < DES_CBC_ENC_TEST_VECTORS; i++) {
1273 printk("test %u:\n", i + 1);
1275 key = des_tv[i].key;
1277 ret = crypto_cipher_setkey(tfm, key, 8);
1279 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1283 len = des_tv[i].len;
1284 p = des_tv[i].plaintext;
1286 sg[0].page = virt_to_page(p);
1287 sg[0].offset = ((long) p & ~PAGE_MASK);
1290 crypto_cipher_set_iv(tfm, des_tv[i].iv,
1291 crypto_tfm_alg_ivsize(tfm));
1293 ret = crypto_cipher_encrypt(tfm, sg, sg, len);
1295 printk("des_cbc_encrypt() failed flags=%x\n",
1300 q = kmap(sg[0].page) + sg[0].offset;
1304 memcmp(q, des_tv[i].result, len) ? "fail" : "pass");
1307 crypto_free_tfm(tfm);
1316 printk("\ntesting des cbc encryption chunking scenario F\n");
1319 tfm = crypto_alloc_tfm("des", CRYPTO_TFM_MODE_CBC);
1321 printk("failed to load transform for CRYPTO_ALG_DES_CCB\n");
1326 key = des_tv[i].key;
1328 ret = crypto_cipher_setkey(tfm, key, 8);
1330 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1334 /* setup the dummy buffer first */
1335 memset(xbuf, 0, sizeof (xbuf));
1337 memcpy(&xbuf[IDX1], des_tv[i].plaintext, 13);
1338 memcpy(&xbuf[IDX2], des_tv[i].plaintext + 13, 11);
1341 sg[0].page = virt_to_page(p);
1342 sg[0].offset = ((long) p & ~PAGE_MASK);
1346 sg[1].page = virt_to_page(p);
1347 sg[1].offset = ((long) p & ~PAGE_MASK);
1350 crypto_cipher_set_iv(tfm, des_tv[i].iv, crypto_tfm_alg_ivsize(tfm));
1352 ret = crypto_cipher_encrypt(tfm, sg, sg, 24);
1354 printk("des_cbc_decrypt() failed flags=%x\n", tfm->crt_flags);
1359 q = kmap(sg[0].page) + sg[0].offset;
1361 printk("%s\n", memcmp(q, des_tv[i].result, 13) ? "fail" : "pass");
1364 q = kmap(sg[1].page) + sg[1].offset;
1366 printk("%s\n", memcmp(q, des_tv[i].result + 13, 11) ? "fail" : "pass");
1368 tsize = sizeof (des_cbc_dec_tv_template);
1369 if (tsize > TVMEMSIZE) {
1370 printk("template (%u) too big for tvmem (%u)\n", tsize,
1374 memcpy(tvmem, des_cbc_dec_tv_template, tsize);
1375 des_tv = (void *) tvmem;
1377 printk("\ntesting des cbc decryption\n");
1379 for (i = 0; i < DES_CBC_DEC_TEST_VECTORS; i++) {
1380 printk("test %u:\n", i + 1);
1383 key = des_tv[i].key;
1385 ret = crypto_cipher_setkey(tfm, key, 8);
1387 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1391 len = des_tv[i].len;
1392 p = des_tv[i].plaintext;
1394 sg[0].page = virt_to_page(p);
1395 sg[0].offset = ((long) p & ~PAGE_MASK);
1398 crypto_cipher_set_iv(tfm, des_tv[i].iv,
1399 crypto_tfm_alg_blocksize(tfm));
1401 ret = crypto_cipher_decrypt(tfm, sg, sg, len);
1403 printk("des_cbc_decrypt() failed flags=%x\n",
1408 hexdump(tfm->crt_cipher.cit_iv, 8);
1410 q = kmap(sg[0].page) + sg[0].offset;
1414 memcmp(q, des_tv[i].result, len) ? "fail" : "pass");
1424 printk("\ntesting des cbc decryption chunking scenario G\n");
1428 key = des_tv[i].key;
1430 ret = crypto_cipher_setkey(tfm, key, 8);
1432 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1436 /* setup the dummy buffer first */
1437 memset(xbuf, 0, sizeof (xbuf));
1438 memcpy(&xbuf[IDX1], des_tv[i].plaintext, 4);
1439 memcpy(&xbuf[IDX2], des_tv[i].plaintext + 4, 4);
1442 sg[0].page = virt_to_page(p);
1443 sg[0].offset = ((long) p & ~PAGE_MASK);
1447 sg[1].page = virt_to_page(p);
1448 sg[1].offset = ((long) p & ~PAGE_MASK);
1451 crypto_cipher_set_iv(tfm, des_tv[i].iv, crypto_tfm_alg_ivsize(tfm));
1453 ret = crypto_cipher_decrypt(tfm, sg, sg, 8);
1455 printk("des_cbc_decrypt() failed flags=%x\n", tfm->crt_flags);
1460 q = kmap(sg[0].page) + sg[0].offset;
1462 printk("%s\n", memcmp(q, des_tv[i].result, 4) ? "fail" : "pass");
1465 q = kmap(sg[1].page) + sg[1].offset;
1467 printk("%s\n", memcmp(q, des_tv[i].result + 4, 4) ? "fail" : "pass");
1470 crypto_free_tfm(tfm);
1476 unsigned int ret, i, len;
1479 struct crypto_tfm *tfm;
1482 struct des_tv *des_tv;
1483 struct scatterlist sg[8];
1485 printk("\ntesting des3 ede encryption\n");
1487 tsize = sizeof (des3_ede_enc_tv_template);
1488 if (tsize > TVMEMSIZE) {
1489 printk("template (%u) too big for tvmem (%u)\n", tsize,
1494 memcpy(tvmem, des3_ede_enc_tv_template, tsize);
1495 des_tv = (void *) tvmem;
1497 tfm = crypto_alloc_tfm("des3_ede", CRYPTO_TFM_MODE_ECB);
1499 printk("failed to load transform for 3des ecb\n");
1503 for (i = 0; i < DES3_EDE_ENC_TEST_VECTORS; i++) {
1504 printk("test %u:\n", i + 1);
1506 key = des_tv[i].key;
1507 ret = crypto_cipher_setkey(tfm, key, 24);
1509 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1511 if (!des_tv[i].fail)
1515 len = des_tv[i].len;
1517 p = des_tv[i].plaintext;
1518 sg[0].page = virt_to_page(p);
1519 sg[0].offset = ((long) p & ~PAGE_MASK);
1521 ret = crypto_cipher_encrypt(tfm, sg, sg, len);
1523 printk("encrypt() failed flags=%x\n", tfm->crt_flags);
1527 q = kmap(sg[0].page) + sg[0].offset;
1531 memcmp(q, des_tv[i].result, len) ? "fail" : "pass");
1534 printk("\ntesting des3 ede decryption\n");
1536 tsize = sizeof (des3_ede_dec_tv_template);
1537 if (tsize > TVMEMSIZE) {
1538 printk("template (%u) too big for tvmem (%u)\n", tsize,
1543 memcpy(tvmem, des3_ede_dec_tv_template, tsize);
1544 des_tv = (void *) tvmem;
1546 for (i = 0; i < DES3_EDE_DEC_TEST_VECTORS; i++) {
1547 printk("test %u:\n", i + 1);
1549 key = des_tv[i].key;
1550 ret = crypto_cipher_setkey(tfm, key, 24);
1552 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1554 if (!des_tv[i].fail)
1558 len = des_tv[i].len;
1560 p = des_tv[i].plaintext;
1561 sg[0].page = virt_to_page(p);
1562 sg[0].offset = ((long) p & ~PAGE_MASK);
1564 ret = crypto_cipher_decrypt(tfm, sg, sg, len);
1566 printk("decrypt() failed flags=%x\n", tfm->crt_flags);
1570 q = kmap(sg[0].page) + sg[0].offset;
1574 memcmp(q, des_tv[i].result, len) ? "fail" : "pass");
1578 crypto_free_tfm(tfm);
1584 unsigned int ret, i;
1587 struct crypto_tfm *tfm;
1589 struct bf_tv *bf_tv;
1590 struct scatterlist sg[1];
1592 printk("\ntesting blowfish encryption\n");
1594 tsize = sizeof (bf_enc_tv_template);
1595 if (tsize > TVMEMSIZE) {
1596 printk("template (%u) too big for tvmem (%u)\n", tsize,
1601 memcpy(tvmem, bf_enc_tv_template, tsize);
1602 bf_tv = (void *) tvmem;
1604 tfm = crypto_alloc_tfm("blowfish", 0);
1606 printk("failed to load transform for blowfish (default ecb)\n");
1610 for (i = 0; i < BF_ENC_TEST_VECTORS; i++) {
1611 printk("test %u (%d bit key):\n",
1612 i + 1, bf_tv[i].keylen * 8);
1615 ret = crypto_cipher_setkey(tfm, key, bf_tv[i].keylen);
1617 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1623 p = bf_tv[i].plaintext;
1624 sg[0].page = virt_to_page(p);
1625 sg[0].offset = ((long) p & ~PAGE_MASK);
1626 sg[0].length = bf_tv[i].plen;
1627 ret = crypto_cipher_encrypt(tfm, sg, sg, sg[0].length);
1629 printk("encrypt() failed flags=%x\n", tfm->crt_flags);
1633 q = kmap(sg[0].page) + sg[0].offset;
1634 hexdump(q, bf_tv[i].rlen);
1636 printk("%s\n", memcmp(q, bf_tv[i].result, bf_tv[i].rlen) ?
1640 printk("\ntesting blowfish decryption\n");
1642 tsize = sizeof (bf_dec_tv_template);
1643 if (tsize > TVMEMSIZE) {
1644 printk("template (%u) too big for tvmem (%u)\n", tsize,
1649 memcpy(tvmem, bf_dec_tv_template, tsize);
1650 bf_tv = (void *) tvmem;
1652 for (i = 0; i < BF_DEC_TEST_VECTORS; i++) {
1653 printk("test %u (%d bit key):\n",
1654 i + 1, bf_tv[i].keylen * 8);
1657 ret = crypto_cipher_setkey(tfm, key, bf_tv[i].keylen);
1659 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1665 p = bf_tv[i].plaintext;
1666 sg[0].page = virt_to_page(p);
1667 sg[0].offset = ((long) p & ~PAGE_MASK);
1668 sg[0].length = bf_tv[i].plen;
1669 ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
1671 printk("decrypt() failed flags=%x\n", tfm->crt_flags);
1675 q = kmap(sg[0].page) + sg[0].offset;
1676 hexdump(q, bf_tv[i].rlen);
1678 printk("%s\n", memcmp(q, bf_tv[i].result, bf_tv[i].rlen) ?
1682 crypto_free_tfm(tfm);
1684 tfm = crypto_alloc_tfm("blowfish", CRYPTO_TFM_MODE_CBC);
1686 printk("failed to load transform for blowfish cbc\n");
1690 printk("\ntesting blowfish cbc encryption\n");
1692 tsize = sizeof (bf_cbc_enc_tv_template);
1693 if (tsize > TVMEMSIZE) {
1694 printk("template (%u) too big for tvmem (%u)\n", tsize,
1698 memcpy(tvmem, bf_cbc_enc_tv_template, tsize);
1699 bf_tv = (void *) tvmem;
1701 for (i = 0; i < BF_CBC_ENC_TEST_VECTORS; i++) {
1702 printk("test %u (%d bit key):\n",
1703 i + 1, bf_tv[i].keylen * 8);
1707 ret = crypto_cipher_setkey(tfm, key, bf_tv[i].keylen);
1709 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1713 p = bf_tv[i].plaintext;
1715 sg[0].page = virt_to_page(p);
1716 sg[0].offset = ((long) p & ~PAGE_MASK);
1717 sg[0].length = bf_tv[i].plen;
1719 crypto_cipher_set_iv(tfm, bf_tv[i].iv,
1720 crypto_tfm_alg_ivsize(tfm));
1722 ret = crypto_cipher_encrypt(tfm, sg, sg, sg[0].length);
1724 printk("blowfish_cbc_encrypt() failed flags=%x\n",
1729 q = kmap(sg[0].page) + sg[0].offset;
1730 hexdump(q, bf_tv[i].rlen);
1732 printk("%s\n", memcmp(q, bf_tv[i].result, bf_tv[i].rlen)
1736 printk("\ntesting blowfish cbc decryption\n");
1738 tsize = sizeof (bf_cbc_dec_tv_template);
1739 if (tsize > TVMEMSIZE) {
1740 printk("template (%u) too big for tvmem (%u)\n", tsize,
1744 memcpy(tvmem, bf_cbc_dec_tv_template, tsize);
1745 bf_tv = (void *) tvmem;
1747 for (i = 0; i < BF_CBC_ENC_TEST_VECTORS; i++) {
1748 printk("test %u (%d bit key):\n",
1749 i + 1, bf_tv[i].keylen * 8);
1752 ret = crypto_cipher_setkey(tfm, key, bf_tv[i].keylen);
1754 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1758 p = bf_tv[i].plaintext;
1760 sg[0].page = virt_to_page(p);
1761 sg[0].offset = ((long) p & ~PAGE_MASK);
1762 sg[0].length = bf_tv[i].plen;
1764 crypto_cipher_set_iv(tfm, bf_tv[i].iv,
1765 crypto_tfm_alg_ivsize(tfm));
1767 ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
1769 printk("blowfish_cbc_decrypt() failed flags=%x\n",
1774 q = kmap(sg[0].page) + sg[0].offset;
1775 hexdump(q, bf_tv[i].rlen);
1777 printk("%s\n", memcmp(q, bf_tv[i].result, bf_tv[i].rlen)
1782 crypto_free_tfm(tfm);
1789 unsigned int ret, i;
1792 struct crypto_tfm *tfm;
1794 struct tf_tv *tf_tv;
1795 struct scatterlist sg[1];
1797 printk("\ntesting twofish encryption\n");
1799 tsize = sizeof (tf_enc_tv_template);
1800 if (tsize > TVMEMSIZE) {
1801 printk("template (%u) too big for tvmem (%u)\n", tsize,
1806 memcpy(tvmem, tf_enc_tv_template, tsize);
1807 tf_tv = (void *) tvmem;
1809 tfm = crypto_alloc_tfm("twofish", 0);
1811 printk("failed to load transform for blowfish (default ecb)\n");
1815 for (i = 0; i < TF_ENC_TEST_VECTORS; i++) {
1816 printk("test %u (%d bit key):\n",
1817 i + 1, tf_tv[i].keylen * 8);
1820 ret = crypto_cipher_setkey(tfm, key, tf_tv[i].keylen);
1822 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1828 p = tf_tv[i].plaintext;
1829 sg[0].page = virt_to_page(p);
1830 sg[0].offset = ((long) p & ~PAGE_MASK);
1831 sg[0].length = tf_tv[i].plen;
1832 ret = crypto_cipher_encrypt(tfm, sg, sg, sg[0].length);
1834 printk("encrypt() failed flags=%x\n", tfm->crt_flags);
1838 q = kmap(sg[0].page) + sg[0].offset;
1839 hexdump(q, tf_tv[i].rlen);
1841 printk("%s\n", memcmp(q, tf_tv[i].result, tf_tv[i].rlen) ?
1845 printk("\ntesting twofish decryption\n");
1847 tsize = sizeof (tf_dec_tv_template);
1848 if (tsize > TVMEMSIZE) {
1849 printk("template (%u) too big for tvmem (%u)\n", tsize,
1854 memcpy(tvmem, tf_dec_tv_template, tsize);
1855 tf_tv = (void *) tvmem;
1857 for (i = 0; i < TF_DEC_TEST_VECTORS; i++) {
1858 printk("test %u (%d bit key):\n",
1859 i + 1, tf_tv[i].keylen * 8);
1862 ret = crypto_cipher_setkey(tfm, key, tf_tv[i].keylen);
1864 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1870 p = tf_tv[i].plaintext;
1871 sg[0].page = virt_to_page(p);
1872 sg[0].offset = ((long) p & ~PAGE_MASK);
1873 sg[0].length = tf_tv[i].plen;
1874 ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
1876 printk("decrypt() failed flags=%x\n", tfm->crt_flags);
1880 q = kmap(sg[0].page) + sg[0].offset;
1881 hexdump(q, tf_tv[i].rlen);
1883 printk("%s\n", memcmp(q, tf_tv[i].result, tf_tv[i].rlen) ?
1887 crypto_free_tfm(tfm);
1889 tfm = crypto_alloc_tfm("twofish", CRYPTO_TFM_MODE_CBC);
1891 printk("failed to load transform for twofish cbc\n");
1895 printk("\ntesting twofish cbc encryption\n");
1897 tsize = sizeof (tf_cbc_enc_tv_template);
1898 if (tsize > TVMEMSIZE) {
1899 printk("template (%u) too big for tvmem (%u)\n", tsize,
1903 memcpy(tvmem, tf_cbc_enc_tv_template, tsize);
1904 tf_tv = (void *) tvmem;
1906 for (i = 0; i < TF_CBC_ENC_TEST_VECTORS; i++) {
1907 printk("test %u (%d bit key):\n",
1908 i + 1, tf_tv[i].keylen * 8);
1912 ret = crypto_cipher_setkey(tfm, key, tf_tv[i].keylen);
1914 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1918 p = tf_tv[i].plaintext;
1920 sg[0].page = virt_to_page(p);
1921 sg[0].offset = ((long) p & ~PAGE_MASK);
1922 sg[0].length = tf_tv[i].plen;
1924 crypto_cipher_set_iv(tfm, tf_tv[i].iv,
1925 crypto_tfm_alg_ivsize(tfm));
1927 ret = crypto_cipher_encrypt(tfm, sg, sg, sg[0].length);
1929 printk("blowfish_cbc_encrypt() failed flags=%x\n",
1934 q = kmap(sg[0].page) + sg[0].offset;
1935 hexdump(q, tf_tv[i].rlen);
1937 printk("%s\n", memcmp(q, tf_tv[i].result, tf_tv[i].rlen)
1941 printk("\ntesting twofish cbc decryption\n");
1943 tsize = sizeof (tf_cbc_dec_tv_template);
1944 if (tsize > TVMEMSIZE) {
1945 printk("template (%u) too big for tvmem (%u)\n", tsize,
1949 memcpy(tvmem, tf_cbc_dec_tv_template, tsize);
1950 tf_tv = (void *) tvmem;
1952 for (i = 0; i < TF_CBC_DEC_TEST_VECTORS; i++) {
1953 printk("test %u (%d bit key):\n",
1954 i + 1, tf_tv[i].keylen * 8);
1958 ret = crypto_cipher_setkey(tfm, key, tf_tv[i].keylen);
1960 printk("setkey() failed flags=%x\n", tfm->crt_flags);
1964 p = tf_tv[i].plaintext;
1966 sg[0].page = virt_to_page(p);
1967 sg[0].offset = ((long) p & ~PAGE_MASK);
1968 sg[0].length = tf_tv[i].plen;
1970 crypto_cipher_set_iv(tfm, tf_tv[i].iv,
1971 crypto_tfm_alg_ivsize(tfm));
1973 ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
1975 printk("blowfish_cbc_decrypt() failed flags=%x\n",
1980 q = kmap(sg[0].page) + sg[0].offset;
1981 hexdump(q, tf_tv[i].rlen);
1983 printk("%s\n", memcmp(q, tf_tv[i].result, tf_tv[i].rlen)
1988 crypto_free_tfm(tfm);
1994 unsigned int ret, i, tsize;
1996 struct crypto_tfm *tfm;
1997 struct serpent_tv *serp_tv;
1998 struct scatterlist sg[1];
2000 printk("\ntesting serpent encryption\n");
2002 tfm = crypto_alloc_tfm("serpent", 0);
2004 printk("failed to load transform for serpent (default ecb)\n");
2008 tsize = sizeof (serpent_enc_tv_template);
2009 if (tsize > TVMEMSIZE) {
2010 printk("template (%u) too big for tvmem (%u)\n", tsize,
2015 memcpy(tvmem, serpent_enc_tv_template, tsize);
2016 serp_tv = (void *) tvmem;
2017 for (i = 0; i < SERPENT_ENC_TEST_VECTORS; i++) {
2018 printk("test %u (%d bit key):\n", i + 1, serp_tv[i].keylen * 8);
2019 key = serp_tv[i].key;
2021 ret = crypto_cipher_setkey(tfm, key, serp_tv[i].keylen);
2023 printk("setkey() failed flags=%x\n", tfm->crt_flags);
2025 if (!serp_tv[i].fail)
2029 p = serp_tv[i].plaintext;
2030 sg[0].page = virt_to_page(p);
2031 sg[0].offset = ((long) p & ~PAGE_MASK);
2032 sg[0].length = sizeof(serp_tv[i].plaintext);
2033 ret = crypto_cipher_encrypt(tfm, sg, sg, sg[0].length);
2035 printk("encrypt() failed flags=%x\n", tfm->crt_flags);
2039 q = kmap(sg[0].page) + sg[0].offset;
2040 hexdump(q, sizeof(serp_tv[i].result));
2042 printk("%s\n", memcmp(q, serp_tv[i].result,
2043 sizeof(serp_tv[i].result)) ? "fail" : "pass");
2046 printk("\ntesting serpent decryption\n");
2048 tsize = sizeof (serpent_dec_tv_template);
2049 if (tsize > TVMEMSIZE) {
2050 printk("template (%u) too big for tvmem (%u)\n", tsize,
2055 memcpy(tvmem, serpent_dec_tv_template, tsize);
2056 serp_tv = (void *) tvmem;
2057 for (i = 0; i < SERPENT_DEC_TEST_VECTORS; i++) {
2058 printk("test %u (%d bit key):\n", i + 1, serp_tv[i].keylen * 8);
2059 key = serp_tv[i].key;
2061 ret = crypto_cipher_setkey(tfm, key, serp_tv[i].keylen);
2063 printk("setkey() failed flags=%x\n", tfm->crt_flags);
2065 if (!serp_tv[i].fail)
2069 p = serp_tv[i].plaintext;
2070 sg[0].page = virt_to_page(p);
2071 sg[0].offset = ((long) p & ~PAGE_MASK);
2072 sg[0].length = sizeof(serp_tv[i].plaintext);
2073 ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
2075 printk("decrypt() failed flags=%x\n", tfm->crt_flags);
2079 q = kmap(sg[0].page) + sg[0].offset;
2080 hexdump(q, sizeof(serp_tv[i].result));
2082 printk("%s\n", memcmp(q, serp_tv[i].result,
2083 sizeof(serp_tv[i].result)) ? "fail" : "pass");
2087 crypto_free_tfm(tfm);
2093 unsigned int ret, i;
2096 struct crypto_tfm *tfm;
2098 struct aes_tv *aes_tv;
2099 struct scatterlist sg[1];
2101 printk("\ntesting aes encryption\n");
2103 tsize = sizeof (aes_enc_tv_template);
2104 if (tsize > TVMEMSIZE) {
2105 printk("template (%u) too big for tvmem (%u)\n", tsize,
2110 memcpy(tvmem, aes_enc_tv_template, tsize);
2111 aes_tv = (void *) tvmem;
2113 tfm = crypto_alloc_tfm("aes", 0);
2115 printk("failed to load transform for aes (default ecb)\n");
2119 for (i = 0; i < AES_ENC_TEST_VECTORS; i++) {
2120 printk("test %u (%d bit key):\n",
2121 i + 1, aes_tv[i].keylen * 8);
2122 key = aes_tv[i].key;
2124 ret = crypto_cipher_setkey(tfm, key, aes_tv[i].keylen);
2126 printk("setkey() failed flags=%x\n", tfm->crt_flags);
2128 if (!aes_tv[i].fail)
2132 p = aes_tv[i].plaintext;
2133 sg[0].page = virt_to_page(p);
2134 sg[0].offset = ((long) p & ~PAGE_MASK);
2135 sg[0].length = aes_tv[i].plen;
2136 ret = crypto_cipher_encrypt(tfm, sg, sg, sg[0].length);
2138 printk("encrypt() failed flags=%x\n", tfm->crt_flags);
2142 q = kmap(sg[0].page) + sg[0].offset;
2143 hexdump(q, aes_tv[i].rlen);
2145 printk("%s\n", memcmp(q, aes_tv[i].result, aes_tv[i].rlen) ?
2149 printk("\ntesting aes decryption\n");
2151 tsize = sizeof (aes_dec_tv_template);
2152 if (tsize > TVMEMSIZE) {
2153 printk("template (%u) too big for tvmem (%u)\n", tsize,
2158 memcpy(tvmem, aes_dec_tv_template, tsize);
2159 aes_tv = (void *) tvmem;
2161 for (i = 0; i < AES_DEC_TEST_VECTORS; i++) {
2162 printk("test %u (%d bit key):\n",
2163 i + 1, aes_tv[i].keylen * 8);
2164 key = aes_tv[i].key;
2166 ret = crypto_cipher_setkey(tfm, key, aes_tv[i].keylen);
2168 printk("setkey() failed flags=%x\n", tfm->crt_flags);
2170 if (!aes_tv[i].fail)
2174 p = aes_tv[i].plaintext;
2175 sg[0].page = virt_to_page(p);
2176 sg[0].offset = ((long) p & ~PAGE_MASK);
2177 sg[0].length = aes_tv[i].plen;
2178 ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
2180 printk("decrypt() failed flags=%x\n", tfm->crt_flags);
2184 q = kmap(sg[0].page) + sg[0].offset;
2185 hexdump(q, aes_tv[i].rlen);
2187 printk("%s\n", memcmp(q, aes_tv[i].result, aes_tv[i].rlen) ?
2192 crypto_free_tfm(tfm);
2199 char result[COMP_BUF_SIZE];
2200 struct crypto_tfm *tfm;
2201 struct comp_testvec *tv;
2204 printk("\ntesting deflate compression\n");
2206 tsize = sizeof (deflate_comp_tv_template);
2207 if (tsize > TVMEMSIZE) {
2208 printk("template (%u) too big for tvmem (%u)\n", tsize,
2213 memcpy(tvmem, deflate_comp_tv_template, tsize);
2214 tv = (void *) tvmem;
2216 tfm = crypto_alloc_tfm("deflate", 0);
2218 printk("failed to load transform for deflate\n");
2222 for (i = 0; i < DEFLATE_COMP_TEST_VECTORS; i++) {
2223 int ilen, ret, dlen = COMP_BUF_SIZE;
2225 printk("test %u:\n", i + 1);
2226 memset(result, 0, sizeof (result));
2229 ret = crypto_comp_compress(tfm, tv[i].input,
2230 ilen, result, &dlen);
2232 printk("fail: ret=%d\n", ret);
2235 hexdump(result, dlen);
2236 printk("%s (ratio %d:%d)\n",
2237 memcmp(result, tv[i].output, dlen) ? "fail" : "pass",
2241 printk("\ntesting deflate decompression\n");
2243 tsize = sizeof (deflate_decomp_tv_template);
2244 if (tsize > TVMEMSIZE) {
2245 printk("template (%u) too big for tvmem (%u)\n", tsize,
2250 memcpy(tvmem, deflate_decomp_tv_template, tsize);
2251 tv = (void *) tvmem;
2253 for (i = 0; i < DEFLATE_DECOMP_TEST_VECTORS; i++) {
2254 int ilen, ret, dlen = COMP_BUF_SIZE;
2256 printk("test %u:\n", i + 1);
2257 memset(result, 0, sizeof (result));
2260 ret = crypto_comp_decompress(tfm, tv[i].input,
2261 ilen, result, &dlen);
2263 printk("fail: ret=%d\n", ret);
2266 hexdump(result, dlen);
2267 printk("%s (ratio %d:%d)\n",
2268 memcmp(result, tv[i].output, dlen) ? "fail" : "pass",
2272 crypto_free_tfm(tfm);
2276 test_available(void)
2278 char **name = check;
2281 printk("alg %s ", *name);
2282 printk((crypto_alg_available(*name, 0)) ?
2283 "found\n" : "not found\n");
2307 #ifdef CONFIG_CRYPTO_HMAC
2366 #ifdef CONFIG_CRYPTO_HMAC
2386 /* useful for debugging */
2387 printk("not testing anything\n");
2395 tvmem = kmalloc(TVMEMSIZE, GFP_KERNEL);
2399 xbuf = kmalloc(XBUFSIZE, GFP_KERNEL);
2414 MODULE_PARM(mode, "i");
2416 MODULE_LICENSE("GPL");
2417 MODULE_DESCRIPTION("Quick & dirty crypto testing module");
2418 MODULE_AUTHOR("James Morris <jmorris@intercode.com.au>");