Skip to content

Commit 0dc17f0

Browse files
committed
use smaller parameters for hypothesis tests to make them faster
the math is the same for NIST P-256 and Brainpool 160r1 curves, but since the P-256 is larger, it takes longer to process, it in turn causes random timeouts (#206) decrease the size of numbers to hopefully make it pass CI more consistently
1 parent e5a6c0b commit 0dc17f0

File tree

1 file changed

+75
-34
lines changed

1 file changed

+75
-34
lines changed

src/ecdsa/test_jacobi.py

Lines changed: 75 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,13 @@
99
from hypothesis import given, assume, settings, example
1010

1111
from .ellipticcurve import CurveFp, Point, PointJacobi, INFINITY
12-
from .ecdsa import generator_256, curve_256, generator_224
12+
from .ecdsa import (
13+
generator_256,
14+
curve_256,
15+
generator_224,
16+
generator_brainpoolp160r1,
17+
curve_brainpoolp160r1,
18+
)
1319
from .numbertheory import inverse_mod
1420

1521

@@ -181,9 +187,13 @@ def test_compare_double_with_multiply(self):
181187
self.assertEqual(dbl, mlpl)
182188

183189
@settings(max_examples=10)
184-
@given(st.integers(min_value=0, max_value=int(generator_256.order())))
190+
@given(
191+
st.integers(
192+
min_value=0, max_value=int(generator_brainpoolp160r1.order())
193+
)
194+
)
185195
def test_multiplications(self, mul):
186-
pj = PointJacobi.from_affine(generator_256)
196+
pj = PointJacobi.from_affine(generator_brainpoolp160r1)
187197
pw = pj.to_affine() * mul
188198

189199
pj = pj * mul
@@ -192,12 +202,16 @@ def test_multiplications(self, mul):
192202
self.assertEqual(pj, pw)
193203

194204
@settings(max_examples=10)
195-
@given(st.integers(min_value=0, max_value=int(generator_256.order())))
205+
@given(
206+
st.integers(
207+
min_value=0, max_value=int(generator_brainpoolp160r1.order())
208+
)
209+
)
196210
@example(0)
197-
@example(int(generator_256.order()))
211+
@example(int(generator_brainpoolp160r1.order()))
198212
def test_precompute(self, mul):
199-
precomp = PointJacobi.from_affine(generator_256, True)
200-
pj = PointJacobi.from_affine(generator_256)
213+
precomp = PointJacobi.from_affine(generator_brainpoolp160r1, True)
214+
pj = PointJacobi.from_affine(generator_brainpoolp160r1)
201215

202216
a = precomp * mul
203217
b = pj * mul
@@ -206,12 +220,16 @@ def test_precompute(self, mul):
206220

207221
@settings(max_examples=10)
208222
@given(
209-
st.integers(min_value=1, max_value=int(generator_256.order())),
210-
st.integers(min_value=1, max_value=int(generator_256.order())),
223+
st.integers(
224+
min_value=1, max_value=int(generator_brainpoolp160r1.order())
225+
),
226+
st.integers(
227+
min_value=1, max_value=int(generator_brainpoolp160r1.order())
228+
),
211229
)
212230
@example(3, 3)
213231
def test_add_scaled_points(self, a_mul, b_mul):
214-
j_g = PointJacobi.from_affine(generator_256)
232+
j_g = PointJacobi.from_affine(generator_brainpoolp160r1)
215233
a = PointJacobi.from_affine(j_g * a_mul)
216234
b = PointJacobi.from_affine(j_g * b_mul)
217235

@@ -221,23 +239,30 @@ def test_add_scaled_points(self, a_mul, b_mul):
221239

222240
@settings(max_examples=10)
223241
@given(
224-
st.integers(min_value=1, max_value=int(generator_256.order())),
225-
st.integers(min_value=1, max_value=int(generator_256.order())),
226-
st.integers(min_value=1, max_value=int(curve_256.p() - 1)),
242+
st.integers(
243+
min_value=1, max_value=int(generator_brainpoolp160r1.order())
244+
),
245+
st.integers(
246+
min_value=1, max_value=int(generator_brainpoolp160r1.order())
247+
),
248+
st.integers(min_value=1, max_value=int(curve_brainpoolp160r1.p() - 1)),
227249
)
228250
def test_add_one_scaled_point(self, a_mul, b_mul, new_z):
229-
j_g = PointJacobi.from_affine(generator_256)
251+
j_g = PointJacobi.from_affine(generator_brainpoolp160r1)
230252
a = PointJacobi.from_affine(j_g * a_mul)
231253
b = PointJacobi.from_affine(j_g * b_mul)
232254

233-
p = curve_256.p()
255+
p = curve_brainpoolp160r1.p()
234256

235257
assume(inverse_mod(new_z, p))
236258

237259
new_zz = new_z * new_z % p
238260

239261
b = PointJacobi(
240-
curve_256, b.x() * new_zz % p, b.y() * new_zz * new_z % p, new_z
262+
curve_brainpoolp160r1,
263+
b.x() * new_zz % p,
264+
b.y() * new_zz * new_z % p,
265+
new_z,
241266
)
242267

243268
c = a + b
@@ -246,30 +271,40 @@ def test_add_one_scaled_point(self, a_mul, b_mul, new_z):
246271

247272
@settings(max_examples=10)
248273
@given(
249-
st.integers(min_value=1, max_value=int(generator_256.order())),
250-
st.integers(min_value=1, max_value=int(generator_256.order())),
251-
st.integers(min_value=1, max_value=int(curve_256.p() - 1)),
274+
st.integers(
275+
min_value=1, max_value=int(generator_brainpoolp160r1.order())
276+
),
277+
st.integers(
278+
min_value=1, max_value=int(generator_brainpoolp160r1.order())
279+
),
280+
st.integers(min_value=1, max_value=int(curve_brainpoolp160r1.p() - 1)),
252281
)
253282
@example(1, 1, 1)
254283
@example(3, 3, 3)
255-
@example(2, int(generator_256.order() - 2), 1)
256-
@example(2, int(generator_256.order() - 2), 3)
284+
@example(2, int(generator_brainpoolp160r1.order() - 2), 1)
285+
@example(2, int(generator_brainpoolp160r1.order() - 2), 3)
257286
def test_add_same_scale_points(self, a_mul, b_mul, new_z):
258-
j_g = PointJacobi.from_affine(generator_256)
287+
j_g = PointJacobi.from_affine(generator_brainpoolp160r1)
259288
a = PointJacobi.from_affine(j_g * a_mul)
260289
b = PointJacobi.from_affine(j_g * b_mul)
261290

262-
p = curve_256.p()
291+
p = curve_brainpoolp160r1.p()
263292

264293
assume(inverse_mod(new_z, p))
265294

266295
new_zz = new_z * new_z % p
267296

268297
a = PointJacobi(
269-
curve_256, a.x() * new_zz % p, a.y() * new_zz * new_z % p, new_z
298+
curve_brainpoolp160r1,
299+
a.x() * new_zz % p,
300+
a.y() * new_zz * new_z % p,
301+
new_z,
270302
)
271303
b = PointJacobi(
272-
curve_256, b.x() * new_zz % p, b.y() * new_zz * new_z % p, new_z
304+
curve_brainpoolp160r1,
305+
b.x() * new_zz % p,
306+
b.y() * new_zz * new_z % p,
307+
new_z,
273308
)
274309

275310
c = a + b
@@ -278,25 +313,31 @@ def test_add_same_scale_points(self, a_mul, b_mul, new_z):
278313

279314
@settings(max_examples=14)
280315
@given(
281-
st.integers(min_value=1, max_value=int(generator_256.order())),
282-
st.integers(min_value=1, max_value=int(generator_256.order())),
316+
st.integers(
317+
min_value=1, max_value=int(generator_brainpoolp160r1.order())
318+
),
319+
st.integers(
320+
min_value=1, max_value=int(generator_brainpoolp160r1.order())
321+
),
283322
st.lists(
284-
st.integers(min_value=1, max_value=int(curve_256.p() - 1)),
323+
st.integers(
324+
min_value=1, max_value=int(curve_brainpoolp160r1.p() - 1)
325+
),
285326
min_size=2,
286327
max_size=2,
287328
unique=True,
288329
),
289330
)
290331
@example(2, 2, [2, 1])
291332
@example(2, 2, [2, 3])
292-
@example(2, int(generator_256.order() - 2), [2, 3])
293-
@example(2, int(generator_256.order() - 2), [2, 1])
333+
@example(2, int(generator_brainpoolp160r1.order() - 2), [2, 3])
334+
@example(2, int(generator_brainpoolp160r1.order() - 2), [2, 1])
294335
def test_add_different_scale_points(self, a_mul, b_mul, new_z):
295-
j_g = PointJacobi.from_affine(generator_256)
336+
j_g = PointJacobi.from_affine(generator_brainpoolp160r1)
296337
a = PointJacobi.from_affine(j_g * a_mul)
297338
b = PointJacobi.from_affine(j_g * b_mul)
298339

299-
p = curve_256.p()
340+
p = curve_brainpoolp160r1.p()
300341

301342
assume(inverse_mod(new_z[0], p))
302343
assume(inverse_mod(new_z[1], p))
@@ -305,13 +346,13 @@ def test_add_different_scale_points(self, a_mul, b_mul, new_z):
305346
new_zz1 = new_z[1] * new_z[1] % p
306347

307348
a = PointJacobi(
308-
curve_256,
349+
curve_brainpoolp160r1,
309350
a.x() * new_zz0 % p,
310351
a.y() * new_zz0 * new_z[0] % p,
311352
new_z[0],
312353
)
313354
b = PointJacobi(
314-
curve_256,
355+
curve_brainpoolp160r1,
315356
b.x() * new_zz1 % p,
316357
b.y() * new_zz1 * new_z[1] % p,
317358
new_z[1],

0 commit comments

Comments
 (0)