Skip to content

Commit 334ba8e

Browse files
authored
Merge pull request #97 from Peter-Bergman/main
prevented gen_private_key from generating invalid private keys
2 parents 702da40 + 604ea92 commit 334ba8e

File tree

2 files changed

+5
-10
lines changed

2 files changed

+5
-10
lines changed

fastecdsa/keys.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def gen_private_key(curve: Curve, randfunc: Callable[[Any], bytes] = urandom) ->
5858
rand >>= extra_bits
5959

6060
# no modding by group order or we'll introduce biases
61-
while rand >= curve.q:
61+
while rand < 1 or rand >= curve.q:
6262
rand = int.from_bytes(randfunc(order_bytes), "big")
6363
rand >>= extra_bits
6464

tests/test_keygen.py

+4-9
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,28 @@
55

66

77
class TestKeygen(TestCase):
8-
def test_gen_private_key(self):
8+
def test_gen_private_key(self) -> None:
99
class FakeCurve(Curve):
10-
def __init__(self, q):
10+
def __init__(self, q: int) -> None:
1111
super().__init__("FakeCurve", 0, 0, 0, q, 0, 0)
1212

1313
class FakeRandom:
14-
def __init__(self, values=b"\x00"):
14+
def __init__(self, values: bytes = b"\x01") -> None:
1515
self.values = values
1616
self.pos = 0
1717

18-
def __call__(self, nb):
18+
def __call__(self, nb: int) -> bytes:
1919
result = self.values[self.pos : self.pos + nb]
2020
self.pos += nb
2121
return result
2222

23-
self.assertEqual(gen_private_key(FakeCurve(2), randfunc=FakeRandom(b"\x00")), 0)
24-
2523
# 1 byte / 6 bits shaved off + the first try is lower than the order
2624
self.assertEqual(gen_private_key(FakeCurve(2), randfunc=FakeRandom(b"\x40")), 1)
2725

2826
# 1 byte / 6 bits shaved off + the first try is higher than the order
2927
self.assertEqual(
3028
gen_private_key(FakeCurve(2), randfunc=FakeRandom(b"\xc0\x40")), 1
3129
)
32-
self.assertEqual(
33-
gen_private_key(FakeCurve(2), randfunc=FakeRandom(b"\xc0\x00")), 0
34-
)
3530

3631
# 2 byte / 3 are shaved off, the first try is lower than the order.
3732
self.assertEqual(

0 commit comments

Comments
 (0)