Skip to content

Commit 5fd4d6c

Browse files
committed
Fix encoding of integers
Too many bytes were previously used as plaintext, which made the computation unnecessarily inefficient. Test cases are added here to detect future changes in the ordering determined by the seed. Note: this changes the ordering of integers done by this library for existing seeds, which could be a breaking change depending on the use case.
1 parent 4df63ae commit 5fd4d6c

3 files changed

Lines changed: 21 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ Versioning].
99

1010
- Drop support for Python 3.7, Python 3.8 and PyPy3.8.
1111
- Add tests with Python 3.14 and PyPy3.11.
12+
- Improve performance by reducing the AES plaintext size. Note: this changes the
13+
ordering of integers for existing seeds, which may be a breaking change depending
14+
on the use case.
1215

1316
## [1.1.0] - 2022-12-29
1417

src/shuffled/crypto.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def __init__(self, key: bytes) -> None:
2727
self._encryptor = cipher.encryptor()
2828

2929
def randomize(self, integer: int) -> int:
30-
encoded = integer.to_bytes(128, byteorder="big")
30+
encoded = integer.to_bytes(16, byteorder="big")
3131
encrypted = self._encryptor.update(encoded)
3232
return int.from_bytes(encrypted, byteorder="big")
3333

tests/test_shuffled.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,21 @@ def test_normal(self, range_size):
1313
assert sorted(list(shuffled_range)) == list(range(range_size))
1414

1515
@pytest.mark.parametrize(
16-
"seed",
17-
(b"", b"\x00", b"\x01"),
16+
"seed, expected",
17+
(
18+
(
19+
b"",
20+
[4, 5, 6, 1, 2, 7, 8, 3, 10, 11, 13, 9, 16, 17, 12, 15, 18, 19, 14, 0],
21+
),
22+
(
23+
b"\x00",
24+
[13, 14, 17, 7, 3, 15, 16, 6, 2, 5, 9, 12, 18, 10, 1, 19, 4, 0, 8, 11],
25+
),
26+
(
27+
b"\x01",
28+
[11, 0, 9, 5, 6, 10, 19, 4, 13, 14, 8, 16, 17, 18, 15, 12, 1, 2, 7, 3],
29+
),
30+
),
1831
)
19-
def test_seed(self, seed):
20-
assert list(Shuffled(20, seed)) == list(Shuffled(20, seed))
32+
def test_seed(self, seed, expected):
33+
assert list(Shuffled(20, seed)) == expected

0 commit comments

Comments
 (0)