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>");