Skip to content

Commit 94da185

Browse files
authored
ℹ️ fixed vigenere to handle non-ASCII letters (#37)
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.
1 parent 80faacb commit 94da185

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

chepy/modules/encryptionencoding.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1120,7 +1120,7 @@ def vigenere_encode(self, key: str) -> EncryptionEncodingT:
11201120
raise ValueError("The key must consist only of letters") # pragma: no cover
11211121

11221122
for i in range(len(input_str)):
1123-
if input_str[i].isalpha():
1123+
if input_str[i].isalpha() and input_str[i].lower() in alphabet:
11241124
is_upper = input_str[i].isupper()
11251125
input_char = input_str[i].lower()
11261126
key_char = key[(i - fail) % len(key)]
@@ -1162,7 +1162,7 @@ def vigenere_decode(self, key: str) -> EncryptionEncodingT:
11621162
raise ValueError("The key must consist only of letters") # pragma: no cover
11631163

11641164
for i in range(len(input_str)):
1165-
if input_str[i].isalpha():
1165+
if input_str[i].isalpha() and input_str[i].lower() in alphabet:
11661166
is_upper = input_str[i].isupper()
11671167
input_char = input_str[i].lower()
11681168
key_char = key[(i - fail) % len(key)]

tests/test_encryptionencoding.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -669,12 +669,13 @@ def test_blowfish_decrypt():
669669
)
670670

671671

672-
def test_vigener_encode():
672+
def test_vigenere_encode():
673673
assert (
674674
Chepy("shaktictf{y4Yyy!_M1S5i0n_4cCoMpL1sH3D}").vigenere_encode("victory").o
675675
== b"npcdhzaon{a4Rmp!_K1N5q0p_4vQfKkT1uA3R}"
676676
)
677677
assert Chepy("secret").vigenere_encode("secret").o == b"kieiim"
678+
assert Chepy("Vigenère").vigenere_encode("key").o.decode() == "Fmeorèpo"
678679

679680

680681
def test_vigenere_decode():
@@ -683,6 +684,7 @@ def test_vigenere_decode():
683684
== b"shaktictf{y4Yyy!_M1S5i0n_4cCoMpL1sH3D}"
684685
)
685686
assert Chepy("kieiim").vigenere_decode("secret").o == b"secret"
687+
assert Chepy("Fmeorèpo").vigenere_decode("key").o.decode() == "Vigenère"
686688

687689

688690
def test_affine_encode():

0 commit comments

Comments
 (0)