codext 1.16.5__tar.gz → 2.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. codext-2.0.1/.github/dependabot.yml +15 -0
  2. codext-2.0.1/.github/workflows/python-package.yml +141 -0
  3. codext-2.0.1/.github/workflows/security.yml +31 -0
  4. codext-1.16.5/.readthedocs.yml → codext-2.0.1/.readthedocs.yaml +2 -2
  5. {codext-1.16.5 → codext-2.0.1}/PKG-INFO +180 -42
  6. {codext-1.16.5 → codext-2.0.1}/README.md +173 -40
  7. codext-2.0.1/SECURITY.md +17 -0
  8. {codext-1.16.5 → codext-2.0.1}/docs/mkdocs.yml +29 -9
  9. {codext-1.16.5 → codext-2.0.1}/docs/pages/cli.md +2 -0
  10. codext-2.0.1/docs/pages/contributing.md +32 -0
  11. codext-2.0.1/docs/pages/enc/barcodes.md +180 -0
  12. codext-2.0.1/docs/pages/enc/base.md +269 -0
  13. codext-2.0.1/docs/pages/enc/binary.md +281 -0
  14. codext-2.0.1/docs/pages/enc/ciphers.md +755 -0
  15. {codext-1.16.5 → codext-2.0.1}/docs/pages/enc/common.md +2 -2
  16. codext-2.0.1/docs/pages/enc/compressions.md +143 -0
  17. codext-2.0.1/docs/pages/enc/esoteric.md +183 -0
  18. codext-2.0.1/docs/pages/enc/frequency.md +82 -0
  19. codext-2.0.1/docs/pages/enc/hashing.md +482 -0
  20. {codext-1.16.5 → codext-2.0.1}/docs/pages/enc/languages.md +58 -10
  21. codext-2.0.1/docs/pages/enc/obfuscation.md +281 -0
  22. codext-2.0.1/docs/pages/enc/others.md +277 -0
  23. {codext-1.16.5 → codext-2.0.1}/docs/pages/enc/stegano.md +52 -1
  24. codext-2.0.1/docs/pages/enc/web.md +109 -0
  25. {codext-1.16.5 → codext-2.0.1}/docs/pages/features.md +4 -1
  26. {codext-1.16.5 → codext-2.0.1}/docs/pages/guessing.md +49 -14
  27. {codext-1.16.5 → codext-2.0.1}/docs/pages/howto.md +6 -6
  28. codext-2.0.1/docs/pages/index.md +15 -0
  29. {codext-1.16.5 → codext-2.0.1}/docs/pages/manipulations.md +2 -2
  30. codext-2.0.1/docs/requirements.txt +6 -0
  31. {codext-1.16.5 → codext-2.0.1}/pyproject.toml +47 -2
  32. {codext-1.16.5 → codext-2.0.1}/requirements.txt +1 -0
  33. codext-2.0.1/src/codext/VERSION.txt +1 -0
  34. {codext-1.16.5 → codext-2.0.1}/src/codext/__common__.py +231 -448
  35. codext-2.0.1/src/codext/__init__.py +32 -0
  36. codext-1.16.5/src/codext/__init__.py → codext-2.0.1/src/codext/__main__.py +45 -30
  37. codext-2.0.1/src/codext/barcodes/__init__.py +6 -0
  38. codext-2.0.1/src/codext/barcodes/aztec.py +726 -0
  39. codext-2.0.1/src/codext/barcodes/datamatrix.py +669 -0
  40. codext-2.0.1/src/codext/barcodes/fakeqr.py +216 -0
  41. codext-2.0.1/src/codext/barcodes/pdf417.py +865 -0
  42. codext-2.0.1/src/codext/barcodes/qr.py +671 -0
  43. {codext-1.16.5 → codext-2.0.1}/src/codext/base/__init__.py +9 -0
  44. {codext-1.16.5 → codext-2.0.1}/src/codext/base/_base.py +76 -14
  45. {codext-1.16.5 → codext-2.0.1}/src/codext/base/_base2n.py +16 -2
  46. {codext-1.16.5 → codext-2.0.1}/src/codext/base/base100.py +7 -1
  47. codext-2.0.1/src/codext/base/base1024.py +177 -0
  48. {codext-1.16.5 → codext-2.0.1}/src/codext/base/base122.py +8 -0
  49. codext-2.0.1/src/codext/base/base128.py +80 -0
  50. codext-2.0.1/src/codext/base/base131072.py +219 -0
  51. codext-2.0.1/src/codext/base/base256.py +52 -0
  52. codext-2.0.1/src/codext/base/base38.py +62 -0
  53. {codext-1.16.5 → codext-2.0.1}/src/codext/base/base45.py +11 -1
  54. codext-2.0.1/src/codext/base/base65536.py +158 -0
  55. codext-2.0.1/src/codext/base/base69.py +73 -0
  56. {codext-1.16.5 → codext-2.0.1}/src/codext/base/base85.py +13 -1
  57. {codext-1.16.5 → codext-2.0.1}/src/codext/base/base91.py +7 -0
  58. {codext-1.16.5 → codext-2.0.1}/src/codext/base/baseN.py +15 -0
  59. codext-2.0.1/src/codext/base/bech32.py +119 -0
  60. codext-2.0.1/src/codext/base/leb128.py +73 -0
  61. {codext-1.16.5 → codext-2.0.1}/src/codext/binary/__init__.py +5 -0
  62. codext-2.0.1/src/codext/binary/_universal.py +57 -0
  63. {codext-1.16.5 → codext-2.0.1}/src/codext/binary/baudot.py +12 -1
  64. {codext-1.16.5 → codext-2.0.1}/src/codext/binary/bcd.py +7 -0
  65. codext-2.0.1/src/codext/binary/chucknorris.py +59 -0
  66. codext-2.0.1/src/codext/binary/elias.py +78 -0
  67. {codext-1.16.5 → codext-2.0.1}/src/codext/binary/excess3.py +7 -0
  68. codext-2.0.1/src/codext/binary/fibonacci.py +65 -0
  69. {codext-1.16.5 → codext-2.0.1}/src/codext/binary/gray.py +6 -0
  70. codext-2.0.1/src/codext/binary/hamming.py +87 -0
  71. codext-2.0.1/src/codext/binary/manchester.py +108 -0
  72. codext-2.0.1/src/codext/binary/nrzi.py +52 -0
  73. {codext-1.16.5 → codext-2.0.1}/src/codext/binary/rotate.py +11 -7
  74. {codext-1.16.5 → codext-2.0.1}/src/codext/checksums/__init__.py +1 -0
  75. codext-2.0.1/src/codext/checksums/adler.py +21 -0
  76. {codext-1.16.5 → codext-2.0.1}/src/codext/checksums/crc.py +9 -1
  77. codext-2.0.1/src/codext/checksums/fletcher.py +39 -0
  78. {codext-1.16.5 → codext-2.0.1}/src/codext/checksums/luhn.py +8 -1
  79. codext-2.0.1/src/codext/ciphers/__init__.py +33 -0
  80. codext-2.0.1/src/codext/ciphers/_jsfloat.py +104 -0
  81. codext-2.0.1/src/codext/ciphers/_square.py +67 -0
  82. codext-2.0.1/src/codext/ciphers/adfgx.py +124 -0
  83. codext-2.0.1/src/codext/ciphers/aer256.py +35 -0
  84. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/affine.py +5 -0
  85. codext-2.0.1/src/codext/ciphers/armon64.py +37 -0
  86. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/atbash.py +5 -0
  87. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/bacon.py +5 -0
  88. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/barbie.py +4 -2
  89. codext-2.0.1/src/codext/ciphers/bazeries.py +121 -0
  90. codext-2.0.1/src/codext/ciphers/bifid.py +87 -0
  91. codext-2.0.1/src/codext/ciphers/chaocipher.py +77 -0
  92. codext-2.0.1/src/codext/ciphers/columnar.py +80 -0
  93. codext-2.0.1/src/codext/ciphers/enigma.py +150 -0
  94. codext-2.0.1/src/codext/ciphers/ezip64.py +35 -0
  95. codext-2.0.1/src/codext/ciphers/foursquare.py +74 -0
  96. codext-2.0.1/src/codext/ciphers/fractionatedmorse.py +91 -0
  97. codext-2.0.1/src/codext/ciphers/hill.py +110 -0
  98. codext-2.0.1/src/codext/ciphers/nihilist.py +86 -0
  99. codext-2.0.1/src/codext/ciphers/okto3.py +35 -0
  100. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/playfair.py +40 -45
  101. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/polybius.py +6 -0
  102. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/railfence.py +6 -0
  103. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/rot.py +8 -0
  104. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/scytale.py +6 -0
  105. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/shift.py +3 -0
  106. codext-2.0.1/src/codext/ciphers/skip.py +59 -0
  107. codext-2.0.1/src/codext/ciphers/twosquare.py +82 -0
  108. codext-2.0.1/src/codext/ciphers/vernam.py +39 -0
  109. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/vic.py +9 -0
  110. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/vigenere.py +54 -3
  111. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/xor.py +3 -0
  112. codext-2.0.1/src/codext/ciphers/zara128.py +33 -0
  113. {codext-1.16.5 → codext-2.0.1}/src/codext/common/a1z26.py +7 -0
  114. {codext-1.16.5 → codext-2.0.1}/src/codext/common/cases.py +6 -1
  115. {codext-1.16.5 → codext-2.0.1}/src/codext/common/dummy.py +6 -1
  116. {codext-1.16.5 → codext-2.0.1}/src/codext/common/octal.py +3 -0
  117. {codext-1.16.5 → codext-2.0.1}/src/codext/common/ordinal.py +3 -0
  118. {codext-1.16.5 → codext-2.0.1}/src/codext/compressions/__init__.py +3 -0
  119. {codext-1.16.5 → codext-2.0.1}/src/codext/compressions/gzipp.py +6 -0
  120. codext-2.0.1/src/codext/compressions/huffman.py +137 -0
  121. {codext-1.16.5 → codext-2.0.1}/src/codext/compressions/lz77.py +7 -0
  122. {codext-1.16.5 → codext-2.0.1}/src/codext/compressions/lz78.py +7 -0
  123. {codext-1.16.5 → codext-2.0.1}/src/codext/compressions/pkzip.py +6 -0
  124. codext-2.0.1/src/codext/compressions/rle.py +116 -0
  125. codext-2.0.1/src/codext/compressions/zstd.py +60 -0
  126. codext-2.0.1/src/codext/esoteric/__init__.py +10 -0
  127. codext-2.0.1/src/codext/esoteric/_brainfuck.py +89 -0
  128. codext-2.0.1/src/codext/esoteric/befunge.py +249 -0
  129. codext-2.0.1/src/codext/esoteric/brainfuck.py +67 -0
  130. codext-2.0.1/src/codext/esoteric/church.py +228 -0
  131. codext-2.0.1/src/codext/esoteric/cow.py +160 -0
  132. codext-2.0.1/src/codext/esoteric/lolcode.py +709 -0
  133. codext-2.0.1/src/codext/esoteric/malbolge.py +198 -0
  134. codext-2.0.1/src/codext/esoteric/ook.py +103 -0
  135. codext-2.0.1/src/codext/esoteric/piet.py +430 -0
  136. codext-2.0.1/src/codext/esoteric/pikalang.py +66 -0
  137. codext-2.0.1/src/codext/frequency/__init__.py +4 -0
  138. codext-2.0.1/src/codext/frequency/_ita2.py +40 -0
  139. codext-2.0.1/src/codext/frequency/coquelet.py +98 -0
  140. codext-2.0.1/src/codext/frequency/dtmf.py +182 -0
  141. codext-2.0.1/src/codext/frequency/piccolo.py +106 -0
  142. codext-2.0.1/src/codext/guess.py +428 -0
  143. codext-2.0.1/src/codext/hashing/__init__.py +29 -0
  144. codext-2.0.1/src/codext/hashing/_descrypt.py +50 -0
  145. codext-2.0.1/src/codext/hashing/_h64.py +52 -0
  146. codext-2.0.1/src/codext/hashing/argon2.py +42 -0
  147. codext-2.0.1/src/codext/hashing/bcrypt.py +107 -0
  148. {codext-1.16.5 → codext-2.0.1}/src/codext/hashing/blake.py +7 -1
  149. codext-2.0.1/src/codext/hashing/cisco.py +41 -0
  150. {codext-1.16.5 → codext-2.0.1}/src/codext/hashing/crypt.py +7 -1
  151. codext-2.0.1/src/codext/hashing/cryptvariants.py +136 -0
  152. codext-2.0.1/src/codext/hashing/ctph.py +92 -0
  153. codext-2.0.1/src/codext/hashing/fnv.py +59 -0
  154. codext-2.0.1/src/codext/hashing/gost.py +137 -0
  155. codext-2.0.1/src/codext/hashing/hmac.py +31 -0
  156. codext-2.0.1/src/codext/hashing/keccak.py +87 -0
  157. codext-2.0.1/src/codext/hashing/ldap.py +32 -0
  158. codext-2.0.1/src/codext/hashing/md.py +154 -0
  159. {codext-1.16.5 → codext-2.0.1}/src/codext/hashing/mmh3.py +6 -1
  160. codext-2.0.1/src/codext/hashing/mscash.py +40 -0
  161. codext-2.0.1/src/codext/hashing/mssql.py +35 -0
  162. codext-2.0.1/src/codext/hashing/mysql.py +35 -0
  163. codext-2.0.1/src/codext/hashing/oracle.py +49 -0
  164. codext-2.0.1/src/codext/hashing/phpass.py +38 -0
  165. codext-2.0.1/src/codext/hashing/postgres.py +25 -0
  166. codext-2.0.1/src/codext/hashing/ripemd.py +73 -0
  167. codext-2.0.1/src/codext/hashing/scrypt.py +44 -0
  168. codext-2.0.1/src/codext/hashing/sha.py +60 -0
  169. {codext-1.16.5 → codext-2.0.1}/src/codext/hashing/shake.py +5 -1
  170. codext-2.0.1/src/codext/hashing/snefru.py +268 -0
  171. codext-2.0.1/src/codext/hashing/whirlpool.py +87 -0
  172. codext-2.0.1/src/codext/hashing/windows.py +101 -0
  173. {codext-1.16.5 → codext-2.0.1}/src/codext/languages/__init__.py +2 -0
  174. {codext-1.16.5 → codext-2.0.1}/src/codext/languages/braille.py +6 -0
  175. codext-2.0.1/src/codext/languages/fancy.py +119 -0
  176. codext-2.0.1/src/codext/languages/galactic.py +116 -0
  177. {codext-1.16.5 → codext-2.0.1}/src/codext/languages/ipsum.py +8 -1
  178. {codext-1.16.5 → codext-2.0.1}/src/codext/languages/leetspeak.py +6 -0
  179. {codext-1.16.5 → codext-2.0.1}/src/codext/languages/morse.py +7 -0
  180. {codext-1.16.5 → codext-2.0.1}/src/codext/languages/navajo.py +7 -0
  181. {codext-1.16.5 → codext-2.0.1}/src/codext/languages/radio.py +6 -0
  182. {codext-1.16.5 → codext-2.0.1}/src/codext/languages/southpark.py +7 -0
  183. codext-2.0.1/src/codext/languages/tap.py +103 -0
  184. {codext-1.16.5 → codext-2.0.1}/src/codext/languages/tomtom.py +6 -0
  185. codext-2.0.1/src/codext/languages/upsidedown.py +58 -0
  186. codext-2.0.1/src/codext/obfuscation/__init__.py +17 -0
  187. codext-2.0.1/src/codext/obfuscation/_jsbase64.py +79 -0
  188. codext-2.0.1/src/codext/obfuscation/_jsuri.py +55 -0
  189. codext-2.0.1/src/codext/obfuscation/arabica2rs.py +77 -0
  190. codext-2.0.1/src/codext/obfuscation/atom128.py +30 -0
  191. codext-2.0.1/src/codext/obfuscation/chinzo72c.py +78 -0
  192. codext-2.0.1/src/codext/obfuscation/cisco.py +65 -0
  193. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/obfuscation}/citrix.py +4 -2
  194. codext-2.0.1/src/codext/obfuscation/esab46.py +30 -0
  195. codext-2.0.1/src/codext/obfuscation/feron74.py +30 -0
  196. codext-2.0.1/src/codext/obfuscation/gila7.py +30 -0
  197. codext-2.0.1/src/codext/obfuscation/hazz15.py +31 -0
  198. codext-2.0.1/src/codext/obfuscation/hindia4x.py +86 -0
  199. codext-2.0.1/src/codext/obfuscation/japooc2s.py +83 -0
  200. codext-2.0.1/src/codext/obfuscation/korex3s.py +70 -0
  201. codext-2.0.1/src/codext/obfuscation/megan35.py +31 -0
  202. codext-2.0.1/src/codext/obfuscation/tigo3fx.py +31 -0
  203. codext-2.0.1/src/codext/obfuscation/tripo5.py +31 -0
  204. codext-2.0.1/src/codext/obfuscation/zong22.py +31 -0
  205. codext-2.0.1/src/codext/others/__init__.py +16 -0
  206. codext-2.0.1/src/codext/others/asn1.py +482 -0
  207. codext-2.0.1/src/codext/others/binhex.py +125 -0
  208. {codext-1.16.5 → codext-2.0.1}/src/codext/others/dna.py +4 -2
  209. codext-2.0.1/src/codext/others/dvorak.py +45 -0
  210. {codext-1.16.5 → codext-2.0.1}/src/codext/others/kbshift.py +5 -0
  211. {codext-1.16.5 → codext-2.0.1}/src/codext/others/letters.py +8 -1
  212. {codext-1.16.5 → codext-2.0.1}/src/codext/others/markdown.py +6 -0
  213. codext-2.0.1/src/codext/others/ns3.py +93 -0
  214. codext-2.0.1/src/codext/others/soundex.py +482 -0
  215. codext-2.0.1/src/codext/others/telegraph.py +278 -0
  216. {codext-1.16.5 → codext-2.0.1}/src/codext/others/uuencode.py +8 -0
  217. codext-2.0.1/src/codext/others/xxencode.py +83 -0
  218. codext-2.0.1/src/codext/others/xy.py +30 -0
  219. codext-2.0.1/src/codext/others/yenc.py +121 -0
  220. {codext-1.16.5 → codext-2.0.1}/src/codext/stegano/__init__.py +2 -0
  221. {codext-1.16.5 → codext-2.0.1}/src/codext/stegano/hexagram.py +7 -0
  222. {codext-1.16.5 → codext-2.0.1}/src/codext/stegano/klopf.py +6 -0
  223. {codext-1.16.5 → codext-2.0.1}/src/codext/stegano/resistor.py +6 -0
  224. {codext-1.16.5 → codext-2.0.1}/src/codext/stegano/rick.py +4 -0
  225. {codext-1.16.5 → codext-2.0.1}/src/codext/stegano/sms.py +8 -1
  226. codext-2.0.1/src/codext/stegano/tags.py +62 -0
  227. {codext-1.16.5 → codext-2.0.1}/src/codext/stegano/whitespace.py +38 -9
  228. codext-2.0.1/src/codext/stegano/zerowidth.py +112 -0
  229. codext-2.0.1/src/codext/strength.py +164 -0
  230. codext-2.0.1/src/codext/web/__init__.py +7 -0
  231. codext-2.0.1/src/codext/web/_javascript.py +59 -0
  232. codext-2.0.1/src/codext/web/aaencode.py +103 -0
  233. {codext-1.16.5 → codext-2.0.1}/src/codext/web/html.py +8 -0
  234. codext-2.0.1/src/codext/web/jjencode.py +135 -0
  235. codext-2.0.1/src/codext/web/jsfuck.py +635 -0
  236. {codext-1.16.5 → codext-2.0.1}/src/codext/web/url.py +6 -0
  237. {codext-1.16.5 → codext-2.0.1}/src/codext.egg-info/PKG-INFO +180 -42
  238. codext-2.0.1/src/codext.egg-info/SOURCES.txt +265 -0
  239. {codext-1.16.5 → codext-2.0.1}/src/codext.egg-info/entry_points.txt +10 -1
  240. codext-2.0.1/src/codext.egg-info/requires.txt +13 -0
  241. {codext-1.16.5 → codext-2.0.1}/tests/test_base.py +80 -0
  242. {codext-1.16.5 → codext-2.0.1}/tests/test_common.py +109 -5
  243. {codext-1.16.5 → codext-2.0.1}/tests/test_generated.py +3 -8
  244. codext-2.0.1/tests/test_manual.py +1327 -0
  245. codext-1.16.5/.coveragerc +0 -24
  246. codext-1.16.5/.github/workflows/python-package.yml +0 -128
  247. codext-1.16.5/docs/pages/enc/base.md +0 -172
  248. codext-1.16.5/docs/pages/enc/binary.md +0 -166
  249. codext-1.16.5/docs/pages/enc/compressions.md +0 -75
  250. codext-1.16.5/docs/pages/enc/crypto.md +0 -356
  251. codext-1.16.5/docs/pages/enc/hashing.md +0 -139
  252. codext-1.16.5/docs/pages/enc/others.md +0 -79
  253. codext-1.16.5/docs/pages/enc/web.md +0 -38
  254. codext-1.16.5/docs/pages/index.md +0 -9
  255. codext-1.16.5/docs/requirements.txt +0 -5
  256. codext-1.16.5/pytest.ini +0 -2
  257. codext-1.16.5/src/codext/VERSION.txt +0 -1
  258. codext-1.16.5/src/codext/binary/manchester.py +0 -50
  259. codext-1.16.5/src/codext/checksums/adler.py +0 -17
  260. codext-1.16.5/src/codext/crypto/__init__.py +0 -16
  261. codext-1.16.5/src/codext/hashing/__init__.py +0 -8
  262. codext-1.16.5/src/codext/hashing/md.py +0 -59
  263. codext-1.16.5/src/codext/hashing/sha.py +0 -27
  264. codext-1.16.5/src/codext/languages/galactic.py +0 -34
  265. codext-1.16.5/src/codext/languages/tap.py +0 -38
  266. codext-1.16.5/src/codext/others/__init__.py +0 -7
  267. codext-1.16.5/src/codext/web/__init__.py +0 -4
  268. codext-1.16.5/src/codext.egg-info/SOURCES.txt +0 -137
  269. codext-1.16.5/src/codext.egg-info/requires.txt +0 -4
  270. codext-1.16.5/tests/test_manual.py +0 -203
  271. {codext-1.16.5 → codext-2.0.1}/.github/ISSUE_TEMPLATE/add-encoding.yml +0 -0
  272. {codext-1.16.5 → codext-2.0.1}/.github/copilot-instructions.md +0 -0
  273. {codext-1.16.5 → codext-2.0.1}/.github/prompts/add_codec.prompt.md +0 -0
  274. {codext-1.16.5 → codext-2.0.1}/.github/pull_request_template.md +0 -0
  275. {codext-1.16.5 → codext-2.0.1}/.gitignore +0 -0
  276. {codext-1.16.5 → codext-2.0.1}/LICENSE +0 -0
  277. {codext-1.16.5 → codext-2.0.1}/docs/coverage.svg +0 -0
  278. {codext-1.16.5 → codext-2.0.1}/docs/hakin9-codext.pdf +0 -0
  279. {codext-1.16.5 → codext-2.0.1}/docs/pages/css/extra.css +0 -0
  280. {codext-1.16.5 → codext-2.0.1}/docs/pages/demos/using-bases.gif +0 -0
  281. {codext-1.16.5 → codext-2.0.1}/docs/pages/demos/using-codext.gif +0 -0
  282. {codext-1.16.5 → codext-2.0.1}/docs/pages/demos/using-debase.gif +0 -0
  283. {codext-1.16.5 → codext-2.0.1}/docs/pages/img/banner.png +0 -0
  284. {codext-1.16.5 → codext-2.0.1}/docs/pages/img/icon.png +0 -0
  285. {codext-1.16.5 → codext-2.0.1}/docs/pages/img/logo.png +0 -0
  286. {codext-1.16.5 → codext-2.0.1}/setup.cfg +0 -0
  287. {codext-1.16.5 → codext-2.0.1}/src/codext/__info__.py +0 -0
  288. {codext-1.16.5/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/phillips.py +0 -0
  289. {codext-1.16.5 → codext-2.0.1}/src/codext/common/__init__.py +0 -0
  290. {codext-1.16.5 → codext-2.0.1}/src/codext/macros.json +0 -0
  291. {codext-1.16.5 → codext-2.0.1}/src/codext.egg-info/dependency_links.txt +0 -0
  292. {codext-1.16.5 → codext-2.0.1}/src/codext.egg-info/top_level.txt +0 -0
  293. {codext-1.16.5 → codext-2.0.1}/tests/__init__.py +0 -0
@@ -0,0 +1,15 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: github-actions
4
+ directory: /
5
+ schedule:
6
+ interval: monthly
7
+ groups:
8
+ actions:
9
+ patterns: ["*"]
10
+ - package-ecosystem: pip
11
+ directory: /
12
+ schedule:
13
+ interval: monthly
14
+ # dependencies are minimum versions (>=) ; only open security updates, not routine upgrades
15
+ open-pull-requests-limit: 0
@@ -0,0 +1,141 @@
1
+ # This workflow will install Python dependencies, run tests and lint with a variety of Python versions
2
+ # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
3
+
4
+ name: build
5
+
6
+ on:
7
+ push:
8
+ branches: [ "main" ]
9
+ pull_request:
10
+ branches: [ "main" ]
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ prepare:
17
+ runs-on: ubuntu-latest
18
+ outputs:
19
+ package: ${{ steps.pkg.outputs.package }}
20
+ pypi_url: ${{ steps.pkg.outputs.pypi_url }}
21
+ steps:
22
+ - name: Compute package name from the repository's
23
+ id: pkg
24
+ run: |
25
+ name="${GITHUB_REPOSITORY##*/}"
26
+ echo "package=${name#python-}" >> $GITHUB_OUTPUT
27
+ echo "pypi_url=https://pypi.org/p/${name#python-}" >> $GITHUB_OUTPUT
28
+ build:
29
+ needs: prepare
30
+ runs-on: ${{ matrix.os }}
31
+ strategy:
32
+ fail-fast: false
33
+ matrix:
34
+ os: [ubuntu-latest]
35
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
36
+ env:
37
+ package: ${{ needs.prepare.outputs.package }}
38
+ cov_python_version: "3.13"
39
+ steps:
40
+ - uses: actions/checkout@v7
41
+ - name: Set up Python ${{ matrix.python-version }}
42
+ uses: actions/setup-python@v7
43
+ with:
44
+ python-version: ${{ matrix.python-version }}
45
+ - name: Install ${{ env.package }}
46
+ run: |
47
+ python -m pip install --upgrade pip
48
+ python -m pip install pytest pytest-cov
49
+ pip install -r requirements.txt
50
+ pip install "tinyscript>=1.31"
51
+ pip install .[bcrypt]
52
+ - name: Test ${{ env.package }} with pytest
53
+ run: |
54
+ pytest --cov=$package --cov-report=xml
55
+ - name: Upload coverage report
56
+ if: matrix.python-version == env.cov_python_version
57
+ uses: actions/upload-artifact@v7
58
+ with:
59
+ name: coverage-report
60
+ path: coverage.xml
61
+ coverage:
62
+ # only publish the badge for commits on main (not for pull requests)
63
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
64
+ needs: build
65
+ permissions:
66
+ contents: write
67
+ runs-on: ubuntu-latest
68
+ env:
69
+ cov_badge_path: docs/coverage.svg
70
+ steps:
71
+ - uses: actions/checkout@v7
72
+ - name: Set up Python
73
+ uses: actions/setup-python@v7
74
+ with:
75
+ python-version: "3.13"
76
+ - name: Download coverage report
77
+ uses: actions/download-artifact@v8
78
+ with:
79
+ name: coverage-report
80
+ - name: Make coverage badge
81
+ run: |
82
+ pip install genbadge[coverage]
83
+ genbadge coverage -i coverage.xml -o $cov_badge_path
84
+ - name: Push coverage badge
85
+ run: |
86
+ # keep the badge alone on an orphan branch so that main is never modified by the workflow
87
+ git config --local user.email "github-actions[bot]@users.noreply.github.com"
88
+ git config --local user.name "github-actions[bot]"
89
+ if git fetch --depth=1 origin coverage-badge 2>/dev/null && \
90
+ git show FETCH_HEAD:$cov_badge_path | cmp -s - $cov_badge_path; then
91
+ echo "Coverage badge unchanged"
92
+ exit 0
93
+ fi
94
+ git checkout --orphan coverage-badge
95
+ git rm -rqf --cached .
96
+ git add $cov_badge_path
97
+ git commit -m "Update coverage badge"
98
+ git push origin coverage-badge --force
99
+ deploy:
100
+ # only release from main, never from pull requests
101
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
102
+ environment:
103
+ name: pypi
104
+ url: ${{ needs.prepare.outputs.pypi_url }}
105
+ permissions:
106
+ contents: read
107
+ id-token: write # for PyPI trusted publishing (OIDC)
108
+ runs-on: ubuntu-latest
109
+ needs: [prepare, build]
110
+ env:
111
+ package: ${{ needs.prepare.outputs.package }}
112
+ steps:
113
+ - uses: actions/checkout@v7
114
+ - name: Check whether the version is already on PyPI
115
+ # comparing with PyPI (not with the previous commit) also releases a version whose push did not trigger a deploy
116
+ id: version
117
+ run: |
118
+ version=$(tr -d '[:space:]' < src/$package/VERSION.txt)
119
+ status=$(curl -s -o /dev/null -w '%{http_code}' --retry 3 "https://pypi.org/pypi/$package/$version/json")
120
+ case "$status" in
121
+ 200) echo "Version $version is already on PyPI" ; echo "new=false" >> "$GITHUB_OUTPUT" ;;
122
+ 404) echo "Version $version is not on PyPI yet" ; echo "new=true" >> "$GITHUB_OUTPUT" ;;
123
+ *) echo "::error::Unexpected HTTP status $status from PyPI" ; exit 1 ;;
124
+ esac
125
+ - if: steps.version.outputs.new == 'true'
126
+ name: Set up Python
127
+ uses: actions/setup-python@v7
128
+ with:
129
+ python-version: "3.13"
130
+ - if: steps.version.outputs.new == 'true'
131
+ name: Cleanup README
132
+ run: |
133
+ sed -ri 's/^(##*)\s*:.*:\s*/\1 /g' README.md
134
+ awk '{if (match($0,"## Supporters")) exit; print}' README.md > README
135
+ mv -f README README.md
136
+ - if: steps.version.outputs.new == 'true'
137
+ name: Build ${{ needs.prepare.outputs.package }} package
138
+ run: python -m pip install --upgrade build && python -m build
139
+ - if: steps.version.outputs.new == 'true'
140
+ name: Publish to PyPI
141
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,31 @@
1
+ # This workflow audits the project's dependencies for known vulnerabilities
2
+ # It is separate from python-package.yml so that a new advisory never blocks a release
3
+
4
+ name: security
5
+
6
+ on:
7
+ push:
8
+ branches: [ "main" ]
9
+ pull_request:
10
+ branches: [ "main" ]
11
+ schedule:
12
+ - cron: "0 6 * * 1" # weekly, catches new advisories between pushes
13
+ workflow_dispatch:
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ pip-audit:
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - uses: actions/checkout@v7
23
+ - name: Set up Python
24
+ uses: actions/setup-python@v7
25
+ with:
26
+ python-version: "3.13"
27
+ - name: Install pip-audit
28
+ run: python -m pip install --upgrade pip pip-audit
29
+ - name: Audit dependencies
30
+ # audit the project path (not the environment) so that the runner's own packages are not reported
31
+ run: pip-audit .
@@ -1,9 +1,9 @@
1
1
  version: 2
2
2
 
3
3
  build:
4
- os: "ubuntu-22.04"
4
+ os: ubuntu-24.04
5
5
  tools:
6
- python: "3.11"
6
+ python: "3.13"
7
7
 
8
8
  mkdocs:
9
9
  configuration: docs/mkdocs.yml
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codext
3
- Version: 1.16.5
3
+ Version: 2.0.1
4
4
  Summary: Native codecs extension
5
5
  Author-email: Alexandre D'Hondt <alexandre.dhondt@gmail.com>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -689,11 +689,16 @@ Classifier: Intended Audience :: Developers
689
689
  Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
690
690
  Classifier: Programming Language :: Python :: 3
691
691
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
692
- Requires-Python: <4,>=3.8
692
+ Requires-Python: <4,>=3.10
693
693
  Description-Content-Type: text/markdown
694
694
  License-File: LICENSE
695
+ Requires-Dist: backports.zstd; python_version < "3.14"
695
696
  Requires-Dist: legacycrypt; python_version >= "3.13"
696
697
  Requires-Dist: markdown2>=2.5.4
698
+ Provides-Extra: argon2
699
+ Requires-Dist: argon2-cffi>=21.0.0; extra == "argon2"
700
+ Provides-Extra: bcrypt
701
+ Requires-Dist: bcrypt>=4.0.0; extra == "bcrypt"
697
702
  Dynamic: license-file
698
703
 
699
704
  <p align="center" id="top"><img src="https://github.com/dhondta/python-codext/raw/main/docs/pages/img/logo.png"></p>
@@ -701,15 +706,15 @@ Dynamic: license-file
701
706
  <h3 align="center">Encode/decode anything.</h3>
702
707
 
703
708
  [![PyPi](https://img.shields.io/pypi/v/codext.svg)](https://pypi.python.org/pypi/codext/)
709
+ [![Python Versions](https://img.shields.io/pypi/pyversions/codext.svg)](https://pypi.python.org/pypi/codext/)
704
710
  [![Read The Docs](https://readthedocs.org/projects/python-codext/badge/?version=latest)](https://python-codext.readthedocs.io/en/latest/?badge=latest)
705
711
  [![Build Status](https://github.com/dhondta/python-codext/actions/workflows/python-package.yml/badge.svg)](https://github.com/dhondta/python-codext/actions/workflows/python-package.yml)
712
+ [![Security](https://github.com/dhondta/python-codext/actions/workflows/security.yml/badge.svg)](https://github.com/dhondta/python-codext/actions/workflows/security.yml)
706
713
  [![Coverage Status](https://raw.githubusercontent.com/dhondta/python-codext/coverage-badge/docs/coverage.svg)](#)
707
- [![Python Versions](https://img.shields.io/pypi/pyversions/codext.svg)](https://pypi.python.org/pypi/codext/)
708
- [![Known Vulnerabilities](https://snyk.io/test/github/dhondta/python-codext/badge.svg?targetFile=requirements.txt)](https://snyk.io/test/github/dhondta/python-codext?targetFile=requirements.txt)
709
714
  [![DOI](https://zenodo.org/badge/236679865.svg)](https://zenodo.org/badge/latestdoi/236679865)
710
715
  [![License](https://img.shields.io/pypi/l/codext.svg)](https://pypi.python.org/pypi/codext/)
711
716
 
712
- [**CodExt**](https://github.com/dhondta/python-codext) is a (Python2-3 compatible) library that extends the native [`codecs`](https://docs.python.org/3/library/codecs) library (namely for adding new custom encodings and character mappings) and provides **120+ new codecs**, hence its name combining *CODecs EXTension*. It also features a **guess mode** for decoding multiple layers of encoding and **CLI tools** for convenience.
717
+ [**CodExt**](https://github.com/dhondta/python-codext) is a library (Python 3.10 or later) that extends the native [`codecs`](https://docs.python.org/3/library/codecs) library (namely for adding new custom encodings and character mappings) and provides **150+ new codecs**, hence its name combining *CODecs EXTension*. It also features a **guess mode** for decoding multiple layers of encoding and **CLI tools** for convenience.
713
718
 
714
719
  ```sh
715
720
  $ pip install codext
@@ -717,7 +722,7 @@ $ pip install codext
717
722
 
718
723
  Want to contribute a new codec ? | Want to contribute a new macro ?
719
724
  :----------------------------------:|:------------------------------------:
720
- Check the [documentation](https://python-codext.readthedocs.io/en/latest/howto) first<br>Then [PR](https://github.com/dhondta/python-codext/pulls) your new codec | [PR](https://github.com/dhondta/python-codext/pulls) your updated version of [`macros.json`](https://github.com/dhondta/python-codext/blob/main/codext/macros.json)
725
+ Check the [documentation](https://python-codext.readthedocs.io/en/latest/howto.html) first<br>Then [PR](https://github.com/dhondta/python-codext/pulls) your new codec | [PR](https://github.com/dhondta/python-codext/pulls) your updated version of [`macros.json`](https://github.com/dhondta/python-codext/blob/main/src/codext/macros.json)
721
726
 
722
727
  ## Demonstrations
723
728
 
@@ -957,7 +962,15 @@ CACTCGGTCGGCCATATGTTCGGCCATATGTTCGTCTGTTCACTCGCCCATACACT
957
962
 
958
963
  ## List of codecs
959
964
 
960
- #### [BaseXX](https://python-codext.readthedocs.io/en/latest/enc/base)
965
+ #### [Barcodes](https://python-codext.readthedocs.io/en/latest/enc/barcodes.html)
966
+
967
+ - [X] `aztec`: real (scannable) Aztec code (ISO/IEC 24778) ; optimal high-level compaction, error correction percentage given in the name (e.g. `aztec-33` ; 23% by default), rendered as an image or, with `aztec-text`, as plain text ; decoding applies Reed-Solomon error correction
968
+ - [X] `datamatrix`: real (scannable) Data Matrix barcode (ISO/IEC 16022, ECC200) ; most compact of the ASCII, C40, Text, X12 and EDIFACT schemes, square or rectangular (`datamatrix-rect`), rendered as an image or, with `datamatrix-text`, as plain text ; decoding applies Reed-Solomon error correction
969
+ - [X] `fakeqr`: hides the input bits as the modules of something that looks like a QR code but is not one, either an image or, with the `fakeqr-text` variant, plain text (the 8 QR masks are available as `fakeqr-0` to `fakeqr-7`)
970
+ - [X] `pdf417`: real (scannable) PDF417 stacked barcode (ISO/IEC 15438) ; most compact of the Text, Byte and Numeric modes, error correction level given in the name (e.g. `pdf417-5` ; 2 by default), rendered as an image or, with `pdf417-text`, as plain text ; decoding applies Reed-Solomon error correction
971
+ - [X] `qr`: real (scannable) QR code ; byte mode, error correction level given in the name (`qr-l`, `qr-m`, `qr-q`, `qr-h` ; M by default), rendered as an image or, with `qr-text`, as plain text ; decoding applies Reed-Solomon error correction
972
+
973
+ #### [BaseXX](https://python-codext.readthedocs.io/en/latest/enc/base.html)
961
974
 
962
975
  - [X] `base1`: useless, but for the sake of completeness
963
976
  - [X] `base2`: simple conversion to binary (with a variant with a reversed alphabet)
@@ -970,21 +983,33 @@ CACTCGGTCGGCCATATGTTCGGCCATATGTTCGTCTGTTCACTCGCCCATACACT
970
983
  - [X] `base26`: conversion to alphabet letters
971
984
  - [X] `base32`: classical conversion according to the RFC4648 with all its variants ([zbase32](https://philzimmermann.com/docs/human-oriented-base-32-encoding.txt), extended hexadecimal, [geohash](https://en.wikipedia.org/wiki/Geohash), [Crockford](https://www.crockford.com/base32))
972
985
  - [X] `base36`: [Base36](https://en.wikipedia.org/wiki/Base36) conversion to letters and digits (with a variant inverting both groups)
986
+ - [X] `base38`: [Base38](https://github.com/project-chip/connectedhomeip/blob/master/src/setup_payload/Base38Encode.cpp) encoding of the Matter setup QR codes (chunks of 3 bytes)
973
987
  - [X] `base45`: [Base45](https://datatracker.ietf.org/doc/html/draft-faltstrom-base45-04.txt) DRAFT algorithm (with a variant inverting letters and digits)
974
988
  - [X] `base58`: multiple versions of [Base58](https://en.bitcoinwiki.org/wiki/Base58) (bitcoin, flickr, ripple)
975
989
  - [X] `base62`: [Base62](https://en.wikipedia.org/wiki/Base62) conversion to lower- and uppercase letters and digits (with a variant with letters and digits inverted)
976
990
  - [X] `base63`: similar to `base62` with the "`_`" added
977
991
  - [X] `base64`: classical conversion according to RFC4648 with its variant URL (or *file*) (it also holds a variant with letters and digits inverted)
978
992
  - [X] `base67`: custom conversion using some more special characters (also with a variant with letters and digits inverted)
993
+ - [X] `base69`: [Base69](https://github.com/pshihn/base69) encoding (chunks of 7 bytes, 2 characters per 7 bits)
979
994
  - [X] `base85`: all variants of Base85 ([Ascii85](https://fr.wikipedia.org/wiki/Ascii85), [z85](https://rfc.zeromq.org/spec/32), [Adobe](https://dencode.com/string/ascii85), [(x)btoa](https://dencode.com/string/ascii85), [RFC1924](https://datatracker.ietf.org/doc/html/rfc1924), [XML](https://datatracker.ietf.org/doc/html/draft-kwiatkowski-base85-for-xml-00))
980
995
  - [X] `base91`: [Base91](http://base91.sourceforge.net) custom conversion
981
996
  - [X] `base100` (or *emoji*): [Base100](https://github.com/AdamNiederer/base100) custom conversion
982
- - [X] `base122`: [Base100](http://blog.kevinalbs.com/base122) custom conversion
983
- - [X] `base-genericN`: see [base encodings](https://python-codext.readthedocs.io/en/latest/enc/base) ; supports any possible base
997
+ - [X] `base122`: [Base122](http://blog.kevinalbs.com/base122) custom conversion
998
+ - [X] `base128`: conversion to the ASCII charset (with control characters)
999
+ - [X] `base128-latin1`: [Base128](https://github.com/rpuntaie/base128) with printable characters (digits, letters and Latin-1)
1000
+ - [X] `base256`: [Base256](https://github.com/KvanTTT/BaseNcoding) with one printable character per byte
1001
+ - [X] `base1024` (or *ecoji*): [Ecoji](https://github.com/keith-turner/ecoji) custom conversion (10 bits per emoji, versions 1 and 2)
1002
+ - [X] `base2048`: [Base2048](https://github.com/qntm/base2048) custom conversion (11 bits per character, optimised for Twitter)
1003
+ - [X] `base32768`: [Base32768](https://github.com/qntm/base32768) custom conversion (15 bits per character, optimised for UTF-16)
1004
+ - [X] `base65536`: [Base65536](https://github.com/qntm/base65536) custom conversion (16 bits per character, optimised for UTF-32)
1005
+ - [X] `base131072`: Base131072 conversion (17 bits per character), as implemented by the [base131072](https://docs.rs/base131072) Rust crate
1006
+ - [X] `bech32`: [Bech32](https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki) encoding with a human-readable part ; `bech32m` for its [Bech32m](https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki) variant
1007
+ - [X] `leb128` (or *varint*): [LEB128](https://en.wikipedia.org/wiki/LEB128) encoding of lists of integers ; `sleb128` for its signed variant
1008
+ - [X] `base-genericN`: see [base encodings](https://python-codext.readthedocs.io/en/latest/enc/base.html) ; supports any possible base
984
1009
 
985
1010
  This category also contains `ascii85`, `adobe`, `[x]btoa`, `zeromq` with the `base85` codec.
986
1011
 
987
- #### [Binary](https://python-codext.readthedocs.io/en/latest/enc/binary)
1012
+ #### [Binary](https://python-codext.readthedocs.io/en/latest/enc/binary.html)
988
1013
 
989
1014
  - [X] `baudot`: supports CCITT-1, CCITT-2, EU/FR, ITA1, ITA2, MTK-2 (Python3 only), UK, ...
990
1015
  - [X] `baudot-spaced`: variant of `baudot` ; groups of 5 bits are whitespace-separated
@@ -992,19 +1017,68 @@ This category also contains `ascii85`, `adobe`, `[x]btoa`, `zeromq` with the `ba
992
1017
  - [X] `bcd`: _Binary Coded Decimal_, encodes characters from their (zero-left-padded) ordinals
993
1018
  - [X] `bcd-extended0`: variant of `bcd` ; encodes characters from their (zero-left-padded) ordinals using prefix bits `0000`
994
1019
  - [X] `bcd-extended1`: variant of `bcd` ; encodes characters from their (zero-left-padded) ordinals using prefix bits `1111`
1020
+ - [X] `chuck-norris`: Chuck Norris unary code (runs of the 7-bit ASCII bits written with blocks of zeros)
1021
+ - [X] `differential-manchester`: line code writing the bits as transitions at the start of their periods (also inverted)
1022
+ - [X] `elias-gamma`, `elias-delta`: Elias universal codes, encoding characters from their ordinals (or lists of integers with `-integers`)
995
1023
  - [X] `excess3`: uses Excess-3 (aka Stibitz code) binary encoding to convert characters from their ordinals
1024
+ - [X] `fibonacci`: Fibonacci universal code, encoding characters from their ordinals (or lists of integers with `-integers`)
996
1025
  - [X] `gray`: aka reflected binary code
1026
+ - [X] `hamming`: Hamming(7,4) error-correcting code, correcting single-bit errors (and detecting double-bit errors with `hamming84`)
997
1027
  - [X] `manchester`: XORes each bit of the input with `01`
998
1028
  - [X] `manchester-inverted`: variant of `manchester` ; XORes each bit of the input with `10`
1029
+ - [X] `nrzi`: Non-Return-to-Zero Inverted line code, writing 1 (or 0 with `nrzi-space`) as a transition
999
1030
  - [X] `rotateN`: rotates characters by the specified number of bits (*N* belongs to [1, 7] ; Python 3 only)
1000
1031
 
1001
- #### [Checksums](https://python-codext.readthedocs.io/en/latest/enc/checksums)
1032
+ #### [Checksums](https://python-codext.readthedocs.io/en/latest/enc/hashing.html#checksums)
1002
1033
 
1003
1034
  - [X] `adler`: Adler32 algorithm (relies on `zlib`)
1004
1035
  - [X] `crc`: CRC of lengths 8, 10-17, 21, 24, 30-32, 40, 64, 82 with a variety of polynoms
1036
+ - [X] `fletcher`: Fletcher-16, -32 and -64 checksums
1005
1037
  - [X] `luhn`: Luhn mod N algorithm
1006
1038
 
1007
- #### [Common](https://python-codext.readthedocs.io/en/latest/enc/common)
1039
+ #### [Ciphers](https://python-codext.readthedocs.io/en/latest/enc/ciphers.html)
1040
+
1041
+ - [X] `adfgx`: aka ADFGX Cipher (Polybius square and columnar transposition) ; `adfgvx` for its 6x6 variant
1042
+ - [X] `aer256`: aka AER-256 (toy cipher with float arithmetic, from online JavaScript tools)
1043
+ - [X] `affine`: aka Affine Cipher
1044
+ - [X] `armon64`: aka ARMON-64 (variant of AER-256 with a fourth operation)
1045
+ - [X] `atbash`: aka Atbash Cipher
1046
+ - [X] `autoclave`: aka Autoclave/Autokey Cipher (variant of Vigenere Cipher)
1047
+ - [X] `bacon`: aka Baconian Cipher
1048
+ - [X] `barbie-N`: aka Barbie Typewriter (*N* belongs to [1, 4])
1049
+ - [X] `bazeries`: aka Bazeries Cipher (two Polybius grids and a transposition keyed by a number)
1050
+ - [X] `beaufort`: aka Beaufort Cipher (variant of Vigenere Cipher)
1051
+ - [X] `bifid`: aka Bifid Cipher (Delastelle's fractionation with a 5x5 Polybius square) ; `trifid` for its 3x3x3 cube variant
1052
+ - [X] `chaocipher`: aka Chaocipher (two alphabets permuted after each letter)
1053
+ - [X] `columnar`: aka Columnar Transposition Cipher (keyword-ordered columns ; a second keyword gives the double transposition)
1054
+ - [X] `enigma`: aka Enigma machine (Enigma I, M3 and M4, with reflector, rotors, rings, positions and plugboard)
1055
+ - [X] `ezip64`: aka EZIP-64 (variant of ARMON-64 with smaller blocks)
1056
+ - [X] `foursquare`: aka Four-square Cipher (bigrams substituted with two keyed squares and two plain ones)
1057
+ - [X] `fractionated-morse`: aka Fractionated Morse Cipher (Morse code split into groups of three symbols, each replaced by a letter of a keyed alphabet)
1058
+ - [X] `gronsfeld`: aka Gronsfeld Cipher (variant of Vigenere Cipher with a numeric key)
1059
+ - [X] `hill`: aka Hill Cipher (blocks of letters multiplied by a key matrix modulo 26)
1060
+ - [X] `nihilist`: aka Nihilist Cipher (sums of the Polybius coordinates of the text and of a repeated key)
1061
+ - [X] `okto3`: aka OKTO3 (variant of AER-256 with a fourth operation and smaller blocks)
1062
+ - [X] `playfair`: aka Playfair Cipher
1063
+ - [X] `phillips`: aka Phillips Cipher (polyalphabetic block cipher with 8 key squares)
1064
+ - [X] `polybius`: aka Polybius Square Cipher
1065
+ - [X] `porta`: aka Porta Cipher (reciprocal variant of Vigenere Cipher with 13 alphabets)
1066
+ - [X] `railfence`: aka Rail Fence Cipher
1067
+ - [X] `rotN`: aka Caesar cipher (*N* belongs to [1,25])
1068
+ - [X] `scytaleN`: encrypts using the number of letters on the rod (*N* belongs to [1,[)
1069
+ - [X] `shiftN`: shift ordinals (*N* belongs to [1,255])
1070
+ - [X] `skip`: aka Skip Cipher (transposition reading every N-th character, looping on the text)
1071
+ - [X] `trithemius`: aka Trithemius Cipher (variant of Vigenere Cipher)
1072
+ - [X] `twosquare`: aka Two-square Cipher or Double Playfair (bigrams substituted with two keyed squares, vertically or horizontally)
1073
+ - [X] `vernam`: aka Vernam Cipher (XOR with a repeating key)
1074
+ - [X] `vic`: aka VIC Cipher
1075
+ - [X] `vigenere`: aka Vigenere Cipher
1076
+ - [X] `xorN`: XOR with a single byte (*N* belongs to [1,255])
1077
+ - [X] `zara128`: aka ZARA-128 (variant of AER-256 with additions only and smaller blocks)
1078
+
1079
+ > :warning: Ciphers are of course definitely **NOT** encoding functions ; they are implemented for leveraging the `.encode(...)` API from `codecs`.
1080
+
1081
+ #### [Common](https://python-codext.readthedocs.io/en/latest/enc/common.html)
1008
1082
 
1009
1083
  - [X] `a1z26`: keeps words whitespace-separated and uses a custom character separator
1010
1084
  - [X] `cases`: set of case-related encodings (including camel-, kebab-, lower-, pascal-, upper-, snake- and swap-case, slugify, capitalize, title)
@@ -1014,83 +1088,147 @@ This category also contains `ascii85`, `adobe`, `[x]btoa`, `zeromq` with the `ba
1014
1088
  - [X] `ordinal`: dummy character ordinals conversion (converts to 3-digits groups)
1015
1089
  - [X] `ordinal-spaced`: variant of `ordinal` ; dummy character ordinals conversion, handling whitespace separators
1016
1090
 
1017
- #### [Compression](https://python-codext.readthedocs.io/en/latest/enc/compressions)
1091
+ #### [Compression](https://python-codext.readthedocs.io/en/latest/enc/compressions.html)
1018
1092
 
1019
1093
  - [X] `gzip`: standard Gzip compression/decompression
1094
+ - [X] `huffman`: canonical Huffman coding of the bytes, with a self-describing header
1020
1095
  - [X] `lz77`: compresses the given data with the algorithm of Lempel and Ziv of 1977
1021
1096
  - [X] `lz78`: compresses the given data with the algorithm of Lempel and Ziv of 1978
1022
1097
  - [X] `pkzip_deflate`: standard Zip-deflate compression/decompression
1023
1098
  - [X] `pkzip_bzip2`: standard BZip2 compression/decompression
1024
1099
  - [X] `pkzip_lzma`: standard LZMA compression/decompression
1100
+ - [X] `rle`: compresses runs of identical characters with Run-Length Encoding (count before or after each character, compact, bytes or repeated-byte escape variants)
1101
+ - [X] `zstd`: Zstandard compression/decompression (relies on `compression.zstd` from Python 3.14, on `backports.zstd` before)
1025
1102
 
1026
1103
  > :warning: Compression functions are of course definitely **NOT** encoding functions ; they are implemented for leveraging the `.encode(...)` API from `codecs`.
1027
1104
 
1028
- #### [Cryptography](https://python-codext.readthedocs.io/en/latest/enc/crypto)
1105
+ #### [Esoteric](https://python-codext.readthedocs.io/en/latest/enc/esoteric.html)
1029
1106
 
1030
- - [X] `affine`: aka Affine Cipher
1031
- - [X] `atbash`: aka Atbash Cipher
1032
- - [X] `autoclave`: aka Autoclave/Autokey Cipher (variant of Vigenere Cipher)
1033
- - [X] `bacon`: aka Baconian Cipher
1034
- - [X] `barbie-N`: aka Barbie Typewriter (*N* belongs to [1, 4])
1035
- - [X] `beaufort`: aka Beaufort Cipher (variant of Vigenere Cipher)
1036
- - [X] `citrix`: aka Citrix CTX1 password encoding
1037
- - [X] `playfair`: aka Playfair Cipher
1038
- - [X] `phillips`: aka Phillips Cipher (polyalphabetic block cipher with 8 key squares)
1039
- - [X] `polybius`: aka Polybius Square Cipher
1040
- - [X] `railfence`: aka Rail Fence Cipher
1041
- - [X] `rotN`: aka Caesar cipher (*N* belongs to [1,25])
1042
- - [X] `scytaleN`: encrypts using the number of letters on the rod (*N* belongs to [1,[)
1043
- - [X] `shiftN`: shift ordinals (*N* belongs to [1,255])
1044
- - [X] `trithemius`: aka Trithemius Cipher (variant of Vigenere Cipher)
1045
- - [X] `vic`: aka VIC Cipher
1046
- - [X] `vigenere`: aka Vigenere Cipher
1047
- - [X] `xorN`: XOR with a single byte (*N* belongs to [1,255])
1107
+ - [X] `befunge`: Befunge-93, two-dimensional esoteric language (encoding generates a program printing the text)
1108
+ - [X] `brainfuck`: well-known esoteric programming language (encoding generates a program printing the text)
1109
+ - [X] `church`: Church encoding in the lambda calculus (encoding generates a lambda term of the list of the numerals of the bytes)
1110
+ - [X] `cow`: esoteric language made of variations of "moo" (Brainfuck-like, with a register and integer output)
1111
+ - [X] `lolcode`: esoteric language inspired by lolcats (encoding generates a program printing the text), also with lowercase keywords
1112
+ - [X] `malbolge`: esoteric language designed to be as difficult to program in as possible (encoding generates a program printing the text)
1113
+ - [X] `ook`: Brainfuck derivative for orang-utans (`Ook.`, `Ook?` and `Ook!`), also in its short form
1114
+ - [X] `piet`: esoteric language whose programs are images looking like abstract paintings (encoding generates a PNG image of a program printing the text)
1115
+ - [X] `pikalang`: Brainfuck derivative using Pikachu's vocabulary
1048
1116
 
1049
- > :warning: Crypto functions are of course definitely **NOT** encoding functions ; they are implemented for leveraging the `.encode(...)` API from `codecs`.
1117
+ #### [Frequency](https://python-codext.readthedocs.io/en/latest/enc/frequency.html)
1050
1118
 
1051
- #### [Hashing](https://python-codext.readthedocs.io/en/latest/enc/hashing)
1119
+ - [X] `coquelet`: Coquelet 13 and 8 (aka Mk 1 and Mk 2), radio teleprinter systems sending each ITA-2 character as two audio tones (gives their frequencies in Hz)
1120
+ - [X] `dtmf`: Dual-Tone Multi-Frequency telephone keypad signaling (gives the frequencies of the tones in Hz, or a WAV recording with `dtmf-wav`, decoded with the Goertzel algorithm)
1121
+ - [X] `piccolo`: Piccolo I, II (aka Mk 6) and III, radio teleprinter systems sending each ITA-2 character as one or two audio tones (gives their frequencies in Hz)
1052
1122
 
1123
+ #### [Hashing](https://python-codext.readthedocs.io/en/latest/enc/hashing.html)
1124
+
1125
+ - [X] `argon2`: aka Argon2 (RFC 9106) with its i, d and id variants (relies on `argon2-cffi`, e.g. with `pip install codext[argon2]`)
1126
+ - [X] `bcrypt`: aka bcrypt password hash (relies on `bcrypt` when available, e.g. with `pip install codext[bcrypt]`, pure Python otherwise)
1127
+ - [X] `bigcrypt`: aka BigCrypt (DES-based crypt variant for long passwords)
1053
1128
  - [X] `blake`: includes BLAKE2b and BLAKE2s (Python 3 only ; relies on `hashlib`)
1129
+ - [X] `bsd-nthash`: NT hash in the `$3$$` modular crypt format of modern BSD
1130
+ - [X] `bsdi-crypt`: aka BSDi extended DES crypt (parametrized with the number of rounds)
1131
+ - [X] `cisco-asa`: Cisco ASA password hash (parametrized with the user name)
1132
+ - [X] `cisco-pix`: Cisco PIX password hash (parametrized with the user name)
1054
1133
  - [X] `crypt`: Unix's crypt hash for passwords (Python 3 and Unix only ; relies on `crypt`)
1055
- - [X] `md`: aka Message Digest ; includes MD4 and MD5 (relies on `hashlib`)
1056
- - [X] `sha`: aka Secure Hash Algorithms ; includes SHA1, 224, 256, 384, 512 (Python2/3) but also SHA3-224, -256, -384 and -512 (Python 3 only ; relies on `hashlib`)
1134
+ - [X] `crypt16`: aka crypt16 (DES-based crypt variant with two computations)
1135
+ - [X] `ctph`: context triggered piecewise hash of the ctph.js library (as used by CyberChef)
1136
+ - [X] `fnv`: aka Fowler-Noll-Vo ; includes FNV-1 and FNV-1a in 32, 64, 128, 256, 512 and 1024 bits
1137
+ - [X] `gosthash`: aka Streebog (GOST R 34.11-2012) in 256 and 512 bits
1138
+ - [X] `hmac`: keyed-hash message authentication code with MD5, SHA-1, SHA-2, SHA-3 or BLAKE2 (relies on `hmac`)
1139
+ - [X] `keccak`: original Keccak (pre-SHA-3 padding, as used e.g. by Ethereum) in 224, 256, 384 and 512 bits
1140
+ - [X] `ldap-md5`: RFC 2307 LDAP password schemes ; `ldap-sha1`, `ldap-salted-md5` and `ldap-salted-sha1` for the SHA-1 and salted variants
1141
+ - [X] `lm`: aka LAN Manager hash, the legacy Windows password hash (with a pure Python DES)
1142
+ - [X] `md`: aka Message Digest ; includes MD2, MD4 (relies on `hashlib` when available, pure Python otherwise), MD5 (relies on `hashlib`) and MD6 (digest sizes multiple of 8, up to 512 bits)
1143
+ - [X] `mscash`: aka MS-CASH / Domain Cached Credentials v1 (parametrized with the user name) ; `mscash2` for v2 (PBKDF2)
1144
+ - [X] `mssql2000`: Microsoft SQL Server 2000 password hash ; `mssql2005` for the 2005 version
1145
+ - [X] `mysql`: MySQL password hashes ; includes the MySQL 3.23 hash and the MySQL 4.1+ native password hash
1146
+ - [X] `ntlm`: aka NT hash, the Windows password hash (MD4 of the UTF-16LE password)
1147
+ - [X] `oracle10`: legacy Oracle 10g password hash (parametrized with the user name) ; `oracle11` for the 11g version
1148
+ - [X] `phpass`: portable PHP password hash (parametrized with the iteration count ; used e.g. by WordPress)
1149
+ - [X] `ripemd160`: aka RIPEMD-160 (relies on `hashlib` when available, pure Python otherwise)
1150
+ - [X] `scrypt`: aka scrypt (RFC 7914), parameterized with its cost ln, block size r and parallelism p (relies on `hashlib`)
1151
+ - [X] `sha`: aka Secure Hash Algorithms ; includes SHA0, SHA1, 224, 256, 384, 512 (Python2/3) but also SHA3-224, -256, -384 and -512 (Python 3 only ; relies on `hashlib`)
1057
1152
  - [X] `shake`: aka SHAKE hashing (Python 3 only ; relies on `hashlib`)
1153
+ - [X] `snefru`: aka Snefru (Merkle's hash function) in 32 to 480 bits, with 2 to 8 passes
1154
+ - [X] `ssdeep`: ssdeep fuzzy hash (context triggered piecewise hash, same output as libfuzzy)
1155
+ - [X] `sun-md5-crypt`: aka Sun MD5 crypt (parametrized with the number of rounds)
1156
+ - [X] `whirlpool`: aka Whirlpool (relies on `hashlib` when available, pure Python otherwise)
1058
1157
 
1059
1158
  > :warning: Hash functions are of course definitely **NOT** encoding functions ; they are implemented for convenience with the `.encode(...)` API from `codecs` and useful for chaning codecs.
1060
1159
 
1061
- #### [Languages](https://python-codext.readthedocs.io/en/latest/enc/languages)
1160
+ #### [Languages](https://python-codext.readthedocs.io/en/latest/enc/languages.html)
1062
1161
 
1063
1162
  - [X] `braille`: well-known braille language (Python 3 only)
1163
+ - [X] `fancy`: Unicode styled alphabets (mathematical bold, italic, script, fraktur, double-struck, ..., circled and parenthesized letters), also `fullwidth` and `smallcaps`
1064
1164
  - [X] `ipsum`: aka lorem ipsum
1065
- - [X] `galactic`: aka galactic alphabet or Minecraft enchantment language (Python 3 only)
1165
+ - [X] `galactic`: aka Standard Galactic Alphabet or Minecraft enchantment language (as written by most online translators)
1066
1166
  - [X] `leetspeak`: based on minimalistic elite speaking rules
1067
1167
  - [X] `morse`: uses whitespace as a separator
1068
1168
  - [X] `navajo`: only handles letters (not full words from the Navajo dictionary)
1069
1169
  - [X] `radio`: aka NATO or radio phonetic alphabet
1070
1170
  - [X] `southpark`: converts letters to Kenny's language from Southpark (whitespace is also handled)
1071
1171
  - [X] `southpark-icase`: case insensitive variant of `southpark`
1072
- - [X] `tap`: converts text to tap/knock code, commonly used by prisoners
1172
+ - [X] `tap`: converts text to tap/knock code, commonly used by prisoners (as written by cryptii)
1073
1173
  - [X] `tomtom`: similar to `morse`, using slashes and backslashes
1174
+ - [X] `upsidedown`: upside-down (flip) text, with turned Unicode characters in reverse order
1074
1175
 
1075
- #### [Others](https://python-codext.readthedocs.io/en/latest/enc/others)
1176
+ #### [Obfuscation](https://python-codext.readthedocs.io/en/latest/enc/obfuscation.html)
1076
1177
 
1178
+ - [X] `arabica-2rs`: aka ARABICA-2RS (URI-encoded text substituted by Arabic letters, from online JavaScript tools)
1179
+ - [X] `atom128`: aka ATOM-128 (Base64 with a shuffled alphabet, from online JavaScript tools)
1180
+ - [X] `chinzo-72c`: aka CHINZO-72C (URI-encoded text substituted by Chinese characters, from online JavaScript tools)
1181
+ - [X] `cisco-type7`: aka Cisco IOS type 7 password encoding
1182
+ - [X] `citrix`: aka Citrix CTX1 password encoding
1183
+ - [X] `esab46`: aka ESAB-46 (Base64 with a shuffled alphabet, from online JavaScript tools)
1184
+ - [X] `feron74`: aka FERON-74 (Base64 with a shuffled alphabet, from online JavaScript tools)
1185
+ - [X] `gila7`: aka GILA7 (Base64 with a shuffled alphabet, from online JavaScript tools)
1186
+ - [X] `hazz15`: aka HAZZ-15 (Base64 with a shuffled alphabet, from online JavaScript tools)
1187
+ - [X] `hindia-4x`: aka HINDIA-4X (URI-encoded text substituted by Bengali and Devanagari characters, from online JavaScript tools)
1188
+ - [X] `japoo-c2s`: aka JAPOO-C2S (URI-encoded text substituted by Chinese and Japanese characters, from online JavaScript tools)
1189
+ - [X] `korex-3s`: aka KOREX-3S (URI-encoded text substituted by Korean characters, from online JavaScript tools)
1190
+ - [X] `megan35`: aka MEGAN-35 (Base64 with a shuffled alphabet, from online JavaScript tools)
1191
+ - [X] `tigo-3fx`: aka TIGO-3FX (Base64 with a shuffled alphabet, from online JavaScript tools)
1192
+ - [X] `tripo-5`: aka TRIPO-5 (Base64 with a shuffled alphabet, from online JavaScript tools)
1193
+ - [X] `zong22`: aka ZONG22 (Base64 with a shuffled alphabet, from online JavaScript tools)
1194
+
1195
+ #### [Others](https://python-codext.readthedocs.io/en/latest/enc/others.html)
1196
+
1197
+ - [X] `asn1`: readable dump of ASN.1 BER/DER elements (e.g. certificates and keys), encoded back to DER
1198
+ - [X] `ber`: text as an ASN.1 BER string element (decoding indefinite lengths and segmented strings)
1199
+ - [X] `binhex`: BinHex 4.0 (`.hqx`), the binary-to-text encoding of the classic Mac OS
1200
+ - [X] `der`: text as an ASN.1 DER string element (UTF8String)
1077
1201
  - [X] `dna`: implements the 8 rules of DNA sequences (N belongs to [1,8])
1202
+ - [X] `dvorak`: text typed with the Dvorak keyboard layout instead of QWERTY
1203
+ - [X] `kbshift`: keyboard-row shift on multiple layouts (azerty, qwerty, dvorak, ...), parameterized with the layout and shift
1078
1204
  - [X] `letter-indices`: encodes consonants and/or vowels with their corresponding indices
1079
1205
  - [X] `markdown`: unidirectional encoding from Markdown to HTML
1206
+ - [X] `ns3`: ZyXEL NDMS V2 configuration password scrambling (aka NS3)
1207
+ - [X] `soundex`: Soundex phonetic codes (decoding gives English words with the same codes)
1208
+ - [X] `telegraph`: Chinese telegraph code, with the codebooks of Mainland China and Taiwan
1209
+ - [X] `xx`: XXencode, a UUencode variant with an alphanumeric alphabet (`+`, `-`, digits and letters)
1210
+ - [X] `xy`: binary written with two symbols, `x` and `y` by default (aka X-Y)
1211
+ - [X] `yenc`: Usenet binary-to-text encoding (raw, wrapped or framed with header, trailer and CRC32)
1080
1212
 
1081
- #### [Steganography](https://python-codext.readthedocs.io/en/latest/enc/stegano)
1213
+ #### [Steganography](https://python-codext.readthedocs.io/en/latest/enc/stegano.html)
1082
1214
 
1083
1215
  - [X] `hexagram`: uses Base64 and encodes the result to a charset of [I Ching hexagrams](https://en.wikipedia.org/wiki/Hexagram_%28I_Ching%29) (as implemented [here](https://github.com/qntm/hexagram-encode))
1084
1216
  - [X] `klopf`: aka Klopf code ; Polybius square with trivial alphabetical distribution
1085
1217
  - [X] `resistor`: aka resistor color codes
1086
1218
  - [X] `rick`: aka Rick cipher (in reference to Rick Astley's song "*Never gonna give you up*")
1087
1219
  - [X] `sms`: also called _T9 code_ ; uses "`-`" as a separator for encoding, "`-`" or "`_`" or whitespace for decoding
1220
+ - [X] `unicode-tags`: aka ASCII smuggling ; hides ASCII text in invisible Unicode tag characters
1088
1221
  - [X] `whitespace`: replaces bits with whitespaces and tabs
1089
1222
  - [X] `whitespace_after_before`: variant of `whitespace` ; encodes characters as new characters with whitespaces before and after according to an equation described in the codec name (e.g. "`whitespace+2*after-3*before`")
1223
+ - [X] `zero-width`: hides text in invisible zero-width characters (binary, ternary and quinary variants, compatible with zwsp-steg)
1090
1224
 
1091
- #### [Web](https://python-codext.readthedocs.io/en/latest/enc/web)
1225
+ #### [Web](https://python-codext.readthedocs.io/en/latest/enc/web.html)
1092
1226
 
1227
+ - [X] `aaencode`: JavaScript obfuscation with Japanese-style emoticons (encoding generates a program running the code)
1093
1228
  - [X] `html`: implements entities according to [this reference](https://dev.w3.org/html5/html-author/charref)
1229
+ - [X] `jjencode`: JavaScript obfuscation with only symbols (encoding generates a program running the code)
1230
+ - [X] `jsfuck`: JavaScript with only six characters (`[]()!+`) ; encoding generates an expression giving the text, or a program running the code with `jsfuck-eval`
1094
1231
  - [X] `url`: aka URL encoding
1095
1232
 
1096
1233
 
1234
+ <p align="center"><a href="#top"><img src="https://img.shields.io/badge/Back%20to%20top--lightgrey?style=social" alt="Back to top" height="20"/></a></p>