codext 2.0.0__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 (281) hide show
  1. {codext-2.0.0 → codext-2.0.1}/.github/workflows/python-package.yml +1 -1
  2. {codext-2.0.0 → codext-2.0.1}/PKG-INFO +143 -32
  3. {codext-2.0.0 → codext-2.0.1}/README.md +137 -31
  4. {codext-2.0.0 → codext-2.0.1}/docs/mkdocs.yml +5 -1
  5. {codext-2.0.0 → codext-2.0.1}/docs/pages/cli.md +2 -0
  6. codext-2.0.1/docs/pages/enc/barcodes.md +180 -0
  7. {codext-2.0.0 → codext-2.0.1}/docs/pages/enc/base.md +34 -0
  8. {codext-2.0.0 → codext-2.0.1}/docs/pages/enc/binary.md +48 -0
  9. codext-2.0.0/docs/pages/enc/crypto.md → codext-2.0.1/docs/pages/enc/ciphers.md +212 -17
  10. {codext-2.0.0 → codext-2.0.1}/docs/pages/enc/compressions.md +35 -0
  11. codext-2.0.1/docs/pages/enc/esoteric.md +183 -0
  12. codext-2.0.1/docs/pages/enc/frequency.md +82 -0
  13. codext-2.0.1/docs/pages/enc/hashing.md +482 -0
  14. {codext-2.0.0 → codext-2.0.1}/docs/pages/enc/languages.md +58 -10
  15. codext-2.0.1/docs/pages/enc/obfuscation.md +281 -0
  16. codext-2.0.1/docs/pages/enc/others.md +277 -0
  17. {codext-2.0.0 → codext-2.0.1}/docs/pages/enc/stegano.md +2 -1
  18. codext-2.0.1/docs/pages/enc/web.md +109 -0
  19. {codext-2.0.0 → codext-2.0.1}/docs/pages/features.md +4 -1
  20. {codext-2.0.0 → codext-2.0.1}/docs/pages/guessing.md +48 -13
  21. {codext-2.0.0 → codext-2.0.1}/docs/pages/howto.md +2 -2
  22. {codext-2.0.0 → codext-2.0.1}/docs/pages/index.md +6 -0
  23. {codext-2.0.0 → codext-2.0.1}/pyproject.toml +9 -0
  24. {codext-2.0.0 → codext-2.0.1}/requirements.txt +1 -0
  25. codext-2.0.1/src/codext/VERSION.txt +1 -0
  26. {codext-2.0.0 → codext-2.0.1}/src/codext/__common__.py +87 -399
  27. {codext-2.0.0 → codext-2.0.1}/src/codext/__init__.py +2 -0
  28. {codext-2.0.0 → codext-2.0.1}/src/codext/__main__.py +37 -1
  29. codext-2.0.1/src/codext/barcodes/__init__.py +6 -0
  30. codext-2.0.1/src/codext/barcodes/aztec.py +726 -0
  31. codext-2.0.1/src/codext/barcodes/datamatrix.py +669 -0
  32. codext-2.0.1/src/codext/barcodes/fakeqr.py +216 -0
  33. codext-2.0.1/src/codext/barcodes/pdf417.py +865 -0
  34. codext-2.0.1/src/codext/barcodes/qr.py +671 -0
  35. {codext-2.0.0 → codext-2.0.1}/src/codext/base/__init__.py +4 -0
  36. {codext-2.0.0 → codext-2.0.1}/src/codext/base/_base.py +68 -14
  37. {codext-2.0.0 → codext-2.0.1}/src/codext/base/_base2n.py +12 -2
  38. codext-2.0.1/src/codext/base/base128.py +80 -0
  39. codext-2.0.1/src/codext/base/base131072.py +219 -0
  40. codext-2.0.1/src/codext/base/base256.py +52 -0
  41. {codext-2.0.0 → codext-2.0.1}/src/codext/base/base45.py +4 -1
  42. codext-2.0.1/src/codext/base/base69.py +73 -0
  43. {codext-2.0.0 → codext-2.0.1}/src/codext/binary/__init__.py +2 -0
  44. codext-2.0.1/src/codext/binary/hamming.py +87 -0
  45. codext-2.0.1/src/codext/binary/manchester.py +108 -0
  46. codext-2.0.1/src/codext/binary/nrzi.py +52 -0
  47. {codext-2.0.0 → codext-2.0.1}/src/codext/checksums/__init__.py +1 -0
  48. codext-2.0.1/src/codext/checksums/fletcher.py +39 -0
  49. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/__init__.py +10 -1
  50. codext-2.0.1/src/codext/ciphers/_jsfloat.py +104 -0
  51. codext-2.0.1/src/codext/ciphers/_square.py +67 -0
  52. codext-2.0.1/src/codext/ciphers/aer256.py +35 -0
  53. codext-2.0.1/src/codext/ciphers/armon64.py +37 -0
  54. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/bazeries.py +7 -18
  55. codext-2.0.1/src/codext/ciphers/enigma.py +150 -0
  56. codext-2.0.1/src/codext/ciphers/ezip64.py +35 -0
  57. codext-2.0.1/src/codext/ciphers/foursquare.py +74 -0
  58. codext-2.0.1/src/codext/ciphers/fractionatedmorse.py +91 -0
  59. codext-2.0.1/src/codext/ciphers/okto3.py +35 -0
  60. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/playfair.py +13 -32
  61. codext-2.0.1/src/codext/ciphers/twosquare.py +82 -0
  62. codext-2.0.1/src/codext/ciphers/vernam.py +39 -0
  63. codext-2.0.1/src/codext/ciphers/zara128.py +33 -0
  64. {codext-2.0.0 → codext-2.0.1}/src/codext/compressions/__init__.py +2 -0
  65. codext-2.0.1/src/codext/compressions/huffman.py +137 -0
  66. codext-2.0.1/src/codext/compressions/zstd.py +60 -0
  67. codext-2.0.1/src/codext/esoteric/__init__.py +10 -0
  68. codext-2.0.1/src/codext/esoteric/_brainfuck.py +89 -0
  69. codext-2.0.1/src/codext/esoteric/befunge.py +249 -0
  70. codext-2.0.1/src/codext/esoteric/brainfuck.py +67 -0
  71. codext-2.0.1/src/codext/esoteric/church.py +228 -0
  72. codext-2.0.1/src/codext/esoteric/cow.py +160 -0
  73. codext-2.0.1/src/codext/esoteric/lolcode.py +709 -0
  74. codext-2.0.1/src/codext/esoteric/malbolge.py +198 -0
  75. codext-2.0.1/src/codext/esoteric/ook.py +103 -0
  76. codext-2.0.1/src/codext/esoteric/piet.py +430 -0
  77. codext-2.0.1/src/codext/esoteric/pikalang.py +66 -0
  78. codext-2.0.1/src/codext/frequency/__init__.py +4 -0
  79. codext-2.0.1/src/codext/frequency/_ita2.py +40 -0
  80. codext-2.0.1/src/codext/frequency/coquelet.py +98 -0
  81. codext-2.0.1/src/codext/frequency/dtmf.py +182 -0
  82. codext-2.0.1/src/codext/frequency/piccolo.py +106 -0
  83. codext-2.0.1/src/codext/guess.py +428 -0
  84. codext-2.0.1/src/codext/hashing/__init__.py +29 -0
  85. codext-2.0.1/src/codext/hashing/_descrypt.py +50 -0
  86. codext-2.0.1/src/codext/hashing/_h64.py +52 -0
  87. codext-2.0.1/src/codext/hashing/argon2.py +42 -0
  88. codext-2.0.1/src/codext/hashing/bcrypt.py +107 -0
  89. codext-2.0.1/src/codext/hashing/cisco.py +41 -0
  90. codext-2.0.1/src/codext/hashing/cryptvariants.py +136 -0
  91. codext-2.0.1/src/codext/hashing/ctph.py +92 -0
  92. codext-2.0.1/src/codext/hashing/fnv.py +59 -0
  93. codext-2.0.1/src/codext/hashing/gost.py +137 -0
  94. codext-2.0.1/src/codext/hashing/hmac.py +31 -0
  95. codext-2.0.1/src/codext/hashing/keccak.py +87 -0
  96. codext-2.0.1/src/codext/hashing/ldap.py +32 -0
  97. codext-2.0.1/src/codext/hashing/md.py +154 -0
  98. codext-2.0.1/src/codext/hashing/mscash.py +40 -0
  99. codext-2.0.1/src/codext/hashing/mssql.py +35 -0
  100. codext-2.0.1/src/codext/hashing/mysql.py +35 -0
  101. codext-2.0.1/src/codext/hashing/oracle.py +49 -0
  102. codext-2.0.1/src/codext/hashing/phpass.py +38 -0
  103. codext-2.0.1/src/codext/hashing/postgres.py +25 -0
  104. codext-2.0.1/src/codext/hashing/ripemd.py +73 -0
  105. codext-2.0.1/src/codext/hashing/scrypt.py +44 -0
  106. codext-2.0.1/src/codext/hashing/sha.py +60 -0
  107. codext-2.0.1/src/codext/hashing/snefru.py +268 -0
  108. codext-2.0.1/src/codext/hashing/whirlpool.py +87 -0
  109. codext-2.0.1/src/codext/hashing/windows.py +101 -0
  110. {codext-2.0.0 → codext-2.0.1}/src/codext/languages/__init__.py +2 -0
  111. codext-2.0.1/src/codext/languages/fancy.py +119 -0
  112. codext-2.0.1/src/codext/languages/galactic.py +116 -0
  113. codext-2.0.1/src/codext/languages/tap.py +103 -0
  114. codext-2.0.1/src/codext/languages/upsidedown.py +58 -0
  115. codext-2.0.1/src/codext/obfuscation/__init__.py +17 -0
  116. codext-2.0.1/src/codext/obfuscation/_jsbase64.py +79 -0
  117. codext-2.0.1/src/codext/obfuscation/_jsuri.py +55 -0
  118. codext-2.0.1/src/codext/obfuscation/arabica2rs.py +77 -0
  119. codext-2.0.1/src/codext/obfuscation/atom128.py +30 -0
  120. codext-2.0.1/src/codext/obfuscation/chinzo72c.py +78 -0
  121. codext-2.0.1/src/codext/obfuscation/cisco.py +65 -0
  122. codext-2.0.1/src/codext/obfuscation/esab46.py +30 -0
  123. codext-2.0.1/src/codext/obfuscation/feron74.py +30 -0
  124. codext-2.0.1/src/codext/obfuscation/gila7.py +30 -0
  125. codext-2.0.1/src/codext/obfuscation/hazz15.py +31 -0
  126. codext-2.0.1/src/codext/obfuscation/hindia4x.py +86 -0
  127. codext-2.0.1/src/codext/obfuscation/japooc2s.py +83 -0
  128. codext-2.0.1/src/codext/obfuscation/korex3s.py +70 -0
  129. codext-2.0.1/src/codext/obfuscation/megan35.py +31 -0
  130. codext-2.0.1/src/codext/obfuscation/tigo3fx.py +31 -0
  131. codext-2.0.1/src/codext/obfuscation/tripo5.py +31 -0
  132. codext-2.0.1/src/codext/obfuscation/zong22.py +31 -0
  133. {codext-2.0.0 → codext-2.0.1}/src/codext/others/__init__.py +6 -0
  134. codext-2.0.1/src/codext/others/asn1.py +482 -0
  135. codext-2.0.1/src/codext/others/dvorak.py +45 -0
  136. {codext-2.0.0 → codext-2.0.1}/src/codext/others/letters.py +3 -1
  137. codext-2.0.1/src/codext/others/ns3.py +93 -0
  138. codext-2.0.1/src/codext/others/soundex.py +482 -0
  139. codext-2.0.1/src/codext/others/telegraph.py +278 -0
  140. codext-2.0.1/src/codext/others/xy.py +30 -0
  141. {codext-2.0.0 → codext-2.0.1}/src/codext/stegano/sms.py +2 -1
  142. {codext-2.0.0 → codext-2.0.1}/src/codext/stegano/whitespace.py +30 -9
  143. codext-2.0.1/src/codext/strength.py +164 -0
  144. codext-2.0.1/src/codext/web/__init__.py +7 -0
  145. codext-2.0.1/src/codext/web/_javascript.py +59 -0
  146. codext-2.0.1/src/codext/web/aaencode.py +103 -0
  147. codext-2.0.1/src/codext/web/jjencode.py +135 -0
  148. codext-2.0.1/src/codext/web/jsfuck.py +635 -0
  149. {codext-2.0.0 → codext-2.0.1}/src/codext.egg-info/PKG-INFO +143 -32
  150. codext-2.0.1/src/codext.egg-info/SOURCES.txt +265 -0
  151. {codext-2.0.0 → codext-2.0.1}/src/codext.egg-info/entry_points.txt +4 -0
  152. codext-2.0.1/src/codext.egg-info/requires.txt +13 -0
  153. {codext-2.0.0 → codext-2.0.1}/tests/test_base.py +70 -0
  154. {codext-2.0.0 → codext-2.0.1}/tests/test_common.py +109 -5
  155. codext-2.0.1/tests/test_manual.py +1327 -0
  156. codext-2.0.0/docs/pages/enc/hashing.md +0 -139
  157. codext-2.0.0/docs/pages/enc/others.md +0 -135
  158. codext-2.0.0/docs/pages/enc/web.md +0 -38
  159. codext-2.0.0/src/codext/VERSION.txt +0 -1
  160. codext-2.0.0/src/codext/binary/manchester.py +0 -58
  161. codext-2.0.0/src/codext/hashing/__init__.py +0 -8
  162. codext-2.0.0/src/codext/hashing/md.py +0 -66
  163. codext-2.0.0/src/codext/hashing/sha.py +0 -33
  164. codext-2.0.0/src/codext/languages/galactic.py +0 -40
  165. codext-2.0.0/src/codext/languages/tap.py +0 -45
  166. codext-2.0.0/src/codext/web/__init__.py +0 -4
  167. codext-2.0.0/src/codext.egg-info/SOURCES.txt +0 -163
  168. codext-2.0.0/src/codext.egg-info/requires.txt +0 -4
  169. codext-2.0.0/tests/test_manual.py +0 -245
  170. {codext-2.0.0 → codext-2.0.1}/.github/ISSUE_TEMPLATE/add-encoding.yml +0 -0
  171. {codext-2.0.0 → codext-2.0.1}/.github/copilot-instructions.md +0 -0
  172. {codext-2.0.0 → codext-2.0.1}/.github/dependabot.yml +0 -0
  173. {codext-2.0.0 → codext-2.0.1}/.github/prompts/add_codec.prompt.md +0 -0
  174. {codext-2.0.0 → codext-2.0.1}/.github/pull_request_template.md +0 -0
  175. {codext-2.0.0 → codext-2.0.1}/.github/workflows/security.yml +0 -0
  176. {codext-2.0.0 → codext-2.0.1}/.gitignore +0 -0
  177. {codext-2.0.0 → codext-2.0.1}/.readthedocs.yaml +0 -0
  178. {codext-2.0.0 → codext-2.0.1}/LICENSE +0 -0
  179. {codext-2.0.0 → codext-2.0.1}/SECURITY.md +0 -0
  180. {codext-2.0.0 → codext-2.0.1}/docs/coverage.svg +0 -0
  181. {codext-2.0.0 → codext-2.0.1}/docs/hakin9-codext.pdf +0 -0
  182. {codext-2.0.0 → codext-2.0.1}/docs/pages/contributing.md +0 -0
  183. {codext-2.0.0 → codext-2.0.1}/docs/pages/css/extra.css +0 -0
  184. {codext-2.0.0 → codext-2.0.1}/docs/pages/demos/using-bases.gif +0 -0
  185. {codext-2.0.0 → codext-2.0.1}/docs/pages/demos/using-codext.gif +0 -0
  186. {codext-2.0.0 → codext-2.0.1}/docs/pages/demos/using-debase.gif +0 -0
  187. {codext-2.0.0 → codext-2.0.1}/docs/pages/enc/common.md +0 -0
  188. {codext-2.0.0 → codext-2.0.1}/docs/pages/img/banner.png +0 -0
  189. {codext-2.0.0 → codext-2.0.1}/docs/pages/img/icon.png +0 -0
  190. {codext-2.0.0 → codext-2.0.1}/docs/pages/img/logo.png +0 -0
  191. {codext-2.0.0 → codext-2.0.1}/docs/pages/manipulations.md +0 -0
  192. {codext-2.0.0 → codext-2.0.1}/docs/requirements.txt +0 -0
  193. {codext-2.0.0 → codext-2.0.1}/setup.cfg +0 -0
  194. {codext-2.0.0 → codext-2.0.1}/src/codext/__info__.py +0 -0
  195. {codext-2.0.0 → codext-2.0.1}/src/codext/base/base100.py +0 -0
  196. {codext-2.0.0 → codext-2.0.1}/src/codext/base/base1024.py +0 -0
  197. {codext-2.0.0 → codext-2.0.1}/src/codext/base/base122.py +0 -0
  198. {codext-2.0.0 → codext-2.0.1}/src/codext/base/base38.py +0 -0
  199. {codext-2.0.0 → codext-2.0.1}/src/codext/base/base65536.py +0 -0
  200. {codext-2.0.0 → codext-2.0.1}/src/codext/base/base85.py +0 -0
  201. {codext-2.0.0 → codext-2.0.1}/src/codext/base/base91.py +0 -0
  202. {codext-2.0.0 → codext-2.0.1}/src/codext/base/baseN.py +0 -0
  203. {codext-2.0.0 → codext-2.0.1}/src/codext/base/bech32.py +0 -0
  204. {codext-2.0.0 → codext-2.0.1}/src/codext/base/leb128.py +0 -0
  205. {codext-2.0.0 → codext-2.0.1}/src/codext/binary/_universal.py +0 -0
  206. {codext-2.0.0 → codext-2.0.1}/src/codext/binary/baudot.py +0 -0
  207. {codext-2.0.0 → codext-2.0.1}/src/codext/binary/bcd.py +0 -0
  208. {codext-2.0.0 → codext-2.0.1}/src/codext/binary/chucknorris.py +0 -0
  209. {codext-2.0.0 → codext-2.0.1}/src/codext/binary/elias.py +0 -0
  210. {codext-2.0.0 → codext-2.0.1}/src/codext/binary/excess3.py +0 -0
  211. {codext-2.0.0 → codext-2.0.1}/src/codext/binary/fibonacci.py +0 -0
  212. {codext-2.0.0 → codext-2.0.1}/src/codext/binary/gray.py +0 -0
  213. {codext-2.0.0 → codext-2.0.1}/src/codext/binary/rotate.py +0 -0
  214. {codext-2.0.0 → codext-2.0.1}/src/codext/checksums/adler.py +0 -0
  215. {codext-2.0.0 → codext-2.0.1}/src/codext/checksums/crc.py +0 -0
  216. {codext-2.0.0 → codext-2.0.1}/src/codext/checksums/luhn.py +0 -0
  217. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/adfgx.py +0 -0
  218. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/affine.py +0 -0
  219. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/atbash.py +0 -0
  220. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/bacon.py +0 -0
  221. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/barbie.py +0 -0
  222. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/bifid.py +0 -0
  223. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/chaocipher.py +0 -0
  224. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/columnar.py +0 -0
  225. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/hill.py +0 -0
  226. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/nihilist.py +0 -0
  227. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/phillips.py +0 -0
  228. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/polybius.py +0 -0
  229. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/railfence.py +0 -0
  230. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/rot.py +0 -0
  231. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/scytale.py +0 -0
  232. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/shift.py +0 -0
  233. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/skip.py +0 -0
  234. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/vic.py +0 -0
  235. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/vigenere.py +14 -14
  236. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/ciphers}/xor.py +0 -0
  237. {codext-2.0.0 → codext-2.0.1}/src/codext/common/__init__.py +0 -0
  238. {codext-2.0.0 → codext-2.0.1}/src/codext/common/a1z26.py +0 -0
  239. {codext-2.0.0 → codext-2.0.1}/src/codext/common/cases.py +0 -0
  240. {codext-2.0.0 → codext-2.0.1}/src/codext/common/dummy.py +0 -0
  241. {codext-2.0.0 → codext-2.0.1}/src/codext/common/octal.py +0 -0
  242. {codext-2.0.0 → codext-2.0.1}/src/codext/common/ordinal.py +0 -0
  243. {codext-2.0.0 → codext-2.0.1}/src/codext/compressions/gzipp.py +0 -0
  244. {codext-2.0.0 → codext-2.0.1}/src/codext/compressions/lz77.py +0 -0
  245. {codext-2.0.0 → codext-2.0.1}/src/codext/compressions/lz78.py +0 -0
  246. {codext-2.0.0 → codext-2.0.1}/src/codext/compressions/pkzip.py +0 -0
  247. {codext-2.0.0 → codext-2.0.1}/src/codext/compressions/rle.py +0 -0
  248. {codext-2.0.0 → codext-2.0.1}/src/codext/hashing/blake.py +0 -0
  249. {codext-2.0.0 → codext-2.0.1}/src/codext/hashing/crypt.py +0 -0
  250. {codext-2.0.0 → codext-2.0.1}/src/codext/hashing/mmh3.py +0 -0
  251. {codext-2.0.0 → codext-2.0.1}/src/codext/hashing/shake.py +0 -0
  252. {codext-2.0.0 → codext-2.0.1}/src/codext/languages/braille.py +0 -0
  253. {codext-2.0.0 → codext-2.0.1}/src/codext/languages/ipsum.py +0 -0
  254. {codext-2.0.0 → codext-2.0.1}/src/codext/languages/leetspeak.py +0 -0
  255. {codext-2.0.0 → codext-2.0.1}/src/codext/languages/morse.py +0 -0
  256. {codext-2.0.0 → codext-2.0.1}/src/codext/languages/navajo.py +0 -0
  257. {codext-2.0.0 → codext-2.0.1}/src/codext/languages/radio.py +0 -0
  258. {codext-2.0.0 → codext-2.0.1}/src/codext/languages/southpark.py +0 -0
  259. {codext-2.0.0 → codext-2.0.1}/src/codext/languages/tomtom.py +0 -0
  260. {codext-2.0.0 → codext-2.0.1}/src/codext/macros.json +0 -0
  261. {codext-2.0.0/src/codext/crypto → codext-2.0.1/src/codext/obfuscation}/citrix.py +0 -0
  262. {codext-2.0.0 → codext-2.0.1}/src/codext/others/binhex.py +0 -0
  263. {codext-2.0.0 → codext-2.0.1}/src/codext/others/dna.py +0 -0
  264. {codext-2.0.0 → codext-2.0.1}/src/codext/others/kbshift.py +0 -0
  265. {codext-2.0.0 → codext-2.0.1}/src/codext/others/markdown.py +0 -0
  266. {codext-2.0.0 → codext-2.0.1}/src/codext/others/uuencode.py +0 -0
  267. {codext-2.0.0 → codext-2.0.1}/src/codext/others/xxencode.py +0 -0
  268. {codext-2.0.0 → codext-2.0.1}/src/codext/others/yenc.py +0 -0
  269. {codext-2.0.0 → codext-2.0.1}/src/codext/stegano/__init__.py +0 -0
  270. {codext-2.0.0 → codext-2.0.1}/src/codext/stegano/hexagram.py +0 -0
  271. {codext-2.0.0 → codext-2.0.1}/src/codext/stegano/klopf.py +0 -0
  272. {codext-2.0.0 → codext-2.0.1}/src/codext/stegano/resistor.py +0 -0
  273. {codext-2.0.0 → codext-2.0.1}/src/codext/stegano/rick.py +0 -0
  274. {codext-2.0.0 → codext-2.0.1}/src/codext/stegano/tags.py +0 -0
  275. {codext-2.0.0 → codext-2.0.1}/src/codext/stegano/zerowidth.py +0 -0
  276. {codext-2.0.0 → codext-2.0.1}/src/codext/web/html.py +0 -0
  277. {codext-2.0.0 → codext-2.0.1}/src/codext/web/url.py +0 -0
  278. {codext-2.0.0 → codext-2.0.1}/src/codext.egg-info/dependency_links.txt +0 -0
  279. {codext-2.0.0 → codext-2.0.1}/src/codext.egg-info/top_level.txt +0 -0
  280. {codext-2.0.0 → codext-2.0.1}/tests/__init__.py +0 -0
  281. {codext-2.0.0 → codext-2.0.1}/tests/test_generated.py +0 -0
@@ -48,7 +48,7 @@ jobs:
48
48
  python -m pip install pytest pytest-cov
49
49
  pip install -r requirements.txt
50
50
  pip install "tinyscript>=1.31"
51
- pip install .
51
+ pip install .[bcrypt]
52
52
  - name: Test ${{ env.package }} with pytest
53
53
  run: |
54
54
  pytest --cov=$package --cov-report=xml
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codext
3
- Version: 2.0.0
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
@@ -692,8 +692,13 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
692
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>
@@ -709,7 +714,7 @@ Dynamic: license-file
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 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 **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
@@ -957,6 +962,14 @@ CACTCGGTCGGCCATATGTTCGGCCATATGTTCGTCTGTTCACTCGCCCATACACT
957
962
 
958
963
  ## List of codecs
959
964
 
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
+
960
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
@@ -977,14 +990,19 @@ CACTCGGTCGGCCATATGTTCGGCCATATGTTCGTCTGTTCACTCGCCCATACACT
977
990
  - [X] `base63`: similar to `base62` with the "`_`" added
978
991
  - [X] `base64`: classical conversion according to RFC4648 with its variant URL (or *file*) (it also holds a variant with letters and digits inverted)
979
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)
980
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))
981
995
  - [X] `base91`: [Base91](http://base91.sourceforge.net) custom conversion
982
996
  - [X] `base100` (or *emoji*): [Base100](https://github.com/AdamNiederer/base100) custom conversion
983
- - [X] `base122`: [Base100](http://blog.kevinalbs.com/base122) custom conversion
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
984
1001
  - [X] `base1024` (or *ecoji*): [Ecoji](https://github.com/keith-turner/ecoji) custom conversion (10 bits per emoji, versions 1 and 2)
985
1002
  - [X] `base2048`: [Base2048](https://github.com/qntm/base2048) custom conversion (11 bits per character, optimised for Twitter)
986
1003
  - [X] `base32768`: [Base32768](https://github.com/qntm/base32768) custom conversion (15 bits per character, optimised for UTF-16)
987
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
988
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
989
1007
  - [X] `leb128` (or *varint*): [LEB128](https://en.wikipedia.org/wiki/LEB128) encoding of lists of integers ; `sleb128` for its signed variant
990
1008
  - [X] `base-genericN`: see [base encodings](https://python-codext.readthedocs.io/en/latest/enc/base.html) ; supports any possible base
@@ -1000,46 +1018,30 @@ This category also contains `ascii85`, `adobe`, `[x]btoa`, `zeromq` with the `ba
1000
1018
  - [X] `bcd-extended0`: variant of `bcd` ; encodes characters from their (zero-left-padded) ordinals using prefix bits `0000`
1001
1019
  - [X] `bcd-extended1`: variant of `bcd` ; encodes characters from their (zero-left-padded) ordinals using prefix bits `1111`
1002
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)
1003
1022
  - [X] `elias-gamma`, `elias-delta`: Elias universal codes, encoding characters from their ordinals (or lists of integers with `-integers`)
1004
1023
  - [X] `excess3`: uses Excess-3 (aka Stibitz code) binary encoding to convert characters from their ordinals
1005
1024
  - [X] `fibonacci`: Fibonacci universal code, encoding characters from their ordinals (or lists of integers with `-integers`)
1006
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`)
1007
1027
  - [X] `manchester`: XORes each bit of the input with `01`
1008
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
1009
1030
  - [X] `rotateN`: rotates characters by the specified number of bits (*N* belongs to [1, 7] ; Python 3 only)
1010
1031
 
1011
1032
  #### [Checksums](https://python-codext.readthedocs.io/en/latest/enc/hashing.html#checksums)
1012
1033
 
1013
1034
  - [X] `adler`: Adler32 algorithm (relies on `zlib`)
1014
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
1015
1037
  - [X] `luhn`: Luhn mod N algorithm
1016
1038
 
1017
- #### [Common](https://python-codext.readthedocs.io/en/latest/enc/common.html)
1018
-
1019
- - [X] `a1z26`: keeps words whitespace-separated and uses a custom character separator
1020
- - [X] `cases`: set of case-related encodings (including camel-, kebab-, lower-, pascal-, upper-, snake- and swap-case, slugify, capitalize, title)
1021
- - [X] `dummy`: set of simple encodings (including integer, replace, reverse, word-reverse, substite and strip-spaces)
1022
- - [X] `octal`: dummy octal conversion (converts to 3-digits groups)
1023
- - [X] `octal-spaced`: variant of `octal` ; dummy octal conversion, handling whitespace separators
1024
- - [X] `ordinal`: dummy character ordinals conversion (converts to 3-digits groups)
1025
- - [X] `ordinal-spaced`: variant of `ordinal` ; dummy character ordinals conversion, handling whitespace separators
1026
-
1027
- #### [Compression](https://python-codext.readthedocs.io/en/latest/enc/compressions.html)
1028
-
1029
- - [X] `gzip`: standard Gzip compression/decompression
1030
- - [X] `lz77`: compresses the given data with the algorithm of Lempel and Ziv of 1977
1031
- - [X] `lz78`: compresses the given data with the algorithm of Lempel and Ziv of 1978
1032
- - [X] `pkzip_deflate`: standard Zip-deflate compression/decompression
1033
- - [X] `pkzip_bzip2`: standard BZip2 compression/decompression
1034
- - [X] `pkzip_lzma`: standard LZMA compression/decompression
1035
- - [X] `rle`: compresses runs of identical characters with Run-Length Encoding (count before or after each character, compact, bytes or repeated-byte escape variants)
1036
-
1037
- > :warning: Compression functions are of course definitely **NOT** encoding functions ; they are implemented for leveraging the `.encode(...)` API from `codecs`.
1038
-
1039
- #### [Cryptography](https://python-codext.readthedocs.io/en/latest/enc/crypto.html)
1039
+ #### [Ciphers](https://python-codext.readthedocs.io/en/latest/enc/ciphers.html)
1040
1040
 
1041
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)
1042
1043
  - [X] `affine`: aka Affine Cipher
1044
+ - [X] `armon64`: aka ARMON-64 (variant of AER-256 with a fourth operation)
1043
1045
  - [X] `atbash`: aka Atbash Cipher
1044
1046
  - [X] `autoclave`: aka Autoclave/Autokey Cipher (variant of Vigenere Cipher)
1045
1047
  - [X] `bacon`: aka Baconian Cipher
@@ -1048,11 +1050,15 @@ This category also contains `ascii85`, `adobe`, `[x]btoa`, `zeromq` with the `ba
1048
1050
  - [X] `beaufort`: aka Beaufort Cipher (variant of Vigenere Cipher)
1049
1051
  - [X] `bifid`: aka Bifid Cipher (Delastelle's fractionation with a 5x5 Polybius square) ; `trifid` for its 3x3x3 cube variant
1050
1052
  - [X] `chaocipher`: aka Chaocipher (two alphabets permuted after each letter)
1051
- - [X] `citrix`: aka Citrix CTX1 password encoding
1052
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)
1053
1058
  - [X] `gronsfeld`: aka Gronsfeld Cipher (variant of Vigenere Cipher with a numeric key)
1054
1059
  - [X] `hill`: aka Hill Cipher (blocks of letters multiplied by a key matrix modulo 26)
1055
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)
1056
1062
  - [X] `playfair`: aka Playfair Cipher
1057
1063
  - [X] `phillips`: aka Phillips Cipher (polyalphabetic block cipher with 8 key squares)
1058
1064
  - [X] `polybius`: aka Polybius Square Cipher
@@ -1063,43 +1069,145 @@ This category also contains `ascii85`, `adobe`, `[x]btoa`, `zeromq` with the `ba
1063
1069
  - [X] `shiftN`: shift ordinals (*N* belongs to [1,255])
1064
1070
  - [X] `skip`: aka Skip Cipher (transposition reading every N-th character, looping on the text)
1065
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)
1066
1074
  - [X] `vic`: aka VIC Cipher
1067
1075
  - [X] `vigenere`: aka Vigenere Cipher
1068
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)
1082
+
1083
+ - [X] `a1z26`: keeps words whitespace-separated and uses a custom character separator
1084
+ - [X] `cases`: set of case-related encodings (including camel-, kebab-, lower-, pascal-, upper-, snake- and swap-case, slugify, capitalize, title)
1085
+ - [X] `dummy`: set of simple encodings (including integer, replace, reverse, word-reverse, substite and strip-spaces)
1086
+ - [X] `octal`: dummy octal conversion (converts to 3-digits groups)
1087
+ - [X] `octal-spaced`: variant of `octal` ; dummy octal conversion, handling whitespace separators
1088
+ - [X] `ordinal`: dummy character ordinals conversion (converts to 3-digits groups)
1089
+ - [X] `ordinal-spaced`: variant of `ordinal` ; dummy character ordinals conversion, handling whitespace separators
1069
1090
 
1070
- > :warning: Crypto functions are of course definitely **NOT** encoding functions ; they are implemented for leveraging the `.encode(...)` API from `codecs`.
1091
+ #### [Compression](https://python-codext.readthedocs.io/en/latest/enc/compressions.html)
1092
+
1093
+ - [X] `gzip`: standard Gzip compression/decompression
1094
+ - [X] `huffman`: canonical Huffman coding of the bytes, with a self-describing header
1095
+ - [X] `lz77`: compresses the given data with the algorithm of Lempel and Ziv of 1977
1096
+ - [X] `lz78`: compresses the given data with the algorithm of Lempel and Ziv of 1978
1097
+ - [X] `pkzip_deflate`: standard Zip-deflate compression/decompression
1098
+ - [X] `pkzip_bzip2`: standard BZip2 compression/decompression
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)
1102
+
1103
+ > :warning: Compression functions are of course definitely **NOT** encoding functions ; they are implemented for leveraging the `.encode(...)` API from `codecs`.
1104
+
1105
+ #### [Esoteric](https://python-codext.readthedocs.io/en/latest/enc/esoteric.html)
1106
+
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
1116
+
1117
+ #### [Frequency](https://python-codext.readthedocs.io/en/latest/enc/frequency.html)
1118
+
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)
1071
1122
 
1072
1123
  #### [Hashing](https://python-codext.readthedocs.io/en/latest/enc/hashing.html)
1073
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)
1074
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)
1075
1133
  - [X] `crypt`: Unix's crypt hash for passwords (Python 3 and Unix only ; relies on `crypt`)
1076
- - [X] `md`: aka Message Digest ; includes MD4 and MD5 (relies on `hashlib`)
1077
- - [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`)
1078
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)
1079
1157
 
1080
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.
1081
1159
 
1082
1160
  #### [Languages](https://python-codext.readthedocs.io/en/latest/enc/languages.html)
1083
1161
 
1084
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`
1085
1164
  - [X] `ipsum`: aka lorem ipsum
1086
- - [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)
1087
1166
  - [X] `leetspeak`: based on minimalistic elite speaking rules
1088
1167
  - [X] `morse`: uses whitespace as a separator
1089
1168
  - [X] `navajo`: only handles letters (not full words from the Navajo dictionary)
1090
1169
  - [X] `radio`: aka NATO or radio phonetic alphabet
1091
1170
  - [X] `southpark`: converts letters to Kenny's language from Southpark (whitespace is also handled)
1092
1171
  - [X] `southpark-icase`: case insensitive variant of `southpark`
1093
- - [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)
1094
1173
  - [X] `tomtom`: similar to `morse`, using slashes and backslashes
1174
+ - [X] `upsidedown`: upside-down (flip) text, with turned Unicode characters in reverse order
1175
+
1176
+ #### [Obfuscation](https://python-codext.readthedocs.io/en/latest/enc/obfuscation.html)
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)
1095
1194
 
1096
1195
  #### [Others](https://python-codext.readthedocs.io/en/latest/enc/others.html)
1097
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)
1098
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)
1099
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
1100
1204
  - [X] `letter-indices`: encodes consonants and/or vowels with their corresponding indices
1101
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
1102
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)
1103
1211
  - [X] `yenc`: Usenet binary-to-text encoding (raw, wrapped or framed with header, trailer and CRC32)
1104
1212
 
1105
1213
  #### [Steganography](https://python-codext.readthedocs.io/en/latest/enc/stegano.html)
@@ -1116,7 +1224,10 @@ This category also contains `ascii85`, `adobe`, `[x]btoa`, `zeromq` with the `ba
1116
1224
 
1117
1225
  #### [Web](https://python-codext.readthedocs.io/en/latest/enc/web.html)
1118
1226
 
1227
+ - [X] `aaencode`: JavaScript obfuscation with Japanese-style emoticons (encoding generates a program running the code)
1119
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`
1120
1231
  - [X] `url`: aka URL encoding
1121
1232
 
1122
1233
 
@@ -11,7 +11,7 @@
11
11
  [![DOI](https://zenodo.org/badge/236679865.svg)](https://zenodo.org/badge/latestdoi/236679865)
12
12
  [![License](https://img.shields.io/pypi/l/codext.svg)](https://pypi.python.org/pypi/codext/)
13
13
 
14
- [**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 **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.
14
+ [**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.
15
15
 
16
16
  ```sh
17
17
  $ pip install codext
@@ -259,6 +259,14 @@ CACTCGGTCGGCCATATGTTCGGCCATATGTTCGTCTGTTCACTCGCCCATACACT
259
259
 
260
260
  ## List of codecs
261
261
 
262
+ #### [Barcodes](https://python-codext.readthedocs.io/en/latest/enc/barcodes.html)
263
+
264
+ - [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
265
+ - [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
266
+ - [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`)
267
+ - [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
268
+ - [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
269
+
262
270
  #### [BaseXX](https://python-codext.readthedocs.io/en/latest/enc/base.html)
263
271
 
264
272
  - [X] `base1`: useless, but for the sake of completeness
@@ -279,14 +287,19 @@ CACTCGGTCGGCCATATGTTCGGCCATATGTTCGTCTGTTCACTCGCCCATACACT
279
287
  - [X] `base63`: similar to `base62` with the "`_`" added
280
288
  - [X] `base64`: classical conversion according to RFC4648 with its variant URL (or *file*) (it also holds a variant with letters and digits inverted)
281
289
  - [X] `base67`: custom conversion using some more special characters (also with a variant with letters and digits inverted)
290
+ - [X] `base69`: [Base69](https://github.com/pshihn/base69) encoding (chunks of 7 bytes, 2 characters per 7 bits)
282
291
  - [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))
283
292
  - [X] `base91`: [Base91](http://base91.sourceforge.net) custom conversion
284
293
  - [X] `base100` (or *emoji*): [Base100](https://github.com/AdamNiederer/base100) custom conversion
285
- - [X] `base122`: [Base100](http://blog.kevinalbs.com/base122) custom conversion
294
+ - [X] `base122`: [Base122](http://blog.kevinalbs.com/base122) custom conversion
295
+ - [X] `base128`: conversion to the ASCII charset (with control characters)
296
+ - [X] `base128-latin1`: [Base128](https://github.com/rpuntaie/base128) with printable characters (digits, letters and Latin-1)
297
+ - [X] `base256`: [Base256](https://github.com/KvanTTT/BaseNcoding) with one printable character per byte
286
298
  - [X] `base1024` (or *ecoji*): [Ecoji](https://github.com/keith-turner/ecoji) custom conversion (10 bits per emoji, versions 1 and 2)
287
299
  - [X] `base2048`: [Base2048](https://github.com/qntm/base2048) custom conversion (11 bits per character, optimised for Twitter)
288
300
  - [X] `base32768`: [Base32768](https://github.com/qntm/base32768) custom conversion (15 bits per character, optimised for UTF-16)
289
301
  - [X] `base65536`: [Base65536](https://github.com/qntm/base65536) custom conversion (16 bits per character, optimised for UTF-32)
302
+ - [X] `base131072`: Base131072 conversion (17 bits per character), as implemented by the [base131072](https://docs.rs/base131072) Rust crate
290
303
  - [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
291
304
  - [X] `leb128` (or *varint*): [LEB128](https://en.wikipedia.org/wiki/LEB128) encoding of lists of integers ; `sleb128` for its signed variant
292
305
  - [X] `base-genericN`: see [base encodings](https://python-codext.readthedocs.io/en/latest/enc/base.html) ; supports any possible base
@@ -302,46 +315,30 @@ This category also contains `ascii85`, `adobe`, `[x]btoa`, `zeromq` with the `ba
302
315
  - [X] `bcd-extended0`: variant of `bcd` ; encodes characters from their (zero-left-padded) ordinals using prefix bits `0000`
303
316
  - [X] `bcd-extended1`: variant of `bcd` ; encodes characters from their (zero-left-padded) ordinals using prefix bits `1111`
304
317
  - [X] `chuck-norris`: Chuck Norris unary code (runs of the 7-bit ASCII bits written with blocks of zeros)
318
+ - [X] `differential-manchester`: line code writing the bits as transitions at the start of their periods (also inverted)
305
319
  - [X] `elias-gamma`, `elias-delta`: Elias universal codes, encoding characters from their ordinals (or lists of integers with `-integers`)
306
320
  - [X] `excess3`: uses Excess-3 (aka Stibitz code) binary encoding to convert characters from their ordinals
307
321
  - [X] `fibonacci`: Fibonacci universal code, encoding characters from their ordinals (or lists of integers with `-integers`)
308
322
  - [X] `gray`: aka reflected binary code
323
+ - [X] `hamming`: Hamming(7,4) error-correcting code, correcting single-bit errors (and detecting double-bit errors with `hamming84`)
309
324
  - [X] `manchester`: XORes each bit of the input with `01`
310
325
  - [X] `manchester-inverted`: variant of `manchester` ; XORes each bit of the input with `10`
326
+ - [X] `nrzi`: Non-Return-to-Zero Inverted line code, writing 1 (or 0 with `nrzi-space`) as a transition
311
327
  - [X] `rotateN`: rotates characters by the specified number of bits (*N* belongs to [1, 7] ; Python 3 only)
312
328
 
313
329
  #### [Checksums](https://python-codext.readthedocs.io/en/latest/enc/hashing.html#checksums)
314
330
 
315
331
  - [X] `adler`: Adler32 algorithm (relies on `zlib`)
316
332
  - [X] `crc`: CRC of lengths 8, 10-17, 21, 24, 30-32, 40, 64, 82 with a variety of polynoms
333
+ - [X] `fletcher`: Fletcher-16, -32 and -64 checksums
317
334
  - [X] `luhn`: Luhn mod N algorithm
318
335
 
319
- #### [Common](https://python-codext.readthedocs.io/en/latest/enc/common.html)
320
-
321
- - [X] `a1z26`: keeps words whitespace-separated and uses a custom character separator
322
- - [X] `cases`: set of case-related encodings (including camel-, kebab-, lower-, pascal-, upper-, snake- and swap-case, slugify, capitalize, title)
323
- - [X] `dummy`: set of simple encodings (including integer, replace, reverse, word-reverse, substite and strip-spaces)
324
- - [X] `octal`: dummy octal conversion (converts to 3-digits groups)
325
- - [X] `octal-spaced`: variant of `octal` ; dummy octal conversion, handling whitespace separators
326
- - [X] `ordinal`: dummy character ordinals conversion (converts to 3-digits groups)
327
- - [X] `ordinal-spaced`: variant of `ordinal` ; dummy character ordinals conversion, handling whitespace separators
328
-
329
- #### [Compression](https://python-codext.readthedocs.io/en/latest/enc/compressions.html)
330
-
331
- - [X] `gzip`: standard Gzip compression/decompression
332
- - [X] `lz77`: compresses the given data with the algorithm of Lempel and Ziv of 1977
333
- - [X] `lz78`: compresses the given data with the algorithm of Lempel and Ziv of 1978
334
- - [X] `pkzip_deflate`: standard Zip-deflate compression/decompression
335
- - [X] `pkzip_bzip2`: standard BZip2 compression/decompression
336
- - [X] `pkzip_lzma`: standard LZMA compression/decompression
337
- - [X] `rle`: compresses runs of identical characters with Run-Length Encoding (count before or after each character, compact, bytes or repeated-byte escape variants)
338
-
339
- > :warning: Compression functions are of course definitely **NOT** encoding functions ; they are implemented for leveraging the `.encode(...)` API from `codecs`.
340
-
341
- #### [Cryptography](https://python-codext.readthedocs.io/en/latest/enc/crypto.html)
336
+ #### [Ciphers](https://python-codext.readthedocs.io/en/latest/enc/ciphers.html)
342
337
 
343
338
  - [X] `adfgx`: aka ADFGX Cipher (Polybius square and columnar transposition) ; `adfgvx` for its 6x6 variant
339
+ - [X] `aer256`: aka AER-256 (toy cipher with float arithmetic, from online JavaScript tools)
344
340
  - [X] `affine`: aka Affine Cipher
341
+ - [X] `armon64`: aka ARMON-64 (variant of AER-256 with a fourth operation)
345
342
  - [X] `atbash`: aka Atbash Cipher
346
343
  - [X] `autoclave`: aka Autoclave/Autokey Cipher (variant of Vigenere Cipher)
347
344
  - [X] `bacon`: aka Baconian Cipher
@@ -350,11 +347,15 @@ This category also contains `ascii85`, `adobe`, `[x]btoa`, `zeromq` with the `ba
350
347
  - [X] `beaufort`: aka Beaufort Cipher (variant of Vigenere Cipher)
351
348
  - [X] `bifid`: aka Bifid Cipher (Delastelle's fractionation with a 5x5 Polybius square) ; `trifid` for its 3x3x3 cube variant
352
349
  - [X] `chaocipher`: aka Chaocipher (two alphabets permuted after each letter)
353
- - [X] `citrix`: aka Citrix CTX1 password encoding
354
350
  - [X] `columnar`: aka Columnar Transposition Cipher (keyword-ordered columns ; a second keyword gives the double transposition)
351
+ - [X] `enigma`: aka Enigma machine (Enigma I, M3 and M4, with reflector, rotors, rings, positions and plugboard)
352
+ - [X] `ezip64`: aka EZIP-64 (variant of ARMON-64 with smaller blocks)
353
+ - [X] `foursquare`: aka Four-square Cipher (bigrams substituted with two keyed squares and two plain ones)
354
+ - [X] `fractionated-morse`: aka Fractionated Morse Cipher (Morse code split into groups of three symbols, each replaced by a letter of a keyed alphabet)
355
355
  - [X] `gronsfeld`: aka Gronsfeld Cipher (variant of Vigenere Cipher with a numeric key)
356
356
  - [X] `hill`: aka Hill Cipher (blocks of letters multiplied by a key matrix modulo 26)
357
357
  - [X] `nihilist`: aka Nihilist Cipher (sums of the Polybius coordinates of the text and of a repeated key)
358
+ - [X] `okto3`: aka OKTO3 (variant of AER-256 with a fourth operation and smaller blocks)
358
359
  - [X] `playfair`: aka Playfair Cipher
359
360
  - [X] `phillips`: aka Phillips Cipher (polyalphabetic block cipher with 8 key squares)
360
361
  - [X] `polybius`: aka Polybius Square Cipher
@@ -365,43 +366,145 @@ This category also contains `ascii85`, `adobe`, `[x]btoa`, `zeromq` with the `ba
365
366
  - [X] `shiftN`: shift ordinals (*N* belongs to [1,255])
366
367
  - [X] `skip`: aka Skip Cipher (transposition reading every N-th character, looping on the text)
367
368
  - [X] `trithemius`: aka Trithemius Cipher (variant of Vigenere Cipher)
369
+ - [X] `twosquare`: aka Two-square Cipher or Double Playfair (bigrams substituted with two keyed squares, vertically or horizontally)
370
+ - [X] `vernam`: aka Vernam Cipher (XOR with a repeating key)
368
371
  - [X] `vic`: aka VIC Cipher
369
372
  - [X] `vigenere`: aka Vigenere Cipher
370
373
  - [X] `xorN`: XOR with a single byte (*N* belongs to [1,255])
374
+ - [X] `zara128`: aka ZARA-128 (variant of AER-256 with additions only and smaller blocks)
375
+
376
+ > :warning: Ciphers are of course definitely **NOT** encoding functions ; they are implemented for leveraging the `.encode(...)` API from `codecs`.
377
+
378
+ #### [Common](https://python-codext.readthedocs.io/en/latest/enc/common.html)
379
+
380
+ - [X] `a1z26`: keeps words whitespace-separated and uses a custom character separator
381
+ - [X] `cases`: set of case-related encodings (including camel-, kebab-, lower-, pascal-, upper-, snake- and swap-case, slugify, capitalize, title)
382
+ - [X] `dummy`: set of simple encodings (including integer, replace, reverse, word-reverse, substite and strip-spaces)
383
+ - [X] `octal`: dummy octal conversion (converts to 3-digits groups)
384
+ - [X] `octal-spaced`: variant of `octal` ; dummy octal conversion, handling whitespace separators
385
+ - [X] `ordinal`: dummy character ordinals conversion (converts to 3-digits groups)
386
+ - [X] `ordinal-spaced`: variant of `ordinal` ; dummy character ordinals conversion, handling whitespace separators
371
387
 
372
- > :warning: Crypto functions are of course definitely **NOT** encoding functions ; they are implemented for leveraging the `.encode(...)` API from `codecs`.
388
+ #### [Compression](https://python-codext.readthedocs.io/en/latest/enc/compressions.html)
389
+
390
+ - [X] `gzip`: standard Gzip compression/decompression
391
+ - [X] `huffman`: canonical Huffman coding of the bytes, with a self-describing header
392
+ - [X] `lz77`: compresses the given data with the algorithm of Lempel and Ziv of 1977
393
+ - [X] `lz78`: compresses the given data with the algorithm of Lempel and Ziv of 1978
394
+ - [X] `pkzip_deflate`: standard Zip-deflate compression/decompression
395
+ - [X] `pkzip_bzip2`: standard BZip2 compression/decompression
396
+ - [X] `pkzip_lzma`: standard LZMA compression/decompression
397
+ - [X] `rle`: compresses runs of identical characters with Run-Length Encoding (count before or after each character, compact, bytes or repeated-byte escape variants)
398
+ - [X] `zstd`: Zstandard compression/decompression (relies on `compression.zstd` from Python 3.14, on `backports.zstd` before)
399
+
400
+ > :warning: Compression functions are of course definitely **NOT** encoding functions ; they are implemented for leveraging the `.encode(...)` API from `codecs`.
401
+
402
+ #### [Esoteric](https://python-codext.readthedocs.io/en/latest/enc/esoteric.html)
403
+
404
+ - [X] `befunge`: Befunge-93, two-dimensional esoteric language (encoding generates a program printing the text)
405
+ - [X] `brainfuck`: well-known esoteric programming language (encoding generates a program printing the text)
406
+ - [X] `church`: Church encoding in the lambda calculus (encoding generates a lambda term of the list of the numerals of the bytes)
407
+ - [X] `cow`: esoteric language made of variations of "moo" (Brainfuck-like, with a register and integer output)
408
+ - [X] `lolcode`: esoteric language inspired by lolcats (encoding generates a program printing the text), also with lowercase keywords
409
+ - [X] `malbolge`: esoteric language designed to be as difficult to program in as possible (encoding generates a program printing the text)
410
+ - [X] `ook`: Brainfuck derivative for orang-utans (`Ook.`, `Ook?` and `Ook!`), also in its short form
411
+ - [X] `piet`: esoteric language whose programs are images looking like abstract paintings (encoding generates a PNG image of a program printing the text)
412
+ - [X] `pikalang`: Brainfuck derivative using Pikachu's vocabulary
413
+
414
+ #### [Frequency](https://python-codext.readthedocs.io/en/latest/enc/frequency.html)
415
+
416
+ - [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)
417
+ - [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)
418
+ - [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)
373
419
 
374
420
  #### [Hashing](https://python-codext.readthedocs.io/en/latest/enc/hashing.html)
375
421
 
422
+ - [X] `argon2`: aka Argon2 (RFC 9106) with its i, d and id variants (relies on `argon2-cffi`, e.g. with `pip install codext[argon2]`)
423
+ - [X] `bcrypt`: aka bcrypt password hash (relies on `bcrypt` when available, e.g. with `pip install codext[bcrypt]`, pure Python otherwise)
424
+ - [X] `bigcrypt`: aka BigCrypt (DES-based crypt variant for long passwords)
376
425
  - [X] `blake`: includes BLAKE2b and BLAKE2s (Python 3 only ; relies on `hashlib`)
426
+ - [X] `bsd-nthash`: NT hash in the `$3$$` modular crypt format of modern BSD
427
+ - [X] `bsdi-crypt`: aka BSDi extended DES crypt (parametrized with the number of rounds)
428
+ - [X] `cisco-asa`: Cisco ASA password hash (parametrized with the user name)
429
+ - [X] `cisco-pix`: Cisco PIX password hash (parametrized with the user name)
377
430
  - [X] `crypt`: Unix's crypt hash for passwords (Python 3 and Unix only ; relies on `crypt`)
378
- - [X] `md`: aka Message Digest ; includes MD4 and MD5 (relies on `hashlib`)
379
- - [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`)
431
+ - [X] `crypt16`: aka crypt16 (DES-based crypt variant with two computations)
432
+ - [X] `ctph`: context triggered piecewise hash of the ctph.js library (as used by CyberChef)
433
+ - [X] `fnv`: aka Fowler-Noll-Vo ; includes FNV-1 and FNV-1a in 32, 64, 128, 256, 512 and 1024 bits
434
+ - [X] `gosthash`: aka Streebog (GOST R 34.11-2012) in 256 and 512 bits
435
+ - [X] `hmac`: keyed-hash message authentication code with MD5, SHA-1, SHA-2, SHA-3 or BLAKE2 (relies on `hmac`)
436
+ - [X] `keccak`: original Keccak (pre-SHA-3 padding, as used e.g. by Ethereum) in 224, 256, 384 and 512 bits
437
+ - [X] `ldap-md5`: RFC 2307 LDAP password schemes ; `ldap-sha1`, `ldap-salted-md5` and `ldap-salted-sha1` for the SHA-1 and salted variants
438
+ - [X] `lm`: aka LAN Manager hash, the legacy Windows password hash (with a pure Python DES)
439
+ - [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)
440
+ - [X] `mscash`: aka MS-CASH / Domain Cached Credentials v1 (parametrized with the user name) ; `mscash2` for v2 (PBKDF2)
441
+ - [X] `mssql2000`: Microsoft SQL Server 2000 password hash ; `mssql2005` for the 2005 version
442
+ - [X] `mysql`: MySQL password hashes ; includes the MySQL 3.23 hash and the MySQL 4.1+ native password hash
443
+ - [X] `ntlm`: aka NT hash, the Windows password hash (MD4 of the UTF-16LE password)
444
+ - [X] `oracle10`: legacy Oracle 10g password hash (parametrized with the user name) ; `oracle11` for the 11g version
445
+ - [X] `phpass`: portable PHP password hash (parametrized with the iteration count ; used e.g. by WordPress)
446
+ - [X] `ripemd160`: aka RIPEMD-160 (relies on `hashlib` when available, pure Python otherwise)
447
+ - [X] `scrypt`: aka scrypt (RFC 7914), parameterized with its cost ln, block size r and parallelism p (relies on `hashlib`)
448
+ - [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`)
380
449
  - [X] `shake`: aka SHAKE hashing (Python 3 only ; relies on `hashlib`)
450
+ - [X] `snefru`: aka Snefru (Merkle's hash function) in 32 to 480 bits, with 2 to 8 passes
451
+ - [X] `ssdeep`: ssdeep fuzzy hash (context triggered piecewise hash, same output as libfuzzy)
452
+ - [X] `sun-md5-crypt`: aka Sun MD5 crypt (parametrized with the number of rounds)
453
+ - [X] `whirlpool`: aka Whirlpool (relies on `hashlib` when available, pure Python otherwise)
381
454
 
382
455
  > :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.
383
456
 
384
457
  #### [Languages](https://python-codext.readthedocs.io/en/latest/enc/languages.html)
385
458
 
386
459
  - [X] `braille`: well-known braille language (Python 3 only)
460
+ - [X] `fancy`: Unicode styled alphabets (mathematical bold, italic, script, fraktur, double-struck, ..., circled and parenthesized letters), also `fullwidth` and `smallcaps`
387
461
  - [X] `ipsum`: aka lorem ipsum
388
- - [X] `galactic`: aka galactic alphabet or Minecraft enchantment language (Python 3 only)
462
+ - [X] `galactic`: aka Standard Galactic Alphabet or Minecraft enchantment language (as written by most online translators)
389
463
  - [X] `leetspeak`: based on minimalistic elite speaking rules
390
464
  - [X] `morse`: uses whitespace as a separator
391
465
  - [X] `navajo`: only handles letters (not full words from the Navajo dictionary)
392
466
  - [X] `radio`: aka NATO or radio phonetic alphabet
393
467
  - [X] `southpark`: converts letters to Kenny's language from Southpark (whitespace is also handled)
394
468
  - [X] `southpark-icase`: case insensitive variant of `southpark`
395
- - [X] `tap`: converts text to tap/knock code, commonly used by prisoners
469
+ - [X] `tap`: converts text to tap/knock code, commonly used by prisoners (as written by cryptii)
396
470
  - [X] `tomtom`: similar to `morse`, using slashes and backslashes
471
+ - [X] `upsidedown`: upside-down (flip) text, with turned Unicode characters in reverse order
472
+
473
+ #### [Obfuscation](https://python-codext.readthedocs.io/en/latest/enc/obfuscation.html)
474
+
475
+ - [X] `arabica-2rs`: aka ARABICA-2RS (URI-encoded text substituted by Arabic letters, from online JavaScript tools)
476
+ - [X] `atom128`: aka ATOM-128 (Base64 with a shuffled alphabet, from online JavaScript tools)
477
+ - [X] `chinzo-72c`: aka CHINZO-72C (URI-encoded text substituted by Chinese characters, from online JavaScript tools)
478
+ - [X] `cisco-type7`: aka Cisco IOS type 7 password encoding
479
+ - [X] `citrix`: aka Citrix CTX1 password encoding
480
+ - [X] `esab46`: aka ESAB-46 (Base64 with a shuffled alphabet, from online JavaScript tools)
481
+ - [X] `feron74`: aka FERON-74 (Base64 with a shuffled alphabet, from online JavaScript tools)
482
+ - [X] `gila7`: aka GILA7 (Base64 with a shuffled alphabet, from online JavaScript tools)
483
+ - [X] `hazz15`: aka HAZZ-15 (Base64 with a shuffled alphabet, from online JavaScript tools)
484
+ - [X] `hindia-4x`: aka HINDIA-4X (URI-encoded text substituted by Bengali and Devanagari characters, from online JavaScript tools)
485
+ - [X] `japoo-c2s`: aka JAPOO-C2S (URI-encoded text substituted by Chinese and Japanese characters, from online JavaScript tools)
486
+ - [X] `korex-3s`: aka KOREX-3S (URI-encoded text substituted by Korean characters, from online JavaScript tools)
487
+ - [X] `megan35`: aka MEGAN-35 (Base64 with a shuffled alphabet, from online JavaScript tools)
488
+ - [X] `tigo-3fx`: aka TIGO-3FX (Base64 with a shuffled alphabet, from online JavaScript tools)
489
+ - [X] `tripo-5`: aka TRIPO-5 (Base64 with a shuffled alphabet, from online JavaScript tools)
490
+ - [X] `zong22`: aka ZONG22 (Base64 with a shuffled alphabet, from online JavaScript tools)
397
491
 
398
492
  #### [Others](https://python-codext.readthedocs.io/en/latest/enc/others.html)
399
493
 
494
+ - [X] `asn1`: readable dump of ASN.1 BER/DER elements (e.g. certificates and keys), encoded back to DER
495
+ - [X] `ber`: text as an ASN.1 BER string element (decoding indefinite lengths and segmented strings)
400
496
  - [X] `binhex`: BinHex 4.0 (`.hqx`), the binary-to-text encoding of the classic Mac OS
497
+ - [X] `der`: text as an ASN.1 DER string element (UTF8String)
401
498
  - [X] `dna`: implements the 8 rules of DNA sequences (N belongs to [1,8])
499
+ - [X] `dvorak`: text typed with the Dvorak keyboard layout instead of QWERTY
500
+ - [X] `kbshift`: keyboard-row shift on multiple layouts (azerty, qwerty, dvorak, ...), parameterized with the layout and shift
402
501
  - [X] `letter-indices`: encodes consonants and/or vowels with their corresponding indices
403
502
  - [X] `markdown`: unidirectional encoding from Markdown to HTML
503
+ - [X] `ns3`: ZyXEL NDMS V2 configuration password scrambling (aka NS3)
504
+ - [X] `soundex`: Soundex phonetic codes (decoding gives English words with the same codes)
505
+ - [X] `telegraph`: Chinese telegraph code, with the codebooks of Mainland China and Taiwan
404
506
  - [X] `xx`: XXencode, a UUencode variant with an alphanumeric alphabet (`+`, `-`, digits and letters)
507
+ - [X] `xy`: binary written with two symbols, `x` and `y` by default (aka X-Y)
405
508
  - [X] `yenc`: Usenet binary-to-text encoding (raw, wrapped or framed with header, trailer and CRC32)
406
509
 
407
510
  #### [Steganography](https://python-codext.readthedocs.io/en/latest/enc/stegano.html)
@@ -418,7 +521,10 @@ This category also contains `ascii85`, `adobe`, `[x]btoa`, `zeromq` with the `ba
418
521
 
419
522
  #### [Web](https://python-codext.readthedocs.io/en/latest/enc/web.html)
420
523
 
524
+ - [X] `aaencode`: JavaScript obfuscation with Japanese-style emoticons (encoding generates a program running the code)
421
525
  - [X] `html`: implements entities according to [this reference](https://dev.w3.org/html5/html-author/charref)
526
+ - [X] `jjencode`: JavaScript obfuscation with only symbols (encoding generates a program running the code)
527
+ - [X] `jsfuck`: JavaScript with only six characters (`[]()!+`) ; encoding generates an expression giving the text, or a program running the code with `jsfuck-eval`
422
528
  - [X] `url`: aka URL encoding
423
529
 
424
530
 
@@ -11,13 +11,17 @@ nav:
11
11
  - Features: features.md
12
12
  - 'Guess mode': guessing.md
13
13
  - Encodings:
14
+ - Barcodes: enc/barcodes.md
14
15
  - Base: enc/base.md
15
16
  - Binary: enc/binary.md
17
+ - Ciphers: enc/ciphers.md
16
18
  - Common: enc/common.md
17
19
  - Compressions: enc/compressions.md
18
- - Cryptography: enc/crypto.md
20
+ - Esoteric: enc/esoteric.md
21
+ - Frequency: enc/frequency.md
19
22
  - Hashing: enc/hashing.md
20
23
  - Languages: enc/languages.md
24
+ - Obfuscation: enc/obfuscation.md
21
25
  - Others: enc/others.md
22
26
  - Steganography: enc/stegano.md
23
27
  - Web: enc/web.md