Added manga-py source
This commit is contained in:
126
manga-py-stable_1.x/manga_py/crypt/base_lib.py
Normal file
126
manga-py-stable_1.x/manga_py/crypt/base_lib.py
Normal file
@@ -0,0 +1,126 @@
|
||||
import base64
|
||||
import codecs
|
||||
import gzip
|
||||
import zlib
|
||||
from binascii import unhexlify
|
||||
from struct import pack, unpack
|
||||
|
||||
from Crypto.Cipher import AES
|
||||
from Crypto.Hash import SHA256, MD5
|
||||
from execjs import compile
|
||||
|
||||
|
||||
class BaseLib:
|
||||
|
||||
@staticmethod
|
||||
def decode_escape(data): # pragma: no cover
|
||||
|
||||
if isinstance(data, str):
|
||||
data = data.encode()
|
||||
try:
|
||||
data = codecs.escape_decode(data)
|
||||
return data[0]
|
||||
except Exception:
|
||||
return ''
|
||||
|
||||
@staticmethod
|
||||
def encode_hex(data): # pragma: no cover
|
||||
return codecs.decode(data, 'hex')
|
||||
|
||||
@staticmethod
|
||||
def to_sha_256(data): # pragma: no cover
|
||||
if isinstance(data, str):
|
||||
data = data.encode()
|
||||
sha = SHA256.new()
|
||||
sha.update(data)
|
||||
return sha.digest()
|
||||
|
||||
@staticmethod
|
||||
def decrypt_aes(iv, key, data, mode: int = AES.MODE_CBC): # pragma: no cover
|
||||
aes = AES.new(key, mode, iv)
|
||||
return aes.decrypt(data)
|
||||
|
||||
@staticmethod
|
||||
def base64decode(data, altchars=None, validate=False): # pragma: no cover
|
||||
return base64.b64decode(data, altchars, validate)
|
||||
|
||||
@staticmethod
|
||||
def base64encode(data, altchars=None): # pragma: no cover
|
||||
return base64.b64encode(data, altchars)
|
||||
|
||||
@staticmethod
|
||||
def exec_js(source, js): # pragma: no cover
|
||||
return compile(source).eval(js)
|
||||
|
||||
@staticmethod
|
||||
def gunzip(data): # pragma: no cover
|
||||
return gzip.decompress(data)
|
||||
|
||||
@staticmethod
|
||||
def gzip(data, lvl: int = 9): # pragma: no cover
|
||||
return gzip.compress(data, lvl)
|
||||
|
||||
@staticmethod
|
||||
def zlib_d(data, **kwargs): # pragma: no cover
|
||||
return zlib.decompress(data, **kwargs)
|
||||
|
||||
@staticmethod
|
||||
def zlib_c(data, **kwargs): # pragma: no cover
|
||||
return zlib.compress(data, **kwargs)
|
||||
|
||||
@staticmethod
|
||||
def md5(string): # pragma: no cover
|
||||
if isinstance(string, str):
|
||||
string = string.encode()
|
||||
_ = MD5.new()
|
||||
_.update(string)
|
||||
return _
|
||||
|
||||
@staticmethod
|
||||
def pack(fmt, *args): # pragma: no cover
|
||||
return pack(fmt, *args)
|
||||
|
||||
@staticmethod
|
||||
def unpack(fmt, string): # pragma: no cover
|
||||
return unpack(fmt, string)
|
||||
|
||||
@staticmethod
|
||||
def pack_auto(int_list) -> bytes:
|
||||
"""
|
||||
:param int_list: list
|
||||
:return: str
|
||||
"""
|
||||
base_frm = '{}B'.format(len(int_list))
|
||||
return pack(base_frm, *int_list)
|
||||
|
||||
@staticmethod
|
||||
def unpack_auto(string) -> list:
|
||||
"""
|
||||
:param string: str
|
||||
:return: tuple
|
||||
"""
|
||||
if isinstance(string, str):
|
||||
string = string.encode()
|
||||
|
||||
return list(string)
|
||||
|
||||
@staticmethod
|
||||
def str2hex(string):
|
||||
hex_str = ''
|
||||
if isinstance(string, bytes):
|
||||
string = string.decode()
|
||||
for char in string:
|
||||
int_char = ord(char)
|
||||
hex_num = hex(int_char).lstrip("0x")
|
||||
hex_str += hex_num
|
||||
return hex_str
|
||||
|
||||
@staticmethod
|
||||
def hex2str(string):
|
||||
clear_str = ''
|
||||
if isinstance(string, bytes):
|
||||
string = string.decode()
|
||||
for counter in range(0, len(string), 2):
|
||||
hex_char = string[counter] + string[counter + 1]
|
||||
clear_str += unhexlify(hex_char)
|
||||
return clear_str
|
||||
Reference in New Issue
Block a user