Blame view

crypto/tcrypt.c 51.9 KB
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
1
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
4
5
6
7
8
   * Quick & dirty crypto testing module.
   *
   * This will only exist until we have a better testing mechanism
   * (e.g. a char device).
   *
   * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
   * Copyright (c) 2002 Jean-Francois Dive <jef@linuxbe.org>
e3a4ea4fd   Mikko Herranen   [CRYPTO] tcrypt: ...
9
   * Copyright (c) 2007 Nokia Siemens Networks
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
10
   *
69435b94d   Adrian Hoban   crypto: rfc4106 -...
11
12
13
14
15
16
17
   * Updated RFC4106 AES-GCM testing.
   *    Authors: Aidan O'Mahony (aidan.o.mahony@intel.com)
   *             Adrian Hoban <adrian.hoban@intel.com>
   *             Gabriele Paoloni <gabriele.paoloni@intel.com>
   *             Tadeusz Struk (tadeusz.struk@intel.com)
   *             Copyright (c) 2010, Intel Corporation.
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
18
19
   * This program is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License as published by the Free
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
20
   * Software Foundation; either version 2 of the License, or (at your option)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
22
   * any later version.
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
23
   */
18e33e6d5   Herbert Xu   crypto: hash - Mo...
24
  #include <crypto/hash.h>
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
25
  #include <linux/err.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
26
  #include <linux/init.h>
5a0e3ad6a   Tejun Heo   include cleanup: ...
27
  #include <linux/gfp.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
28
  #include <linux/module.h>
378f058cc   David Hardeman   [PATCH] Use sg_se...
29
  #include <linux/scatterlist.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
30
  #include <linux/string.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
31
  #include <linux/moduleparam.h>
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
32
  #include <linux/jiffies.h>
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
33
34
  #include <linux/timex.h>
  #include <linux/interrupt.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
35
  #include "tcrypt.h"
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
36
  #include "internal.h"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
37
38
  
  /*
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
39
   * Need slab memory for testing (size in number of pages).
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
40
   */
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
41
  #define TVMEMSIZE	4
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
42
43
  
  /*
da7f033dd   Herbert Xu   crypto: cryptomgr...
44
  * Used by test_cipher_speed()
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
45
46
47
  */
  #define ENCRYPT 1
  #define DECRYPT 0
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
48

ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
49
  /*
263a8df0d   Luca Clementi   crypto: tcrypt - ...
50
51
52
53
54
   * return a string with the driver name
   */
  #define get_driver_name(tfm_type, tfm) crypto_tfm_alg_driver_name(tfm_type ## _tfm(tfm))
  
  /*
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
55
56
   * Used by test_cipher_speed()
   */
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
57
  static unsigned int sec;
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
58

a873a5f1c   Steffen Klassert   crypto: tcrypt - ...
59
60
  static char *alg = NULL;
  static u32 type;
7be380f72   Herbert Xu   crypto: tcrypt - ...
61
  static u32 mask;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
62
  static int mode;
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
63
  static char *tvmem[TVMEMSIZE];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
64
65
  
  static char *check[] = {
cd12fb906   Jonathan Lynch   [CRYPTO] sha256-g...
66
67
68
  	"des", "md5", "des3_ede", "rot13", "sha1", "sha224", "sha256",
  	"blowfish", "twofish", "serpent", "sha384", "sha512", "md4", "aes",
  	"cast6", "arc4", "michael_mic", "deflate", "crc32c", "tea", "xtea",
90831639a   David Howells   [CRYPTO] fcrypt: ...
69
  	"khazad", "wp512", "wp384", "wp256", "tnepres", "xeta",  "fcrypt",
2998db37b   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
70
  	"camellia", "seed", "salsa20", "rmd128", "rmd160", "rmd256", "rmd320",
0c01aed50   Geert Uytterhoeven   crypto: testmgr -...
71
  	"lzo", "cts", "zlib", NULL
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
72
  };
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
73
  static int test_cipher_jiffies(struct blkcipher_desc *desc, int enc,
3e3dc25fe   Mark Rustad   crypto: Resolve s...
74
  			       struct scatterlist *sg, int blen, int secs)
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
75
  {
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
76
77
78
  	unsigned long start, end;
  	int bcount;
  	int ret;
3e3dc25fe   Mark Rustad   crypto: Resolve s...
79
  	for (start = jiffies, end = start + secs * HZ, bcount = 0;
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
80
81
  	     time_before(jiffies, end); bcount++) {
  		if (enc)
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
82
  			ret = crypto_blkcipher_encrypt(desc, sg, sg, blen);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
83
  		else
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
84
  			ret = crypto_blkcipher_decrypt(desc, sg, sg, blen);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
85
86
87
88
89
90
91
  
  		if (ret)
  			return ret;
  	}
  
  	printk("%d operations in %d seconds (%ld bytes)
  ",
3e3dc25fe   Mark Rustad   crypto: Resolve s...
92
  	       bcount, secs, (long)bcount * blen);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
93
94
  	return 0;
  }
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
95
96
  static int test_cipher_cycles(struct blkcipher_desc *desc, int enc,
  			      struct scatterlist *sg, int blen)
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
97
  {
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
98
99
100
  	unsigned long cycles = 0;
  	int ret = 0;
  	int i;
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
101
102
103
104
105
  	local_irq_disable();
  
  	/* Warm-up run. */
  	for (i = 0; i < 4; i++) {
  		if (enc)
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
106
  			ret = crypto_blkcipher_encrypt(desc, sg, sg, blen);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
107
  		else
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
108
  			ret = crypto_blkcipher_decrypt(desc, sg, sg, blen);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
109
110
111
112
113
114
115
116
117
118
119
  
  		if (ret)
  			goto out;
  	}
  
  	/* The real thing. */
  	for (i = 0; i < 8; i++) {
  		cycles_t start, end;
  
  		start = get_cycles();
  		if (enc)
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
120
  			ret = crypto_blkcipher_encrypt(desc, sg, sg, blen);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
121
  		else
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
122
  			ret = crypto_blkcipher_decrypt(desc, sg, sg, blen);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
123
124
125
126
127
128
129
130
131
132
  		end = get_cycles();
  
  		if (ret)
  			goto out;
  
  		cycles += end - start;
  	}
  
  out:
  	local_irq_enable();
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
133
134
135
136
137
138
139
140
  
  	if (ret == 0)
  		printk("1 operation in %lu cycles (%d bytes)
  ",
  		       (cycles + 4) / 8, blen);
  
  	return ret;
  }
53f52d7ae   Tim Chen   crypto: tcrypt - ...
141
  static int test_aead_jiffies(struct aead_request *req, int enc,
3e3dc25fe   Mark Rustad   crypto: Resolve s...
142
  				int blen, int secs)
53f52d7ae   Tim Chen   crypto: tcrypt - ...
143
144
145
146
  {
  	unsigned long start, end;
  	int bcount;
  	int ret;
3e3dc25fe   Mark Rustad   crypto: Resolve s...
147
  	for (start = jiffies, end = start + secs * HZ, bcount = 0;
53f52d7ae   Tim Chen   crypto: tcrypt - ...
148
149
150
151
152
153
154
155
156
157
158
159
  	     time_before(jiffies, end); bcount++) {
  		if (enc)
  			ret = crypto_aead_encrypt(req);
  		else
  			ret = crypto_aead_decrypt(req);
  
  		if (ret)
  			return ret;
  	}
  
  	printk("%d operations in %d seconds (%ld bytes)
  ",
3e3dc25fe   Mark Rustad   crypto: Resolve s...
160
  	       bcount, secs, (long)bcount * blen);
53f52d7ae   Tim Chen   crypto: tcrypt - ...
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
  	return 0;
  }
  
  static int test_aead_cycles(struct aead_request *req, int enc, int blen)
  {
  	unsigned long cycles = 0;
  	int ret = 0;
  	int i;
  
  	local_irq_disable();
  
  	/* Warm-up run. */
  	for (i = 0; i < 4; i++) {
  		if (enc)
  			ret = crypto_aead_encrypt(req);
  		else
  			ret = crypto_aead_decrypt(req);
  
  		if (ret)
  			goto out;
  	}
  
  	/* The real thing. */
  	for (i = 0; i < 8; i++) {
  		cycles_t start, end;
  
  		start = get_cycles();
  		if (enc)
  			ret = crypto_aead_encrypt(req);
  		else
  			ret = crypto_aead_decrypt(req);
  		end = get_cycles();
  
  		if (ret)
  			goto out;
  
  		cycles += end - start;
  	}
  
  out:
  	local_irq_enable();
  
  	if (ret == 0)
  		printk("1 operation in %lu cycles (%d bytes)
  ",
  		       (cycles + 4) / 8, blen);
  
  	return ret;
  }
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
210
  static u32 block_sizes[] = { 16, 64, 256, 1024, 8192, 0 };
53f52d7ae   Tim Chen   crypto: tcrypt - ...
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
  static u32 aead_sizes[] = { 16, 64, 256, 512, 1024, 2048, 4096, 8192, 0 };
  
  #define XBUFSIZE 8
  #define MAX_IVLEN 32
  
  static int testmgr_alloc_buf(char *buf[XBUFSIZE])
  {
  	int i;
  
  	for (i = 0; i < XBUFSIZE; i++) {
  		buf[i] = (void *)__get_free_page(GFP_KERNEL);
  		if (!buf[i])
  			goto err_free_buf;
  	}
  
  	return 0;
  
  err_free_buf:
  	while (i-- > 0)
  		free_page((unsigned long)buf[i]);
  
  	return -ENOMEM;
  }
  
  static void testmgr_free_buf(char *buf[XBUFSIZE])
  {
  	int i;
  
  	for (i = 0; i < XBUFSIZE; i++)
  		free_page((unsigned long)buf[i]);
  }
  
  static void sg_init_aead(struct scatterlist *sg, char *xbuf[XBUFSIZE],
  			unsigned int buflen)
  {
  	int np = (buflen + PAGE_SIZE - 1)/PAGE_SIZE;
  	int k, rem;
  
  	np = (np > XBUFSIZE) ? XBUFSIZE : np;
  	rem = buflen % PAGE_SIZE;
  	if (np > XBUFSIZE) {
  		rem = PAGE_SIZE;
  		np = XBUFSIZE;
  	}
  	sg_init_table(sg, np);
  	for (k = 0; k < np; ++k) {
  		if (k == (np-1))
  			sg_set_buf(&sg[k], xbuf[k], rem);
  		else
  			sg_set_buf(&sg[k], xbuf[k], PAGE_SIZE);
  	}
  }
3e3dc25fe   Mark Rustad   crypto: Resolve s...
263
  static void test_aead_speed(const char *algo, int enc, unsigned int secs,
53f52d7ae   Tim Chen   crypto: tcrypt - ...
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
  			    struct aead_speed_template *template,
  			    unsigned int tcount, u8 authsize,
  			    unsigned int aad_size, u8 *keysize)
  {
  	unsigned int i, j;
  	struct crypto_aead *tfm;
  	int ret = -ENOMEM;
  	const char *key;
  	struct aead_request *req;
  	struct scatterlist *sg;
  	struct scatterlist *asg;
  	struct scatterlist *sgout;
  	const char *e;
  	void *assoc;
  	char iv[MAX_IVLEN];
  	char *xbuf[XBUFSIZE];
  	char *xoutbuf[XBUFSIZE];
  	char *axbuf[XBUFSIZE];
  	unsigned int *b_size;
  	unsigned int iv_len;
ac5f863f8   Christian Engelmayer   crypto: tcrypt - ...
284
285
286
287
288
  	if (aad_size >= PAGE_SIZE) {
  		pr_err("associate data length (%u) too big
  ", aad_size);
  		return;
  	}
53f52d7ae   Tim Chen   crypto: tcrypt - ...
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
  	if (enc == ENCRYPT)
  		e = "encryption";
  	else
  		e = "decryption";
  
  	if (testmgr_alloc_buf(xbuf))
  		goto out_noxbuf;
  	if (testmgr_alloc_buf(axbuf))
  		goto out_noaxbuf;
  	if (testmgr_alloc_buf(xoutbuf))
  		goto out_nooutbuf;
  
  	sg = kmalloc(sizeof(*sg) * 8 * 3, GFP_KERNEL);
  	if (!sg)
  		goto out_nosg;
  	asg = &sg[8];
  	sgout = &asg[8];
53f52d7ae   Tim Chen   crypto: tcrypt - ...
306
307
308
309
310
311
  	tfm = crypto_alloc_aead(algo, 0, 0);
  
  	if (IS_ERR(tfm)) {
  		pr_err("alg: aead: Failed to load transform for %s: %ld
  ", algo,
  		       PTR_ERR(tfm));
a2ea6ed6a   Christian Engelmayer   crypto: tcrypt - ...
312
  		goto out_notfm;
53f52d7ae   Tim Chen   crypto: tcrypt - ...
313
  	}
263a8df0d   Luca Clementi   crypto: tcrypt - ...
314
315
316
317
  	printk(KERN_INFO "
  testing speed of %s (%s) %s
  ", algo,
  			get_driver_name(crypto_aead, tfm), e);
53f52d7ae   Tim Chen   crypto: tcrypt - ...
318
319
320
321
322
  	req = aead_request_alloc(tfm, GFP_KERNEL);
  	if (!req) {
  		pr_err("alg: aead: Failed to allocate request for %s
  ",
  		       algo);
6af1f93e2   Christian Engelmayer   crypto: tcrypt - ...
323
  		goto out_noreq;
53f52d7ae   Tim Chen   crypto: tcrypt - ...
324
325
326
327
328
329
330
  	}
  
  	i = 0;
  	do {
  		b_size = aead_sizes;
  		do {
  			assoc = axbuf[0];
ac5f863f8   Christian Engelmayer   crypto: tcrypt - ...
331
  			memset(assoc, 0xff, aad_size);
53f52d7ae   Tim Chen   crypto: tcrypt - ...
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
  			sg_init_one(&asg[0], assoc, aad_size);
  
  			if ((*keysize + *b_size) > TVMEMSIZE * PAGE_SIZE) {
  				pr_err("template (%u) too big for tvmem (%lu)
  ",
  				       *keysize + *b_size,
  					TVMEMSIZE * PAGE_SIZE);
  				goto out;
  			}
  
  			key = tvmem[0];
  			for (j = 0; j < tcount; j++) {
  				if (template[j].klen == *keysize) {
  					key = template[j].key;
  					break;
  				}
  			}
  			ret = crypto_aead_setkey(tfm, key, *keysize);
  			ret = crypto_aead_setauthsize(tfm, authsize);
  
  			iv_len = crypto_aead_ivsize(tfm);
  			if (iv_len)
  				memset(&iv, 0xff, iv_len);
  
  			crypto_aead_clear_flags(tfm, ~0);
  			printk(KERN_INFO "test %u (%d bit key, %d byte blocks): ",
  					i, *keysize * 8, *b_size);
  
  
  			memset(tvmem[0], 0xff, PAGE_SIZE);
  
  			if (ret) {
  				pr_err("setkey() failed flags=%x
  ",
  						crypto_aead_get_flags(tfm));
  				goto out;
  			}
  
  			sg_init_aead(&sg[0], xbuf,
  				    *b_size + (enc ? authsize : 0));
  
  			sg_init_aead(&sgout[0], xoutbuf,
  				    *b_size + (enc ? authsize : 0));
  
  			aead_request_set_crypt(req, sg, sgout, *b_size, iv);
  			aead_request_set_assoc(req, asg, aad_size);
3e3dc25fe   Mark Rustad   crypto: Resolve s...
378
379
380
  			if (secs)
  				ret = test_aead_jiffies(req, enc, *b_size,
  							secs);
53f52d7ae   Tim Chen   crypto: tcrypt - ...
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
  			else
  				ret = test_aead_cycles(req, enc, *b_size);
  
  			if (ret) {
  				pr_err("%s() failed return code=%d
  ", e, ret);
  				break;
  			}
  			b_size++;
  			i++;
  		} while (*b_size);
  		keysize++;
  	} while (*keysize);
  
  out:
6af1f93e2   Christian Engelmayer   crypto: tcrypt - ...
396
397
  	aead_request_free(req);
  out_noreq:
53f52d7ae   Tim Chen   crypto: tcrypt - ...
398
  	crypto_free_aead(tfm);
a2ea6ed6a   Christian Engelmayer   crypto: tcrypt - ...
399
  out_notfm:
53f52d7ae   Tim Chen   crypto: tcrypt - ...
400
401
402
403
404
405
406
407
408
409
  	kfree(sg);
  out_nosg:
  	testmgr_free_buf(xoutbuf);
  out_nooutbuf:
  	testmgr_free_buf(axbuf);
  out_noaxbuf:
  	testmgr_free_buf(xbuf);
  out_noxbuf:
  	return;
  }
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
410

3e3dc25fe   Mark Rustad   crypto: Resolve s...
411
  static void test_cipher_speed(const char *algo, int enc, unsigned int secs,
da7f033dd   Herbert Xu   crypto: cryptomgr...
412
  			      struct cipher_speed_template *template,
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
413
  			      unsigned int tcount, u8 *keysize)
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
414
  {
dce907c00   Herbert Xu   [CRYPTO]: Use tem...
415
  	unsigned int ret, i, j, iv_len;
f07ef1de9   David Sterba   crypto: tcrypt - ...
416
417
  	const char *key;
  	char iv[128];
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
418
419
420
  	struct crypto_blkcipher *tfm;
  	struct blkcipher_desc desc;
  	const char *e;
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
421
  	u32 *b_size;
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
422
423
424
425
426
  
  	if (enc == ENCRYPT)
  	        e = "encryption";
  	else
  		e = "decryption";
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
427

cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
428
  	tfm = crypto_alloc_blkcipher(algo, 0, CRYPTO_ALG_ASYNC);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
429

cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
430
431
432
433
  	if (IS_ERR(tfm)) {
  		printk("failed to load transform for %s: %ld
  ", algo,
  		       PTR_ERR(tfm));
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
434
435
  		return;
  	}
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
436
437
  	desc.tfm = tfm;
  	desc.flags = 0;
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
438

263a8df0d   Luca Clementi   crypto: tcrypt - ...
439
440
441
442
  	printk(KERN_INFO "
  testing speed of %s (%s) %s
  ", algo,
  			get_driver_name(crypto_blkcipher, tfm), e);
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
443
444
  	i = 0;
  	do {
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
445

d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
446
447
  		b_size = block_sizes;
  		do {
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
448
  			struct scatterlist sg[TVMEMSIZE];
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
449

f139cfa7c   Herbert Xu   crypto: tcrypt - ...
450
451
452
453
454
  			if ((*keysize + *b_size) > TVMEMSIZE * PAGE_SIZE) {
  				printk("template (%u) too big for "
  				       "tvmem (%lu)
  ", *keysize + *b_size,
  				       TVMEMSIZE * PAGE_SIZE);
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
455
456
  				goto out;
  			}
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
457

d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
458
459
  			printk("test %u (%d bit key, %d byte blocks): ", i,
  					*keysize * 8, *b_size);
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
460
  			memset(tvmem[0], 0xff, PAGE_SIZE);
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
461
462
  
  			/* set key, plain text and IV */
da7f033dd   Herbert Xu   crypto: cryptomgr...
463
  			key = tvmem[0];
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
464
465
466
467
468
  			for (j = 0; j < tcount; j++) {
  				if (template[j].klen == *keysize) {
  					key = template[j].key;
  					break;
  				}
dce907c00   Herbert Xu   [CRYPTO]: Use tem...
469
  			}
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
470

d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
471
472
473
474
475
476
477
  			ret = crypto_blkcipher_setkey(tfm, key, *keysize);
  			if (ret) {
  				printk("setkey() failed flags=%x
  ",
  						crypto_blkcipher_get_flags(tfm));
  				goto out;
  			}
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
478

f139cfa7c   Herbert Xu   crypto: tcrypt - ...
479
480
481
482
483
484
485
  			sg_init_table(sg, TVMEMSIZE);
  			sg_set_buf(sg, tvmem[0] + *keysize,
  				   PAGE_SIZE - *keysize);
  			for (j = 1; j < TVMEMSIZE; j++) {
  				sg_set_buf(sg + j, tvmem[j], PAGE_SIZE);
  				memset (tvmem[j], 0xff, PAGE_SIZE);
  			}
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
486
487
488
489
490
  			iv_len = crypto_blkcipher_ivsize(tfm);
  			if (iv_len) {
  				memset(&iv, 0xff, iv_len);
  				crypto_blkcipher_set_iv(tfm, iv, iv_len);
  			}
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
491

3e3dc25fe   Mark Rustad   crypto: Resolve s...
492
  			if (secs)
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
493
  				ret = test_cipher_jiffies(&desc, enc, sg,
3e3dc25fe   Mark Rustad   crypto: Resolve s...
494
  							  *b_size, secs);
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
495
  			else
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
496
497
  				ret = test_cipher_cycles(&desc, enc, sg,
  							 *b_size);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
498

d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
499
500
501
502
503
504
505
506
507
508
  			if (ret) {
  				printk("%s() failed flags=%x
  ", e, desc.flags);
  				break;
  			}
  			b_size++;
  			i++;
  		} while (*b_size);
  		keysize++;
  	} while (*keysize);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
509
510
  
  out:
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
511
  	crypto_free_blkcipher(tfm);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
512
  }
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
513
514
  static int test_hash_jiffies_digest(struct hash_desc *desc,
  				    struct scatterlist *sg, int blen,
3e3dc25fe   Mark Rustad   crypto: Resolve s...
515
  				    char *out, int secs)
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
516
  {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
517
518
519
  	unsigned long start, end;
  	int bcount;
  	int ret;
3e3dc25fe   Mark Rustad   crypto: Resolve s...
520
  	for (start = jiffies, end = start + secs * HZ, bcount = 0;
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
521
  	     time_before(jiffies, end); bcount++) {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
522
523
524
525
526
527
528
  		ret = crypto_hash_digest(desc, sg, blen, out);
  		if (ret)
  			return ret;
  	}
  
  	printk("%6u opers/sec, %9lu bytes/sec
  ",
3e3dc25fe   Mark Rustad   crypto: Resolve s...
529
  	       bcount / secs, ((long)bcount * blen) / secs);
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
530
531
532
  
  	return 0;
  }
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
533
  static int test_hash_jiffies(struct hash_desc *desc, struct scatterlist *sg,
3e3dc25fe   Mark Rustad   crypto: Resolve s...
534
  			     int blen, int plen, char *out, int secs)
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
535
  {
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
536
537
  	unsigned long start, end;
  	int bcount, pcount;
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
538
539
540
  	int ret;
  
  	if (plen == blen)
3e3dc25fe   Mark Rustad   crypto: Resolve s...
541
  		return test_hash_jiffies_digest(desc, sg, blen, out, secs);
a5a613a42   Herbert Xu   [CRYPTO] tcrypt: ...
542

3e3dc25fe   Mark Rustad   crypto: Resolve s...
543
  	for (start = jiffies, end = start + secs * HZ, bcount = 0;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
544
  	     time_before(jiffies, end); bcount++) {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
545
546
547
  		ret = crypto_hash_init(desc);
  		if (ret)
  			return ret;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
548
  		for (pcount = 0; pcount < blen; pcount += plen) {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
549
550
551
  			ret = crypto_hash_update(desc, sg, plen);
  			if (ret)
  				return ret;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
552
553
  		}
  		/* we assume there is enough space in 'out' for the result */
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
554
555
556
  		ret = crypto_hash_final(desc, out);
  		if (ret)
  			return ret;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
557
558
559
560
  	}
  
  	printk("%6u opers/sec, %9lu bytes/sec
  ",
3e3dc25fe   Mark Rustad   crypto: Resolve s...
561
  	       bcount / secs, ((long)bcount * blen) / secs);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
562

e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
563
564
  	return 0;
  }
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
565
566
  static int test_hash_cycles_digest(struct hash_desc *desc,
  				   struct scatterlist *sg, int blen, char *out)
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
567
  {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
568
569
570
  	unsigned long cycles = 0;
  	int i;
  	int ret;
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
571
572
573
574
  	local_irq_disable();
  
  	/* Warm-up run. */
  	for (i = 0; i < 4; i++) {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
575
576
577
578
579
580
581
582
583
584
  		ret = crypto_hash_digest(desc, sg, blen, out);
  		if (ret)
  			goto out;
  	}
  
  	/* The real thing. */
  	for (i = 0; i < 8; i++) {
  		cycles_t start, end;
  
  		start = get_cycles();
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
585
586
587
588
589
590
591
592
593
594
595
  		ret = crypto_hash_digest(desc, sg, blen, out);
  		if (ret)
  			goto out;
  
  		end = get_cycles();
  
  		cycles += end - start;
  	}
  
  out:
  	local_irq_enable();
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
596
597
598
599
600
601
602
603
604
  
  	if (ret)
  		return ret;
  
  	printk("%6lu cycles/operation, %4lu cycles/byte
  ",
  	       cycles / 8, cycles / (8 * blen));
  
  	return 0;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
605
  }
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
606
607
  static int test_hash_cycles(struct hash_desc *desc, struct scatterlist *sg,
  			    int blen, int plen, char *out)
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
608
  {
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
609
610
  	unsigned long cycles = 0;
  	int i, pcount;
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
611
612
613
  	int ret;
  
  	if (plen == blen)
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
614
  		return test_hash_cycles_digest(desc, sg, blen, out);
a5a613a42   Herbert Xu   [CRYPTO] tcrypt: ...
615

e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
616
617
618
619
  	local_irq_disable();
  
  	/* Warm-up run. */
  	for (i = 0; i < 4; i++) {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
620
621
622
  		ret = crypto_hash_init(desc);
  		if (ret)
  			goto out;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
623
  		for (pcount = 0; pcount < blen; pcount += plen) {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
624
625
626
  			ret = crypto_hash_update(desc, sg, plen);
  			if (ret)
  				goto out;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
627
  		}
29059d12e   Herbert Xu   [CRYPTO] tcrypt: ...
628
  		ret = crypto_hash_final(desc, out);
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
629
630
  		if (ret)
  			goto out;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
631
632
633
634
635
  	}
  
  	/* The real thing. */
  	for (i = 0; i < 8; i++) {
  		cycles_t start, end;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
636
  		start = get_cycles();
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
637
638
639
  		ret = crypto_hash_init(desc);
  		if (ret)
  			goto out;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
640
  		for (pcount = 0; pcount < blen; pcount += plen) {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
641
642
643
  			ret = crypto_hash_update(desc, sg, plen);
  			if (ret)
  				goto out;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
644
  		}
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
645
646
647
  		ret = crypto_hash_final(desc, out);
  		if (ret)
  			goto out;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
648
649
650
651
652
  
  		end = get_cycles();
  
  		cycles += end - start;
  	}
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
653
  out:
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
654
  	local_irq_enable();
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
655

e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
656
657
  	if (ret)
  		return ret;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
658
659
660
  	printk("%6lu cycles/operation, %4lu cycles/byte
  ",
  	       cycles / 8, cycles / (8 * blen));
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
661
  	return 0;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
662
  }
beb63da73   David S. Miller   crypto: tcrypt - ...
663
664
665
666
667
668
669
670
671
672
  static void test_hash_sg_init(struct scatterlist *sg)
  {
  	int i;
  
  	sg_init_table(sg, TVMEMSIZE);
  	for (i = 0; i < TVMEMSIZE; i++) {
  		sg_set_buf(sg + i, tvmem[i], PAGE_SIZE);
  		memset(tvmem[i], 0xff, PAGE_SIZE);
  	}
  }
3e3dc25fe   Mark Rustad   crypto: Resolve s...
673
  static void test_hash_speed(const char *algo, unsigned int secs,
01b323245   Herbert Xu   crypto: tcrypt - ...
674
  			    struct hash_speed *speed)
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
675
  {
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
676
  	struct scatterlist sg[TVMEMSIZE];
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
677
678
  	struct crypto_hash *tfm;
  	struct hash_desc desc;
376bacb0a   Frank Seidel   crypto: tcrypt - ...
679
  	static char output[1024];
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
680
  	int i;
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
681
  	int ret;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
682

e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
683
  	tfm = crypto_alloc_hash(algo, 0, CRYPTO_ALG_ASYNC);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
684

e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
685
  	if (IS_ERR(tfm)) {
376bacb0a   Frank Seidel   crypto: tcrypt - ...
686
687
  		printk(KERN_ERR "failed to load transform for %s: %ld
  ", algo,
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
688
  		       PTR_ERR(tfm));
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
689
690
  		return;
  	}
263a8df0d   Luca Clementi   crypto: tcrypt - ...
691
692
693
694
  	printk(KERN_INFO "
  testing speed of %s (%s)
  ", algo,
  			get_driver_name(crypto_hash, tfm));
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
695
696
697
698
  	desc.tfm = tfm;
  	desc.flags = 0;
  
  	if (crypto_hash_digestsize(tfm) > sizeof(output)) {
376bacb0a   Frank Seidel   crypto: tcrypt - ...
699
700
  		printk(KERN_ERR "digestsize(%u) > outputbuffer(%zu)
  ",
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
701
  		       crypto_hash_digestsize(tfm), sizeof(output));
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
702
703
  		goto out;
  	}
beb63da73   David S. Miller   crypto: tcrypt - ...
704
  	test_hash_sg_init(sg);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
705
  	for (i = 0; speed[i].blen != 0; i++) {
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
706
  		if (speed[i].blen > TVMEMSIZE * PAGE_SIZE) {
376bacb0a   Frank Seidel   crypto: tcrypt - ...
707
708
709
  			printk(KERN_ERR
  			       "template (%u) too big for tvmem (%lu)
  ",
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
710
  			       speed[i].blen, TVMEMSIZE * PAGE_SIZE);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
711
712
  			goto out;
  		}
18bcc9194   Huang Ying   crypto: tcrypt - ...
713
714
  		if (speed[i].klen)
  			crypto_hash_setkey(tfm, tvmem[0], speed[i].klen);
376bacb0a   Frank Seidel   crypto: tcrypt - ...
715
716
  		printk(KERN_INFO "test%3u "
  		       "(%5u byte blocks,%5u bytes per update,%4u updates): ",
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
717
  		       i, speed[i].blen, speed[i].plen, speed[i].blen / speed[i].plen);
3e3dc25fe   Mark Rustad   crypto: Resolve s...
718
  		if (secs)
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
719
  			ret = test_hash_jiffies(&desc, sg, speed[i].blen,
3e3dc25fe   Mark Rustad   crypto: Resolve s...
720
  						speed[i].plen, output, secs);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
721
  		else
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
722
  			ret = test_hash_cycles(&desc, sg, speed[i].blen,
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
723
724
725
  					       speed[i].plen, output);
  
  		if (ret) {
376bacb0a   Frank Seidel   crypto: tcrypt - ...
726
727
  			printk(KERN_ERR "hashing failed ret=%d
  ", ret);
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
728
729
  			break;
  		}
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
730
731
732
  	}
  
  out:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
733
  	crypto_free_hash(tfm);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
734
  }
beb63da73   David S. Miller   crypto: tcrypt - ...
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
  struct tcrypt_result {
  	struct completion completion;
  	int err;
  };
  
  static void tcrypt_complete(struct crypto_async_request *req, int err)
  {
  	struct tcrypt_result *res = req->data;
  
  	if (err == -EINPROGRESS)
  		return;
  
  	res->err = err;
  	complete(&res->completion);
  }
  
  static inline int do_one_ahash_op(struct ahash_request *req, int ret)
  {
  	if (ret == -EINPROGRESS || ret == -EBUSY) {
  		struct tcrypt_result *tr = req->base.data;
  
  		ret = wait_for_completion_interruptible(&tr->completion);
  		if (!ret)
  			ret = tr->err;
16735d022   Wolfram Sang   tree-wide: use re...
759
  		reinit_completion(&tr->completion);
beb63da73   David S. Miller   crypto: tcrypt - ...
760
761
762
763
764
  	}
  	return ret;
  }
  
  static int test_ahash_jiffies_digest(struct ahash_request *req, int blen,
3e3dc25fe   Mark Rustad   crypto: Resolve s...
765
  				     char *out, int secs)
beb63da73   David S. Miller   crypto: tcrypt - ...
766
767
768
769
  {
  	unsigned long start, end;
  	int bcount;
  	int ret;
3e3dc25fe   Mark Rustad   crypto: Resolve s...
770
  	for (start = jiffies, end = start + secs * HZ, bcount = 0;
beb63da73   David S. Miller   crypto: tcrypt - ...
771
772
773
774
775
776
777
778
  	     time_before(jiffies, end); bcount++) {
  		ret = do_one_ahash_op(req, crypto_ahash_digest(req));
  		if (ret)
  			return ret;
  	}
  
  	printk("%6u opers/sec, %9lu bytes/sec
  ",
3e3dc25fe   Mark Rustad   crypto: Resolve s...
779
  	       bcount / secs, ((long)bcount * blen) / secs);
beb63da73   David S. Miller   crypto: tcrypt - ...
780
781
782
783
784
  
  	return 0;
  }
  
  static int test_ahash_jiffies(struct ahash_request *req, int blen,
3e3dc25fe   Mark Rustad   crypto: Resolve s...
785
  			      int plen, char *out, int secs)
beb63da73   David S. Miller   crypto: tcrypt - ...
786
787
788
789
790
791
  {
  	unsigned long start, end;
  	int bcount, pcount;
  	int ret;
  
  	if (plen == blen)
3e3dc25fe   Mark Rustad   crypto: Resolve s...
792
  		return test_ahash_jiffies_digest(req, blen, out, secs);
beb63da73   David S. Miller   crypto: tcrypt - ...
793

3e3dc25fe   Mark Rustad   crypto: Resolve s...
794
  	for (start = jiffies, end = start + secs * HZ, bcount = 0;
beb63da73   David S. Miller   crypto: tcrypt - ...
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
  	     time_before(jiffies, end); bcount++) {
  		ret = crypto_ahash_init(req);
  		if (ret)
  			return ret;
  		for (pcount = 0; pcount < blen; pcount += plen) {
  			ret = do_one_ahash_op(req, crypto_ahash_update(req));
  			if (ret)
  				return ret;
  		}
  		/* we assume there is enough space in 'out' for the result */
  		ret = do_one_ahash_op(req, crypto_ahash_final(req));
  		if (ret)
  			return ret;
  	}
  
  	pr_cont("%6u opers/sec, %9lu bytes/sec
  ",
3e3dc25fe   Mark Rustad   crypto: Resolve s...
812
  		bcount / secs, ((long)bcount * blen) / secs);
beb63da73   David S. Miller   crypto: tcrypt - ...
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
  
  	return 0;
  }
  
  static int test_ahash_cycles_digest(struct ahash_request *req, int blen,
  				    char *out)
  {
  	unsigned long cycles = 0;
  	int ret, i;
  
  	/* Warm-up run. */
  	for (i = 0; i < 4; i++) {
  		ret = do_one_ahash_op(req, crypto_ahash_digest(req));
  		if (ret)
  			goto out;
  	}
  
  	/* The real thing. */
  	for (i = 0; i < 8; i++) {
  		cycles_t start, end;
  
  		start = get_cycles();
  
  		ret = do_one_ahash_op(req, crypto_ahash_digest(req));
  		if (ret)
  			goto out;
  
  		end = get_cycles();
  
  		cycles += end - start;
  	}
  
  out:
  	if (ret)
  		return ret;
  
  	pr_cont("%6lu cycles/operation, %4lu cycles/byte
  ",
  		cycles / 8, cycles / (8 * blen));
  
  	return 0;
  }
  
  static int test_ahash_cycles(struct ahash_request *req, int blen,
  			     int plen, char *out)
  {
  	unsigned long cycles = 0;
  	int i, pcount, ret;
  
  	if (plen == blen)
  		return test_ahash_cycles_digest(req, blen, out);
  
  	/* Warm-up run. */
  	for (i = 0; i < 4; i++) {
  		ret = crypto_ahash_init(req);
  		if (ret)
  			goto out;
  		for (pcount = 0; pcount < blen; pcount += plen) {
  			ret = do_one_ahash_op(req, crypto_ahash_update(req));
  			if (ret)
  				goto out;
  		}
  		ret = do_one_ahash_op(req, crypto_ahash_final(req));
  		if (ret)
  			goto out;
  	}
  
  	/* The real thing. */
  	for (i = 0; i < 8; i++) {
  		cycles_t start, end;
  
  		start = get_cycles();
  
  		ret = crypto_ahash_init(req);
  		if (ret)
  			goto out;
  		for (pcount = 0; pcount < blen; pcount += plen) {
  			ret = do_one_ahash_op(req, crypto_ahash_update(req));
  			if (ret)
  				goto out;
  		}
  		ret = do_one_ahash_op(req, crypto_ahash_final(req));
  		if (ret)
  			goto out;
  
  		end = get_cycles();
  
  		cycles += end - start;
  	}
  
  out:
  	if (ret)
  		return ret;
  
  	pr_cont("%6lu cycles/operation, %4lu cycles/byte
  ",
  		cycles / 8, cycles / (8 * blen));
  
  	return 0;
  }
3e3dc25fe   Mark Rustad   crypto: Resolve s...
913
  static void test_ahash_speed(const char *algo, unsigned int secs,
beb63da73   David S. Miller   crypto: tcrypt - ...
914
915
916
917
918
919
920
921
  			     struct hash_speed *speed)
  {
  	struct scatterlist sg[TVMEMSIZE];
  	struct tcrypt_result tresult;
  	struct ahash_request *req;
  	struct crypto_ahash *tfm;
  	static char output[1024];
  	int i, ret;
beb63da73   David S. Miller   crypto: tcrypt - ...
922
923
924
925
926
927
928
  	tfm = crypto_alloc_ahash(algo, 0, 0);
  	if (IS_ERR(tfm)) {
  		pr_err("failed to load transform for %s: %ld
  ",
  		       algo, PTR_ERR(tfm));
  		return;
  	}
263a8df0d   Luca Clementi   crypto: tcrypt - ...
929
930
931
932
  	printk(KERN_INFO "
  testing speed of async %s (%s)
  ", algo,
  			get_driver_name(crypto_ahash, tfm));
beb63da73   David S. Miller   crypto: tcrypt - ...
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
  	if (crypto_ahash_digestsize(tfm) > sizeof(output)) {
  		pr_err("digestsize(%u) > outputbuffer(%zu)
  ",
  		       crypto_ahash_digestsize(tfm), sizeof(output));
  		goto out;
  	}
  
  	test_hash_sg_init(sg);
  	req = ahash_request_alloc(tfm, GFP_KERNEL);
  	if (!req) {
  		pr_err("ahash request allocation failure
  ");
  		goto out;
  	}
  
  	init_completion(&tresult.completion);
  	ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
  				   tcrypt_complete, &tresult);
  
  	for (i = 0; speed[i].blen != 0; i++) {
  		if (speed[i].blen > TVMEMSIZE * PAGE_SIZE) {
  			pr_err("template (%u) too big for tvmem (%lu)
  ",
  			       speed[i].blen, TVMEMSIZE * PAGE_SIZE);
  			break;
  		}
  
  		pr_info("test%3u "
  			"(%5u byte blocks,%5u bytes per update,%4u updates): ",
  			i, speed[i].blen, speed[i].plen, speed[i].blen / speed[i].plen);
  
  		ahash_request_set_crypt(req, sg, output, speed[i].plen);
3e3dc25fe   Mark Rustad   crypto: Resolve s...
965
  		if (secs)
beb63da73   David S. Miller   crypto: tcrypt - ...
966
  			ret = test_ahash_jiffies(req, speed[i].blen,
3e3dc25fe   Mark Rustad   crypto: Resolve s...
967
  						 speed[i].plen, output, secs);
beb63da73   David S. Miller   crypto: tcrypt - ...
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
  		else
  			ret = test_ahash_cycles(req, speed[i].blen,
  						speed[i].plen, output);
  
  		if (ret) {
  			pr_err("hashing failed ret=%d
  ", ret);
  			break;
  		}
  	}
  
  	ahash_request_free(req);
  
  out:
  	crypto_free_ahash(tfm);
  }
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
984
985
986
987
988
989
990
991
  static inline int do_one_acipher_op(struct ablkcipher_request *req, int ret)
  {
  	if (ret == -EINPROGRESS || ret == -EBUSY) {
  		struct tcrypt_result *tr = req->base.data;
  
  		ret = wait_for_completion_interruptible(&tr->completion);
  		if (!ret)
  			ret = tr->err;
16735d022   Wolfram Sang   tree-wide: use re...
992
  		reinit_completion(&tr->completion);
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
993
994
995
996
997
998
  	}
  
  	return ret;
  }
  
  static int test_acipher_jiffies(struct ablkcipher_request *req, int enc,
3e3dc25fe   Mark Rustad   crypto: Resolve s...
999
  				int blen, int secs)
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1000
1001
1002
1003
  {
  	unsigned long start, end;
  	int bcount;
  	int ret;
3e3dc25fe   Mark Rustad   crypto: Resolve s...
1004
  	for (start = jiffies, end = start + secs * HZ, bcount = 0;
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
  	     time_before(jiffies, end); bcount++) {
  		if (enc)
  			ret = do_one_acipher_op(req,
  						crypto_ablkcipher_encrypt(req));
  		else
  			ret = do_one_acipher_op(req,
  						crypto_ablkcipher_decrypt(req));
  
  		if (ret)
  			return ret;
  	}
  
  	pr_cont("%d operations in %d seconds (%ld bytes)
  ",
3e3dc25fe   Mark Rustad   crypto: Resolve s...
1019
  		bcount, secs, (long)bcount * blen);
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
  	return 0;
  }
  
  static int test_acipher_cycles(struct ablkcipher_request *req, int enc,
  			       int blen)
  {
  	unsigned long cycles = 0;
  	int ret = 0;
  	int i;
  
  	/* Warm-up run. */
  	for (i = 0; i < 4; i++) {
  		if (enc)
  			ret = do_one_acipher_op(req,
  						crypto_ablkcipher_encrypt(req));
  		else
  			ret = do_one_acipher_op(req,
  						crypto_ablkcipher_decrypt(req));
  
  		if (ret)
  			goto out;
  	}
  
  	/* The real thing. */
  	for (i = 0; i < 8; i++) {
  		cycles_t start, end;
  
  		start = get_cycles();
  		if (enc)
  			ret = do_one_acipher_op(req,
  						crypto_ablkcipher_encrypt(req));
  		else
  			ret = do_one_acipher_op(req,
  						crypto_ablkcipher_decrypt(req));
  		end = get_cycles();
  
  		if (ret)
  			goto out;
  
  		cycles += end - start;
  	}
  
  out:
  	if (ret == 0)
  		pr_cont("1 operation in %lu cycles (%d bytes)
  ",
  			(cycles + 4) / 8, blen);
  
  	return ret;
  }
3e3dc25fe   Mark Rustad   crypto: Resolve s...
1070
  static void test_acipher_speed(const char *algo, int enc, unsigned int secs,
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1071
1072
1073
  			       struct cipher_speed_template *template,
  			       unsigned int tcount, u8 *keysize)
  {
de1975334   Nicolas Royer   crypto: atmel - a...
1074
  	unsigned int ret, i, j, k, iv_len;
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
  	struct tcrypt_result tresult;
  	const char *key;
  	char iv[128];
  	struct ablkcipher_request *req;
  	struct crypto_ablkcipher *tfm;
  	const char *e;
  	u32 *b_size;
  
  	if (enc == ENCRYPT)
  		e = "encryption";
  	else
  		e = "decryption";
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
  	init_completion(&tresult.completion);
  
  	tfm = crypto_alloc_ablkcipher(algo, 0, 0);
  
  	if (IS_ERR(tfm)) {
  		pr_err("failed to load transform for %s: %ld
  ", algo,
  		       PTR_ERR(tfm));
  		return;
  	}
263a8df0d   Luca Clementi   crypto: tcrypt - ...
1097
1098
1099
1100
  	pr_info("
  testing speed of async %s (%s) %s
  ", algo,
  			get_driver_name(crypto_ablkcipher, tfm), e);
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
  	req = ablkcipher_request_alloc(tfm, GFP_KERNEL);
  	if (!req) {
  		pr_err("tcrypt: skcipher: Failed to allocate request for %s
  ",
  		       algo);
  		goto out;
  	}
  
  	ablkcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
  					tcrypt_complete, &tresult);
  
  	i = 0;
  	do {
  		b_size = block_sizes;
  
  		do {
  			struct scatterlist sg[TVMEMSIZE];
  
  			if ((*keysize + *b_size) > TVMEMSIZE * PAGE_SIZE) {
  				pr_err("template (%u) too big for "
  				       "tvmem (%lu)
  ", *keysize + *b_size,
  				       TVMEMSIZE * PAGE_SIZE);
  				goto out_free_req;
  			}
  
  			pr_info("test %u (%d bit key, %d byte blocks): ", i,
  				*keysize * 8, *b_size);
  
  			memset(tvmem[0], 0xff, PAGE_SIZE);
  
  			/* set key, plain text and IV */
  			key = tvmem[0];
  			for (j = 0; j < tcount; j++) {
  				if (template[j].klen == *keysize) {
  					key = template[j].key;
  					break;
  				}
  			}
  
  			crypto_ablkcipher_clear_flags(tfm, ~0);
  
  			ret = crypto_ablkcipher_setkey(tfm, key, *keysize);
  			if (ret) {
  				pr_err("setkey() failed flags=%x
  ",
  					crypto_ablkcipher_get_flags(tfm));
  				goto out_free_req;
  			}
  
  			sg_init_table(sg, TVMEMSIZE);
de1975334   Nicolas Royer   crypto: atmel - a...
1152
1153
1154
1155
  
  			k = *keysize + *b_size;
  			if (k > PAGE_SIZE) {
  				sg_set_buf(sg, tvmem[0] + *keysize,
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1156
  				   PAGE_SIZE - *keysize);
de1975334   Nicolas Royer   crypto: atmel - a...
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
  				k -= PAGE_SIZE;
  				j = 1;
  				while (k > PAGE_SIZE) {
  					sg_set_buf(sg + j, tvmem[j], PAGE_SIZE);
  					memset(tvmem[j], 0xff, PAGE_SIZE);
  					j++;
  					k -= PAGE_SIZE;
  				}
  				sg_set_buf(sg + j, tvmem[j], k);
  				memset(tvmem[j], 0xff, k);
  			} else {
  				sg_set_buf(sg, tvmem[0] + *keysize, *b_size);
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1169
1170
1171
1172
1173
1174
1175
  			}
  
  			iv_len = crypto_ablkcipher_ivsize(tfm);
  			if (iv_len)
  				memset(&iv, 0xff, iv_len);
  
  			ablkcipher_request_set_crypt(req, sg, sg, *b_size, iv);
3e3dc25fe   Mark Rustad   crypto: Resolve s...
1176
  			if (secs)
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1177
  				ret = test_acipher_jiffies(req, enc,
3e3dc25fe   Mark Rustad   crypto: Resolve s...
1178
  							   *b_size, secs);
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
  			else
  				ret = test_acipher_cycles(req, enc,
  							  *b_size);
  
  			if (ret) {
  				pr_err("%s() failed flags=%x
  ", e,
  					crypto_ablkcipher_get_flags(tfm));
  				break;
  			}
  			b_size++;
  			i++;
  		} while (*b_size);
  		keysize++;
  	} while (*keysize);
  
  out_free_req:
  	ablkcipher_request_free(req);
  out:
  	crypto_free_ablkcipher(tfm);
  }
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
1200
  static void test_available(void)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1201
1202
  {
  	char **name = check;
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
1203

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1204
1205
  	while (*name) {
  		printk("alg %s ", *name);
6158efc09   Herbert Xu   [CRYPTO] tcrypt: ...
1206
  		printk(crypto_has_alg(*name, 0, 0) ?
e4d5b79c6   Herbert Xu   [CRYPTO] users: U...
1207
1208
1209
  		       "found
  " : "not found
  ");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1210
  		name++;
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
1211
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1212
  }
01b323245   Herbert Xu   crypto: tcrypt - ...
1213
1214
  static inline int tcrypt_test(const char *alg)
  {
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1215
1216
1217
1218
1219
1220
1221
  	int ret;
  
  	ret = alg_test(alg, alg, 0, 0);
  	/* non-fips algs return -EINVAL in fips mode */
  	if (fips_enabled && ret == -EINVAL)
  		ret = 0;
  	return ret;
01b323245   Herbert Xu   crypto: tcrypt - ...
1222
  }
8606813a6   Herbert Xu   crypto: tcrypt - ...
1223
  static int do_test(const char *alg, u32 type, u32 mask, int m)
01b323245   Herbert Xu   crypto: tcrypt - ...
1224
1225
  {
  	int i;
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1226
  	int ret = 0;
01b323245   Herbert Xu   crypto: tcrypt - ...
1227
1228
  
  	switch (m) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1229
  	case 0:
8606813a6   Herbert Xu   crypto: tcrypt - ...
1230
1231
1232
1233
1234
1235
  		if (alg) {
  			if (!crypto_has_alg(alg, type,
  					    mask ?: CRYPTO_ALG_TYPE_MASK))
  				ret = -ENOENT;
  			break;
  		}
01b323245   Herbert Xu   crypto: tcrypt - ...
1236
  		for (i = 1; i < 200; i++)
8606813a6   Herbert Xu   crypto: tcrypt - ...
1237
  			ret += do_test(NULL, 0, 0, i);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1238
1239
1240
  		break;
  
  	case 1:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1241
  		ret += tcrypt_test("md5");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1242
1243
1244
  		break;
  
  	case 2:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1245
  		ret += tcrypt_test("sha1");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1246
1247
1248
  		break;
  
  	case 3:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1249
1250
  		ret += tcrypt_test("ecb(des)");
  		ret += tcrypt_test("cbc(des)");
8163fc30d   Jussi Kivilinna   crypto: testmgr -...
1251
  		ret += tcrypt_test("ctr(des)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1252
1253
1254
  		break;
  
  	case 4:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1255
1256
  		ret += tcrypt_test("ecb(des3_ede)");
  		ret += tcrypt_test("cbc(des3_ede)");
e080b17a8   Jussi Kivilinna   crypto: testmgr -...
1257
  		ret += tcrypt_test("ctr(des3_ede)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1258
1259
1260
  		break;
  
  	case 5:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1261
  		ret += tcrypt_test("md4");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1262
  		break;
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
1263

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1264
  	case 6:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1265
  		ret += tcrypt_test("sha256");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1266
  		break;
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
1267

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1268
  	case 7:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1269
1270
  		ret += tcrypt_test("ecb(blowfish)");
  		ret += tcrypt_test("cbc(blowfish)");
85b63e342   Jussi Kivilinna   crypto: testmgr -...
1271
  		ret += tcrypt_test("ctr(blowfish)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1272
1273
1274
  		break;
  
  	case 8:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1275
1276
  		ret += tcrypt_test("ecb(twofish)");
  		ret += tcrypt_test("cbc(twofish)");
573da6208   Jussi Kivilinna   crypto: testmgr -...
1277
  		ret += tcrypt_test("ctr(twofish)");
bee3a90ef   Jussi Kivilinna   crypto: tcrypt - ...
1278
  		ret += tcrypt_test("lrw(twofish)");
131f75416   Jussi Kivilinna   crypto: tcrypt - ...
1279
  		ret += tcrypt_test("xts(twofish)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1280
  		break;
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
1281

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1282
  	case 9:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1283
  		ret += tcrypt_test("ecb(serpent)");
9d25917d4   Jussi Kivilinna   crypto: testmgr -...
1284
1285
  		ret += tcrypt_test("cbc(serpent)");
  		ret += tcrypt_test("ctr(serpent)");
87aae4bfb   Jussi Kivilinna   crypto: tcrypt - ...
1286
  		ret += tcrypt_test("lrw(serpent)");
5209c07ac   Jussi Kivilinna   crypto: tcrypt - ...
1287
  		ret += tcrypt_test("xts(serpent)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1288
1289
1290
  		break;
  
  	case 10:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1291
1292
1293
1294
1295
1296
  		ret += tcrypt_test("ecb(aes)");
  		ret += tcrypt_test("cbc(aes)");
  		ret += tcrypt_test("lrw(aes)");
  		ret += tcrypt_test("xts(aes)");
  		ret += tcrypt_test("ctr(aes)");
  		ret += tcrypt_test("rfc3686(ctr(aes))");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1297
1298
1299
  		break;
  
  	case 11:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1300
  		ret += tcrypt_test("sha384");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1301
  		break;
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
1302

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1303
  	case 12:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1304
  		ret += tcrypt_test("sha512");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1305
1306
1307
  		break;
  
  	case 13:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1308
  		ret += tcrypt_test("deflate");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1309
1310
1311
  		break;
  
  	case 14:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1312
  		ret += tcrypt_test("ecb(cast5)");
a2c582609   Johannes Goetzfried   crypto: testmgr -...
1313
1314
  		ret += tcrypt_test("cbc(cast5)");
  		ret += tcrypt_test("ctr(cast5)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1315
1316
1317
  		break;
  
  	case 15:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1318
  		ret += tcrypt_test("ecb(cast6)");
9b8b04051   Johannes Goetzfried   crypto: testmgr -...
1319
1320
1321
1322
  		ret += tcrypt_test("cbc(cast6)");
  		ret += tcrypt_test("ctr(cast6)");
  		ret += tcrypt_test("lrw(cast6)");
  		ret += tcrypt_test("xts(cast6)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1323
1324
1325
  		break;
  
  	case 16:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1326
  		ret += tcrypt_test("ecb(arc4)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1327
1328
1329
  		break;
  
  	case 17:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1330
  		ret += tcrypt_test("michael_mic");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1331
1332
1333
  		break;
  
  	case 18:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1334
  		ret += tcrypt_test("crc32c");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1335
1336
1337
  		break;
  
  	case 19:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1338
  		ret += tcrypt_test("ecb(tea)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1339
1340
1341
  		break;
  
  	case 20:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1342
  		ret += tcrypt_test("ecb(xtea)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1343
1344
1345
  		break;
  
  	case 21:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1346
  		ret += tcrypt_test("ecb(khazad)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1347
1348
1349
  		break;
  
  	case 22:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1350
  		ret += tcrypt_test("wp512");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1351
1352
1353
  		break;
  
  	case 23:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1354
  		ret += tcrypt_test("wp384");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1355
1356
1357
  		break;
  
  	case 24:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1358
  		ret += tcrypt_test("wp256");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1359
1360
1361
  		break;
  
  	case 25:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1362
  		ret += tcrypt_test("ecb(tnepres)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1363
1364
1365
  		break;
  
  	case 26:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1366
1367
  		ret += tcrypt_test("ecb(anubis)");
  		ret += tcrypt_test("cbc(anubis)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1368
1369
1370
  		break;
  
  	case 27:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1371
  		ret += tcrypt_test("tgr192");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1372
1373
1374
  		break;
  
  	case 28:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1375
  		ret += tcrypt_test("tgr160");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1376
1377
1378
  		break;
  
  	case 29:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1379
  		ret += tcrypt_test("tgr128");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1380
  		break;
2998db37b   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1381

fb4f10ed5   Aaron Grothe   [CRYPTO]: Fix XTE...
1382
  	case 30:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1383
  		ret += tcrypt_test("ecb(xeta)");
fb4f10ed5   Aaron Grothe   [CRYPTO]: Fix XTE...
1384
  		break;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1385

90831639a   David Howells   [CRYPTO] fcrypt: ...
1386
  	case 31:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1387
  		ret += tcrypt_test("pcbc(fcrypt)");
90831639a   David Howells   [CRYPTO] fcrypt: ...
1388
  		break;
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1389
  	case 32:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1390
1391
  		ret += tcrypt_test("ecb(camellia)");
  		ret += tcrypt_test("cbc(camellia)");
54216bbd7   Jussi Kivilinna   crypto: tcrypt - ...
1392
1393
1394
  		ret += tcrypt_test("ctr(camellia)");
  		ret += tcrypt_test("lrw(camellia)");
  		ret += tcrypt_test("xts(camellia)");
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1395
  		break;
93b5e86a6   Jussi Kivilinna   crypto: add CMAC ...
1396

cd12fb906   Jonathan Lynch   [CRYPTO] sha256-g...
1397
  	case 33:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1398
  		ret += tcrypt_test("sha224");
cd12fb906   Jonathan Lynch   [CRYPTO] sha256-g...
1399
  		break;
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1400

2407d6087   Tan Swee Heng   [CRYPTO] salsa20:...
1401
  	case 34:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1402
  		ret += tcrypt_test("salsa20");
2407d6087   Tan Swee Heng   [CRYPTO] salsa20:...
1403
  		break;
8df213d9b   Herbert Xu   [CRYPTO] tcrypt: ...
1404
  	case 35:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1405
  		ret += tcrypt_test("gcm(aes)");
8df213d9b   Herbert Xu   [CRYPTO] tcrypt: ...
1406
  		break;
0b77abb3b   Zoltan Sogor   [CRYPTO] lzo: Add...
1407
  	case 36:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1408
  		ret += tcrypt_test("lzo");
0b77abb3b   Zoltan Sogor   [CRYPTO] lzo: Add...
1409
  		break;
93cc74e07   Joy Latten   [CRYPTO] tcrypt: ...
1410
  	case 37:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1411
  		ret += tcrypt_test("ccm(aes)");
93cc74e07   Joy Latten   [CRYPTO] tcrypt: ...
1412
  		break;
76cb95217   Kevin Coffman   [CRYPTO] cts: Add...
1413
  	case 38:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1414
  		ret += tcrypt_test("cts(cbc(aes))");
76cb95217   Kevin Coffman   [CRYPTO] cts: Add...
1415
  		break;
fd4adf1a0   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1416
          case 39:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1417
  		ret += tcrypt_test("rmd128");
fd4adf1a0   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1418
1419
1420
  		break;
  
          case 40:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1421
  		ret += tcrypt_test("rmd160");
fd4adf1a0   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1422
  		break;
2998db37b   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1423
  	case 41:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1424
  		ret += tcrypt_test("rmd256");
2998db37b   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1425
1426
1427
  		break;
  
  	case 42:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1428
  		ret += tcrypt_test("rmd320");
01b323245   Herbert Xu   crypto: tcrypt - ...
1429
1430
1431
  		break;
  
  	case 43:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1432
  		ret += tcrypt_test("ecb(seed)");
2998db37b   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1433
  		break;
0c01aed50   Geert Uytterhoeven   crypto: testmgr -...
1434
  	case 44:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1435
  		ret += tcrypt_test("zlib");
0c01aed50   Geert Uytterhoeven   crypto: testmgr -...
1436
  		break;
5d667322a   Jarod Wilson   crypto: testmgr -...
1437
  	case 45:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1438
  		ret += tcrypt_test("rfc4309(ccm(aes))");
5d667322a   Jarod Wilson   crypto: testmgr -...
1439
  		break;
54216bbd7   Jussi Kivilinna   crypto: tcrypt - ...
1440
1441
1442
  	case 46:
  		ret += tcrypt_test("ghash");
  		break;
68411521c   Herbert Xu   Reinstate "crypto...
1443
1444
1445
  	case 47:
  		ret += tcrypt_test("crct10dif");
  		break;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1446
  	case 100:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1447
  		ret += tcrypt_test("hmac(md5)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1448
  		break;
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
1449

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1450
  	case 101:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1451
  		ret += tcrypt_test("hmac(sha1)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1452
  		break;
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
1453

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1454
  	case 102:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1455
  		ret += tcrypt_test("hmac(sha256)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1456
  		break;
a28091ae1   Andrew Donofrio   [CRYPTO] tcrypt: ...
1457
  	case 103:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1458
  		ret += tcrypt_test("hmac(sha384)");
a28091ae1   Andrew Donofrio   [CRYPTO] tcrypt: ...
1459
1460
1461
  		break;
  
  	case 104:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1462
  		ret += tcrypt_test("hmac(sha512)");
a28091ae1   Andrew Donofrio   [CRYPTO] tcrypt: ...
1463
  		break;
38ed9ab23   Herbert Xu   [CRYPTO] tcrypt: ...
1464

cd12fb906   Jonathan Lynch   [CRYPTO] sha256-g...
1465
  	case 105:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1466
  		ret += tcrypt_test("hmac(sha224)");
cd12fb906   Jonathan Lynch   [CRYPTO] sha256-g...
1467
  		break;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1468

38ed9ab23   Herbert Xu   [CRYPTO] tcrypt: ...
1469
  	case 106:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1470
  		ret += tcrypt_test("xcbc(aes)");
38ed9ab23   Herbert Xu   [CRYPTO] tcrypt: ...
1471
  		break;
fd4adf1a0   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1472
  	case 107:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1473
  		ret += tcrypt_test("hmac(rmd128)");
fd4adf1a0   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1474
1475
1476
  		break;
  
  	case 108:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1477
  		ret += tcrypt_test("hmac(rmd160)");
fd4adf1a0   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1478
  		break;
f1939f7c5   Shane Wang   crypto: vmac - Ne...
1479
1480
1481
  	case 109:
  		ret += tcrypt_test("vmac(aes)");
  		break;
93b5e86a6   Jussi Kivilinna   crypto: add CMAC ...
1482

a482b081a   Sonic Zhang   crypto: testmgr -...
1483
1484
1485
  	case 110:
  		ret += tcrypt_test("hmac(crc32)");
  		break;
f1939f7c5   Shane Wang   crypto: vmac - Ne...
1486

e08ca2da3   Jarod Wilson   crypto: testmgr -...
1487
  	case 150:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1488
  		ret += tcrypt_test("ansi_cprng");
e08ca2da3   Jarod Wilson   crypto: testmgr -...
1489
  		break;
69435b94d   Adrian Hoban   crypto: rfc4106 -...
1490
1491
1492
  	case 151:
  		ret += tcrypt_test("rfc4106(gcm(aes))");
  		break;
e9b7441a9   Jussi Kivilinna   crypto: testmgr -...
1493
1494
1495
  	case 152:
  		ret += tcrypt_test("rfc4543(gcm(aes))");
  		break;
93b5e86a6   Jussi Kivilinna   crypto: add CMAC ...
1496
1497
1498
1499
1500
1501
1502
  	case 153:
  		ret += tcrypt_test("cmac(aes)");
  		break;
  
  	case 154:
  		ret += tcrypt_test("cmac(des3_ede)");
  		break;
bbf9c8934   Horia Geanta   crypto: caam - fi...
1503
1504
1505
  	case 155:
  		ret += tcrypt_test("authenc(hmac(sha1),cbc(aes))");
  		break;
bca4feb0d   Horia Geanta   crypto: testmgr -...
1506
1507
1508
1509
1510
1511
1512
  	case 156:
  		ret += tcrypt_test("authenc(hmac(md5),ecb(cipher_null))");
  		break;
  
  	case 157:
  		ret += tcrypt_test("authenc(hmac(sha1),ecb(cipher_null))");
  		break;
5208ed2ca   Nitesh Lal   crypto: testmgr -...
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
  	case 181:
  		ret += tcrypt_test("authenc(hmac(sha1),cbc(des))");
  		break;
  	case 182:
  		ret += tcrypt_test("authenc(hmac(sha1),cbc(des3_ede))");
  		break;
  	case 183:
  		ret += tcrypt_test("authenc(hmac(sha224),cbc(des))");
  		break;
  	case 184:
  		ret += tcrypt_test("authenc(hmac(sha224),cbc(des3_ede))");
  		break;
  	case 185:
  		ret += tcrypt_test("authenc(hmac(sha256),cbc(des))");
  		break;
  	case 186:
  		ret += tcrypt_test("authenc(hmac(sha256),cbc(des3_ede))");
  		break;
  	case 187:
  		ret += tcrypt_test("authenc(hmac(sha384),cbc(des))");
  		break;
  	case 188:
  		ret += tcrypt_test("authenc(hmac(sha384),cbc(des3_ede))");
  		break;
  	case 189:
  		ret += tcrypt_test("authenc(hmac(sha512),cbc(des))");
  		break;
  	case 190:
  		ret += tcrypt_test("authenc(hmac(sha512),cbc(des3_ede))");
  		break;
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
1543
  	case 200:
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1544
  		test_cipher_speed("ecb(aes)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1545
  				speed_template_16_24_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1546
  		test_cipher_speed("ecb(aes)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1547
  				speed_template_16_24_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1548
  		test_cipher_speed("cbc(aes)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1549
  				speed_template_16_24_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1550
  		test_cipher_speed("cbc(aes)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1551
  				speed_template_16_24_32);
f3d1044cd   Rik Snel   [CRYPTO] tcrypt: ...
1552
  		test_cipher_speed("lrw(aes)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1553
  				speed_template_32_40_48);
f3d1044cd   Rik Snel   [CRYPTO] tcrypt: ...
1554
  		test_cipher_speed("lrw(aes)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1555
  				speed_template_32_40_48);
f19f5111c   Rik Snel   [CRYPTO] xts: XTS...
1556
  		test_cipher_speed("xts(aes)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1557
  				speed_template_32_48_64);
f19f5111c   Rik Snel   [CRYPTO] xts: XTS...
1558
  		test_cipher_speed("xts(aes)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1559
  				speed_template_32_48_64);
9996e3421   Jan Glauber   crypto: tcrypt - ...
1560
1561
1562
1563
  		test_cipher_speed("ctr(aes)", ENCRYPT, sec, NULL, 0,
  				speed_template_16_24_32);
  		test_cipher_speed("ctr(aes)", DECRYPT, sec, NULL, 0,
  				speed_template_16_24_32);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
1564
1565
1566
  		break;
  
  	case 201:
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1567
  		test_cipher_speed("ecb(des3_ede)", ENCRYPT, sec,
da7f033dd   Herbert Xu   crypto: cryptomgr...
1568
  				des3_speed_template, DES3_SPEED_VECTORS,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1569
  				speed_template_24);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1570
  		test_cipher_speed("ecb(des3_ede)", DECRYPT, sec,
da7f033dd   Herbert Xu   crypto: cryptomgr...
1571
  				des3_speed_template, DES3_SPEED_VECTORS,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1572
  				speed_template_24);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1573
  		test_cipher_speed("cbc(des3_ede)", ENCRYPT, sec,
da7f033dd   Herbert Xu   crypto: cryptomgr...
1574
  				des3_speed_template, DES3_SPEED_VECTORS,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1575
  				speed_template_24);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1576
  		test_cipher_speed("cbc(des3_ede)", DECRYPT, sec,
da7f033dd   Herbert Xu   crypto: cryptomgr...
1577
  				des3_speed_template, DES3_SPEED_VECTORS,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1578
  				speed_template_24);
87131507e   Jussi Kivilinna   crypto: tcrypt - ...
1579
1580
1581
1582
1583
1584
  		test_cipher_speed("ctr(des3_ede)", ENCRYPT, sec,
  				des3_speed_template, DES3_SPEED_VECTORS,
  				speed_template_24);
  		test_cipher_speed("ctr(des3_ede)", DECRYPT, sec,
  				des3_speed_template, DES3_SPEED_VECTORS,
  				speed_template_24);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
1585
1586
1587
  		break;
  
  	case 202:
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1588
  		test_cipher_speed("ecb(twofish)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1589
  				speed_template_16_24_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1590
  		test_cipher_speed("ecb(twofish)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1591
  				speed_template_16_24_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1592
  		test_cipher_speed("cbc(twofish)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1593
  				speed_template_16_24_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1594
  		test_cipher_speed("cbc(twofish)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1595
  				speed_template_16_24_32);
ee5002a54   Jussi Kivilinna   crypto: tcrypt - ...
1596
1597
1598
1599
  		test_cipher_speed("ctr(twofish)", ENCRYPT, sec, NULL, 0,
  				speed_template_16_24_32);
  		test_cipher_speed("ctr(twofish)", DECRYPT, sec, NULL, 0,
  				speed_template_16_24_32);
bee3a90ef   Jussi Kivilinna   crypto: tcrypt - ...
1600
1601
1602
1603
  		test_cipher_speed("lrw(twofish)", ENCRYPT, sec, NULL, 0,
  				speed_template_32_40_48);
  		test_cipher_speed("lrw(twofish)", DECRYPT, sec, NULL, 0,
  				speed_template_32_40_48);
131f75416   Jussi Kivilinna   crypto: tcrypt - ...
1604
1605
1606
1607
  		test_cipher_speed("xts(twofish)", ENCRYPT, sec, NULL, 0,
  				speed_template_32_48_64);
  		test_cipher_speed("xts(twofish)", DECRYPT, sec, NULL, 0,
  				speed_template_32_48_64);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
1608
1609
1610
  		break;
  
  	case 203:
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1611
  		test_cipher_speed("ecb(blowfish)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1612
  				  speed_template_8_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1613
  		test_cipher_speed("ecb(blowfish)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1614
  				  speed_template_8_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1615
  		test_cipher_speed("cbc(blowfish)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1616
  				  speed_template_8_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1617
  		test_cipher_speed("cbc(blowfish)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1618
  				  speed_template_8_32);
7d47b86cf   Jussi Kivilinna   crypto: tcrypt - ...
1619
1620
1621
1622
  		test_cipher_speed("ctr(blowfish)", ENCRYPT, sec, NULL, 0,
  				  speed_template_8_32);
  		test_cipher_speed("ctr(blowfish)", DECRYPT, sec, NULL, 0,
  				  speed_template_8_32);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
1623
1624
1625
  		break;
  
  	case 204:
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1626
  		test_cipher_speed("ecb(des)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1627
  				  speed_template_8);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1628
  		test_cipher_speed("ecb(des)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1629
  				  speed_template_8);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1630
  		test_cipher_speed("cbc(des)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1631
  				  speed_template_8);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1632
  		test_cipher_speed("cbc(des)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1633
  				  speed_template_8);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
1634
  		break;
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1635
1636
  	case 205:
  		test_cipher_speed("ecb(camellia)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1637
  				speed_template_16_24_32);
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1638
  		test_cipher_speed("ecb(camellia)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1639
  				speed_template_16_24_32);
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1640
  		test_cipher_speed("cbc(camellia)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1641
  				speed_template_16_24_32);
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1642
  		test_cipher_speed("cbc(camellia)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1643
  				speed_template_16_24_32);
4de593378   Jussi Kivilinna   crypto: tcrypt - ...
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
  		test_cipher_speed("ctr(camellia)", ENCRYPT, sec, NULL, 0,
  				speed_template_16_24_32);
  		test_cipher_speed("ctr(camellia)", DECRYPT, sec, NULL, 0,
  				speed_template_16_24_32);
  		test_cipher_speed("lrw(camellia)", ENCRYPT, sec, NULL, 0,
  				speed_template_32_40_48);
  		test_cipher_speed("lrw(camellia)", DECRYPT, sec, NULL, 0,
  				speed_template_32_40_48);
  		test_cipher_speed("xts(camellia)", ENCRYPT, sec, NULL, 0,
  				speed_template_32_48_64);
  		test_cipher_speed("xts(camellia)", DECRYPT, sec, NULL, 0,
  				speed_template_32_48_64);
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1656
  		break;
5de8f1b56   Tan Swee Heng   [CRYPTO] tcrypt: ...
1657
1658
  	case 206:
  		test_cipher_speed("salsa20", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1659
  				  speed_template_16_32);
5de8f1b56   Tan Swee Heng   [CRYPTO] tcrypt: ...
1660
  		break;
7fb7fe446   Jussi Kivilinna   crypto: tcrypt - ...
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
  	case 207:
  		test_cipher_speed("ecb(serpent)", ENCRYPT, sec, NULL, 0,
  				  speed_template_16_32);
  		test_cipher_speed("ecb(serpent)", DECRYPT, sec, NULL, 0,
  				  speed_template_16_32);
  		test_cipher_speed("cbc(serpent)", ENCRYPT, sec, NULL, 0,
  				  speed_template_16_32);
  		test_cipher_speed("cbc(serpent)", DECRYPT, sec, NULL, 0,
  				  speed_template_16_32);
  		test_cipher_speed("ctr(serpent)", ENCRYPT, sec, NULL, 0,
  				  speed_template_16_32);
  		test_cipher_speed("ctr(serpent)", DECRYPT, sec, NULL, 0,
  				  speed_template_16_32);
87aae4bfb   Jussi Kivilinna   crypto: tcrypt - ...
1674
1675
1676
1677
  		test_cipher_speed("lrw(serpent)", ENCRYPT, sec, NULL, 0,
  				  speed_template_32_48);
  		test_cipher_speed("lrw(serpent)", DECRYPT, sec, NULL, 0,
  				  speed_template_32_48);
5209c07ac   Jussi Kivilinna   crypto: tcrypt - ...
1678
1679
1680
1681
  		test_cipher_speed("xts(serpent)", ENCRYPT, sec, NULL, 0,
  				  speed_template_32_64);
  		test_cipher_speed("xts(serpent)", DECRYPT, sec, NULL, 0,
  				  speed_template_32_64);
7fb7fe446   Jussi Kivilinna   crypto: tcrypt - ...
1682
  		break;
31b4cd290   Jussi Kivilinna   crypto: testmgr -...
1683
1684
1685
1686
  	case 208:
  		test_cipher_speed("ecb(arc4)", ENCRYPT, sec, NULL, 0,
  				  speed_template_8);
  		break;
a2c582609   Johannes Goetzfried   crypto: testmgr -...
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
  	case 209:
  		test_cipher_speed("ecb(cast5)", ENCRYPT, sec, NULL, 0,
  				  speed_template_8_16);
  		test_cipher_speed("ecb(cast5)", DECRYPT, sec, NULL, 0,
  				  speed_template_8_16);
  		test_cipher_speed("cbc(cast5)", ENCRYPT, sec, NULL, 0,
  				  speed_template_8_16);
  		test_cipher_speed("cbc(cast5)", DECRYPT, sec, NULL, 0,
  				  speed_template_8_16);
  		test_cipher_speed("ctr(cast5)", ENCRYPT, sec, NULL, 0,
  				  speed_template_8_16);
  		test_cipher_speed("ctr(cast5)", DECRYPT, sec, NULL, 0,
  				  speed_template_8_16);
  		break;
9b8b04051   Johannes Goetzfried   crypto: testmgr -...
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
  	case 210:
  		test_cipher_speed("ecb(cast6)", ENCRYPT, sec, NULL, 0,
  				  speed_template_16_32);
  		test_cipher_speed("ecb(cast6)", DECRYPT, sec, NULL, 0,
  				  speed_template_16_32);
  		test_cipher_speed("cbc(cast6)", ENCRYPT, sec, NULL, 0,
  				  speed_template_16_32);
  		test_cipher_speed("cbc(cast6)", DECRYPT, sec, NULL, 0,
  				  speed_template_16_32);
  		test_cipher_speed("ctr(cast6)", ENCRYPT, sec, NULL, 0,
  				  speed_template_16_32);
  		test_cipher_speed("ctr(cast6)", DECRYPT, sec, NULL, 0,
  				  speed_template_16_32);
  		test_cipher_speed("lrw(cast6)", ENCRYPT, sec, NULL, 0,
  				  speed_template_32_48);
  		test_cipher_speed("lrw(cast6)", DECRYPT, sec, NULL, 0,
  				  speed_template_32_48);
  		test_cipher_speed("xts(cast6)", ENCRYPT, sec, NULL, 0,
  				  speed_template_32_64);
  		test_cipher_speed("xts(cast6)", DECRYPT, sec, NULL, 0,
  				  speed_template_32_64);
  		break;
53f52d7ae   Tim Chen   crypto: tcrypt - ...
1723
1724
1725
1726
  	case 211:
  		test_aead_speed("rfc4106(gcm(aes))", ENCRYPT, sec,
  				NULL, 0, 16, 8, aead_speed_template_20);
  		break;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1727
  	case 300:
8606813a6   Herbert Xu   crypto: tcrypt - ...
1728
1729
1730
1731
  		if (alg) {
  			test_hash_speed(alg, sec, generic_hash_speed_template);
  			break;
  		}
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1732
1733
1734
  		/* fall through */
  
  	case 301:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1735
  		test_hash_speed("md4", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1736
1737
1738
  		if (mode > 300 && mode < 400) break;
  
  	case 302:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1739
  		test_hash_speed("md5", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1740
1741
1742
  		if (mode > 300 && mode < 400) break;
  
  	case 303:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1743
  		test_hash_speed("sha1", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1744
1745
1746
  		if (mode > 300 && mode < 400) break;
  
  	case 304:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1747
  		test_hash_speed("sha256", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1748
1749
1750
  		if (mode > 300 && mode < 400) break;
  
  	case 305:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1751
  		test_hash_speed("sha384", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1752
1753
1754
  		if (mode > 300 && mode < 400) break;
  
  	case 306:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1755
  		test_hash_speed("sha512", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1756
1757
1758
  		if (mode > 300 && mode < 400) break;
  
  	case 307:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1759
  		test_hash_speed("wp256", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1760
1761
1762
  		if (mode > 300 && mode < 400) break;
  
  	case 308:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1763
  		test_hash_speed("wp384", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1764
1765
1766
  		if (mode > 300 && mode < 400) break;
  
  	case 309:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1767
  		test_hash_speed("wp512", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1768
1769
1770
  		if (mode > 300 && mode < 400) break;
  
  	case 310:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1771
  		test_hash_speed("tgr128", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1772
1773
1774
  		if (mode > 300 && mode < 400) break;
  
  	case 311:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1775
  		test_hash_speed("tgr160", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1776
1777
1778
  		if (mode > 300 && mode < 400) break;
  
  	case 312:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1779
  		test_hash_speed("tgr192", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1780
  		if (mode > 300 && mode < 400) break;
cd12fb906   Jonathan Lynch   [CRYPTO] sha256-g...
1781
1782
1783
  	case 313:
  		test_hash_speed("sha224", sec, generic_hash_speed_template);
  		if (mode > 300 && mode < 400) break;
fd4adf1a0   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1784
1785
1786
1787
1788
1789
1790
  	case 314:
  		test_hash_speed("rmd128", sec, generic_hash_speed_template);
  		if (mode > 300 && mode < 400) break;
  
  	case 315:
  		test_hash_speed("rmd160", sec, generic_hash_speed_template);
  		if (mode > 300 && mode < 400) break;
2998db37b   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1791
1792
1793
1794
1795
1796
1797
  	case 316:
  		test_hash_speed("rmd256", sec, generic_hash_speed_template);
  		if (mode > 300 && mode < 400) break;
  
  	case 317:
  		test_hash_speed("rmd320", sec, generic_hash_speed_template);
  		if (mode > 300 && mode < 400) break;
18bcc9194   Huang Ying   crypto: tcrypt - ...
1798
1799
1800
  	case 318:
  		test_hash_speed("ghash-generic", sec, hash_speed_template_16);
  		if (mode > 300 && mode < 400) break;
e3899e4df   Tim Chen   crypto: tcrypt - ...
1801
1802
1803
  	case 319:
  		test_hash_speed("crc32c", sec, generic_hash_speed_template);
  		if (mode > 300 && mode < 400) break;
68411521c   Herbert Xu   Reinstate "crypto...
1804
1805
1806
  	case 320:
  		test_hash_speed("crct10dif", sec, generic_hash_speed_template);
  		if (mode > 300 && mode < 400) break;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1807
1808
  	case 399:
  		break;
beb63da73   David S. Miller   crypto: tcrypt - ...
1809
  	case 400:
8606813a6   Herbert Xu   crypto: tcrypt - ...
1810
1811
1812
1813
  		if (alg) {
  			test_ahash_speed(alg, sec, generic_hash_speed_template);
  			break;
  		}
beb63da73   David S. Miller   crypto: tcrypt - ...
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
  		/* fall through */
  
  	case 401:
  		test_ahash_speed("md4", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 402:
  		test_ahash_speed("md5", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 403:
  		test_ahash_speed("sha1", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 404:
  		test_ahash_speed("sha256", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 405:
  		test_ahash_speed("sha384", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 406:
  		test_ahash_speed("sha512", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 407:
  		test_ahash_speed("wp256", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 408:
  		test_ahash_speed("wp384", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 409:
  		test_ahash_speed("wp512", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 410:
  		test_ahash_speed("tgr128", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 411:
  		test_ahash_speed("tgr160", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 412:
  		test_ahash_speed("tgr192", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 413:
  		test_ahash_speed("sha224", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 414:
  		test_ahash_speed("rmd128", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 415:
  		test_ahash_speed("rmd160", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 416:
  		test_ahash_speed("rmd256", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 417:
  		test_ahash_speed("rmd320", sec, generic_hash_speed_template);
  		if (mode > 400 && mode < 500) break;
  
  	case 499:
  		break;
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
  	case 500:
  		test_acipher_speed("ecb(aes)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
  		test_acipher_speed("ecb(aes)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
  		test_acipher_speed("cbc(aes)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
  		test_acipher_speed("cbc(aes)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
  		test_acipher_speed("lrw(aes)", ENCRYPT, sec, NULL, 0,
  				   speed_template_32_40_48);
  		test_acipher_speed("lrw(aes)", DECRYPT, sec, NULL, 0,
  				   speed_template_32_40_48);
  		test_acipher_speed("xts(aes)", ENCRYPT, sec, NULL, 0,
  				   speed_template_32_48_64);
  		test_acipher_speed("xts(aes)", DECRYPT, sec, NULL, 0,
  				   speed_template_32_48_64);
  		test_acipher_speed("ctr(aes)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
  		test_acipher_speed("ctr(aes)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
de1975334   Nicolas Royer   crypto: atmel - a...
1907
1908
1909
1910
1911
1912
1913
1914
  		test_acipher_speed("cfb(aes)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
  		test_acipher_speed("cfb(aes)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
  		test_acipher_speed("ofb(aes)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
  		test_acipher_speed("ofb(aes)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
69d3150cf   Jussi Kivilinna   crypto: ctr - mak...
1915
1916
1917
1918
  		test_acipher_speed("rfc3686(ctr(aes))", ENCRYPT, sec, NULL, 0,
  				   speed_template_20_28_36);
  		test_acipher_speed("rfc3686(ctr(aes))", DECRYPT, sec, NULL, 0,
  				   speed_template_20_28_36);
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
  		break;
  
  	case 501:
  		test_acipher_speed("ecb(des3_ede)", ENCRYPT, sec,
  				   des3_speed_template, DES3_SPEED_VECTORS,
  				   speed_template_24);
  		test_acipher_speed("ecb(des3_ede)", DECRYPT, sec,
  				   des3_speed_template, DES3_SPEED_VECTORS,
  				   speed_template_24);
  		test_acipher_speed("cbc(des3_ede)", ENCRYPT, sec,
  				   des3_speed_template, DES3_SPEED_VECTORS,
  				   speed_template_24);
  		test_acipher_speed("cbc(des3_ede)", DECRYPT, sec,
  				   des3_speed_template, DES3_SPEED_VECTORS,
  				   speed_template_24);
de1975334   Nicolas Royer   crypto: atmel - a...
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
  		test_acipher_speed("cfb(des3_ede)", ENCRYPT, sec,
  				   des3_speed_template, DES3_SPEED_VECTORS,
  				   speed_template_24);
  		test_acipher_speed("cfb(des3_ede)", DECRYPT, sec,
  				   des3_speed_template, DES3_SPEED_VECTORS,
  				   speed_template_24);
  		test_acipher_speed("ofb(des3_ede)", ENCRYPT, sec,
  				   des3_speed_template, DES3_SPEED_VECTORS,
  				   speed_template_24);
  		test_acipher_speed("ofb(des3_ede)", DECRYPT, sec,
  				   des3_speed_template, DES3_SPEED_VECTORS,
  				   speed_template_24);
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
  		break;
  
  	case 502:
  		test_acipher_speed("ecb(des)", ENCRYPT, sec, NULL, 0,
  				   speed_template_8);
  		test_acipher_speed("ecb(des)", DECRYPT, sec, NULL, 0,
  				   speed_template_8);
  		test_acipher_speed("cbc(des)", ENCRYPT, sec, NULL, 0,
  				   speed_template_8);
  		test_acipher_speed("cbc(des)", DECRYPT, sec, NULL, 0,
  				   speed_template_8);
de1975334   Nicolas Royer   crypto: atmel - a...
1957
1958
1959
1960
1961
1962
1963
1964
  		test_acipher_speed("cfb(des)", ENCRYPT, sec, NULL, 0,
  				   speed_template_8);
  		test_acipher_speed("cfb(des)", DECRYPT, sec, NULL, 0,
  				   speed_template_8);
  		test_acipher_speed("ofb(des)", ENCRYPT, sec, NULL, 0,
  				   speed_template_8);
  		test_acipher_speed("ofb(des)", DECRYPT, sec, NULL, 0,
  				   speed_template_8);
3f3baf359   Jussi Kivilinna   crypto: tcrypt - ...
1965
  		break;
7fb7fe446   Jussi Kivilinna   crypto: tcrypt - ...
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
  	case 503:
  		test_acipher_speed("ecb(serpent)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("ecb(serpent)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("cbc(serpent)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("cbc(serpent)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("ctr(serpent)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("ctr(serpent)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_32);
87aae4bfb   Jussi Kivilinna   crypto: tcrypt - ...
1979
1980
1981
1982
  		test_acipher_speed("lrw(serpent)", ENCRYPT, sec, NULL, 0,
  				   speed_template_32_48);
  		test_acipher_speed("lrw(serpent)", DECRYPT, sec, NULL, 0,
  				   speed_template_32_48);
5209c07ac   Jussi Kivilinna   crypto: tcrypt - ...
1983
1984
1985
1986
  		test_acipher_speed("xts(serpent)", ENCRYPT, sec, NULL, 0,
  				   speed_template_32_64);
  		test_acipher_speed("xts(serpent)", DECRYPT, sec, NULL, 0,
  				   speed_template_32_64);
7fb7fe446   Jussi Kivilinna   crypto: tcrypt - ...
1987
  		break;
107778b59   Johannes Goetzfried   crypto: twofish -...
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
  	case 504:
  		test_acipher_speed("ecb(twofish)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
  		test_acipher_speed("ecb(twofish)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
  		test_acipher_speed("cbc(twofish)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
  		test_acipher_speed("cbc(twofish)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
  		test_acipher_speed("ctr(twofish)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
  		test_acipher_speed("ctr(twofish)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_24_32);
  		test_acipher_speed("lrw(twofish)", ENCRYPT, sec, NULL, 0,
  				   speed_template_32_40_48);
  		test_acipher_speed("lrw(twofish)", DECRYPT, sec, NULL, 0,
  				   speed_template_32_40_48);
  		test_acipher_speed("xts(twofish)", ENCRYPT, sec, NULL, 0,
  				   speed_template_32_48_64);
  		test_acipher_speed("xts(twofish)", DECRYPT, sec, NULL, 0,
  				   speed_template_32_48_64);
  		break;
31b4cd290   Jussi Kivilinna   crypto: testmgr -...
2010
2011
2012
2013
  	case 505:
  		test_acipher_speed("ecb(arc4)", ENCRYPT, sec, NULL, 0,
  				   speed_template_8);
  		break;
a2c582609   Johannes Goetzfried   crypto: testmgr -...
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
  	case 506:
  		test_acipher_speed("ecb(cast5)", ENCRYPT, sec, NULL, 0,
  				   speed_template_8_16);
  		test_acipher_speed("ecb(cast5)", DECRYPT, sec, NULL, 0,
  				   speed_template_8_16);
  		test_acipher_speed("cbc(cast5)", ENCRYPT, sec, NULL, 0,
  				   speed_template_8_16);
  		test_acipher_speed("cbc(cast5)", DECRYPT, sec, NULL, 0,
  				   speed_template_8_16);
  		test_acipher_speed("ctr(cast5)", ENCRYPT, sec, NULL, 0,
  				   speed_template_8_16);
  		test_acipher_speed("ctr(cast5)", DECRYPT, sec, NULL, 0,
  				   speed_template_8_16);
  		break;
9b8b04051   Johannes Goetzfried   crypto: testmgr -...
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
  	case 507:
  		test_acipher_speed("ecb(cast6)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("ecb(cast6)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("cbc(cast6)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("cbc(cast6)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("ctr(cast6)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("ctr(cast6)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("lrw(cast6)", ENCRYPT, sec, NULL, 0,
  				   speed_template_32_48);
  		test_acipher_speed("lrw(cast6)", DECRYPT, sec, NULL, 0,
  				   speed_template_32_48);
  		test_acipher_speed("xts(cast6)", ENCRYPT, sec, NULL, 0,
  				   speed_template_32_64);
  		test_acipher_speed("xts(cast6)", DECRYPT, sec, NULL, 0,
  				   speed_template_32_64);
  		break;
bf9c51818   Jussi Kivilinna   crypto: tcrypt - ...
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
  	case 508:
  		test_acipher_speed("ecb(camellia)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("ecb(camellia)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("cbc(camellia)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("cbc(camellia)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("ctr(camellia)", ENCRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("ctr(camellia)", DECRYPT, sec, NULL, 0,
  				   speed_template_16_32);
  		test_acipher_speed("lrw(camellia)", ENCRYPT, sec, NULL, 0,
  				   speed_template_32_48);
  		test_acipher_speed("lrw(camellia)", DECRYPT, sec, NULL, 0,
  				   speed_template_32_48);
  		test_acipher_speed("xts(camellia)", ENCRYPT, sec, NULL, 0,
  				   speed_template_32_64);
  		test_acipher_speed("xts(camellia)", DECRYPT, sec, NULL, 0,
  				   speed_template_32_64);
  		break;
ad8b7c3e9   Jussi Kivilinna   crypto: tcrypt - ...
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
  	case 509:
  		test_acipher_speed("ecb(blowfish)", ENCRYPT, sec, NULL, 0,
  				   speed_template_8_32);
  		test_acipher_speed("ecb(blowfish)", DECRYPT, sec, NULL, 0,
  				   speed_template_8_32);
  		test_acipher_speed("cbc(blowfish)", ENCRYPT, sec, NULL, 0,
  				   speed_template_8_32);
  		test_acipher_speed("cbc(blowfish)", DECRYPT, sec, NULL, 0,
  				   speed_template_8_32);
  		test_acipher_speed("ctr(blowfish)", ENCRYPT, sec, NULL, 0,
  				   speed_template_8_32);
  		test_acipher_speed("ctr(blowfish)", DECRYPT, sec, NULL, 0,
  				   speed_template_8_32);
  		break;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2086
2087
2088
  	case 1000:
  		test_available();
  		break;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2089
  	}
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
2090
2091
  
  	return ret;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2092
  }
3af5b90bd   Kamalesh Babulal   [CRYPTO] all: Cle...
2093
  static int __init tcrypt_mod_init(void)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2094
  {
e3a4ea4fd   Mikko Herranen   [CRYPTO] tcrypt: ...
2095
  	int err = -ENOMEM;
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
2096
  	int i;
e3a4ea4fd   Mikko Herranen   [CRYPTO] tcrypt: ...
2097

f139cfa7c   Herbert Xu   crypto: tcrypt - ...
2098
2099
2100
2101
2102
  	for (i = 0; i < TVMEMSIZE; i++) {
  		tvmem[i] = (void *)__get_free_page(GFP_KERNEL);
  		if (!tvmem[i])
  			goto err_free_tv;
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2103

8606813a6   Herbert Xu   crypto: tcrypt - ...
2104
  	err = do_test(alg, type, mask, mode);
a873a5f1c   Steffen Klassert   crypto: tcrypt - ...
2105

4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
2106
2107
2108
2109
2110
  	if (err) {
  		printk(KERN_ERR "tcrypt: one or more tests failed!
  ");
  		goto err_free_tv;
  	}
14fdf477a   Michal Ludvig   [CRYPTO] tcrypt: ...
2111

4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
2112
2113
2114
2115
  	/* We intentionaly return -EAGAIN to prevent keeping the module,
  	 * unless we're running in fips mode. It does all its work from
  	 * init() and doesn't offer any runtime functionality, but in
  	 * the fips case, checking for a successful load is helpful.
14fdf477a   Michal Ludvig   [CRYPTO] tcrypt: ...
2116
2117
2118
  	 * => we don't need it in the memory, do we?
  	 *                                        -- mludvig
  	 */
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
2119
2120
  	if (!fips_enabled)
  		err = -EAGAIN;
e3a4ea4fd   Mikko Herranen   [CRYPTO] tcrypt: ...
2121

f139cfa7c   Herbert Xu   crypto: tcrypt - ...
2122
2123
2124
  err_free_tv:
  	for (i = 0; i < TVMEMSIZE && tvmem[i]; i++)
  		free_page((unsigned long)tvmem[i]);
e3a4ea4fd   Mikko Herranen   [CRYPTO] tcrypt: ...
2125
2126
  
  	return err;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2127
2128
2129
2130
2131
2132
  }
  
  /*
   * If an init function is provided, an exit function must also be provided
   * to allow module unload.
   */
3af5b90bd   Kamalesh Babulal   [CRYPTO] all: Cle...
2133
  static void __exit tcrypt_mod_fini(void) { }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2134

3af5b90bd   Kamalesh Babulal   [CRYPTO] all: Cle...
2135
2136
  module_init(tcrypt_mod_init);
  module_exit(tcrypt_mod_fini);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2137

a873a5f1c   Steffen Klassert   crypto: tcrypt - ...
2138
2139
  module_param(alg, charp, 0);
  module_param(type, uint, 0);
7be380f72   Herbert Xu   crypto: tcrypt - ...
2140
  module_param(mask, uint, 0);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2141
  module_param(mode, int, 0);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
2142
  module_param(sec, uint, 0);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
2143
2144
  MODULE_PARM_DESC(sec, "Length in seconds of speed tests "
  		      "(defaults to zero which uses CPU cycles instead)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2145
2146
2147
2148
  
  MODULE_LICENSE("GPL");
  MODULE_DESCRIPTION("Quick & dirty crypto testing module");
  MODULE_AUTHOR("James Morris <jmorris@intercode.com.au>");