Add benchmarks for block ciphers.
authorrasky <rasky@38d2e660-2303-0410-9eaa-f027e97ec537>
Thu, 30 Sep 2010 14:18:35 +0000 (14:18 +0000)
committerrasky <rasky@38d2e660-2303-0410-9eaa-f027e97ec537>
Thu, 30 Sep 2010 14:18:35 +0000 (14:18 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4390 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/sec/benchmarks.c
bertos/sec/benchmarks.h

index 727697d3fba1ec9bb6afc09f5abd93842ee1fddf..92c99089364658bb036e894b04ad8b78fbec16fd 100644 (file)
@@ -1,5 +1,4 @@
 #include "benchmarks.h"
-#include <sec/hash.h>
 #include <drv/timer.h>
 #include <string.h>
 
@@ -31,8 +30,10 @@ void prng_benchmark(PRNG *prng, const char *hname, int numbytes)
        prng_reseed(prng, buf);
 
        ticks_t t = timer_clock();
+       enum { CYCLES = 2048 };
 
-       for (int j=0;j<2048;++j) {
+       for (int j=0;j<CYCLES;++j)
+       {
                for (int i=0; i<(numbytes+511)/512-1; ++i)
                        prng_generate(prng, buf, 512);
                if (numbytes % 512)
@@ -41,8 +42,38 @@ void prng_benchmark(PRNG *prng, const char *hname, int numbytes)
 
        t = timer_clock() - t;
 
-       utime_t usec = ticks_to_us(t) / 2048;
+       utime_t usec = ticks_to_us(t) / CYCLES;
        kprintf("%s @ %ldMhz: %s generation of %d random bytes: %lu.%lu ms\n", CPU_CORE_NAME, CPU_FREQ/1000000, hname, numbytes, (usec/1000), (usec % 1000));
        kprintf("Sample of random data:\n");
        kdump(buf, MIN(numbytes, 64));
 }
+
+void cipher_benchmark(BlockCipher *c, const char *cname, int numbytes)
+{
+       memset(buf, 0x12, sizeof(buf));
+
+       ASSERT(sizeof(buf) >= cipher_key_len(c));
+       cipher_set_key(c, buf);
+
+       uint8_t iv[cipher_block_len(c)];
+       memset(iv, 0, sizeof(iv));
+
+       ticks_t t = timer_clock();
+       enum { CYCLES = 64 };
+
+       for (int j=0;j<CYCLES;++j)
+       {
+               cipher_cbc_begin(c, iv);
+               int numblocks = (numbytes / cipher_block_len(c)) + 1;
+               for (int i=0; i<numblocks; ++i)
+                       cipher_cbc_encrypt(c, buf);
+       }
+
+       t = timer_clock() - t;
+
+       utime_t usec = ticks_to_us(t) / CYCLES;
+       kprintf("%s @ %ldMhz: Encryption with %s-CBC of %d bytes: %lu.%lu ms\n",
+                       CPU_CORE_NAME, CPU_FREQ/1000000,
+                       cname, numbytes,
+                       (usec/1000), (usec % 1000));
+}
index 47f45ffe9d3ab751c4fb6833123d64b0c2dc1951..23d078f81a8a323f679cd822147ff56675d72706 100644 (file)
@@ -3,8 +3,10 @@
 
 #include <sec/hash.h>
 #include <sec/prng.h>
+#include <sec/cipher.h>
 
 void hash_benchmark(Hash *h, const char *hname, int numk);
 void prng_benchmark(PRNG *prng, const char *hname, int numk);
+void cipher_benchmark(BlockCipher *c, const char *cname, int msg_len);
 
 #endif /* SEC_BENCHMARKS_H */