Skip to content

Commit

Permalink
crypto: testmgr - Test skciphers with no IVs
Browse files Browse the repository at this point in the history
As it is an skcipher with no IV escapes testing altogether because
we only test givcipher objects.  This patch fixes the bypass logic
to test these algorithms.

Conversely, we're currently testing nivaead algorithms with IVs,
which would have deadlocked had it not been for the fact that no
nivaead algorithms have any test vectors.  This patch also fixes
that case.

Both fixes are ugly as hell, but this ugliness should hopefully
disappear once we move them into the per-type code (i.e., the
AEAD test would live in aead.c and the skcipher stuff in ablkcipher.c).

Signed-off-by: Herbert Xu <[email protected]>
  • Loading branch information
herbertx committed Feb 18, 2009
1 parent 5852ae4 commit 6fe4a28
Showing 1 changed file with 16 additions and 4 deletions.
20 changes: 16 additions & 4 deletions crypto/algboss.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
*
*/

#include <linux/crypto.h>
#include <crypto/internal/aead.h>
#include <linux/ctype.h>
#include <linux/err.h>
#include <linux/init.h>
Expand Down Expand Up @@ -206,8 +206,7 @@ static int cryptomgr_test(void *data)
u32 type = param->type;
int err = 0;

if (!((type ^ CRYPTO_ALG_TYPE_BLKCIPHER) &
CRYPTO_ALG_TYPE_BLKCIPHER_MASK) && !(type & CRYPTO_ALG_GENIV))
if (type & CRYPTO_ALG_TESTED)
goto skiptest;

err = alg_test(param->driver, param->alg, type, CRYPTO_ALG_TESTED);
Expand All @@ -223,6 +222,7 @@ static int cryptomgr_schedule_test(struct crypto_alg *alg)
{
struct task_struct *thread;
struct crypto_test_param *param;
u32 type;

if (!try_module_get(THIS_MODULE))
goto err;
Expand All @@ -233,7 +233,19 @@ static int cryptomgr_schedule_test(struct crypto_alg *alg)

memcpy(param->driver, alg->cra_driver_name, sizeof(param->driver));
memcpy(param->alg, alg->cra_name, sizeof(param->alg));
param->type = alg->cra_flags;
type = alg->cra_flags;

/* This piece of crap needs to disappear into per-type test hooks. */
if ((!((type ^ CRYPTO_ALG_TYPE_BLKCIPHER) &
CRYPTO_ALG_TYPE_BLKCIPHER_MASK) && !(type & CRYPTO_ALG_GENIV) &&
((alg->cra_flags & CRYPTO_ALG_TYPE_MASK) ==
CRYPTO_ALG_TYPE_BLKCIPHER ? alg->cra_blkcipher.ivsize :
alg->cra_ablkcipher.ivsize)) ||
(!((type ^ CRYPTO_ALG_TYPE_AEAD) & CRYPTO_ALG_TYPE_MASK) &&
alg->cra_type == &crypto_nivaead_type && alg->cra_aead.ivsize))
type |= CRYPTO_ALG_TESTED;

param->type = type;

thread = kthread_run(cryptomgr_test, param, "cryptomgr_test");
if (IS_ERR(thread))
Expand Down

0 comments on commit 6fe4a28

Please sign in to comment.