commit
c2b71672f5
|
@ -388,14 +388,12 @@ class _Observable(_STIXBase):
|
|||
temp_deep_copy = copy.deepcopy(dict(kwargs[key]))
|
||||
_recursive_stix_to_dict(temp_deep_copy)
|
||||
streamlined_obj_vals.append(temp_deep_copy)
|
||||
elif isinstance(kwargs[key], list) and isinstance(kwargs[key][0], _STIXBase):
|
||||
for obj in kwargs[key]:
|
||||
temp_deep_copy = copy.deepcopy(dict(obj))
|
||||
_recursive_stix_to_dict(temp_deep_copy)
|
||||
streamlined_obj_vals.append(temp_deep_copy)
|
||||
elif isinstance(kwargs[key], list):
|
||||
temp_deep_copy = copy.deepcopy(kwargs[key])
|
||||
_recursive_stix_list_to_dict(temp_deep_copy)
|
||||
streamlined_obj_vals.append(temp_deep_copy)
|
||||
else:
|
||||
streamlined_obj_vals.append(kwargs[key])
|
||||
|
||||
if streamlined_obj_vals:
|
||||
data = canonicalize(streamlined_obj_vals, utf8=False)
|
||||
|
||||
|
@ -448,5 +446,20 @@ def _recursive_stix_to_dict(input_dict):
|
|||
|
||||
# There may stil be nested _STIXBase objects
|
||||
_recursive_stix_to_dict(input_dict[key])
|
||||
elif isinstance(input_dict[key], list):
|
||||
_recursive_stix_list_to_dict(input_dict[key])
|
||||
else:
|
||||
return
|
||||
pass
|
||||
|
||||
|
||||
def _recursive_stix_list_to_dict(input_list):
|
||||
for i in range(len(input_list)):
|
||||
if isinstance(input_list[i], _STIXBase):
|
||||
input_list[i] = dict(input_list[i])
|
||||
elif isinstance(input_list[i], dict):
|
||||
pass
|
||||
elif isinstance(input_list[i], list):
|
||||
_recursive_stix_list_to_dict(input_list[i])
|
||||
else:
|
||||
continue
|
||||
_recursive_stix_to_dict(input_list[i])
|
||||
|
|
|
@ -1538,3 +1538,47 @@ def test_deterministic_id_no_contributing_props():
|
|||
uuid_obj_2 = uuid.UUID(email_msg_2.id[-36:])
|
||||
assert uuid_obj_2.variant == uuid.RFC_4122
|
||||
assert uuid_obj_2.version == 4
|
||||
|
||||
|
||||
def test_id_gen_recursive_dict_conversion_1():
|
||||
file_observable = stix2.v21.File(
|
||||
name="example.exe",
|
||||
size=68 * 1000,
|
||||
magic_number_hex="50000000",
|
||||
hashes={
|
||||
"SHA-256": "841a8921140aba50671ebb0770fecc4ee308c4952cfeff8de154ab14eeef4649",
|
||||
},
|
||||
extensions={
|
||||
"windows-pebinary-ext": stix2.v21.WindowsPEBinaryExt(
|
||||
pe_type="exe",
|
||||
machine_hex="014c",
|
||||
sections=[
|
||||
stix2.v21.WindowsPESection(
|
||||
name=".data",
|
||||
size=4096,
|
||||
entropy=7.980693,
|
||||
hashes={"SHA-256": "6e3b6f3978e5cd96ba7abee35c24e867b7e64072e2ecb22d0ee7a6e6af6894d0"},
|
||||
),
|
||||
],
|
||||
),
|
||||
},
|
||||
)
|
||||
|
||||
assert file_observable.id == "file--5219d93d-13c1-5f1f-896b-039f10ec67ea"
|
||||
|
||||
|
||||
def test_id_gen_recursive_dict_conversion_2():
|
||||
wrko = stix2.v21.WindowsRegistryKey(
|
||||
values=[
|
||||
stix2.v21.WindowsRegistryValueType(
|
||||
name="Foo",
|
||||
data="qwerty",
|
||||
),
|
||||
stix2.v21.WindowsRegistryValueType(
|
||||
name="Bar",
|
||||
data="42",
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
assert wrko.id == "windows-registry-key--c087d9fe-a03e-5922-a1cd-da116e5b8a7b"
|
||||
|
|
Loading…
Reference in New Issue