# Unix SMB/CIFS implementation. # Copyright © Douglas Bagnall 2025 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import samba from samba.tests import TestCase, DynamicTestCase from samba.ndr import ndr_pack, ndr_unpack from samba.dcerpc import security class BaseSDTestCase(TestCase): maxDiff = 10000 _cases = { # subclasses should have a mapping of test names to binhex # strings, as readable by bytes.fromhex(). # # note, in Python 3.7+ that means hex pairs separated by any # amount of whitespace, but in Python 3.6 it means any number # of spaces. For example; # # 'ok_in_36': ("01 0203 04 05" # " 06"), # 'ok_in_37': """ # 01 02\t03 # 04 # 05 06""" } @classmethod def setUpDynamicTestCases(cls): for k, v in cls._cases.items(): cls.generate_dynamic_test('test_sd', k, v) def _test_sd_with_args(self, v): packed = bytes.fromhex(v) try: sd = ndr_unpack(security.descriptor, packed) except (TypeError, ValueError, RuntimeError) as e: self.fail(f"raised {e}") try: repack = ndr_pack(sd) except (TypeError, ValueError) as e: self.fail(f"raised {e}") sd2 = ndr_unpack(security.descriptor, repack) self.assertEqual(sd, sd2) @DynamicTestCase class SDTestCase(BaseSDTestCase): _cases = { "sd_01": ( # this one is manually annotated, but not because it is # especially interesting. "01 " # version "00 " # "17 8c " # control: SR,RM,PS,SI,SD,SP,DP "14 00 00 00 " # owner offset (20) "30 00 00 00 " # group offset (48) "4c 00 00 00 " # sacl offset (76) "c4 00 00 00 " # dacl offset (196) "01 05 " # S-1- (5 sub auths) "00 00 00 00 00 05 " # 5- "15 00 00 00 " # 21- "51 d7 cf 86 " "f9 1b ef 93 " "c3 53 ea 70 " "00 02 00 00 " "01 05 " # group: S-1-5-21-b-c-d-e "00 00 00 00 00 05 " "15 00 00 00 " "51 d7 cf 86 " "f9 1b ef 93 " "c3 53 ea 70 " "00 02 00 00 " # SACL "04 00 " # sacl v4 "78 00 " # sacl size (92) "02 00 " # ace count (2) "00 00 " "07 " # sacl ACE, SYSTEM_AUDIT_OBJECT_ACE_TYPE "5a " # flags "38 00 " # ace size "20 00 00 00 " # mask "03 00 00 00 " # flags "be 3b 0e f3 f0 9f d1 11 " # object type GUID "b6 03 00 00 f8 03 67 c1 " "a5 7a 96 bf e6 0d d0 11 " # inherited type GUID "a2 85 00 aa 00 30 49 e2 " "01 01 " # S-1- (1 subauth) "00 00 00 00 00 01 " # 1- "00 00 00 00 " # 0 "07 " # sacl ACE, SYSTEM_AUDIT_OBJECT_ACE_TYPE "5a " # flags "38 00 " # size "20 00 00 00 " # mask "03 00 00 00 " #flags "bf 3b 0e f3 f0 9f d1 11 " # objct GUID "b6 03 00 00 f8 03 67 c1 " "a5 7a 96 bf e6 0d d0 11 " # inherited GUID "a2 85 00 aa 00 30 49 e2 " "01 01 " # S-1- (1 subauth) "00 00 00 00 00 01 " # 1- "00 00 00 00 " # 0 # DACL "04 00 " # dacl v4 "10 02 " # dacl size (528) "0d 00 " # 13 aces "00 00 " "00 " # ACCESS_ALLOWED_ACE_TYPE "00 " # flags "24 00 " # size "ff 01 0f 00 " # mask "01 05 " # S-1- (5 subauth) "00 00 00 00 00 05 " # 5- "15 00 00 00 " # 21- "51 d7 cf 86 " "f9 1b ef 93 " "c3 53 ea 70 " "00 02 00 00 " "00 " # ACCESS_ALLOWED_ACE_TYPE "00 " "14 00 " "ff 01 0f 00 " "01 01 " # S-1-5-18 "00 00 00 00 00 05 " "12 00 00 00 " "00 " # ACCESS_ALLOWED_ACE_TYPE "00 " "14 00 " "94 00 02 00 " "01 01 " # S-1-5-11 "00 00 00 00 00 05 " "0b 00 00 00 " "00 " # ACCESS_ALLOWED_ACE_TYPE "12 " # flags "24 00 " "ff 01 0f 00 " "01 05 " # S-1-5-a-b-c-d-e "00 00 00 00 00 05 " "15 00 00 00 " "51 d7 cf 86 " "f9 1b ef 93 " "c3 53 ea 70 " "07 02 00 00 " "00 " # ACCESS_ALLOWED_ACE_TYPE "12 " # flags "18 00 " "bd 01 0f 00 " "01 02 " # S-1-5-32-544 "00 00 00 00 00 05 " "20 00 00 00 " "20 02 00 00 " "00 " # ACCESS_ALLOWED_ACE_TYPE "12 " # flags "18 00 " "04 00 00 00 " "01 02 " # S-1-5-32-554 "00 00 00 00 00 05 " "20 00 00 00 " "2a 02 00 00 " "05 " # ACCESS_ALLOWED_OBJECT_ACE_TYPE "1a " "38 00 " # size 56 "08 00 00 00 " # mask "03 00 00 00 " # flags: object and inherited present "a6 6d 02 9b 3c 0d 5c 46 " # object GUID "8b ee 51 99 d7 16 5c ba " "86 7a 96 bf e6 0d d0 11 " # inherited GUID "a2 85 00 aa 00 30 49 e2 " "01 01 " # S-1-3-0 "00 00 00 00 00 03 " "00 00 00 00 " "05 " # ACCESS_ALLOWED_OBJECT_ACE_TYPE "12 " "28 00 " # size 40 "30 00 00 00 " # mask "01 00 00 00 " # flags: object present "e5 c3 78 3f 9a f7 bd 46 " # object GUID "a0 b8 9d 18 11 6d dc 79 " "01 01 " # S-1-5-10 "00 00 00 00 00 05 " "0a 00 00 00 " "05 " "12 " "28 00 " "30 01 00 00 " "01 00 00 00 " # flags: object present "de 47 e6 91 6f d9 70 4b " # object GUID "95 57 d6 3f f4 f3 cc d8 " "01 01 " # S-1-5-10 "00 00 00 00 00 05 " "0a 00 00 00 " "05 " "1a " "38 00 " # size 56 "08 00 00 00 " "03 00 00 00 " # flags both present "a6 6d 02 9b 3c 0d 5c 46 " "8b ee 51 99 d7 16 5c ba " "86 7a 96 bf e6 0d d0 11 " "a2 85 00 aa 00 30 49 e2 " "01 01 " # S-1-5-10 "00 00 00 00 00 05 " "0a 00 00 00 " "05 " "1a " "38 00 " # size 56 "20 00 00 00 " "03 00 00 00 " "93 7b 1b ea 48 5e d5 46 " "bc 6c 4d f4 fd a7 8a 35 " "86 7a 96 bf e6 0d d0 11 " "a2 85 00 aa 00 30 49 e2 " "01 01 " # S-1-5-10 "00 00 00 00 00 05 " "0a 00 00 00 " "05 " "12 " "38 00 " # size 56 "30 00 00 00 " "01 00 00 00 " # only object GUI present "0f d6 47 5b 90 60 b2 40 " "9f 37 2a 4d e8 8f 30 63 " "01 05 " # S-1-5-21-b-c-d-e "00 00 00 00 00 05 " "15 00 00 00 " "51 d7 cf 86 " "f9 1b ef 93 " "c3 53 ea 70 " "0e 02 00 00 " "05 " "12 " "38 00 " # size 56 "30 00 00 00 " "01 00 00 00 " "0f d6 47 5b 90 60 b2 40 " "9f 37 2a 4d e8 8f 30 63 " "01 05 " # S-1-5-21-b-c-d-e "00 00 00 00 00 05 " "15 00 00 00 " "51 d7 cf 86 " "f9 1b ef 93 " "c3 53 ea 70 " "0f 02 00 00" ), "sd_02": ( "01 00 17 99 14 00 00 00 30 00 00 00 4c 00 00 00 " "c4 00 00 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 00 02 00 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 04 00 78 00 " "02 00 00 00 07 5a 38 00 20 00 00 00 03 00 00 00 " "be 3b 0e f3 f0 9f d1 11 b6 03 00 00 f8 03 67 c1 " "a5 7a 96 bf e6 0d d0 11 a2 85 00 aa 00 30 49 e2 " "01 01 00 00 00 00 00 01 00 00 00 00 07 5a 38 00 " "20 00 00 00 03 00 00 00 bf 3b 0e f3 f0 9f d1 11 " "b6 03 00 00 f8 03 67 c1 a5 7a 96 bf e6 0d d0 11 " "a2 85 00 aa 00 30 49 e2 01 01 00 00 00 00 00 01 " "00 00 00 00 04 00 60 01 0a 00 00 00 00 0a 14 00 " "ff 00 0f 00 01 01 00 00 00 00 00 03 00 00 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "0b 00 00 00 00 02 14 00 ff 00 0f 00 01 01 00 00 " "00 00 00 05 12 00 00 00 00 02 24 00 ff 00 0f 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 00 02 24 00 " "ff 00 0f 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 07 02 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "09 00 00 00 05 00 38 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 05 02 28 00 " "00 01 00 00 01 00 00 00 8f fd ac ed b3 ff d1 11 " "b4 1d 00 a0 c9 68 f9 39 01 01 00 00 00 00 00 05 " "0b 00 00 00 05 00 28 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 01 00 00 00 00 00 05 12 00 00 00 05 00 38 00 " "00 01 00 00 01 00 00 00 8f fd ac ed b3 ff d1 11 " "b4 1d 00 a0 c9 68 f9 39 01 05 00 00 00 00 00 05 " "15 00 00 00 51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 " "07 02 00 00" ), "sd_03": ( "01 00 17 8c 14 00 00 00 30 00 00 00 4c 00 00 00 " "c4 00 00 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 00 02 00 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 04 00 78 00 " "02 00 00 00 07 5a 38 00 20 00 00 00 03 00 00 00 " "be 3b 0e f3 f0 9f d1 11 b6 03 00 00 f8 03 67 c1 " "a5 7a 96 bf e6 0d d0 11 a2 85 00 aa 00 30 49 e2 " "01 01 00 00 00 00 00 01 00 00 00 00 07 5a 38 00 " "20 00 00 00 03 00 00 00 bf 3b 0e f3 f0 9f d1 11 " "b6 03 00 00 f8 03 67 c1 a5 7a 96 bf e6 0d d0 11 " "a2 85 00 aa 00 30 49 e2 01 01 00 00 00 00 00 01 " "00 00 00 00 04 00 38 01 0b 00 00 00 00 00 24 00 " "ff 01 0f 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 00 02 00 00 " "00 00 14 00 ff 01 0f 00 01 01 00 00 00 00 00 05 " "12 00 00 00 00 00 14 00 94 00 02 00 01 01 00 00 " "00 00 00 05 0b 00 00 00 00 10 24 00 ff 00 0f 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 00 1a 14 00 " "ff 00 0f 00 01 01 00 00 00 00 00 03 00 00 00 00 " "00 12 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "0b 00 00 00 00 12 14 00 ff 00 0f 00 01 01 00 00 " "00 00 00 05 12 00 00 00 00 12 24 00 ff 00 0f 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 00 12 24 00 " "ff 00 0f 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 07 02 00 00 " "00 12 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "09 00 00 00 05 12 28 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 01 00 00 00 00 00 05 0b 00 00 00" ), "sd_04_object_ace_with_trailing_zeros": ( "01 00 04 91 00 00 00 00 00 00 00 00 00 00 00 00 " "14 00 00 00 04 00 d0 01 0a 00 00 00 00 0a 14 00 " "ff 00 0f 00 01 01 00 00 00 00 00 03 00 00 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "0b 00 00 00 00 02 14 00 ff 00 0f 00 01 01 00 00 " "00 00 00 05 12 00 00 00 00 02 24 00 ff 00 0f 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 00 02 24 00 " "ff 00 0f 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 07 02 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "09 00 00 00 " "05 " # ACCESS_ALLOWED_OBJECT_ACE_TYPE "00 " # zero flags "48 00 " # size 72 "00 01 00 00 " # mask "01 00 00 00 " # flags: object present, no inherit "8f fd ac ed b3 ff d1 11 " # GUID "b4 1d 00 a0 c9 68 f9 39 " "01 01 " # S-1-3-0 "00 00 00 00 00 03 " "00 00 00 00 " # next 4 rows are 32 extra bytes "00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 " "05 02 48 00 " # next ACE starts "00 01 00 00 01 00 00 00 8f fd ac ed b3 ff d1 11 " "b4 1d 00 a0 c9 68 f9 39 01 01 00 00 00 00 00 05 " "0b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 05 00 48 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 01 00 00 00 00 00 05 12 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 05 00 58 00 " "00 01 00 00 01 00 00 00 8f fd ac ed b3 ff d1 11 " "b4 1d 00 a0 c9 68 f9 39 01 05 00 00 00 00 00 05 " "15 00 00 00 51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 " "07 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00" ), "sd_05": ( "01 00 17 8c 14 00 00 00 30 00 00 00 4c 00 00 00 " "c4 00 00 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 00 02 00 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 04 00 78 00 " "02 00 00 00 07 5a 38 00 20 00 00 00 03 00 00 00 " "be 3b 0e f3 f0 9f d1 11 b6 03 00 00 f8 03 67 c1 " "a5 7a 96 bf e6 0d d0 11 a2 85 00 aa 00 30 49 e2 " "01 01 00 00 00 00 00 01 00 00 00 00 07 5a 38 00 " "20 00 00 00 03 00 00 00 bf 3b 0e f3 f0 9f d1 11 " "b6 03 00 00 f8 03 67 c1 a5 7a 96 bf e6 0d d0 11 " "a2 85 00 aa 00 30 49 e2 01 01 00 00 00 00 00 01 " "00 00 00 00 04 00 38 01 0b 00 00 00 00 00 24 00 " "ff 01 0f 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 00 02 00 00 " "00 00 14 00 ff 01 0f 00 01 01 00 00 00 00 00 05 " "12 00 00 00 00 00 14 00 94 00 02 00 01 01 00 00 " "00 00 00 05 0b 00 00 00 00 10 24 00 ff 00 0f 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 00 1a 14 00 " "ff 00 0f 00 01 01 00 00 00 00 00 03 00 00 00 00 " "00 12 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "0b 00 00 00 00 12 14 00 ff 00 0f 00 01 01 00 00 " "00 00 00 05 12 00 00 00 00 12 24 00 ff 00 0f 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 00 12 24 00 " "ff 00 0f 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 07 02 00 00 " "00 12 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "09 00 00 00 05 12 28 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 01 00 00 00 00 00 05 0b 00 00 00" ), "sd_06": ( "01 00 17 99 14 00 00 00 30 00 00 00 4c 00 00 00 " "c4 00 00 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 00 02 00 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 04 00 78 00 " "02 00 00 00 07 5a 38 00 20 00 00 00 03 00 00 00 " "be 3b 0e f3 f0 9f d1 11 b6 03 00 00 f8 03 67 c1 " "a5 7a 96 bf e6 0d d0 11 a2 85 00 aa 00 30 49 e2 " "01 01 00 00 00 00 00 01 00 00 00 00 07 5a 38 00 " "20 00 00 00 03 00 00 00 bf 3b 0e f3 f0 9f d1 11 " "b6 03 00 00 f8 03 67 c1 a5 7a 96 bf e6 0d d0 11 " "a2 85 00 aa 00 30 49 e2 01 01 00 00 00 00 00 01 " "00 00 00 00 04 00 28 01 09 00 00 00 00 0a 14 00 " "ff 00 0f 00 01 01 00 00 00 00 00 03 00 00 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "0b 00 00 00 00 02 14 00 ff 00 0f 00 01 01 00 00 " "00 00 00 05 12 00 00 00 00 02 24 00 ff 00 0f 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 00 02 24 00 " "ff 00 0f 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 07 02 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "09 00 00 00 05 02 28 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 01 00 00 00 00 00 05 0b 00 00 00 05 00 28 00 " "00 01 00 00 01 00 00 00 8f fd ac ed b3 ff d1 11 " "b4 1d 00 a0 c9 68 f9 39 01 01 00 00 00 00 00 05 " "12 00 00 00 05 00 38 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 07 02 00 00" ), "sd_07_object_ace_with_trailing_zeros": ( "01 00 04 91 00 00 00 00 00 00 00 00 00 00 00 00 " "14 00 00 00 04 00 88 01 09 00 00 00 00 0a 14 00 " "ff 00 0f 00 01 01 00 00 00 00 00 03 00 00 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "0b 00 00 00 00 02 14 00 ff 00 0f 00 01 01 00 00 " "00 00 00 05 12 00 00 00 00 02 24 00 ff 00 0f 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 00 02 24 00 " "ff 00 0f 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 07 02 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "09 00 00 00 05 02 48 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 01 00 00 00 00 00 05 0b 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 05 00 48 00 " "00 01 00 00 01 00 00 00 8f fd ac ed b3 ff d1 11 " "b4 1d 00 a0 c9 68 f9 39 01 01 00 00 00 00 00 05 " "12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 05 00 58 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 07 02 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00" ), "sd_08": ( "01 00 17 99 14 00 00 00 30 00 00 00 4c 00 00 00 " "c4 00 00 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 00 02 00 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 04 00 78 00 " "02 00 00 00 07 5a 38 00 20 00 00 00 03 00 00 00 " "be 3b 0e f3 f0 9f d1 11 b6 03 00 00 f8 03 67 c1 " "a5 7a 96 bf e6 0d d0 11 a2 85 00 aa 00 30 49 e2 " "01 01 00 00 00 00 00 01 00 00 00 00 07 5a 38 00 " "20 00 00 00 03 00 00 00 bf 3b 0e f3 f0 9f d1 11 " "b6 03 00 00 f8 03 67 c1 a5 7a 96 bf e6 0d d0 11 " "a2 85 00 aa 00 30 49 e2 01 01 00 00 00 00 00 01 " "00 00 00 00 04 00 88 01 0b 00 00 00 00 0a 14 00 " "ff 00 0f 00 01 01 00 00 00 00 00 03 00 00 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "0b 00 00 00 00 02 14 00 ff 00 0f 00 01 01 00 00 " "00 00 00 05 12 00 00 00 00 02 24 00 ff 00 0f 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 00 02 24 00 " "ff 00 0f 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 07 02 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "09 00 00 00 05 02 28 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 01 00 00 00 00 00 05 0b 00 00 00 05 00 28 00 " "00 01 00 00 01 00 00 00 8f fd ac ed b3 ff d1 11 " "b4 1d 00 a0 c9 68 f9 39 01 01 00 00 00 00 00 05 " "12 00 00 00 05 00 38 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 05 00 38 00 " "00 01 00 00 01 00 00 00 8f fd ac ed b3 ff d1 11 " "b4 1d 00 a0 c9 68 f9 39 01 05 00 00 00 00 00 05 " "15 00 00 00 51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 " "07 02 00 00 05 00 28 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 01 00 00 00 00 00 05 09 00 00 00" ), "sd_09": ( "01 00 17 99 14 00 00 00 30 00 00 00 4c 00 00 00 " "c4 00 00 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 00 02 00 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 04 00 78 00 " "02 00 00 00 07 5a 38 00 20 00 00 00 03 00 00 00 " "be 3b 0e f3 f0 9f d1 11 b6 03 00 00 f8 03 67 c1 " "a5 7a 96 bf e6 0d d0 11 a2 85 00 aa 00 30 49 e2 " "01 01 00 00 00 00 00 01 00 00 00 00 07 5a 38 00 " "20 00 00 00 03 00 00 00 bf 3b 0e f3 f0 9f d1 11 " "b6 03 00 00 f8 03 67 c1 a5 7a 96 bf e6 0d d0 11 " "a2 85 00 aa 00 30 49 e2 01 01 00 00 00 00 00 01 " "00 00 00 00 04 00 60 01 0a 00 00 00 00 0a 14 00 " "ff 00 0f 00 01 01 00 00 00 00 00 03 00 00 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "0b 00 00 00 00 02 14 00 ff 00 0f 00 01 01 00 00 " "00 00 00 05 12 00 00 00 00 02 24 00 ff 00 0f 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 00 02 24 00 " "ff 00 0f 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 07 02 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "09 00 00 00 05 02 28 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 01 00 00 00 00 00 05 0b 00 00 00 05 00 28 00 " "00 01 00 00 01 00 00 00 8f fd ac ed b3 ff d1 11 " "b4 1d 00 a0 c9 68 f9 39 01 01 00 00 00 00 00 05 " "12 00 00 00 05 00 38 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 05 00 38 00 " "00 01 00 00 01 00 00 00 8f fd ac ed b3 ff d1 11 " "b4 1d 00 a0 c9 68 f9 39 01 05 00 00 00 00 00 05 " "15 00 00 00 51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 " "07 02 00 00" ), "sd_10_object_ace_with_trailing_zeros": ( "01 00 04 91 00 00 00 00 00 00 00 00 00 00 00 00 " "14 00 00 00 04 00 28 02 0b 00 00 00 00 0a 14 00 " "ff 00 0f 00 01 01 00 00 00 00 00 03 00 00 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "0b 00 00 00 00 02 14 00 ff 00 0f 00 01 01 00 00 " "00 00 00 05 12 00 00 00 00 02 24 00 ff 00 0f 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 00 02 24 00 " "ff 00 0f 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 07 02 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "09 00 00 00 05 02 48 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 01 00 00 00 00 00 05 0b 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 05 00 48 00 " "00 01 00 00 01 00 00 00 8f fd ac ed b3 ff d1 11 " "b4 1d 00 a0 c9 68 f9 39 01 01 00 00 00 00 00 05 " "12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 05 00 58 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 05 00 58 00 " "00 01 00 00 01 00 00 00 8f fd ac ed b3 ff d1 11 " "b4 1d 00 a0 c9 68 f9 39 01 05 00 00 00 00 00 05 " "15 00 00 00 51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 " "07 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 05 00 48 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 01 00 00 00 00 00 05 09 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00" ), "sd_11": ( "01 00 17 99 14 00 00 00 30 00 00 00 4c 00 00 00 " "c4 00 00 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 00 02 00 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 04 00 78 00 " "02 00 00 00 07 5a 38 00 20 00 00 00 03 00 00 00 " "be 3b 0e f3 f0 9f d1 11 b6 03 00 00 f8 03 67 c1 " "a5 7a 96 bf e6 0d d0 11 a2 85 00 aa 00 30 49 e2 " "01 01 00 00 00 00 00 01 00 00 00 00 07 5a 38 00 " "20 00 00 00 03 00 00 00 bf 3b 0e f3 f0 9f d1 11 " "b6 03 00 00 f8 03 67 c1 a5 7a 96 bf e6 0d d0 11 " "a2 85 00 aa 00 30 49 e2 01 01 00 00 00 00 00 01 " "00 00 00 00 04 00 28 01 09 00 00 00 00 0a 14 00 " "ff 00 0f 00 01 01 00 00 00 00 00 03 00 00 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "0b 00 00 00 00 02 14 00 ff 00 0f 00 01 01 00 00 " "00 00 00 05 12 00 00 00 00 02 24 00 ff 00 0f 00 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 00 02 00 00 00 02 24 00 " "ff 00 0f 00 01 05 00 00 00 00 00 05 15 00 00 00 " "51 d7 cf 86 f9 1b ef 93 c3 53 ea 70 07 02 00 00 " "00 02 14 00 94 00 02 00 01 01 00 00 00 00 00 05 " "09 00 00 00 05 02 28 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 01 00 00 00 00 00 05 0b 00 00 00 05 00 28 00 " "00 01 00 00 01 00 00 00 8f fd ac ed b3 ff d1 11 " "b4 1d 00 a0 c9 68 f9 39 01 01 00 00 00 00 00 05 " "12 00 00 00 05 00 38 00 00 01 00 00 01 00 00 00 " "8f fd ac ed b3 ff d1 11 b4 1d 00 a0 c9 68 f9 39 " "01 05 00 00 00 00 00 05 15 00 00 00 51 d7 cf 86 " "f9 1b ef 93 c3 53 ea 70 07 02 00 00" ), } if __name__ == '__main__': import unittest unittest.main()