venigma_internal.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. # import base64
  2. class Enigma:
  3. def __init__(self, config):
  4. self._vk_id = config.vk_id()
  5. def R():
  6. return "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN0PQRSTUVWXYZO123456789+/="
  7. def vk_id(self):
  8. return self._vk_id
  9. def decode(self, cursed_url):
  10. return self.s(cursed_url)
  11. def a(self, e):
  12. if not e or len(e) % 4 == 1:
  13. result = False
  14. # print("a result (Base64):", base64.b64encode(str(result).encode()).decode())
  15. return result
  16. t, o, n, i, s = None, None, 0, 0, ""
  17. while True:
  18. o = e[i] if i < len(e) else None
  19. if not o:
  20. break
  21. o = Enigma.R().find(o)
  22. if o != -1:
  23. t = o if n % 4 == 0 else 64 * t + o
  24. n += 1
  25. if (n - 1) % 4 != 0:
  26. s += chr(255 & (t >> (-2 * n & 6)))
  27. i += 1
  28. result = s
  29. # print("a result (Base64):", base64.b64encode(result.encode()).decode())
  30. return result
  31. def s(self, e):
  32. n = e.split("?extra=")[1].split("#")
  33. r = "" if n[1] == "" else self.a(n[1])
  34. n = self.a(n[0])
  35. if not isinstance(r, str) or not n:
  36. # print("s result (Base64):", base64.b64encode(e.encode()).decode())
  37. return e
  38. r = r.split(chr(9)) if r else []
  39. s = len(r)
  40. while s > 0:
  41. s -= 1
  42. o = r[s].split(chr(11))
  43. t = o[0]
  44. o[0] = n
  45. if not hasattr(Enigma.EnigmaI, t):
  46. # print("s result (Base64):", base64.b64encode(e.encode()).decode())
  47. return e
  48. n = getattr(Enigma.EnigmaI, t)(*o, self.vk_id())
  49. if n and n.startswith("http"):
  50. # print("s result (Base64):", base64.b64encode(n.encode()).decode())
  51. return n
  52. # print("s result (Base64):", base64.b64encode(e.encode()).decode())
  53. raise ValueError(f"<{e}> can not be decoded")
  54. return e
  55. class EnigmaI:
  56. @staticmethod
  57. def v(e, _vk_id):
  58. result = e[::-1]
  59. # print("i.v result (Base64):", base64.b64encode(result.encode()).decode())
  60. return result
  61. @staticmethod
  62. def r(e, t, _vk_id):
  63. o = None
  64. e = list(e)
  65. n = Enigma.R() + Enigma.R()
  66. i = len(e)
  67. for _ in range(i):
  68. o = n.find(e[i - 1])
  69. if o != -1:
  70. e[i - 1] = n[o - t : o - t + 1]
  71. i -= 1
  72. result = "".join(e)
  73. # print("i.r result (Base64):", base64.b64encode(result.encode()).decode())
  74. return result
  75. @staticmethod
  76. def s(e, t, _vk_id):
  77. o = len(e)
  78. if o:
  79. def inner_n(e, t):
  80. o = len(e)
  81. n = []
  82. if o:
  83. t = abs(t)
  84. e = o
  85. n = [None] * e
  86. while e > 0:
  87. e -= 1
  88. t = (o * (e + 1) ^ t + e) % o
  89. n[e] = t
  90. # print(
  91. # "i.anon_s result (Base64):", base64.b64encode((''.join([str(i) for i in n])).encode()).decode()
  92. # )
  93. return n
  94. n = inner_n(e, t)
  95. r = 0
  96. e = list(e)
  97. r += 1
  98. while r < o:
  99. e[r], e[n[o - 1 - r]] = e[n[o - 1 - r]], e[r]
  100. r += 1
  101. e = "".join(e)
  102. result = e
  103. # print("i.s result (Base64):", base64.b64encode(result.encode()).decode())
  104. return result
  105. @staticmethod
  106. def i(e, t, vk_id):
  107. result = Enigma.EnigmaI.s(e, int(t) ^ vk_id, vk_id)
  108. # print("i.i result (Base64):", base64.b64encode(result.encode()).decode())
  109. return result
  110. @staticmethod
  111. def x(e, t):
  112. o = []
  113. t = ord(t[0])
  114. for n in e:
  115. o.append(chr(ord(n) ^ t))
  116. result = "".join(o)
  117. # print("i.x result (Base64):", base64.b64encode(result.encode()).decode())
  118. return result