Skip to content

Commit

Permalink
crypto: testmgr - test skciphers with unaligned buffers
Browse files Browse the repository at this point in the history
This patch adds unaligned buffer tests for blkciphers.

The first new test is with one byte offset and the second test checks if
cra_alignmask for driver is big enough; for example, for testing a case
where cra_alignmask is set to 7, but driver really needs buffers to be
aligned to 16 bytes.

Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
  • Loading branch information
jkivilin authored and herbertx committed Jun 21, 2013
1 parent 5714758 commit 3a338f2
Showing 1 changed file with 29 additions and 4 deletions.
33 changes: 29 additions & 4 deletions crypto/testmgr.c
Original file line number Diff line number Diff line change
Expand Up @@ -820,7 +820,7 @@ static int test_cipher(struct crypto_cipher *tfm, int enc,

static int __test_skcipher(struct crypto_ablkcipher *tfm, int enc,
struct cipher_testvec *template, unsigned int tcount,
const bool diff_dst)
const bool diff_dst, const int align_offset)
{
const char *algo =
crypto_tfm_alg_driver_name(crypto_ablkcipher_tfm(tfm));
Expand Down Expand Up @@ -876,10 +876,12 @@ static int __test_skcipher(struct crypto_ablkcipher *tfm, int enc,
j++;

ret = -EINVAL;
if (WARN_ON(template[i].ilen > PAGE_SIZE))
if (WARN_ON(align_offset + template[i].ilen >
PAGE_SIZE))
goto out;

data = xbuf[0];
data += align_offset;
memcpy(data, template[i].input, template[i].ilen);

crypto_ablkcipher_clear_flags(tfm, ~0);
Expand All @@ -900,6 +902,7 @@ static int __test_skcipher(struct crypto_ablkcipher *tfm, int enc,
sg_init_one(&sg[0], data, template[i].ilen);
if (diff_dst) {
data = xoutbuf[0];
data += align_offset;
sg_init_one(&sgout[0], data, template[i].ilen);
}

Expand Down Expand Up @@ -941,6 +944,9 @@ static int __test_skcipher(struct crypto_ablkcipher *tfm, int enc,

j = 0;
for (i = 0; i < tcount; i++) {
/* alignment tests are only done with continuous buffers */
if (align_offset != 0)
break;

if (template[i].iv)
memcpy(iv, template[i].iv, MAX_IVLEN);
Expand Down Expand Up @@ -1075,15 +1081,34 @@ static int __test_skcipher(struct crypto_ablkcipher *tfm, int enc,
static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
struct cipher_testvec *template, unsigned int tcount)
{
unsigned int alignmask;
int ret;

/* test 'dst == src' case */
ret = __test_skcipher(tfm, enc, template, tcount, false);
ret = __test_skcipher(tfm, enc, template, tcount, false, 0);
if (ret)
return ret;

/* test 'dst != src' case */
return __test_skcipher(tfm, enc, template, tcount, true);
ret = __test_skcipher(tfm, enc, template, tcount, true, 0);
if (ret)
return ret;

/* test unaligned buffers, check with one byte offset */
ret = __test_skcipher(tfm, enc, template, tcount, true, 1);
if (ret)
return ret;

alignmask = crypto_tfm_alg_alignmask(&tfm->base);
if (alignmask) {
/* Check if alignment mask for tfm is correctly set. */
ret = __test_skcipher(tfm, enc, template, tcount, true,
alignmask + 1);
if (ret)
return ret;
}

return 0;
}

static int test_comp(struct crypto_comp *tfm, struct comp_testvec *ctemplate,
Expand Down

0 comments on commit 3a338f2

Please sign in to comment.