Blame view

crypto/tcrypt.c 36.5 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
50
51
  /*
   * Used by test_cipher_speed()
   */
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
52
  static unsigned int sec;
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
53

a873a5f1c   Steffen Klassert   crypto: tcrypt - ...
54
55
  static char *alg = NULL;
  static u32 type;
7be380f72   Herbert Xu   crypto: tcrypt - ...
56
  static u32 mask;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
57
  static int mode;
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
58
  static char *tvmem[TVMEMSIZE];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
59
60
  
  static char *check[] = {
cd12fb906   Jonathan Lynch   [CRYPTO] sha256-g...
61
62
63
  	"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: ...
64
  	"khazad", "wp512", "wp384", "wp256", "tnepres", "xeta",  "fcrypt",
2998db37b   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
65
  	"camellia", "seed", "salsa20", "rmd128", "rmd160", "rmd256", "rmd320",
0c01aed50   Geert Uytterhoeven   crypto: testmgr -...
66
  	"lzo", "cts", "zlib", NULL
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
67
  };
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
68
69
  static int test_cipher_jiffies(struct blkcipher_desc *desc, int enc,
  			       struct scatterlist *sg, int blen, int sec)
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
70
  {
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
71
72
73
  	unsigned long start, end;
  	int bcount;
  	int ret;
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
74
75
76
  	for (start = jiffies, end = start + sec * HZ, bcount = 0;
  	     time_before(jiffies, end); bcount++) {
  		if (enc)
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
77
  			ret = crypto_blkcipher_encrypt(desc, sg, sg, blen);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
78
  		else
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
79
  			ret = crypto_blkcipher_decrypt(desc, sg, sg, blen);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
80
81
82
83
84
85
86
87
88
89
  
  		if (ret)
  			return ret;
  	}
  
  	printk("%d operations in %d seconds (%ld bytes)
  ",
  	       bcount, sec, (long)bcount * blen);
  	return 0;
  }
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
90
91
  static int test_cipher_cycles(struct blkcipher_desc *desc, int enc,
  			      struct scatterlist *sg, int blen)
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
92
  {
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
93
94
95
  	unsigned long cycles = 0;
  	int ret = 0;
  	int i;
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
96
97
98
99
100
101
  	local_bh_disable();
  	local_irq_disable();
  
  	/* Warm-up run. */
  	for (i = 0; i < 4; i++) {
  		if (enc)
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
102
  			ret = crypto_blkcipher_encrypt(desc, sg, sg, blen);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
103
  		else
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
104
  			ret = crypto_blkcipher_decrypt(desc, sg, sg, blen);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
105
106
107
108
109
110
111
112
113
114
115
  
  		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: ...
116
  			ret = crypto_blkcipher_encrypt(desc, sg, sg, blen);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
117
  		else
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
118
  			ret = crypto_blkcipher_decrypt(desc, sg, sg, blen);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
  		end = get_cycles();
  
  		if (ret)
  			goto out;
  
  		cycles += end - start;
  	}
  
  out:
  	local_irq_enable();
  	local_bh_enable();
  
  	if (ret == 0)
  		printk("1 operation in %lu cycles (%d bytes)
  ",
  		       (cycles + 4) / 8, blen);
  
  	return ret;
  }
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
138
  static u32 block_sizes[] = { 16, 64, 256, 1024, 8192, 0 };
01b323245   Herbert Xu   crypto: tcrypt - ...
139
  static void test_cipher_speed(const char *algo, int enc, unsigned int sec,
da7f033dd   Herbert Xu   crypto: cryptomgr...
140
  			      struct cipher_speed_template *template,
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
141
  			      unsigned int tcount, u8 *keysize)
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
142
  {
dce907c00   Herbert Xu   [CRYPTO]: Use tem...
143
  	unsigned int ret, i, j, iv_len;
f07ef1de9   David Sterba   crypto: tcrypt - ...
144
145
  	const char *key;
  	char iv[128];
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
146
147
148
  	struct crypto_blkcipher *tfm;
  	struct blkcipher_desc desc;
  	const char *e;
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
149
  	u32 *b_size;
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
150
151
152
153
154
  
  	if (enc == ENCRYPT)
  	        e = "encryption";
  	else
  		e = "decryption";
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
155

cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
156
157
158
  	printk("
  testing speed of %s %s
  ", algo, e);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
159

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

cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
162
163
164
165
  	if (IS_ERR(tfm)) {
  		printk("failed to load transform for %s: %ld
  ", algo,
  		       PTR_ERR(tfm));
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
166
167
  		return;
  	}
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
168
169
  	desc.tfm = tfm;
  	desc.flags = 0;
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
170

d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
171
172
  	i = 0;
  	do {
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
173

d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
174
175
  		b_size = block_sizes;
  		do {
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
176
  			struct scatterlist sg[TVMEMSIZE];
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
177

f139cfa7c   Herbert Xu   crypto: tcrypt - ...
178
179
180
181
182
  			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: ...
183
184
  				goto out;
  			}
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
185

d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
186
187
  			printk("test %u (%d bit key, %d byte blocks): ", i,
  					*keysize * 8, *b_size);
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
188
  			memset(tvmem[0], 0xff, PAGE_SIZE);
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
189
190
  
  			/* set key, plain text and IV */
da7f033dd   Herbert Xu   crypto: cryptomgr...
191
  			key = tvmem[0];
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
192
193
194
195
196
  			for (j = 0; j < tcount; j++) {
  				if (template[j].klen == *keysize) {
  					key = template[j].key;
  					break;
  				}
dce907c00   Herbert Xu   [CRYPTO]: Use tem...
197
  			}
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
198

d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
199
200
201
202
203
204
205
  			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...
206

f139cfa7c   Herbert Xu   crypto: tcrypt - ...
207
208
209
210
211
212
213
  			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: ...
214
215
216
217
218
  			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...
219

d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
220
  			if (sec)
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
221
222
  				ret = test_cipher_jiffies(&desc, enc, sg,
  							  *b_size, sec);
d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
223
  			else
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
224
225
  				ret = test_cipher_cycles(&desc, enc, sg,
  							 *b_size);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
226

d5dc39274   Sebastian Siewior   [CRYPTO] tcrypt: ...
227
228
229
230
231
232
233
234
235
236
  			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...
237
238
  
  out:
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
239
  	crypto_free_blkcipher(tfm);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
240
  }
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
241
242
  static int test_hash_jiffies_digest(struct hash_desc *desc,
  				    struct scatterlist *sg, int blen,
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
243
244
  				    char *out, int sec)
  {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
245
246
247
248
249
250
  	unsigned long start, end;
  	int bcount;
  	int ret;
  
  	for (start = jiffies, end = start + sec * HZ, bcount = 0;
  	     time_before(jiffies, end); bcount++) {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
251
252
253
254
255
256
257
258
259
260
261
  		ret = crypto_hash_digest(desc, sg, blen, out);
  		if (ret)
  			return ret;
  	}
  
  	printk("%6u opers/sec, %9lu bytes/sec
  ",
  	       bcount / sec, ((long)bcount * blen) / sec);
  
  	return 0;
  }
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
262
263
  static int test_hash_jiffies(struct hash_desc *desc, struct scatterlist *sg,
  			     int blen, int plen, char *out, int sec)
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
264
  {
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
265
266
  	unsigned long start, end;
  	int bcount, pcount;
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
267
268
269
  	int ret;
  
  	if (plen == blen)
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
270
  		return test_hash_jiffies_digest(desc, sg, blen, out, sec);
a5a613a42   Herbert Xu   [CRYPTO] tcrypt: ...
271

e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
272
273
  	for (start = jiffies, end = start + sec * HZ, bcount = 0;
  	     time_before(jiffies, end); bcount++) {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
274
275
276
  		ret = crypto_hash_init(desc);
  		if (ret)
  			return ret;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
277
  		for (pcount = 0; pcount < blen; pcount += plen) {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
278
279
280
  			ret = crypto_hash_update(desc, sg, plen);
  			if (ret)
  				return ret;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
281
282
  		}
  		/* we assume there is enough space in 'out' for the result */
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
283
284
285
  		ret = crypto_hash_final(desc, out);
  		if (ret)
  			return ret;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
286
287
288
289
290
  	}
  
  	printk("%6u opers/sec, %9lu bytes/sec
  ",
  	       bcount / sec, ((long)bcount * blen) / sec);
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
291
292
  	return 0;
  }
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
293
294
  static int test_hash_cycles_digest(struct hash_desc *desc,
  				   struct scatterlist *sg, int blen, char *out)
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
295
  {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
296
297
298
299
300
301
302
303
304
  	unsigned long cycles = 0;
  	int i;
  	int ret;
  
  	local_bh_disable();
  	local_irq_disable();
  
  	/* Warm-up run. */
  	for (i = 0; i < 4; i++) {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
305
306
307
308
309
310
311
312
313
314
  		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: ...
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
  		ret = crypto_hash_digest(desc, sg, blen, out);
  		if (ret)
  			goto out;
  
  		end = get_cycles();
  
  		cycles += end - start;
  	}
  
  out:
  	local_irq_enable();
  	local_bh_enable();
  
  	if (ret)
  		return ret;
  
  	printk("%6lu cycles/operation, %4lu cycles/byte
  ",
  	       cycles / 8, cycles / (8 * blen));
  
  	return 0;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
336
  }
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
337
338
  static int test_hash_cycles(struct hash_desc *desc, struct scatterlist *sg,
  			    int blen, int plen, char *out)
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
339
  {
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
340
341
  	unsigned long cycles = 0;
  	int i, pcount;
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
342
343
344
  	int ret;
  
  	if (plen == blen)
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
345
  		return test_hash_cycles_digest(desc, sg, blen, out);
a5a613a42   Herbert Xu   [CRYPTO] tcrypt: ...
346

e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
347
348
349
350
351
  	local_bh_disable();
  	local_irq_disable();
  
  	/* Warm-up run. */
  	for (i = 0; i < 4; i++) {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
352
353
354
  		ret = crypto_hash_init(desc);
  		if (ret)
  			goto out;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
355
  		for (pcount = 0; pcount < blen; pcount += plen) {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
356
357
358
  			ret = crypto_hash_update(desc, sg, plen);
  			if (ret)
  				goto out;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
359
  		}
29059d12e   Herbert Xu   [CRYPTO] tcrypt: ...
360
  		ret = crypto_hash_final(desc, out);
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
361
362
  		if (ret)
  			goto out;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
363
364
365
366
367
  	}
  
  	/* The real thing. */
  	for (i = 0; i < 8; i++) {
  		cycles_t start, end;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
368
  		start = get_cycles();
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
369
370
371
  		ret = crypto_hash_init(desc);
  		if (ret)
  			goto out;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
372
  		for (pcount = 0; pcount < blen; pcount += plen) {
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
373
374
375
  			ret = crypto_hash_update(desc, sg, plen);
  			if (ret)
  				goto out;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
376
  		}
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
377
378
379
  		ret = crypto_hash_final(desc, out);
  		if (ret)
  			goto out;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
380
381
382
383
384
  
  		end = get_cycles();
  
  		cycles += end - start;
  	}
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
385
  out:
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
386
387
  	local_irq_enable();
  	local_bh_enable();
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
388
389
  	if (ret)
  		return ret;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
390
391
392
  	printk("%6lu cycles/operation, %4lu cycles/byte
  ",
  	       cycles / 8, cycles / (8 * blen));
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
393
  	return 0;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
394
  }
beb63da73   David S. Miller   crypto: tcrypt - ...
395
396
397
398
399
400
401
402
403
404
  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);
  	}
  }
01b323245   Herbert Xu   crypto: tcrypt - ...
405
406
  static void test_hash_speed(const char *algo, unsigned int sec,
  			    struct hash_speed *speed)
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
407
  {
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
408
  	struct scatterlist sg[TVMEMSIZE];
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
409
410
  	struct crypto_hash *tfm;
  	struct hash_desc desc;
376bacb0a   Frank Seidel   crypto: tcrypt - ...
411
  	static char output[1024];
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
412
  	int i;
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
413
  	int ret;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
414

376bacb0a   Frank Seidel   crypto: tcrypt - ...
415
416
417
  	printk(KERN_INFO "
  testing speed of %s
  ", algo);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
418

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

e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
421
  	if (IS_ERR(tfm)) {
376bacb0a   Frank Seidel   crypto: tcrypt - ...
422
423
  		printk(KERN_ERR "failed to load transform for %s: %ld
  ", algo,
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
424
  		       PTR_ERR(tfm));
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
425
426
  		return;
  	}
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
427
428
429
430
  	desc.tfm = tfm;
  	desc.flags = 0;
  
  	if (crypto_hash_digestsize(tfm) > sizeof(output)) {
376bacb0a   Frank Seidel   crypto: tcrypt - ...
431
432
  		printk(KERN_ERR "digestsize(%u) > outputbuffer(%zu)
  ",
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
433
  		       crypto_hash_digestsize(tfm), sizeof(output));
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
434
435
  		goto out;
  	}
beb63da73   David S. Miller   crypto: tcrypt - ...
436
  	test_hash_sg_init(sg);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
437
  	for (i = 0; speed[i].blen != 0; i++) {
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
438
  		if (speed[i].blen > TVMEMSIZE * PAGE_SIZE) {
376bacb0a   Frank Seidel   crypto: tcrypt - ...
439
440
441
  			printk(KERN_ERR
  			       "template (%u) too big for tvmem (%lu)
  ",
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
442
  			       speed[i].blen, TVMEMSIZE * PAGE_SIZE);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
443
444
  			goto out;
  		}
18bcc9194   Huang Ying   crypto: tcrypt - ...
445
446
  		if (speed[i].klen)
  			crypto_hash_setkey(tfm, tvmem[0], speed[i].klen);
376bacb0a   Frank Seidel   crypto: tcrypt - ...
447
448
  		printk(KERN_INFO "test%3u "
  		       "(%5u byte blocks,%5u bytes per update,%4u updates): ",
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
449
  		       i, speed[i].blen, speed[i].plen, speed[i].blen / speed[i].plen);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
450
  		if (sec)
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
451
  			ret = test_hash_jiffies(&desc, sg, speed[i].blen,
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
452
  						speed[i].plen, output, sec);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
453
  		else
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
454
  			ret = test_hash_cycles(&desc, sg, speed[i].blen,
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
455
456
457
  					       speed[i].plen, output);
  
  		if (ret) {
376bacb0a   Frank Seidel   crypto: tcrypt - ...
458
459
  			printk(KERN_ERR "hashing failed ret=%d
  ", ret);
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
460
461
  			break;
  		}
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
462
463
464
  	}
  
  out:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
465
  	crypto_free_hash(tfm);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
466
  }
beb63da73   David S. Miller   crypto: tcrypt - ...
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
  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;
  		INIT_COMPLETION(tr->completion);
  	}
  	return ret;
  }
  
  static int test_ahash_jiffies_digest(struct ahash_request *req, int blen,
  				     char *out, int sec)
  {
  	unsigned long start, end;
  	int bcount;
  	int ret;
  
  	for (start = jiffies, end = start + sec * HZ, bcount = 0;
  	     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
  ",
  	       bcount / sec, ((long)bcount * blen) / sec);
  
  	return 0;
  }
  
  static int test_ahash_jiffies(struct ahash_request *req, int blen,
  			      int plen, char *out, int sec)
  {
  	unsigned long start, end;
  	int bcount, pcount;
  	int ret;
  
  	if (plen == blen)
  		return test_ahash_jiffies_digest(req, blen, out, sec);
  
  	for (start = jiffies, end = start + sec * HZ, bcount = 0;
  	     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
  ",
  		bcount / sec, ((long)bcount * blen) / sec);
  
  	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;
  }
  
  static void test_ahash_speed(const char *algo, unsigned int sec,
  			     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;
  
  	printk(KERN_INFO "
  testing speed of async %s
  ", algo);
  
  	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;
  	}
  
  	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);
  
  		if (sec)
  			ret = test_ahash_jiffies(req, speed[i].blen,
  						 speed[i].plen, output, sec);
  		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 - ...
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
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
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
  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;
  		INIT_COMPLETION(tr->completion);
  	}
  
  	return ret;
  }
  
  static int test_acipher_jiffies(struct ablkcipher_request *req, int enc,
  				int blen, int sec)
  {
  	unsigned long start, end;
  	int bcount;
  	int ret;
  
  	for (start = jiffies, end = start + sec * HZ, bcount = 0;
  	     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)
  ",
  		bcount, sec, (long)bcount * blen);
  	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;
  }
  
  static void test_acipher_speed(const char *algo, int enc, unsigned int sec,
  			       struct cipher_speed_template *template,
  			       unsigned int tcount, u8 *keysize)
  {
  	unsigned int ret, i, j, iv_len;
  	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";
  
  	pr_info("
  testing speed of async %s %s
  ", algo, e);
  
  	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;
  	}
  
  	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);
  			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);
  			}
  
  			iv_len = crypto_ablkcipher_ivsize(tfm);
  			if (iv_len)
  				memset(&iv, 0xff, iv_len);
  
  			ablkcipher_request_set_crypt(req, sg, sg, *b_size, iv);
  
  			if (sec)
  				ret = test_acipher_jiffies(req, enc,
  							   *b_size, sec);
  			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...
930
  static void test_available(void)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
931
932
  {
  	char **name = check;
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
933

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
934
935
  	while (*name) {
  		printk("alg %s ", *name);
6158efc09   Herbert Xu   [CRYPTO] tcrypt: ...
936
  		printk(crypto_has_alg(*name, 0, 0) ?
e4d5b79c6   Herbert Xu   [CRYPTO] users: U...
937
938
939
  		       "found
  " : "not found
  ");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
940
  		name++;
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
941
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
942
  }
01b323245   Herbert Xu   crypto: tcrypt - ...
943
944
  static inline int tcrypt_test(const char *alg)
  {
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
945
946
947
948
949
950
951
  	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 - ...
952
  }
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
953
  static int do_test(int m)
01b323245   Herbert Xu   crypto: tcrypt - ...
954
955
  {
  	int i;
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
956
  	int ret = 0;
01b323245   Herbert Xu   crypto: tcrypt - ...
957
958
  
  	switch (m) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
959
  	case 0:
01b323245   Herbert Xu   crypto: tcrypt - ...
960
  		for (i = 1; i < 200; i++)
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
961
  			ret += do_test(i);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
962
963
964
  		break;
  
  	case 1:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
965
  		ret += tcrypt_test("md5");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
966
967
968
  		break;
  
  	case 2:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
969
  		ret += tcrypt_test("sha1");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
970
971
972
  		break;
  
  	case 3:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
973
974
  		ret += tcrypt_test("ecb(des)");
  		ret += tcrypt_test("cbc(des)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
975
976
977
  		break;
  
  	case 4:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
978
979
  		ret += tcrypt_test("ecb(des3_ede)");
  		ret += tcrypt_test("cbc(des3_ede)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
980
981
982
  		break;
  
  	case 5:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
983
  		ret += tcrypt_test("md4");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
984
  		break;
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
985

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

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
990
  	case 7:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
991
992
  		ret += tcrypt_test("ecb(blowfish)");
  		ret += tcrypt_test("cbc(blowfish)");
85b63e342   Jussi Kivilinna   crypto: testmgr -...
993
  		ret += tcrypt_test("ctr(blowfish)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
994
995
996
  		break;
  
  	case 8:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
997
998
  		ret += tcrypt_test("ecb(twofish)");
  		ret += tcrypt_test("cbc(twofish)");
573da6208   Jussi Kivilinna   crypto: testmgr -...
999
  		ret += tcrypt_test("ctr(twofish)");
bee3a90ef   Jussi Kivilinna   crypto: tcrypt - ...
1000
  		ret += tcrypt_test("lrw(twofish)");
131f75416   Jussi Kivilinna   crypto: tcrypt - ...
1001
  		ret += tcrypt_test("xts(twofish)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1002
  		break;
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
1003

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1004
  	case 9:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1005
  		ret += tcrypt_test("ecb(serpent)");
9d25917d4   Jussi Kivilinna   crypto: testmgr -...
1006
1007
  		ret += tcrypt_test("cbc(serpent)");
  		ret += tcrypt_test("ctr(serpent)");
87aae4bfb   Jussi Kivilinna   crypto: tcrypt - ...
1008
  		ret += tcrypt_test("lrw(serpent)");
5209c07ac   Jussi Kivilinna   crypto: tcrypt - ...
1009
  		ret += tcrypt_test("xts(serpent)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1010
1011
1012
  		break;
  
  	case 10:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1013
1014
1015
1016
1017
1018
  		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
1019
1020
1021
  		break;
  
  	case 11:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1022
  		ret += tcrypt_test("sha384");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1023
  		break;
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
1024

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1025
  	case 12:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1026
  		ret += tcrypt_test("sha512");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1027
1028
1029
  		break;
  
  	case 13:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1030
  		ret += tcrypt_test("deflate");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1031
1032
1033
  		break;
  
  	case 14:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1034
  		ret += tcrypt_test("ecb(cast5)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1035
1036
1037
  		break;
  
  	case 15:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1038
  		ret += tcrypt_test("ecb(cast6)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1039
1040
1041
  		break;
  
  	case 16:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1042
  		ret += tcrypt_test("ecb(arc4)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1043
1044
1045
  		break;
  
  	case 17:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1046
  		ret += tcrypt_test("michael_mic");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1047
1048
1049
  		break;
  
  	case 18:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1050
  		ret += tcrypt_test("crc32c");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1051
1052
1053
  		break;
  
  	case 19:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1054
  		ret += tcrypt_test("ecb(tea)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1055
1056
1057
  		break;
  
  	case 20:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1058
  		ret += tcrypt_test("ecb(xtea)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1059
1060
1061
  		break;
  
  	case 21:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1062
  		ret += tcrypt_test("ecb(khazad)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1063
1064
1065
  		break;
  
  	case 22:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1066
  		ret += tcrypt_test("wp512");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1067
1068
1069
  		break;
  
  	case 23:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1070
  		ret += tcrypt_test("wp384");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1071
1072
1073
  		break;
  
  	case 24:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1074
  		ret += tcrypt_test("wp256");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1075
1076
1077
  		break;
  
  	case 25:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1078
  		ret += tcrypt_test("ecb(tnepres)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1079
1080
1081
  		break;
  
  	case 26:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1082
1083
  		ret += tcrypt_test("ecb(anubis)");
  		ret += tcrypt_test("cbc(anubis)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1084
1085
1086
  		break;
  
  	case 27:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1087
  		ret += tcrypt_test("tgr192");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1088
1089
1090
  		break;
  
  	case 28:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1091
  		ret += tcrypt_test("tgr160");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1092
1093
1094
  		break;
  
  	case 29:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1095
  		ret += tcrypt_test("tgr128");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1096
  		break;
2998db37b   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1097

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

90831639a   David Howells   [CRYPTO] fcrypt: ...
1102
  	case 31:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1103
  		ret += tcrypt_test("pcbc(fcrypt)");
90831639a   David Howells   [CRYPTO] fcrypt: ...
1104
  		break;
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1105
  	case 32:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1106
1107
  		ret += tcrypt_test("ecb(camellia)");
  		ret += tcrypt_test("cbc(camellia)");
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1108
  		break;
cd12fb906   Jonathan Lynch   [CRYPTO] sha256-g...
1109
  	case 33:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1110
  		ret += tcrypt_test("sha224");
cd12fb906   Jonathan Lynch   [CRYPTO] sha256-g...
1111
  		break;
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1112

2407d6087   Tan Swee Heng   [CRYPTO] salsa20:...
1113
  	case 34:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1114
  		ret += tcrypt_test("salsa20");
2407d6087   Tan Swee Heng   [CRYPTO] salsa20:...
1115
  		break;
8df213d9b   Herbert Xu   [CRYPTO] tcrypt: ...
1116
  	case 35:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1117
  		ret += tcrypt_test("gcm(aes)");
8df213d9b   Herbert Xu   [CRYPTO] tcrypt: ...
1118
  		break;
0b77abb3b   Zoltan Sogor   [CRYPTO] lzo: Add...
1119
  	case 36:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1120
  		ret += tcrypt_test("lzo");
0b77abb3b   Zoltan Sogor   [CRYPTO] lzo: Add...
1121
  		break;
93cc74e07   Joy Latten   [CRYPTO] tcrypt: ...
1122
  	case 37:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1123
  		ret += tcrypt_test("ccm(aes)");
93cc74e07   Joy Latten   [CRYPTO] tcrypt: ...
1124
  		break;
76cb95217   Kevin Coffman   [CRYPTO] cts: Add...
1125
  	case 38:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1126
  		ret += tcrypt_test("cts(cbc(aes))");
76cb95217   Kevin Coffman   [CRYPTO] cts: Add...
1127
  		break;
fd4adf1a0   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1128
          case 39:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1129
  		ret += tcrypt_test("rmd128");
fd4adf1a0   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1130
1131
1132
  		break;
  
          case 40:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1133
  		ret += tcrypt_test("rmd160");
fd4adf1a0   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1134
  		break;
2998db37b   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1135
  	case 41:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1136
  		ret += tcrypt_test("rmd256");
2998db37b   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1137
1138
1139
  		break;
  
  	case 42:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1140
  		ret += tcrypt_test("rmd320");
01b323245   Herbert Xu   crypto: tcrypt - ...
1141
1142
1143
  		break;
  
  	case 43:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1144
  		ret += tcrypt_test("ecb(seed)");
2998db37b   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1145
  		break;
0c01aed50   Geert Uytterhoeven   crypto: testmgr -...
1146
  	case 44:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1147
  		ret += tcrypt_test("zlib");
0c01aed50   Geert Uytterhoeven   crypto: testmgr -...
1148
  		break;
5d667322a   Jarod Wilson   crypto: testmgr -...
1149
  	case 45:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1150
  		ret += tcrypt_test("rfc4309(ccm(aes))");
5d667322a   Jarod Wilson   crypto: testmgr -...
1151
  		break;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1152
  	case 100:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1153
  		ret += tcrypt_test("hmac(md5)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1154
  		break;
ef2736fc7   Herbert Xu   [CRYPTO]: White s...
1155

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

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1160
  	case 102:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1161
  		ret += tcrypt_test("hmac(sha256)");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1162
  		break;
a28091ae1   Andrew Donofrio   [CRYPTO] tcrypt: ...
1163
  	case 103:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1164
  		ret += tcrypt_test("hmac(sha384)");
a28091ae1   Andrew Donofrio   [CRYPTO] tcrypt: ...
1165
1166
1167
  		break;
  
  	case 104:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1168
  		ret += tcrypt_test("hmac(sha512)");
a28091ae1   Andrew Donofrio   [CRYPTO] tcrypt: ...
1169
  		break;
38ed9ab23   Herbert Xu   [CRYPTO] tcrypt: ...
1170

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

38ed9ab23   Herbert Xu   [CRYPTO] tcrypt: ...
1175
  	case 106:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1176
  		ret += tcrypt_test("xcbc(aes)");
38ed9ab23   Herbert Xu   [CRYPTO] tcrypt: ...
1177
  		break;
fd4adf1a0   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1178
  	case 107:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1179
  		ret += tcrypt_test("hmac(rmd128)");
fd4adf1a0   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1180
1181
1182
  		break;
  
  	case 108:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1183
  		ret += tcrypt_test("hmac(rmd160)");
fd4adf1a0   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1184
  		break;
f1939f7c5   Shane Wang   crypto: vmac - Ne...
1185
1186
1187
  	case 109:
  		ret += tcrypt_test("vmac(aes)");
  		break;
e08ca2da3   Jarod Wilson   crypto: testmgr -...
1188
  	case 150:
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1189
  		ret += tcrypt_test("ansi_cprng");
e08ca2da3   Jarod Wilson   crypto: testmgr -...
1190
  		break;
69435b94d   Adrian Hoban   crypto: rfc4106 -...
1191
1192
1193
  	case 151:
  		ret += tcrypt_test("rfc4106(gcm(aes))");
  		break;
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
1194
  	case 200:
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1195
  		test_cipher_speed("ecb(aes)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1196
  				speed_template_16_24_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1197
  		test_cipher_speed("ecb(aes)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1198
  				speed_template_16_24_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1199
  		test_cipher_speed("cbc(aes)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1200
  				speed_template_16_24_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1201
  		test_cipher_speed("cbc(aes)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1202
  				speed_template_16_24_32);
f3d1044cd   Rik Snel   [CRYPTO] tcrypt: ...
1203
  		test_cipher_speed("lrw(aes)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1204
  				speed_template_32_40_48);
f3d1044cd   Rik Snel   [CRYPTO] tcrypt: ...
1205
  		test_cipher_speed("lrw(aes)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1206
  				speed_template_32_40_48);
f19f5111c   Rik Snel   [CRYPTO] xts: XTS...
1207
  		test_cipher_speed("xts(aes)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1208
  				speed_template_32_48_64);
f19f5111c   Rik Snel   [CRYPTO] xts: XTS...
1209
  		test_cipher_speed("xts(aes)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1210
  				speed_template_32_48_64);
9996e3421   Jan Glauber   crypto: tcrypt - ...
1211
1212
1213
1214
  		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...
1215
1216
1217
  		break;
  
  	case 201:
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1218
  		test_cipher_speed("ecb(des3_ede)", ENCRYPT, sec,
da7f033dd   Herbert Xu   crypto: cryptomgr...
1219
  				des3_speed_template, DES3_SPEED_VECTORS,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1220
  				speed_template_24);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1221
  		test_cipher_speed("ecb(des3_ede)", DECRYPT, sec,
da7f033dd   Herbert Xu   crypto: cryptomgr...
1222
  				des3_speed_template, DES3_SPEED_VECTORS,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1223
  				speed_template_24);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1224
  		test_cipher_speed("cbc(des3_ede)", ENCRYPT, sec,
da7f033dd   Herbert Xu   crypto: cryptomgr...
1225
  				des3_speed_template, DES3_SPEED_VECTORS,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1226
  				speed_template_24);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1227
  		test_cipher_speed("cbc(des3_ede)", DECRYPT, sec,
da7f033dd   Herbert Xu   crypto: cryptomgr...
1228
  				des3_speed_template, DES3_SPEED_VECTORS,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1229
  				speed_template_24);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
1230
1231
1232
  		break;
  
  	case 202:
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1233
  		test_cipher_speed("ecb(twofish)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1234
  				speed_template_16_24_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1235
  		test_cipher_speed("ecb(twofish)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1236
  				speed_template_16_24_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1237
  		test_cipher_speed("cbc(twofish)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1238
  				speed_template_16_24_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1239
  		test_cipher_speed("cbc(twofish)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1240
  				speed_template_16_24_32);
ee5002a54   Jussi Kivilinna   crypto: tcrypt - ...
1241
1242
1243
1244
  		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 - ...
1245
1246
1247
1248
  		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 - ...
1249
1250
1251
1252
  		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...
1253
1254
1255
  		break;
  
  	case 203:
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1256
  		test_cipher_speed("ecb(blowfish)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1257
  				  speed_template_8_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1258
  		test_cipher_speed("ecb(blowfish)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1259
  				  speed_template_8_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1260
  		test_cipher_speed("cbc(blowfish)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1261
  				  speed_template_8_32);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1262
  		test_cipher_speed("cbc(blowfish)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1263
  				  speed_template_8_32);
7d47b86cf   Jussi Kivilinna   crypto: tcrypt - ...
1264
1265
1266
1267
  		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...
1268
1269
1270
  		break;
  
  	case 204:
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1271
  		test_cipher_speed("ecb(des)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1272
  				  speed_template_8);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1273
  		test_cipher_speed("ecb(des)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1274
  				  speed_template_8);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1275
  		test_cipher_speed("cbc(des)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1276
  				  speed_template_8);
cba83564d   Herbert Xu   [CRYPTO] tcrypt: ...
1277
  		test_cipher_speed("cbc(des)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1278
  				  speed_template_8);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
1279
  		break;
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1280
1281
  	case 205:
  		test_cipher_speed("ecb(camellia)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1282
  				speed_template_16_24_32);
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1283
  		test_cipher_speed("ecb(camellia)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1284
  				speed_template_16_24_32);
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1285
  		test_cipher_speed("cbc(camellia)", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1286
  				speed_template_16_24_32);
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1287
  		test_cipher_speed("cbc(camellia)", DECRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1288
  				speed_template_16_24_32);
02ab5a705   Noriaki TAKAMIYA   [CRYPTO] camellia...
1289
  		break;
5de8f1b56   Tan Swee Heng   [CRYPTO] tcrypt: ...
1290
1291
  	case 206:
  		test_cipher_speed("salsa20", ENCRYPT, sec, NULL, 0,
477035c2a   Sebastian Siewior   [CRYPTO] tcrypt: ...
1292
  				  speed_template_16_32);
5de8f1b56   Tan Swee Heng   [CRYPTO] tcrypt: ...
1293
  		break;
7fb7fe446   Jussi Kivilinna   crypto: tcrypt - ...
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
  	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 - ...
1307
1308
1309
1310
  		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 - ...
1311
1312
1313
1314
  		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 - ...
1315
  		break;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1316
1317
1318
1319
  	case 300:
  		/* fall through */
  
  	case 301:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1320
  		test_hash_speed("md4", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1321
1322
1323
  		if (mode > 300 && mode < 400) break;
  
  	case 302:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1324
  		test_hash_speed("md5", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1325
1326
1327
  		if (mode > 300 && mode < 400) break;
  
  	case 303:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1328
  		test_hash_speed("sha1", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1329
1330
1331
  		if (mode > 300 && mode < 400) break;
  
  	case 304:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1332
  		test_hash_speed("sha256", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1333
1334
1335
  		if (mode > 300 && mode < 400) break;
  
  	case 305:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1336
  		test_hash_speed("sha384", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1337
1338
1339
  		if (mode > 300 && mode < 400) break;
  
  	case 306:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1340
  		test_hash_speed("sha512", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1341
1342
1343
  		if (mode > 300 && mode < 400) break;
  
  	case 307:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1344
  		test_hash_speed("wp256", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1345
1346
1347
  		if (mode > 300 && mode < 400) break;
  
  	case 308:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1348
  		test_hash_speed("wp384", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1349
1350
1351
  		if (mode > 300 && mode < 400) break;
  
  	case 309:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1352
  		test_hash_speed("wp512", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1353
1354
1355
  		if (mode > 300 && mode < 400) break;
  
  	case 310:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1356
  		test_hash_speed("tgr128", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1357
1358
1359
  		if (mode > 300 && mode < 400) break;
  
  	case 311:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1360
  		test_hash_speed("tgr160", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1361
1362
1363
  		if (mode > 300 && mode < 400) break;
  
  	case 312:
e9d41164e   Herbert Xu   [CRYPTO] tcrypt: ...
1364
  		test_hash_speed("tgr192", sec, generic_hash_speed_template);
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1365
  		if (mode > 300 && mode < 400) break;
cd12fb906   Jonathan Lynch   [CRYPTO] sha256-g...
1366
1367
1368
  	case 313:
  		test_hash_speed("sha224", sec, generic_hash_speed_template);
  		if (mode > 300 && mode < 400) break;
fd4adf1a0   Adrian-Ken Rueegsegger   [CRYPTO] tcrypt: ...
1369
1370
1371
1372
1373
1374
1375
  	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: ...
1376
1377
1378
1379
1380
1381
1382
  	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 - ...
1383
1384
1385
  	case 318:
  		test_hash_speed("ghash-generic", sec, hash_speed_template_16);
  		if (mode > 300 && mode < 400) break;
e80579285   Michal Ludvig   [CRYPTO] tcrypt: ...
1386
1387
  	case 399:
  		break;
beb63da73   David S. Miller   crypto: tcrypt - ...
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
  	case 400:
  		/* 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 - ...
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
  	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);
  		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);
  		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);
  		break;
7fb7fe446   Jussi Kivilinna   crypto: tcrypt - ...
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
  	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 - ...
1522
1523
1524
1525
  		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 - ...
1526
1527
1528
1529
  		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 - ...
1530
  		break;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1531
1532
1533
  	case 1000:
  		test_available();
  		break;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1534
  	}
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1535
1536
  
  	return ret;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1537
  }
7be380f72   Herbert Xu   crypto: tcrypt - ...
1538
  static int do_alg_test(const char *alg, u32 type, u32 mask)
a873a5f1c   Steffen Klassert   crypto: tcrypt - ...
1539
  {
7be380f72   Herbert Xu   crypto: tcrypt - ...
1540
1541
  	return crypto_has_alg(alg, type, mask ?: CRYPTO_ALG_TYPE_MASK) ?
  	       0 : -ENOENT;
a873a5f1c   Steffen Klassert   crypto: tcrypt - ...
1542
  }
3af5b90bd   Kamalesh Babulal   [CRYPTO] all: Cle...
1543
  static int __init tcrypt_mod_init(void)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1544
  {
e3a4ea4fd   Mikko Herranen   [CRYPTO] tcrypt: ...
1545
  	int err = -ENOMEM;
f139cfa7c   Herbert Xu   crypto: tcrypt - ...
1546
  	int i;
e3a4ea4fd   Mikko Herranen   [CRYPTO] tcrypt: ...
1547

f139cfa7c   Herbert Xu   crypto: tcrypt - ...
1548
1549
1550
1551
1552
  	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
1553

a873a5f1c   Steffen Klassert   crypto: tcrypt - ...
1554
  	if (alg)
7be380f72   Herbert Xu   crypto: tcrypt - ...
1555
  		err = do_alg_test(alg, type, mask);
a873a5f1c   Steffen Klassert   crypto: tcrypt - ...
1556
1557
  	else
  		err = do_test(mode);
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1558
1559
1560
1561
1562
  	if (err) {
  		printk(KERN_ERR "tcrypt: one or more tests failed!
  ");
  		goto err_free_tv;
  	}
14fdf477a   Michal Ludvig   [CRYPTO] tcrypt: ...
1563

4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1564
1565
1566
1567
  	/* 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: ...
1568
1569
1570
  	 * => we don't need it in the memory, do we?
  	 *                                        -- mludvig
  	 */
4e033a6bc   Jarod Wilson   crypto: tcrypt - ...
1571
1572
  	if (!fips_enabled)
  		err = -EAGAIN;
e3a4ea4fd   Mikko Herranen   [CRYPTO] tcrypt: ...
1573

f139cfa7c   Herbert Xu   crypto: tcrypt - ...
1574
1575
1576
  err_free_tv:
  	for (i = 0; i < TVMEMSIZE && tvmem[i]; i++)
  		free_page((unsigned long)tvmem[i]);
e3a4ea4fd   Mikko Herranen   [CRYPTO] tcrypt: ...
1577
1578
  
  	return err;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1579
1580
1581
1582
1583
1584
  }
  
  /*
   * If an init function is provided, an exit function must also be provided
   * to allow module unload.
   */
3af5b90bd   Kamalesh Babulal   [CRYPTO] all: Cle...
1585
  static void __exit tcrypt_mod_fini(void) { }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1586

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

a873a5f1c   Steffen Klassert   crypto: tcrypt - ...
1590
1591
  module_param(alg, charp, 0);
  module_param(type, uint, 0);
7be380f72   Herbert Xu   crypto: tcrypt - ...
1592
  module_param(mask, uint, 0);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1593
  module_param(mode, int, 0);
ebfd9bcf1   Harald Welte   [CRYPTO]: Add cip...
1594
  module_param(sec, uint, 0);
6a17944ca   Herbert Xu   [CRYPTO]: Use CPU...
1595
1596
  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
1597
1598
1599
1600
  
  MODULE_LICENSE("GPL");
  MODULE_DESCRIPTION("Quick & dirty crypto testing module");
  MODULE_AUTHOR("James Morris <jmorris@intercode.com.au>");