MCPcopy Index your code
hub / github.com/pyload/pyload / DLCDecrypter

Class DLCDecrypter

module/plugins/container/DLC.py:18–60  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

16
17
18class DLCDecrypter(object):
19 KEY = "cb99b5cbc24db398"
20 IV = "9bc24cb995cb8db3"
21 API_URL = "http://service.jdownloader.org/dlcrypt/service.php?srcType=dlc&destType=pylo&data=%s"
22
23 def __init__(self, plugin):
24 self.plugin = plugin
25
26 def decrypt(self, data):
27 data = data.strip()
28
29 data += '=' * (-len(data) % 4)
30
31 dlc_key = data[-88:]
32 dlc_data = data[:-88].decode('base64')
33 dlc_content = self.plugin.load(self.API_URL % dlc_key)
34
35 try:
36 rc = re.search(r'<rc>(.+)</rc>', dlc_content, re.S).group(1).decode('base64')[:16]
37
38 except AttributeError:
39 raise BadDLC
40
41 key = iv = Crypto.Cipher.AES.new(self.KEY, Crypto.Cipher.AES.MODE_CBC, self.IV).decrypt(rc)
42
43 xml_data = Crypto.Cipher.AES.new(key, Crypto.Cipher.AES.MODE_CBC, iv).decrypt(dlc_data).decode('base64')
44
45 root = xml.dom.minidom.parseString(xml_data).documentElement
46 content_node = root.getElementsByTagName("content")[0]
47
48 packages = DLCDecrypter._parse_packages(content_node)
49
50 return packages
51
52 @staticmethod
53 def _parse_packages(start_node):
54 return [(decode(node.getAttribute("name").decode('base64')), DLCDecrypter._parse_links(node))
55 for node in start_node.getElementsByTagName("package")]
56
57 @staticmethod
58 def _parse_links(start_node):
59 return [node.getElementsByTagName("url")[0].firstChild.data.decode('base64')
60 for node in start_node.getElementsByTagName("file")]
61
62
63class DLC(Container):

Callers 1

decryptMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected