pycti 6.6.18__py3-none-any.whl → 6.7.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pycti might be problematic. Click here for more details.

pycti/utils/constants.py CHANGED
@@ -48,7 +48,7 @@ class StixCyberObservableTypes(Enum):
48
48
  PERSONA = "Persona"
49
49
 
50
50
  @classmethod
51
- def has_value(cls, value):
51
+ def has_value(cls, value: str) -> bool:
52
52
  lower_attr = list(map(lambda x: x.lower(), cls._value2member_map_))
53
53
  return value.lower() in lower_attr
54
54
 
@@ -58,6 +58,7 @@ class IdentityTypes(Enum):
58
58
  ORGANIZATION = "Organization"
59
59
  INDIVIDUAL = "Individual"
60
60
  SYSTEM = "System"
61
+ SECURITYPLATFORM = "SecurityPlatform"
61
62
 
62
63
  @classmethod
63
64
  def has_value(cls, value):
@@ -29,7 +29,9 @@ from pycti.utils.opencti_stix2_splitter import OpenCTIStix2Splitter
29
29
  from pycti.utils.opencti_stix2_update import OpenCTIStix2Update
30
30
  from pycti.utils.opencti_stix2_utils import (
31
31
  OBSERVABLES_VALUE_INT,
32
+ STIX_CORE_OBJECTS,
32
33
  STIX_CYBER_OBSERVABLE_MAPPING,
34
+ STIX_META_OBJECTS,
33
35
  )
34
36
 
35
37
  datefinder.ValueError = ValueError, OverflowError
@@ -418,7 +420,10 @@ class OpenCTIStix2:
418
420
  stix_object["kill_chain_phases"] = self.opencti.get_attribute_in_extension(
419
421
  "kill_chain_phases", stix_object
420
422
  )
421
- if "kill_chain_phases" in stix_object:
423
+ if (
424
+ "kill_chain_phases" in stix_object
425
+ and stix_object["kill_chain_phases"] is not None
426
+ ):
422
427
  for kill_chain_phase in stix_object["kill_chain_phases"]:
423
428
  if (
424
429
  kill_chain_phase["kill_chain_name"] + kill_chain_phase["phase_name"]
@@ -461,7 +466,10 @@ class OpenCTIStix2:
461
466
  "type": kill_chain_phase["entity_type"],
462
467
  }
463
468
  kill_chain_phases_ids.append(kill_chain_phase["id"])
464
- elif "x_opencti_kill_chain_phases" in stix_object:
469
+ elif (
470
+ "x_opencti_kill_chain_phases" in stix_object
471
+ and stix_object["x_opencti_kill_chain_phases"] is not None
472
+ ):
465
473
  for kill_chain_phase in stix_object["x_opencti_kill_chain_phases"]:
466
474
  if (
467
475
  kill_chain_phase["kill_chain_name"] + kill_chain_phase["phase_name"]
@@ -523,7 +531,10 @@ class OpenCTIStix2:
523
531
  "external_references", stix_object
524
532
  )
525
533
  )
526
- if "external_references" in stix_object:
534
+ if (
535
+ "external_references" in stix_object
536
+ and stix_object["external_references"] is not None
537
+ ):
527
538
  for external_reference in stix_object["external_references"]:
528
539
  try:
529
540
  url = (
@@ -704,7 +715,10 @@ class OpenCTIStix2:
704
715
  self.opencti.app_logger.warning(
705
716
  "Cannot generate external reference"
706
717
  )
707
- elif "x_opencti_external_references" in stix_object:
718
+ elif (
719
+ "x_opencti_external_references" in stix_object
720
+ and stix_object["x_opencti_external_references"] is not None
721
+ ):
708
722
  for external_reference in stix_object["x_opencti_external_references"]:
709
723
  url = external_reference["url"] if "url" in external_reference else None
710
724
  source_name = (
@@ -773,7 +787,10 @@ class OpenCTIStix2:
773
787
  granted_refs_ids = self.opencti.get_attribute_in_extension(
774
788
  "granted_refs", stix_object
775
789
  )
776
- elif "x_opencti_granted_refs" in stix_object:
790
+ elif (
791
+ "x_opencti_granted_refs" in stix_object
792
+ and stix_object["x_opencti_granted_refs"] is not None
793
+ ):
777
794
  granted_refs_ids = stix_object["x_opencti_granted_refs"]
778
795
  # Sample refs
779
796
  sample_refs_ids = (
@@ -909,6 +926,24 @@ class OpenCTIStix2:
909
926
  "sighting": self.opencti.stix_sighting_relationship,
910
927
  }
911
928
 
929
+ def get_internal_helper(self):
930
+ # Import
931
+ return {
932
+ "user": self.opencti.user,
933
+ "group": self.opencti.group,
934
+ "capability": self.opencti.capability,
935
+ "role": self.opencti.role,
936
+ "settings": self.opencti.settings,
937
+ "work": self.opencti.work,
938
+ "deleteoperation": self.opencti.trash,
939
+ "draftworkspace": self.opencti.draft,
940
+ "playbook": self.opencti.playbook,
941
+ "workspace": self.opencti.workspace,
942
+ "publicdashboard": self.opencti.public_dashboard,
943
+ "notification": self.opencti.notification,
944
+ "internalfile": self.opencti.internal_file,
945
+ }
946
+
912
947
  def generate_standard_id_from_stix(self, data):
913
948
  stix_helpers = self.get_stix_helper()
914
949
  helper = stix_helpers.get(data["type"])
@@ -2468,24 +2503,173 @@ class OpenCTIStix2:
2468
2503
  self.opencti.external_reference.update_field(
2469
2504
  id=item_id, input=field_patch_without_files
2470
2505
  )
2506
+ elif item["type"] == "indicator":
2507
+ self.opencti.indicator.update_field(
2508
+ id=item_id, input=field_patch_without_files
2509
+ )
2510
+ elif item["type"] == "notification":
2511
+ self.opencti.notification.update_field(
2512
+ id=item_id, input=field_patch_without_files
2513
+ )
2471
2514
  else:
2472
2515
  self.opencti.stix_domain_object.update_field(
2473
2516
  id=item_id, input=field_patch_without_files
2474
2517
  )
2475
2518
  self.apply_patch_files(item)
2476
2519
 
2520
+ def rule_apply(self, item):
2521
+ rule_id = self.opencti.get_attribute_in_extension("opencti_rule", item)
2522
+ if rule_id is None:
2523
+ rule_id = item["opencti_rule"]
2524
+ self.opencti.stix_core_object.rule_apply(element_id=item["id"], rule_id=rule_id)
2525
+
2526
+ def rule_clear(self, item):
2527
+ rule_id = self.opencti.get_attribute_in_extension("opencti_rule", item)
2528
+ if rule_id is None:
2529
+ rule_id = item["opencti_rule"]
2530
+ self.opencti.stix_core_object.rule_clear(element_id=item["id"], rule_id=rule_id)
2531
+
2532
+ def rules_rescan(self, item):
2533
+ self.opencti.stix_core_object.rules_rescan(element_id=item["id"])
2534
+
2535
+ def organization_share(self, item):
2536
+ organization_ids = self.opencti.get_attribute_in_extension(
2537
+ "sharing_organization_ids", item
2538
+ )
2539
+ if organization_ids is None:
2540
+ organization_ids = item["sharing_organization_ids"]
2541
+ sharing_direct_container = self.opencti.get_attribute_in_extension(
2542
+ "sharing_direct_container", item
2543
+ )
2544
+ if sharing_direct_container is None:
2545
+ sharing_direct_container = item["sharing_direct_container"]
2546
+
2547
+ if item["type"] == "relationship":
2548
+ self.opencti.stix_core_relationship.organization_share(
2549
+ item["id"], organization_ids, sharing_direct_container
2550
+ )
2551
+ elif item["type"] == "sighting":
2552
+ self.opencti.stix_sighting_relationship.organization_share(
2553
+ item["id"], organization_ids, sharing_direct_container
2554
+ )
2555
+ else:
2556
+ # Element is considered stix core object
2557
+ self.opencti.stix_core_object.organization_share(
2558
+ item["id"], organization_ids, sharing_direct_container
2559
+ )
2560
+
2561
+ def organization_unshare(self, item):
2562
+ organization_ids = self.opencti.get_attribute_in_extension(
2563
+ "sharing_organization_ids", item
2564
+ )
2565
+ if organization_ids is None:
2566
+ organization_ids = item["sharing_organization_ids"]
2567
+ sharing_direct_container = self.opencti.get_attribute_in_extension(
2568
+ "sharing_direct_container", item
2569
+ )
2570
+ if sharing_direct_container is None:
2571
+ sharing_direct_container = item["sharing_direct_container"]
2572
+ if item["type"] == "relationship":
2573
+ self.opencti.stix_core_relationship.organization_unshare(
2574
+ item["id"], organization_ids, sharing_direct_container
2575
+ )
2576
+ elif item["type"] == "sighting":
2577
+ self.opencti.stix_sighting_relationship.organization_unshare(
2578
+ item["id"], organization_ids, sharing_direct_container
2579
+ )
2580
+ else:
2581
+ # Element is considered stix core object
2582
+ self.opencti.stix_core_object.organization_unshare(
2583
+ item["id"], organization_ids, sharing_direct_container
2584
+ )
2585
+
2586
+ def element_operation_delete(self, item, operation):
2587
+ # If data is stix, just use the generic stix function for deletion
2588
+ force_delete = operation == "delete_force"
2589
+ if item["type"] == "relationship":
2590
+ self.opencti.stix_core_relationship.delete(id=item["id"])
2591
+ elif item["type"] == "sighting":
2592
+ self.opencti.stix_sighting_relationship.delete(id=item["id"])
2593
+ elif item["type"] in STIX_META_OBJECTS:
2594
+ self.opencti.stix.delete(id=item["id"], force_delete=force_delete)
2595
+ elif item["type"] in list(STIX_CYBER_OBSERVABLE_MAPPING.keys()):
2596
+ self.opencti.stix_cyber_observable.delete(id=item["id"])
2597
+ elif item["type"] in STIX_CORE_OBJECTS:
2598
+ self.opencti.stix_core_object.delete(id=item["id"])
2599
+ else:
2600
+ # Element is not knowledge we need to use the right api
2601
+ stix_helper = self.get_internal_helper().get(item["type"])
2602
+ if stix_helper and hasattr(stix_helper, "delete"):
2603
+ stix_helper.delete(id=item["id"], item=item)
2604
+ else:
2605
+ raise ValueError(
2606
+ "Delete operation or not found stix helper", {"type": item["type"]}
2607
+ )
2608
+
2609
+ def element_remove_from_draft(self, item):
2610
+ if item["type"] == "relationship":
2611
+ self.opencti.stix_core_relationship.remove_from_draft(id=item["id"])
2612
+ elif item["type"] == "sighting":
2613
+ self.opencti.stix_sighting_relationship.remove_from_draft(id=item["id"])
2614
+ else:
2615
+ # Element is considered stix core object
2616
+ self.opencti.stix_core_object.remove_from_draft(id=item["id"])
2617
+
2477
2618
  def apply_opencti_operation(self, item, operation):
2478
- if operation == "delete":
2479
- delete_id = item["id"]
2480
- self.opencti.stix.delete(id=delete_id)
2619
+ if operation == "delete" or operation == "delete_force":
2620
+ self.element_operation_delete(item=item, operation=operation)
2621
+ elif operation == "revert_draft":
2622
+ self.element_remove_from_draft(item=item)
2623
+ elif operation == "restore":
2624
+ self.opencti.trash.restore(item["id"])
2481
2625
  elif operation == "merge":
2482
- target_id = item["merge_target_id"]
2483
- source_ids = item["merge_source_ids"]
2626
+ target_id = self.opencti.get_attribute_in_extension("merge_target_id", item)
2627
+ if target_id is None:
2628
+ target_id = item["merge_target_id"]
2629
+ source_ids = self.opencti.get_attribute_in_extension(
2630
+ "merge_source_ids", item
2631
+ )
2632
+ if source_ids is None:
2633
+ source_ids = item["merge_source_ids"]
2484
2634
  self.opencti.stix.merge(id=target_id, object_ids=source_ids)
2485
2635
  elif operation == "patch":
2486
2636
  self.apply_patch(item=item)
2637
+ elif operation == "pir_flag_element":
2638
+ id = item["id"]
2639
+ input = item["input"]
2640
+ self.opencti.pir.pir_flag_element(id=id, input=input)
2641
+ elif operation == "pir_unflag_element":
2642
+ id = item["id"]
2643
+ input = item["input"]
2644
+ self.opencti.pir.pir_unflag_element(id=id, input=input)
2645
+ elif operation == "rule_apply":
2646
+ self.rule_apply(item=item)
2647
+ elif operation == "rule_clear":
2648
+ self.rule_clear(item=item)
2649
+ elif operation == "rules_rescan":
2650
+ self.rules_rescan(item=item)
2651
+ elif operation == "share":
2652
+ self.organization_share(item=item)
2653
+ elif operation == "unshare":
2654
+ self.organization_unshare(item=item)
2655
+ elif operation == "clear_access_restriction":
2656
+ self.opencti.stix_core_object.clear_access_restriction(
2657
+ element_id=item["id"]
2658
+ )
2659
+ elif operation == "enrichment":
2660
+ connector_ids = self.opencti.get_attribute_in_extension(
2661
+ "connector_ids", item
2662
+ )
2663
+ if connector_ids is None:
2664
+ connector_ids = item["connector_ids"]
2665
+ self.opencti.stix_core_object.ask_enrichments(
2666
+ element_id=item["id"], connector_ids=connector_ids
2667
+ )
2487
2668
  else:
2488
- raise ValueError("Not supported opencti_operation")
2669
+ raise ValueError(
2670
+ "Not supported opencti_operation",
2671
+ {"operation": operation},
2672
+ )
2489
2673
 
2490
2674
  def import_item(
2491
2675
  self,
@@ -10,6 +10,7 @@ from pycti.utils.opencti_stix2_identifier import (
10
10
  )
11
11
  from pycti.utils.opencti_stix2_utils import (
12
12
  STIX_CYBER_OBSERVABLE_MAPPING,
13
+ SUPPORTED_INTERNAL_OBJECTS,
13
14
  SUPPORTED_STIX_ENTITY_OBJECTS,
14
15
  )
15
16
 
@@ -17,8 +18,10 @@ OPENCTI_EXTENSION = "extension-definition--ea279b3e-5c71-4632-ac08-831c66a786ba"
17
18
 
18
19
  supported_types = (
19
20
  SUPPORTED_STIX_ENTITY_OBJECTS # entities
21
+ + SUPPORTED_INTERNAL_OBJECTS # internals
20
22
  + list(STIX_CYBER_OBSERVABLE_MAPPING.keys()) # observables
21
23
  + ["relationship", "sighting"] # relationships
24
+ + ["pir"]
22
25
  )
23
26
 
24
27
 
@@ -66,7 +69,7 @@ class OpenCTIStix2Splitter:
66
69
  for key in list(item.keys()):
67
70
  value = item[key]
68
71
  # Recursive enlist for every refs
69
- if key.endswith("_refs"):
72
+ if key.endswith("_refs") and item[key] is not None:
70
73
  to_keep = []
71
74
  for element_ref in item[key]:
72
75
  # We need to check if this ref is not already a reference
@@ -120,7 +123,7 @@ class OpenCTIStix2Splitter:
120
123
  else:
121
124
  item[key] = None
122
125
  # Case for embedded elements (deduplicating and cleanup)
123
- elif key == "external_references":
126
+ elif key == "external_references" and item[key] is not None:
124
127
  # specific case of splitting external references
125
128
  # reference_ids = []
126
129
  deduplicated_references = []
@@ -146,7 +149,7 @@ class OpenCTIStix2Splitter:
146
149
  # reference_ids.append(reference_id)
147
150
  # nb_deps += self.enlist_element(reference_id, raw_data)
148
151
  item[key] = deduplicated_references
149
- elif key == "kill_chain_phases":
152
+ elif key == "kill_chain_phases" and item[key] is not None:
150
153
  # specific case of splitting kill_chain phases
151
154
  # kill_chain_ids = []
152
155
  deduplicated_kill_chain = []
@@ -2,7 +2,29 @@ from typing import Any, Dict
2
2
 
3
3
  from stix2 import EqualityComparisonExpression, ObjectPath, ObservationExpression
4
4
 
5
- SUPPORTED_STIX_ENTITY_OBJECTS = [
5
+ SUPPORTED_INTERNAL_OBJECTS = [
6
+ "user",
7
+ "group",
8
+ "capability",
9
+ "role",
10
+ "settings",
11
+ "notification",
12
+ "work",
13
+ "trash",
14
+ "draftworkspace",
15
+ "playbook",
16
+ "deleteoperation",
17
+ "workspace",
18
+ "publicdashboard",
19
+ ]
20
+
21
+ STIX_META_OBJECTS = [
22
+ "label",
23
+ "vocabulary",
24
+ "kill-chain-phase",
25
+ ]
26
+
27
+ STIX_CORE_OBJECTS = [
6
28
  "attack-pattern",
7
29
  "campaign",
8
30
  "case-incident",
@@ -27,8 +49,6 @@ SUPPORTED_STIX_ENTITY_OBJECTS = [
27
49
  "indicator",
28
50
  "infrastructure",
29
51
  "intrusion-set",
30
- "kill-chain-phase",
31
- "label",
32
52
  "language",
33
53
  "location",
34
54
  "malware",
@@ -43,10 +63,11 @@ SUPPORTED_STIX_ENTITY_OBJECTS = [
43
63
  "x-opencti-task",
44
64
  "threat-actor",
45
65
  "tool",
46
- "vocabulary",
47
66
  "vulnerability",
48
67
  ]
49
68
 
69
+ SUPPORTED_STIX_ENTITY_OBJECTS = STIX_META_OBJECTS + STIX_CORE_OBJECTS
70
+
50
71
  STIX_CYBER_OBSERVABLE_MAPPING = {
51
72
  "autonomous-system": "Autonomous-System",
52
73
  "directory": "Directory",
@@ -83,6 +104,12 @@ STIX_CYBER_OBSERVABLE_MAPPING = {
83
104
  "persona": "Persona",
84
105
  }
85
106
 
107
+ STIX_OBJECTS = (
108
+ SUPPORTED_STIX_ENTITY_OBJECTS # entities
109
+ + list(STIX_CYBER_OBSERVABLE_MAPPING.keys()) # observables
110
+ + ["relationship", "sighting"] # relationships
111
+ )
112
+
86
113
  PATTERN_MAPPING = {
87
114
  "Autonomous-System": ["number"],
88
115
  "Directory": ["path"],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pycti
3
- Version: 6.6.18
3
+ Version: 6.7.1
4
4
  Summary: Python API client for OpenCTI.
5
5
  Home-page: https://github.com/OpenCTI-Platform/client-python
6
6
  Author: Filigran
@@ -1,9 +1,16 @@
1
- pycti/__init__.py,sha256=Oo9wE2Y9tapATOditUhvMjvM_6r3hQwktbAty0nBn8M,5677
1
+ pycti/__init__.py,sha256=hDq7zelRCjaMp-xP_n_BjQxLEPURygXvvcbCF3RuOiQ,5676
2
2
  pycti/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- pycti/api/opencti_api_client.py,sha256=yV8noIFiy-wtMbJ64KKZ7G7wUFZ10L6tYInmL_fKkMw,34567
3
+ pycti/api/opencti_api_client.py,sha256=lbygp2fOsmTKIrM-8Y7GxFzCZzdFStC0dhxyKYs0Wzo,35368
4
4
  pycti/api/opencti_api_connector.py,sha256=8xwHuLINP3ZCImzE9_K_iCR9QEA3K6aHpK4bJhcZf20,5582
5
- pycti/api/opencti_api_playbook.py,sha256=456We78vESukfSOi_CctfZ9dbBJEi76EHClRc2f21Js,1628
6
- pycti/api/opencti_api_work.py,sha256=V8n8KaLNiOUYTXYE251bC-yHMHiXSR_sf_0jk2RgANY,8456
5
+ pycti/api/opencti_api_draft.py,sha256=ZFrva6p7VZA7rCtIpyfyA-KTWvcTaWvpy51_Edi9rG4,428
6
+ pycti/api/opencti_api_internal_file.py,sha256=v_IFGZC3tngrZiaf9K64lnJbQgczgjym2NUECmdV_jk,802
7
+ pycti/api/opencti_api_notification.py,sha256=uTBSjym2RfSYHTnfBIVmWj5kATrzQ2lRQ178Jy5bsu0,1375
8
+ pycti/api/opencti_api_pir.py,sha256=3yDfUNVe9G_G9OrCcL3pBTE31kcstKXhXCiSrGhpUYY,992
9
+ pycti/api/opencti_api_playbook.py,sha256=yKg54sRaE4gtmQURQ_7jFjcyQJqchWsn-Uepe6MZUfs,2183
10
+ pycti/api/opencti_api_public_dashboard.py,sha256=aa4trEuaf7WstmiS4WAHoe1qmYmaFWmbO0N4N_iXPGM,711
11
+ pycti/api/opencti_api_trash.py,sha256=r_zi57n5TfLw9LYs2UFg33Nvyy3Huc6CjpK2mRQsmao,1065
12
+ pycti/api/opencti_api_work.py,sha256=uV1mbPz3zmNZjoNHVmX6SyWPQKEHkpSDXkb_a2NIOA4,8982
13
+ pycti/api/opencti_api_workspace.py,sha256=ycqOTEXeUHF2k8H4jhoYDd1W6ijFcNUjYf4eSdLpH0k,611
7
14
  pycti/connector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
15
  pycti/connector/opencti_connector.py,sha256=8lCZFvcA9-S1x6vFl756hgWAlzKfrnq-C4AIdDJr-Kg,2715
9
16
  pycti/connector/opencti_connector_helper.py,sha256=JAmoPXjBv_35aMrwVBwtavpkv9bMBfOj64EEYigz8vg,88546
@@ -22,11 +29,11 @@ pycti/entities/opencti_data_source.py,sha256=OqgeOkQl463aREDb8CkFwVrYngKTNYnUTyg
22
29
  pycti/entities/opencti_event.py,sha256=lGqxCnurlcbIXDMdKIFI2gaxjq2LNJoj8k8HGQnKHXo,17099
23
30
  pycti/entities/opencti_external_reference.py,sha256=zSsGOUajrTgSG9T0MHUzq-16XalJ0BHHC54RvBaTD48,13524
24
31
  pycti/entities/opencti_feedback.py,sha256=MyFs1CuC6_SZvjLOPyWwe6mWMoUmyoGKJ73o237j-Mg,32710
25
- pycti/entities/opencti_group.py,sha256=X7NfJ7-0Nwzggh9BqlA0GiKHc7v2PhmJnNQsffAeVA0,26172
32
+ pycti/entities/opencti_group.py,sha256=GgtA1zZunjXjxPdXc3wOV8Veitte0IGmRF1WwFYWs80,26390
26
33
  pycti/entities/opencti_grouping.py,sha256=cjXfgmRma0laGAP5j1oYMtZzVsQxrNvZ0o0-MsToufg,30569
27
- pycti/entities/opencti_identity.py,sha256=1OveaX1uFOzMPBWbMqK0a_Bz3FT77GzOmanmQALArpg,24093
34
+ pycti/entities/opencti_identity.py,sha256=Ih2LvYrDKXXFoQOjcsFv0ipTW3PBCtNtrBkyGWU-__8,26703
28
35
  pycti/entities/opencti_incident.py,sha256=mQn2PN2enf9CYoM2vFD3f8S2hIZj8pbiBUZOQ4cMT7Q,18966
29
- pycti/entities/opencti_indicator.py,sha256=8-ZJRJvHZ387s5CZtSBGCROtZm_5vhJpvIDP8cGVb-8,21452
36
+ pycti/entities/opencti_indicator.py,sha256=DX-erowuSw3yfAGacIK5CGKUsIhiUfoTER8NwVH7myI,22732
30
37
  pycti/entities/opencti_infrastructure.py,sha256=-vuGCDiwWH60GmLOpUelVDPtvM9XB9DhfGDwM0S2OpI,20331
31
38
  pycti/entities/opencti_intrusion_set.py,sha256=Jg-kkh6_kfyUIL6XsRYWg_d7Nejrp9kniJlI-SlAph0,19357
32
39
  pycti/entities/opencti_kill_chain_phase.py,sha256=acNzuFdxhwI_8fvZOTEHhP8fC6EGY_r6jcKpA-nKa8Q,7991
@@ -43,14 +50,14 @@ pycti/entities/opencti_opinion.py,sha256=QwYIcRemOmFVmoVHRnCEUGzSt4NoIHufCU_qh0D
43
50
  pycti/entities/opencti_report.py,sha256=LY2wB6zcdchBD8URYoNqGWENMqnalOrmxoNKz306EDM,35303
44
51
  pycti/entities/opencti_role.py,sha256=ryfPmZ_ch2sRGgqEr6_qxChTcGoeqvHW0MvlGHkLgdw,14039
45
52
  pycti/entities/opencti_settings.py,sha256=3dArFaPPdcFTV44uGRffjHpnDE-MKIXgd496QZcH6Bw,13547
46
- pycti/entities/opencti_stix.py,sha256=uMheSg8i1f2Ozx2Mk0iShWzHHjj6MMWDtV5nDjVxKEE,2275
47
- pycti/entities/opencti_stix_core_object.py,sha256=eyhsNAWaQO5X55Wn91b21j_d6bydBxfN29s2eQHrXkI,51639
48
- pycti/entities/opencti_stix_core_relationship.py,sha256=xHyJSW89ef9OV0PJhQRynm-c1MSO0tUFPPzQiXYeukk,44909
53
+ pycti/entities/opencti_stix.py,sha256=9jVg21hXXaKMl5U8Mh6Df3U8IIjP7k9py5VGzn1qFzk,2410
54
+ pycti/entities/opencti_stix_core_object.py,sha256=Um5jlXcKaC57VTpg2OXoEXqDgLuZBgAXCpFrpHmYznU,63455
55
+ pycti/entities/opencti_stix_core_relationship.py,sha256=aqguOR9n9jyL7Ez7xRoAO5EQ3wA6XcgTXxrYDGjw3cI,47786
49
56
  pycti/entities/opencti_stix_cyber_observable.py,sha256=ZbJ4XXXTlCP34hrgC9Jfov_9m1bPUiTj_s2tUjSauEA,92449
50
- pycti/entities/opencti_stix_domain_object.py,sha256=-7Dec8kTqeJA_sr1KrRohgQzitOC51dOd4035EXRALw,78850
57
+ pycti/entities/opencti_stix_domain_object.py,sha256=bTnohBI9n5q909bmW6HQGHnPpAr_K3NierKlUivNctU,82790
51
58
  pycti/entities/opencti_stix_nested_ref_relationship.py,sha256=7USJlfTanPFY16aFIH2YONdRakrfoBuIbB0d0I52PSM,12479
52
- pycti/entities/opencti_stix_object_or_stix_relationship.py,sha256=5qutzML6SyYzDhZ-QpI9Vh23hzLEs-xeFAAZOpGHZ2g,18049
53
- pycti/entities/opencti_stix_sighting_relationship.py,sha256=8rncZGYnDrmqAmwVKhy4lmbYoplvxEKkpIAH3yQzGig,28903
59
+ pycti/entities/opencti_stix_object_or_stix_relationship.py,sha256=djQ1-2tghFc_mxxuBo2IVAuUNsR08bQZtq_04hGEBIo,20019
60
+ pycti/entities/opencti_stix_sighting_relationship.py,sha256=JZo9t_nyF2psVZ3Flg6Gkyf3gD5422kQLAByr1qiBAs,31720
54
61
  pycti/entities/opencti_task.py,sha256=QOGuPTpH5rI80i9kwhHJ7Lgdr6bKTdAs-jwQ3kQ2Yjo,25457
55
62
  pycti/entities/opencti_threat_actor.py,sha256=vFPeo0pOYSqHBKVlWc4o8RjuP2PP0A09KWU6rsYXnvA,11201
56
63
  pycti/entities/opencti_threat_actor_group.py,sha256=dV28sDfADoDpATyk8w2fN1ZGOoad3LCk7lnij3nFBY8,20828
@@ -58,22 +65,22 @@ pycti/entities/opencti_threat_actor_individual.py,sha256=l-E0RShOofXTZgw2HUyrDpr
58
65
  pycti/entities/opencti_tool.py,sha256=GXeTfWkTgNxFnNGPsO03BOK2dsZGCp5IT-leQHiFWtw,15462
59
66
  pycti/entities/opencti_user.py,sha256=zJKhJCvC2N5-3E92uFad2CwiQhCWVAHYrgomzqBwD-s,29735
60
67
  pycti/entities/opencti_vocabulary.py,sha256=xupdHJ6TznCmvI3sVYU261SnfblSNc1nwg19MG9yrao,6499
61
- pycti/entities/opencti_vulnerability.py,sha256=LAha8HDTN-r9Eddugt7-CEtTZvXw7Z2za-6fkKyvnfw,22781
68
+ pycti/entities/opencti_vulnerability.py,sha256=X6alCxdltVx1LlyvK6CLfKXF8outwFcIpYQyCvmJzV0,52494
62
69
  pycti/entities/indicator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
70
  pycti/entities/indicator/opencti_indicator_properties.py,sha256=iQvSeMHB-vSTzINnRxqIJfC3OgMHyhbXUVF2juU7DoE,5219
64
71
  pycti/entities/stix_cyber_observable/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
72
  pycti/entities/stix_cyber_observable/opencti_stix_cyber_observable_deprecated.py,sha256=q-2G6OOqvUC1U2hSKxD8uT5T18M_IDkl72Tn1KoumQI,1847
66
73
  pycti/entities/stix_cyber_observable/opencti_stix_cyber_observable_properties.py,sha256=MN56CW8RWZwB0Pr8UiHZy_4nSzbgFbwdhSFKpsZ_d1Y,11293
67
74
  pycti/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
- pycti/utils/constants.py,sha256=AfECYKzdwos6Z6yUGXaUGtip_bRsVQaCKBw6nwSmNqE,12799
75
+ pycti/utils/constants.py,sha256=VRYRvDm6hkTR0ZcHHWMzQBwqlPRskYnusBpgoX0S05A,12854
69
76
  pycti/utils/opencti_logger.py,sha256=BHNy9fJuTUTn_JEYSCmyvVwd6y-9ZJKxO40mY4iZ0bc,2226
70
- pycti/utils/opencti_stix2.py,sha256=6vl3x23lojcWAw-X0ePukh1Ufnj7sCm9yeLayZ3b--M,122090
77
+ pycti/utils/opencti_stix2.py,sha256=PbdyUf7mpg7NO8253jEXBEg6WiDpgwPaPzzz-9dI0xw,130129
71
78
  pycti/utils/opencti_stix2_identifier.py,sha256=k8L1z4q1xdCBfxqUba4YS_kT-MmbJFxYh0RvfGOmrOs,837
72
- pycti/utils/opencti_stix2_splitter.py,sha256=Adu0PVQX2EoNLkcy_kkA25-OsBidCwiFTPwq1BSjsls,11201
79
+ pycti/utils/opencti_stix2_splitter.py,sha256=sjD9mN6jEea7Zr1k17rNiYaozLcDU4qg0HgIixXRHt4,11371
73
80
  pycti/utils/opencti_stix2_update.py,sha256=CnMyqkeVA0jgyxEcgqna8sABU4YPMjkEJ228GVurIn4,14658
74
- pycti/utils/opencti_stix2_utils.py,sha256=xgBZzm7HC76rLQYwTKkaUd_w9jJnVMoryHx7KDDIB_g,5065
75
- pycti-6.6.18.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
76
- pycti-6.6.18.dist-info/METADATA,sha256=d-MgV3TnjD2ZrxgjwENR8E9dea0Fnn21hArP5RwG0W8,5531
77
- pycti-6.6.18.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
78
- pycti-6.6.18.dist-info/top_level.txt,sha256=cqEpxitAhHP4VgSA6xmrak6Yk9MeBkwoMTB6k7d2ZnE,6
79
- pycti-6.6.18.dist-info/RECORD,,
81
+ pycti/utils/opencti_stix2_utils.py,sha256=4vu-j3weP9IS3Ky31exOIw4t3fBg00emCTRlVpevrTU,5582
82
+ pycti-6.7.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
83
+ pycti-6.7.1.dist-info/METADATA,sha256=M2HU6GADJTg_ty1lnckQ7QHlYEe_XLbhPx9eh4GnIyE,5530
84
+ pycti-6.7.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
85
+ pycti-6.7.1.dist-info/top_level.txt,sha256=cqEpxitAhHP4VgSA6xmrak6Yk9MeBkwoMTB6k7d2ZnE,6
86
+ pycti-6.7.1.dist-info/RECORD,,
File without changes