Spaces:
Running
Running
| # -*- coding: utf-8 -*- | |
| from __future__ import absolute_import | |
| from __future__ import print_function | |
| from __future__ import unicode_literals | |
| from hashlib import sha1 | |
| from io import BytesIO | |
| import zlib | |
| from hwp5.filestructure import Hwp5DistDoc | |
| from hwp5.distdoc import decode_head_to_sha1 | |
| from hwp5.distdoc import decode_head_to_key | |
| from hwp5.distdoc import decrypt_tail | |
| from hwp5.recordstream import read_record | |
| from hwp5.tagids import HWPTAG_PARA_HEADER | |
| import hwp5.distdoc | |
| import hwp5.compressed | |
| from .test_filestructure import TestBase | |
| class TestHwp5DistDocFunctions(TestBase): | |
| hwp5file_name = 'viewtext.hwp' | |
| password_sha1 = sha1(b'12345').hexdigest() | |
| def hwp5distdoc(self): | |
| return Hwp5DistDoc(self.olestg) | |
| def section(self): | |
| return self.hwp5distdoc['ViewText']['Section0'] | |
| def test_distdoc_decode_head_to_sha1(self): | |
| password_sha1 = self.password_sha1 | |
| password_sha1 = password_sha1.upper() | |
| password_sha1 = password_sha1.encode('utf-16le') | |
| expected = password_sha1 | |
| section_head = self.section.head() | |
| decoded = decode_head_to_sha1(section_head) | |
| self.assertEqual(expected, decoded) | |
| def test_distdoc_decode_head_to_key(self): | |
| section = self.section | |
| expected = self.password_sha1.upper().encode('utf-16le')[:16] | |
| self.assertEqual(expected, decode_head_to_key(section.head())) | |
| self.assertEqual(expected, section.head_key()) | |
| def test_distdoc_decrypt_tail(self): | |
| section = self.section | |
| key = section.head_key() | |
| tail = section.tail() | |
| decrypted = decrypt_tail(key, tail) | |
| decompressed = zlib.decompress(decrypted, -15) | |
| record = read_record(BytesIO(decompressed), 0) | |
| self.assertEqual(0, record['level']) | |
| self.assertEqual(HWPTAG_PARA_HEADER, record['tagid']) | |
| self.assertEqual(22, record['size']) | |
| self.assertEqual(390, len(decompressed)) | |
| def test_distdoc_decode(self): | |
| section = self.section | |
| stream = hwp5.distdoc.decode(section.wrapped.open()) | |
| stream = hwp5.compressed.decompress(stream) | |
| record = read_record(stream, 0) | |
| self.assertEqual(0, record['level']) | |
| self.assertEqual(HWPTAG_PARA_HEADER, record['tagid']) | |
| self.assertEqual(22, record['size']) | |