From aa1012b557f0fabec88978f13fa9db16aea178c3 Mon Sep 17 00:00:00 2001 From: yxliaoyx Date: Mon, 23 Jun 2025 22:39:35 +0800 Subject: [PATCH] =?UTF-8?q?=E2=84=B9=EF=B8=8F=20fixed=20vigenere=20to=20ha?= =?UTF-8?q?ndle=20non-ASCII=20letters?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated the vigenere encode and decode methods to only process letters present in the defined alphabet, preventing errors with non-ASCII characters. Added tests to verify correct handling of Unicode input. --- chepy/modules/encryptionencoding.py | 4 ++-- tests/test_encryptionencoding.py | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/chepy/modules/encryptionencoding.py b/chepy/modules/encryptionencoding.py index b0f4324..92b5ab2 100644 --- a/chepy/modules/encryptionencoding.py +++ b/chepy/modules/encryptionencoding.py @@ -1120,7 +1120,7 @@ def vigenere_encode(self, key: str) -> EncryptionEncodingT: raise ValueError("The key must consist only of letters") # pragma: no cover for i in range(len(input_str)): - if input_str[i].isalpha(): + if input_str[i].isalpha() and input_str[i].lower() in alphabet: is_upper = input_str[i].isupper() input_char = input_str[i].lower() key_char = key[(i - fail) % len(key)] @@ -1162,7 +1162,7 @@ def vigenere_decode(self, key: str) -> EncryptionEncodingT: raise ValueError("The key must consist only of letters") # pragma: no cover for i in range(len(input_str)): - if input_str[i].isalpha(): + if input_str[i].isalpha() and input_str[i].lower() in alphabet: is_upper = input_str[i].isupper() input_char = input_str[i].lower() key_char = key[(i - fail) % len(key)] diff --git a/tests/test_encryptionencoding.py b/tests/test_encryptionencoding.py index 2063645..a162bb3 100644 --- a/tests/test_encryptionencoding.py +++ b/tests/test_encryptionencoding.py @@ -669,12 +669,13 @@ def test_blowfish_decrypt(): ) -def test_vigener_encode(): +def test_vigenere_encode(): assert ( Chepy("shaktictf{y4Yyy!_M1S5i0n_4cCoMpL1sH3D}").vigenere_encode("victory").o == b"npcdhzaon{a4Rmp!_K1N5q0p_4vQfKkT1uA3R}" ) assert Chepy("secret").vigenere_encode("secret").o == b"kieiim" + assert Chepy("Vigenère").vigenere_encode("key").o.decode() == "Fmeorèpo" def test_vigenere_decode(): @@ -683,6 +684,7 @@ def test_vigenere_decode(): == b"shaktictf{y4Yyy!_M1S5i0n_4cCoMpL1sH3D}" ) assert Chepy("kieiim").vigenere_decode("secret").o == b"secret" + assert Chepy("Fmeorèpo").vigenere_decode("key").o.decode() == "Vigenère" def test_affine_encode():