| | |
| | 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']) |
| |
|