Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 30578
b: refs/heads/master
c: e805792
h: refs/heads/master
v: v3
  • Loading branch information
Michal Ludvig authored and Herbert Xu committed Jun 26, 2006
1 parent 505ac5b commit 7e04f90
Show file tree
Hide file tree
Showing 3 changed files with 207 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 14fdf477a7e3ff54f8e67fe506dd2677a36c56e4
refs/heads/master: e805792851bcb0bb42f0c8a352be64564c13e374
170 changes: 170 additions & 0 deletions trunk/crypto/tcrypt.c
Original file line number Diff line number Diff line change
Expand Up @@ -570,6 +570,122 @@ static void test_cipher_speed(char *algo, int mode, int enc, unsigned int sec,
crypto_free_tfm(tfm);
}

static void test_digest_jiffies(struct crypto_tfm *tfm, char *p, int blen,
int plen, char *out, int sec)
{
struct scatterlist sg[1];
unsigned long start, end;
int bcount, pcount;

for (start = jiffies, end = start + sec * HZ, bcount = 0;
time_before(jiffies, end); bcount++) {
crypto_digest_init(tfm);
for (pcount = 0; pcount < blen; pcount += plen) {
sg_set_buf(sg, p + pcount, plen);
crypto_digest_update(tfm, sg, 1);
}
/* we assume there is enough space in 'out' for the result */
crypto_digest_final(tfm, out);
}

printk("%6u opers/sec, %9lu bytes/sec\n",
bcount / sec, ((long)bcount * blen) / sec);

return;
}

static void test_digest_cycles(struct crypto_tfm *tfm, char *p, int blen,
int plen, char *out)
{
struct scatterlist sg[1];
unsigned long cycles = 0;
int i, pcount;

local_bh_disable();
local_irq_disable();

/* Warm-up run. */
for (i = 0; i < 4; i++) {
crypto_digest_init(tfm);
for (pcount = 0; pcount < blen; pcount += plen) {
sg_set_buf(sg, p + pcount, plen);
crypto_digest_update(tfm, sg, 1);
}
crypto_digest_final(tfm, out);
}

/* The real thing. */
for (i = 0; i < 8; i++) {
cycles_t start, end;

crypto_digest_init(tfm);

start = get_cycles();

for (pcount = 0; pcount < blen; pcount += plen) {
sg_set_buf(sg, p + pcount, plen);
crypto_digest_update(tfm, sg, 1);
}
crypto_digest_final(tfm, out);

end = get_cycles();

cycles += end - start;
}

local_irq_enable();
local_bh_enable();

printk("%6lu cycles/operation, %4lu cycles/byte\n",
cycles / 8, cycles / (8 * blen));

return;
}

static void test_digest_speed(char *algo, unsigned int sec,
struct digest_speed *speed)
{
struct crypto_tfm *tfm;
char output[1024];
int i;

printk("\ntesting speed of %s\n", algo);

tfm = crypto_alloc_tfm(algo, 0);

if (tfm == NULL) {
printk("failed to load transform for %s\n", algo);
return;
}

if (crypto_tfm_alg_digestsize(tfm) > sizeof(output)) {
printk("digestsize(%u) > outputbuffer(%zu)\n",
crypto_tfm_alg_digestsize(tfm), sizeof(output));
goto out;
}

for (i = 0; speed[i].blen != 0; i++) {
if (speed[i].blen > TVMEMSIZE) {
printk("template (%u) too big for tvmem (%u)\n",
speed[i].blen, TVMEMSIZE);
goto out;
}

printk("test%3u (%5u byte blocks,%5u bytes per update,%4u updates): ",
i, speed[i].blen, speed[i].plen, speed[i].blen / speed[i].plen);

memset(tvmem, 0xff, speed[i].blen);

if (sec)
test_digest_jiffies(tfm, tvmem, speed[i].blen, speed[i].plen, output, sec);
else
test_digest_cycles(tfm, tvmem, speed[i].blen, speed[i].plen, output);
}

out:
crypto_free_tfm(tfm);
}

static void test_deflate(void)
{
unsigned int i;
Expand Down Expand Up @@ -1086,6 +1202,60 @@ static void do_test(void)
des_speed_template);
break;

case 300:
/* fall through */

case 301:
test_digest_speed("md4", sec, generic_digest_speed_template);
if (mode > 300 && mode < 400) break;

case 302:
test_digest_speed("md5", sec, generic_digest_speed_template);
if (mode > 300 && mode < 400) break;

case 303:
test_digest_speed("sha1", sec, generic_digest_speed_template);
if (mode > 300 && mode < 400) break;

case 304:
test_digest_speed("sha256", sec, generic_digest_speed_template);
if (mode > 300 && mode < 400) break;

case 305:
test_digest_speed("sha384", sec, generic_digest_speed_template);
if (mode > 300 && mode < 400) break;

case 306:
test_digest_speed("sha512", sec, generic_digest_speed_template);
if (mode > 300 && mode < 400) break;

case 307:
test_digest_speed("wp256", sec, generic_digest_speed_template);
if (mode > 300 && mode < 400) break;

case 308:
test_digest_speed("wp384", sec, generic_digest_speed_template);
if (mode > 300 && mode < 400) break;

case 309:
test_digest_speed("wp512", sec, generic_digest_speed_template);
if (mode > 300 && mode < 400) break;

case 310:
test_digest_speed("tgr128", sec, generic_digest_speed_template);
if (mode > 300 && mode < 400) break;

case 311:
test_digest_speed("tgr160", sec, generic_digest_speed_template);
if (mode > 300 && mode < 400) break;

case 312:
test_digest_speed("tgr192", sec, generic_digest_speed_template);
if (mode > 300 && mode < 400) break;

case 399:
break;

case 1000:
test_available();
break;
Expand Down
36 changes: 36 additions & 0 deletions trunk/crypto/tcrypt.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ struct cipher_speed {
unsigned int blen;
};

struct digest_speed {
unsigned int blen; /* buffer length */
unsigned int plen; /* per-update length */
};

/*
* MD4 test vectors from RFC1320
*/
Expand Down Expand Up @@ -2975,4 +2980,35 @@ static struct cipher_speed des_speed_template[] = {
{ .klen = 0, .blen = 0, }
};

/*
* Digest speed tests
*/
static struct digest_speed generic_digest_speed_template[] = {
{ .blen = 16, .plen = 16, },
{ .blen = 64, .plen = 16, },
{ .blen = 64, .plen = 64, },
{ .blen = 256, .plen = 16, },
{ .blen = 256, .plen = 64, },
{ .blen = 256, .plen = 256, },
{ .blen = 1024, .plen = 16, },
{ .blen = 1024, .plen = 256, },
{ .blen = 1024, .plen = 1024, },
{ .blen = 2048, .plen = 16, },
{ .blen = 2048, .plen = 256, },
{ .blen = 2048, .plen = 1024, },
{ .blen = 2048, .plen = 2048, },
{ .blen = 4096, .plen = 16, },
{ .blen = 4096, .plen = 256, },
{ .blen = 4096, .plen = 1024, },
{ .blen = 4096, .plen = 4096, },
{ .blen = 8192, .plen = 16, },
{ .blen = 8192, .plen = 256, },
{ .blen = 8192, .plen = 1024, },
{ .blen = 8192, .plen = 4096, },
{ .blen = 8192, .plen = 8192, },

/* End marker */
{ .blen = 0, .plen = 0, }
};

#endif /* _CRYPTO_TCRYPT_H */

0 comments on commit 7e04f90

Please sign in to comment.