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,46 @@ 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
5380ecdh_form = (
54- "{name:>16}{sep:1} {ecdh:>9{form}}{unit:1} "
55- "{ecdh_inv:>9{form_inv}}" )
81+ "{name:>16}{sep:1} {ecdh:>9{form}}{unit:1} " "{ecdh_inv:>9{form_inv}}"
82+ )
5683
57- print (ecdh_form .format (ecdh = "ecdh" , ecdh_inv = "ecdh/s" , name = "" , sep = "" ,
58- unit = "" , form = "" , form_inv = "" ))
84+ print (
85+ ecdh_form .format (
86+ ecdh = "ecdh" ,
87+ ecdh_inv = "ecdh/s" ,
88+ name = "" ,
89+ sep = "" ,
90+ unit = "" ,
91+ form = "" ,
92+ form_inv = "" ,
93+ )
94+ )
5995
6096for curve in [i .name for i in curves ]:
6197 S1 = "from ecdsa import SigningKey, ECDH, {0}" .format (curve )
@@ -64,6 +100,14 @@ def do(setup_statements, statement):
64100 S4 = "ecdh = ECDH(private_key=our, public_key=remote)"
65101 S5 = "ecdh.generate_sharedsecret_bytes()"
66102 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 ))
103+ print (
104+ ecdh_form .format (
105+ name = curve ,
106+ sep = ":" ,
107+ unit = "s" ,
108+ form = ".5f" ,
109+ form_inv = ".2f" ,
110+ ecdh = ecdh ,
111+ ecdh_inv = 1.0 / ecdh ,
112+ )
113+ )
0 commit comments