summaryrefslogtreecommitdiff
path: root/src/pycryptopp/bench/bench_ciphers.py
blob: c8ee6b963e5a9055313ad8704accfe83def6bd76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from pycryptopp.cipher import aes, xsalsa20

from common import insecurerandstr, rep_bench, print_bench_footer

UNITS_PER_SECOND = 10**9

class BenchCrypt(object):
    def __init__(self, klass, keysize):
        self.klass = klass
        self.keysize = keysize

    def __repr__(self):
        return "<%s-%d>" % (self.klass.__name__, self.keysize*8)

    def crypt_init(self, N):
        self.msg = insecurerandstr(N)
        self.key = insecurerandstr(self.keysize)

    def crypt(self, N):
        cryptor = self.klass(self.key)
        cryptor.process(self.msg)
        
def bench_ciphers(MAXTIME):
    for (klass, keysize) in [
        (aes.AES, 16),
        (aes.AES, 32),
        (xsalsa20.XSalsa20, 32),
        ]:
        ob = BenchCrypt(klass, keysize)
        print ob
        for (legend, size) in [
            ("small (%d B)",  1000),
            ("medium (%d B)",  10000),
            ("large (%d B)",  100000),
            ]:
            print legend % size
            rep_bench(ob.crypt, size, UNITS_PER_SECOND=UNITS_PER_SECOND, MAXTIME=MAXTIME, MAXREPS=100, initfunc=ob.crypt_init)
            print

    print "nanoseconds per byte crypted"
    print_bench_footer(UNITS_PER_SECOND=UNITS_PER_SECOND)
    print

def bench(MAXTIME=10.0):
    bench_ciphers(MAXTIME)

if __name__ == '__main__':
    bench()