Skip to content

Commit 1c9334e

Browse files
committed
Improved codec: rot (added rot-47)
1 parent b5ffb40 commit 1c9334e

1 file changed

Lines changed: 12 additions & 6 deletions

File tree

codext/crypto/rot.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,34 @@
1616
'enc(rot0|rot--10|rot100)': None,
1717
'enc(rot1|rot-1|rot_1)': {'this is a test': "uijt jt b uftu"},
1818
'enc(rot3)': {'this is a test': "wklv lv d whvw"},
19+
'enc(rot47)': {'this is a test': "E9:D :D 2 E6DE"},
1920
}
2021

2122

22-
def _rotn(text, n=13):
23-
n = n % 26
24-
t = maketrans(LC + UC, LC[n:] + LC[:n] + UC[n:] + UC[:n])
23+
ROT47 = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
24+
25+
26+
def _rotn(text, n=13, a=LC+UC, l=26):
27+
n = n % l
28+
t = maketrans(a, "".join(a[i:i+l][n:] + a[i:i+l][:n] for i in range(0, len(a), l)))
2529
return text.translate(t)
2630

2731

2832
def rot_encode(i):
2933
def encode(text, errors="strict"):
30-
r = _rotn(ensure_str(text), i)
34+
t = ensure_str(text)
35+
r = _rotn(t, 47, ROT47, 94) if i == 47 else _rotn(t, i)
3136
return r, len(r)
3237
return encode
3338

3439

3540
def rot_decode(i):
3641
def decode(text, errors="strict"):
37-
r = _rotn(ensure_str(text), -i)
42+
t = ensure_str(text)
43+
r = _rotn(t, -47, ROT47, 94) if i == 47 else _rotn(t, -i)
3844
return r, len(r)
3945
return decode
4046

4147

42-
add("rot", rot_encode, rot_decode, r"rot[-_]?([1-9]|1[0-9]|2[0-5])$")
48+
add("rot", rot_encode, rot_decode, r"rot[-_]?([1-9]|1[0-9]|2[0-5]|47)$")
4349

0 commit comments

Comments
 (0)