Skip to content

Commit eb24b23

Browse files
committed
more test speed-ups
1 parent 7d5f5f8 commit eb24b23

File tree

8 files changed

+167
-44
lines changed

8 files changed

+167
-44
lines changed

cosmic-ray.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
module-path = "src"
33
python-version = ""
44
timeout = 30.0
5-
exclude-modules = ['src/ecdsa/_version.py', 'src/ecdsa/test*']
5+
exclude-modules = ['src/ecdsa/_version.py', 'src/ecdsa/test*', 'src/ecdsa/_rwlock.py']
66
test-command = "pytest -x --fast -m 'not slow' src/"
77

88
[cosmic-ray.execution-engine]

src/ecdsa/test_ecdsa.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,10 @@ def st_random_gen_key_msg_nonce(draw):
515515

516516

517517
SIG_VER_SETTINGS = dict(HYP_SETTINGS)
518-
SIG_VER_SETTINGS["max_examples"] = 10
518+
if "--fast" in sys.argv:
519+
SIG_VER_SETTINGS["max_examples"] = 1
520+
else:
521+
SIG_VER_SETTINGS["max_examples"] = 10
519522

520523

521524
@settings(**SIG_VER_SETTINGS)

src/ecdsa/test_ellipticcurve.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141

4242

4343
HYP_SLOW_SETTINGS = dict(HYP_SETTINGS)
44-
HYP_SLOW_SETTINGS["max_examples"] = 10
44+
HYP_SLOW_SETTINGS["max_examples"] = 2
4545

4646

4747
@settings(**HYP_SLOW_SETTINGS)

src/ecdsa/test_jacobi.py

Lines changed: 63 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import pickle
2+
import sys
23

34
try:
45
import unittest2 as unittest
@@ -19,6 +20,13 @@
1920
from .numbertheory import inverse_mod
2021

2122

23+
SLOW_SETTINGS = {}
24+
if "--fast" in sys.argv:
25+
SLOW_SETTINGS["max_examples"] = 2
26+
else:
27+
SLOW_SETTINGS["max_examples"] = 10
28+
29+
2230
class TestJacobi(unittest.TestCase):
2331
def test___init__(self):
2432
curve = object()
@@ -186,7 +194,7 @@ def test_compare_double_with_multiply(self):
186194

187195
self.assertEqual(dbl, mlpl)
188196

189-
@settings(max_examples=10)
197+
@settings(**SLOW_SETTINGS)
190198
@given(
191199
st.integers(
192200
min_value=0, max_value=int(generator_brainpoolp160r1.order())
@@ -201,7 +209,7 @@ def test_multiplications(self, mul):
201209
self.assertEqual((pj.x(), pj.y()), (pw.x(), pw.y()))
202210
self.assertEqual(pj, pw)
203211

204-
@settings(max_examples=10)
212+
@settings(**SLOW_SETTINGS)
205213
@given(
206214
st.integers(
207215
min_value=0, max_value=int(generator_brainpoolp160r1.order())
@@ -218,7 +226,7 @@ def test_precompute(self, mul):
218226

219227
self.assertEqual(a, b)
220228

221-
@settings(max_examples=10)
229+
@settings(**SLOW_SETTINGS)
222230
@given(
223231
st.integers(
224232
min_value=1, max_value=int(generator_brainpoolp160r1.order())
@@ -237,7 +245,7 @@ def test_add_scaled_points(self, a_mul, b_mul):
237245

238246
self.assertEqual(c, j_g * (a_mul + b_mul))
239247

240-
@settings(max_examples=10)
248+
@settings(**SLOW_SETTINGS)
241249
@given(
242250
st.integers(
243251
min_value=1, max_value=int(generator_brainpoolp160r1.order())
@@ -269,7 +277,8 @@ def test_add_one_scaled_point(self, a_mul, b_mul, new_z):
269277

270278
self.assertEqual(c, j_g * (a_mul + b_mul))
271279

272-
@settings(max_examples=10)
280+
@pytest.mark.slow
281+
@settings(**SLOW_SETTINGS)
273282
@given(
274283
st.integers(
275284
min_value=1, max_value=int(generator_brainpoolp160r1.order())
@@ -311,7 +320,31 @@ def test_add_same_scale_points(self, a_mul, b_mul, new_z):
311320

312321
self.assertEqual(c, j_g * (a_mul + b_mul))
313322

314-
@settings(max_examples=10)
323+
def test_add_same_scale_points_static(self):
324+
j_g = generator_brainpoolp160r1
325+
p = curve_brainpoolp160r1.p()
326+
a = j_g * 11
327+
a.scale()
328+
z1 = 13
329+
x = PointJacobi(
330+
curve_brainpoolp160r1,
331+
a.x() * z1 ** 2 % p,
332+
a.y() * z1 ** 3 % p,
333+
z1,
334+
)
335+
y = PointJacobi(
336+
curve_brainpoolp160r1,
337+
a.x() * z1 ** 2 % p,
338+
a.y() * z1 ** 3 % p,
339+
z1,
340+
)
341+
342+
c = a + a
343+
344+
self.assertEqual(c, x + y)
345+
346+
@pytest.mark.slow
347+
@settings(**SLOW_SETTINGS)
315348
@given(
316349
st.integers(
317350
min_value=1, max_value=int(generator_brainpoolp160r1.order())
@@ -362,6 +395,30 @@ def test_add_different_scale_points(self, a_mul, b_mul, new_z):
362395

363396
self.assertEqual(c, j_g * (a_mul + b_mul))
364397

398+
def test_add_different_scale_points_static(self):
399+
j_g = generator_brainpoolp160r1
400+
p = curve_brainpoolp160r1.p()
401+
a = j_g * 11
402+
a.scale()
403+
z1 = 13
404+
x = PointJacobi(
405+
curve_brainpoolp160r1,
406+
a.x() * z1 ** 2 % p,
407+
a.y() * z1 ** 3 % p,
408+
z1,
409+
)
410+
z2 = 29
411+
y = PointJacobi(
412+
curve_brainpoolp160r1,
413+
a.x() * z2 ** 2 % p,
414+
a.y() * z2 ** 3 % p,
415+
z2,
416+
)
417+
418+
c = a + a
419+
420+
self.assertEqual(c, x + y)
421+
365422
def test_add_point_3_times(self):
366423
j_g = PointJacobi.from_affine(generator_256)
367424

src/ecdsa/test_malformed_sigs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ def st_fuzzed_sig(draw, keys_and_sigs):
150150

151151
slow_params = dict(params)
152152
if "--fast" in sys.argv:
153-
slow_params["max_examples"] = 2
153+
slow_params["max_examples"] = 1
154154
else:
155155
slow_params["max_examples"] = 10
156156

@@ -311,7 +311,7 @@ def test_random_der_as_signature(params, der):
311311
verifying_key.verify(der, example_data, sigdecode=sigdecode_der)
312312

313313

314-
@settings(**params)
314+
@settings(**slow_params)
315315
@given(st.sampled_from(keys_and_sigs), st.binary(max_size=1024 ** 2))
316316
@example(
317317
keys_and_sigs[0], encode_sequence(encode_integer(0), encode_integer(0))

src/ecdsa/test_numbertheory.py

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ def test_next_prime_with_nums_less_2(val):
6868
assert next_prime(val) == 2
6969

7070

71+
@pytest.mark.slow
7172
@pytest.mark.parametrize("prime", smallprimes)
7273
def test_square_root_mod_prime_for_small_primes(prime):
7374
squares = set()
@@ -85,6 +86,32 @@ def test_square_root_mod_prime_for_small_primes(prime):
8586
square_root_mod_prime(nonsquare, prime)
8687

8788

89+
def test_square_root_mod_prime_for_2():
90+
a = square_root_mod_prime(1, 2)
91+
assert a == 1
92+
93+
94+
def test_square_root_mod_prime_for_small_prime():
95+
root = square_root_mod_prime(98 ** 2 % 101, 101)
96+
assert root * root % 101 == 9
97+
98+
99+
def test_square_root_mod_prime_for_p_congruent_5():
100+
p = 13
101+
assert p % 8 == 5
102+
103+
root = square_root_mod_prime(3, p)
104+
assert root * root % p == 3
105+
106+
107+
def test_square_root_mod_prime_for_p_congruent_5_large_d():
108+
p = 29
109+
assert p % 8 == 5
110+
111+
root = square_root_mod_prime(4, p)
112+
assert root * root % p == 4
113+
114+
88115
@st.composite
89116
def st_two_nums_rel_prime(draw):
90117
# 521-bit is the biggest curve we operate on, use 1024 for a bit
@@ -209,7 +236,7 @@ def st_comp_no_com_fac(draw):
209236

210237
HYP_SLOW_SETTINGS = dict(HYP_SETTINGS)
211238
if "--fast" in sys.argv:
212-
HYP_SLOW_SETTINGS["max_examples"] = 2
239+
HYP_SLOW_SETTINGS["max_examples"] = 1
213240
else:
214241
HYP_SLOW_SETTINGS["max_examples"] = 20
215242

@@ -292,7 +319,8 @@ def test_square_root_mod_prime(self, vals):
292319
calc = square_root_mod_prime(square, prime)
293320
assert calc * calc % prime == square
294321

295-
@settings(**HYP_SETTINGS)
322+
@pytest.mark.slow
323+
@settings(**HYP_SLOW_SETTINGS)
296324
@given(st.integers(min_value=1, max_value=10 ** 12))
297325
@example(265399 * 1526929)
298326
@example(373297 ** 2 * 553991)
@@ -303,7 +331,33 @@ def test_factorization(self, num):
303331
mult *= i[0] ** i[1]
304332
assert mult == num
305333

306-
@settings(**HYP_SETTINGS)
334+
def test_factorisation_smallprimes(self):
335+
exp = 101 * 103
336+
assert 101 in smallprimes
337+
assert 103 in smallprimes
338+
factors = factorization(exp)
339+
mult = 1
340+
for i in factors:
341+
mult *= i[0] ** i[1]
342+
assert mult == exp
343+
344+
def test_factorisation_not_smallprimes(self):
345+
exp = 1231 * 1237
346+
assert 1231 not in smallprimes
347+
assert 1237 not in smallprimes
348+
factors = factorization(exp)
349+
mult = 1
350+
for i in factors:
351+
mult *= i[0] ** i[1]
352+
assert mult == exp
353+
354+
def test_jacobi_with_zero(self):
355+
assert jacobi(0, 3) == 0
356+
357+
def test_jacobi_with_one(self):
358+
assert jacobi(1, 3) == 1
359+
360+
@settings(**HYP_SLOW_SETTINGS)
307361
@given(st.integers(min_value=3, max_value=1000).filter(lambda x: x % 2))
308362
def test_jacobi(self, mod):
309363
if is_prime(mod):
@@ -322,7 +376,7 @@ def test_jacobi(self, mod):
322376
c *= jacobi(a, i[0]) ** i[1]
323377
assert c == jacobi(a, mod)
324378

325-
@settings(**HYP_SETTINGS)
379+
@settings(**HYP_SLOW_SETTINGS)
326380
@given(st_two_nums_rel_prime())
327381
def test_inverse_mod(self, nums):
328382
num, mod = nums

0 commit comments

Comments
 (0)