Left: | ||
Right: |
LEFT | RIGHT |
---|---|
1 # This Source Code Form is subject to the terms of the Mozilla Public | 1 # This Source Code Form is subject to the terms of the Mozilla Public |
2 # License, v. 2.0. If a copy of the MPL was not distributed with this | 2 # License, v. 2.0. If a copy of the MPL was not distributed with this |
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
4 | 4 |
5 import re | 5 import re |
6 import struct | 6 import struct |
7 import time | 7 import time |
8 import zlib | 8 import zlib |
9 | 9 |
10 from Crypto.Hash import SHA | 10 from Crypto.Hash import SHA |
(...skipping 13 matching lines...) Expand all Loading... | |
24 data = file.read() | 24 data = file.read() |
25 | 25 |
26 certificates = [] | 26 certificates = [] |
27 key = None | 27 key = None |
28 for match in re.finditer(r'-+BEGIN (.*?)-+(.*?)-+END \1-+', data, re.S): | 28 for match in re.finditer(r'-+BEGIN (.*?)-+(.*?)-+END \1-+', data, re.S): |
29 section = match.group(1) | 29 section = match.group(1) |
30 if section == 'CERTIFICATE': | 30 if section == 'CERTIFICATE': |
31 certificates.append(re.sub(r'\s+', '', match.group(2))) | 31 certificates.append(re.sub(r'\s+', '', match.group(2))) |
32 elif section == 'PRIVATE KEY': | 32 elif section == 'PRIVATE KEY': |
33 key = RSA.importKey(match.group(0)) | 33 key = RSA.importKey(match.group(0)) |
34 if key is None: | 34 if not key: |
Sebastian Noack
2016/08/17 18:41:33
See https://codereview.adblockplus.org/29349869/di
Wladimir Palant
2016/08/17 19:22:28
Done.
| |
35 raise Exception('Cound not find private key in file') | 35 raise Exception('Could not find private key in file') |
36 | 36 |
37 return certificates, key | 37 return certificates, key |
38 | 38 |
39 | 39 |
40 def get_checksum(data): | 40 def get_checksum(data): |
41 return SHA.new(data).digest() | 41 return SHA.new(data).digest() |
42 | 42 |
43 | 43 |
44 def get_hexchecksum(data): | 44 def get_hexchecksum(data): |
45 return SHA.new(data).hexdigest() | 45 return SHA.new(data).hexdigest() |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
119 | 119 |
120 offset = params['signature']['offset'] + params['signature']['size'] | 120 offset = params['signature']['offset'] + params['signature']['size'] |
121 compressed_data = compress_files(contents, params['files'], offset) | 121 compressed_data = compress_files(contents, params['files'], offset) |
122 | 122 |
123 template = getTemplate('xartoc.xml.tmpl', autoEscape=True) | 123 template = getTemplate('xartoc.xml.tmpl', autoEscape=True) |
124 toc_uncompressed = template.render(params).encode('utf-8') | 124 toc_uncompressed = template.render(params).encode('utf-8') |
125 toc_compressed = zlib.compress(toc_uncompressed, 9) | 125 toc_compressed = zlib.compress(toc_uncompressed, 9) |
126 | 126 |
127 with open(archivepath, 'wb') as file: | 127 with open(archivepath, 'wb') as file: |
128 # The file starts with a minimalistic header | 128 # The file starts with a minimalistic header |
129 header = XAR_HEADER.pack(XAR_HEADER_MAGIC, XAR_HEADER.size, | 129 file.write(XAR_HEADER.pack(XAR_HEADER_MAGIC, XAR_HEADER.size, |
Sebastian Noack
2016/08/17 18:41:34
Nit: I'd personally skip the variable:
file.wri
Wladimir Palant
2016/08/17 19:22:28
Done.
| |
130 XAR_VERSION, len(toc_compressed), | 130 XAR_VERSION, len(toc_compressed), |
131 len(toc_uncompressed), XAR_CKSUM_SHA1) | 131 len(toc_uncompressed), XAR_CKSUM_SHA1)) |
132 file.write(header) | |
133 | 132 |
134 # It's followed up with a compressed XML table of contents | 133 # It's followed up with a compressed XML table of contents |
135 file.write(toc_compressed) | 134 file.write(toc_compressed) |
136 | 135 |
137 # Now the actual data, all the offsets are in the table of contents | 136 # Now the actual data, all the offsets are in the table of contents |
138 file.write(get_checksum(toc_compressed)) | 137 file.write(get_checksum(toc_compressed)) |
139 file.write(get_signature(key, toc_compressed)) | 138 file.write(get_signature(key, toc_compressed)) |
140 for blob in compressed_data: | 139 for blob in compressed_data: |
141 file.write(blob) | 140 file.write(blob) |
LEFT | RIGHT |