22import timeit
33from ecdsa .curves import curves
44
5+
56def do (setup_statements , statement ):
67 # extracted from timeit.py
7- t = timeit .Timer (stmt = statement ,
8- setup = "\n " .join (setup_statements ))
8+ t = timeit .Timer (stmt = statement , setup = "\n " .join (setup_statements ))
99 # determine number so that 0.2 <= total time < 2.0
1010 for i in range (1 , 10 ):
11- number = 10 ** i
11+ number = 10 ** i
1212 x = t .timeit (number )
1313 if x >= 0.2 :
1414 break
1515 return x / number
1616
17+
1718prnt_form = (
1819 "{name:>16}{sep:1} {siglen:>6} {keygen:>9{form}}{unit:1} "
1920 "{keygen_inv:>9{form_inv}} {sign:>9{form}}{unit:1} "
2021 "{sign_inv:>9{form_inv}} {verify:>9{form}}{unit:1} "
21- "{verify_inv:>9{form_inv}}" )
22+ "{verify_inv:>9{form_inv}}"
23+ )
2224
23- print (prnt_form .format (siglen = "siglen" , keygen = "keygen" , keygen_inv = "keygen/s" ,
24- sign = "sign" , sign_inv = "sign/s" , verify = "verify" ,
25- verify_inv = "verify/s" , name = "" , sep = "" , unit = "" ,
26- form = "" , form_inv = "" ))
25+ print (
26+ prnt_form .format (
27+ siglen = "siglen" ,
28+ keygen = "keygen" ,
29+ keygen_inv = "keygen/s" ,
30+ sign = "sign" ,
31+ sign_inv = "sign/s" ,
32+ verify = "verify" ,
33+ verify_inv = "verify/s" ,
34+ name = "" ,
35+ sep = "" ,
36+ unit = "" ,
37+ form = "" ,
38+ form_inv = "" ,
39+ )
40+ )
2741
2842for curve in [i .name for i in curves ]:
2943 S1 = "import six; from ecdsa import SigningKey, %s" % curve
@@ -38,24 +52,44 @@ def do(setup_statements, statement):
3852 # were changed to lazily calculate vk, we'd need to change this
3953 # benchmark to loop over S5 instead of S2
4054 keygen = do ([S1 ], S2 )
41- sign = do ([S1 ,S2 ,S3 ], S4 )
42- verf = do ([S1 ,S2 ,S3 ,S4 ,S5 ,S6 ], S7 )
55+ sign = do ([S1 , S2 , S3 ], S4 )
56+ verf = do ([S1 , S2 , S3 , S4 , S5 , S6 ], S7 )
4357 import ecdsa
58+
4459 c = getattr (ecdsa , curve )
4560 sig = ecdsa .SigningKey .generate (c ).sign (six .b ("msg" ))
46- print (prnt_form .format (
47- name = curve , sep = ":" , siglen = len (sig ), unit = "s" , keygen = keygen ,
48- keygen_inv = 1.0 / keygen , sign = sign , sign_inv = 1.0 / sign , verify = verf ,
49- verify_inv = 1.0 / verf , form = ".5f" , form_inv = ".2f" ))
61+ print (
62+ prnt_form .format (
63+ name = curve ,
64+ sep = ":" ,
65+ siglen = len (sig ),
66+ unit = "s" ,
67+ keygen = keygen ,
68+ keygen_inv = 1.0 / keygen ,
69+ sign = sign ,
70+ sign_inv = 1.0 / sign ,
71+ verify = verf ,
72+ verify_inv = 1.0 / verf ,
73+ form = ".5f" ,
74+ form_inv = ".2f" ,
75+ )
76+ )
5077
51- print ('' )
78+ print ("" )
5279
53- ecdh_form = (
54- "{name:>16}{sep:1} {ecdh:>9{form}}{unit:1} "
55- "{ecdh_inv:>9{form_inv}}" )
80+ ecdh_form = "{name:>16}{sep:1} {ecdh:>9{form}}{unit:1} {ecdh_inv:>9{form_inv}}"
5681
57- print (ecdh_form .format (ecdh = "ecdh" , ecdh_inv = "ecdh/s" , name = "" , sep = "" ,
58- unit = "" , form = "" , form_inv = "" ))
82+ print (
83+ ecdh_form .format (
84+ ecdh = "ecdh" ,
85+ ecdh_inv = "ecdh/s" ,
86+ name = "" ,
87+ sep = "" ,
88+ unit = "" ,
89+ form = "" ,
90+ form_inv = "" ,
91+ )
92+ )
5993
6094for curve in [i .name for i in curves ]:
6195 S1 = "from ecdsa import SigningKey, ECDH, {0}" .format (curve )
@@ -64,6 +98,14 @@ def do(setup_statements, statement):
6498 S4 = "ecdh = ECDH(private_key=our, public_key=remote)"
6599 S5 = "ecdh.generate_sharedsecret_bytes()"
66100 ecdh = do ([S1 , S2 , S3 , S4 ], S5 )
67- print (ecdh_form .format (
68- name = curve , sep = ":" , unit = "s" , form = ".5f" , form_inv = ".2f" ,
69- ecdh = ecdh , ecdh_inv = 1.0 / ecdh ))
101+ print (
102+ ecdh_form .format (
103+ name = curve ,
104+ sep = ":" ,
105+ unit = "s" ,
106+ form = ".5f" ,
107+ form_inv = ".2f" ,
108+ ecdh = ecdh ,
109+ ecdh_inv = 1.0 / ecdh ,
110+ )
111+ )
0 commit comments