crypto: tcrypt - Allow speed testing of arbitrary hash functions
This patch allows the testing of arbitrary hash functions specified by the alg module parameter by using them in mode 300 (for sync hash) and mode 400 (for async hash). For example, you could do modprobe tcrypt mode=300 alg='vmac(aes)' Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
af8e80731a
commit
8606813a6c
|
@ -1225,15 +1225,22 @@ static inline int tcrypt_test(const char *alg)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int do_test(int m)
|
static int do_test(const char *alg, u32 type, u32 mask, int m)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
switch (m) {
|
switch (m) {
|
||||||
case 0:
|
case 0:
|
||||||
|
if (alg) {
|
||||||
|
if (!crypto_has_alg(alg, type,
|
||||||
|
mask ?: CRYPTO_ALG_TYPE_MASK))
|
||||||
|
ret = -ENOENT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 1; i < 200; i++)
|
for (i = 1; i < 200; i++)
|
||||||
ret += do_test(i);
|
ret += do_test(NULL, 0, 0, i);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -1752,6 +1759,11 @@ static int do_test(int m)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 300:
|
case 300:
|
||||||
|
if (alg) {
|
||||||
|
test_hash_speed(alg, sec, generic_hash_speed_template);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* fall through */
|
/* fall through */
|
||||||
|
|
||||||
case 301:
|
case 301:
|
||||||
|
@ -1838,6 +1850,11 @@ static int do_test(int m)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 400:
|
case 400:
|
||||||
|
if (alg) {
|
||||||
|
test_ahash_speed(alg, sec, generic_hash_speed_template);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* fall through */
|
/* fall through */
|
||||||
|
|
||||||
case 401:
|
case 401:
|
||||||
|
@ -2127,12 +2144,6 @@ static int do_test(int m)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int do_alg_test(const char *alg, u32 type, u32 mask)
|
|
||||||
{
|
|
||||||
return crypto_has_alg(alg, type, mask ?: CRYPTO_ALG_TYPE_MASK) ?
|
|
||||||
0 : -ENOENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __init tcrypt_mod_init(void)
|
static int __init tcrypt_mod_init(void)
|
||||||
{
|
{
|
||||||
int err = -ENOMEM;
|
int err = -ENOMEM;
|
||||||
|
@ -2144,10 +2155,7 @@ static int __init tcrypt_mod_init(void)
|
||||||
goto err_free_tv;
|
goto err_free_tv;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alg)
|
err = do_test(alg, type, mask, mode);
|
||||||
err = do_alg_test(alg, type, mask);
|
|
||||||
else
|
|
||||||
err = do_test(mode);
|
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
printk(KERN_ERR "tcrypt: one or more tests failed!\n");
|
printk(KERN_ERR "tcrypt: one or more tests failed!\n");
|
||||||
|
|
Loading…
Reference in New Issue