| |
| 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() |
|
|
| @property |
| def hwp5distdoc(self): |
| return Hwp5DistDoc(self.olestg) |
|
|
| @property |
| 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']) |
|
|