pycti 6.3.12__py3-none-any.whl → 6.4.0__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.

Files changed (49) hide show
  1. pycti/__init__.py +1 -1
  2. pycti/api/opencti_api_client.py +31 -0
  3. pycti/connector/opencti_connector_helper.py +35 -8
  4. pycti/entities/indicator/opencti_indicator_properties.py +8 -0
  5. pycti/entities/opencti_attack_pattern.py +6 -2
  6. pycti/entities/opencti_campaign.py +4 -0
  7. pycti/entities/opencti_case_incident.py +4 -0
  8. pycti/entities/opencti_case_rfi.py +4 -0
  9. pycti/entities/opencti_case_rft.py +4 -0
  10. pycti/entities/opencti_channel.py +4 -0
  11. pycti/entities/opencti_course_of_action.py +5 -2
  12. pycti/entities/opencti_data_component.py +4 -0
  13. pycti/entities/opencti_data_source.py +4 -0
  14. pycti/entities/opencti_event.py +4 -0
  15. pycti/entities/opencti_external_reference.py +6 -0
  16. pycti/entities/opencti_feedback.py +4 -0
  17. pycti/entities/opencti_grouping.py +9 -2
  18. pycti/entities/opencti_identity.py +5 -2
  19. pycti/entities/opencti_incident.py +4 -0
  20. pycti/entities/opencti_indicator.py +4 -0
  21. pycti/entities/opencti_infrastructure.py +4 -0
  22. pycti/entities/opencti_intrusion_set.py +4 -0
  23. pycti/entities/opencti_kill_chain_phase.py +4 -0
  24. pycti/entities/opencti_language.py +4 -0
  25. pycti/entities/opencti_location.py +22 -4
  26. pycti/entities/opencti_malware.py +4 -0
  27. pycti/entities/opencti_malware_analysis.py +10 -2
  28. pycti/entities/opencti_marking_definition.py +6 -0
  29. pycti/entities/opencti_narrative.py +4 -0
  30. pycti/entities/opencti_note.py +12 -4
  31. pycti/entities/opencti_observed_data.py +4 -0
  32. pycti/entities/opencti_opinion.py +19 -3
  33. pycti/entities/opencti_report.py +4 -0
  34. pycti/entities/opencti_stix_core_relationship.py +22 -0
  35. pycti/entities/opencti_stix_sighting_relationship.py +28 -5
  36. pycti/entities/opencti_task.py +5 -2
  37. pycti/entities/opencti_threat_actor.py +10 -3
  38. pycti/entities/opencti_threat_actor_group.py +4 -0
  39. pycti/entities/opencti_threat_actor_individual.py +4 -0
  40. pycti/entities/opencti_tool.py +4 -0
  41. pycti/entities/opencti_vocabulary.py +15 -0
  42. pycti/entities/opencti_vulnerability.py +4 -0
  43. pycti/utils/opencti_stix2.py +75 -50
  44. {pycti-6.3.12.dist-info → pycti-6.4.0.dist-info}/METADATA +1 -1
  45. pycti-6.4.0.dist-info/RECORD +74 -0
  46. pycti-6.3.12.dist-info/RECORD +0 -74
  47. {pycti-6.3.12.dist-info → pycti-6.4.0.dist-info}/LICENSE +0 -0
  48. {pycti-6.3.12.dist-info → pycti-6.4.0.dist-info}/WHEEL +0 -0
  49. {pycti-6.3.12.dist-info → pycti-6.4.0.dist-info}/top_level.txt +0 -0
@@ -336,6 +336,7 @@ class StixCoreRelationship:
336
336
  start_time = start_time.isoformat()
337
337
  if isinstance(stop_time, datetime.datetime):
338
338
  stop_time = stop_time.isoformat()
339
+
339
340
  if start_time is not None and stop_time is not None:
340
341
  data = {
341
342
  "relationship_type": relationship_type,
@@ -376,6 +377,16 @@ class StixCoreRelationship:
376
377
  :return List of stix_core_relationship objects
377
378
  """
378
379
 
380
+ @staticmethod
381
+ def generate_id_from_data(data):
382
+ return StixCoreRelationship.generate_id(
383
+ data["relationship_type"],
384
+ data["source_ref"],
385
+ data["target_ref"],
386
+ data.get("start_time"),
387
+ data.get("stop_time"),
388
+ )
389
+
379
390
  def list(self, **kwargs):
380
391
  from_or_to_id = kwargs.get("fromOrToId", None)
381
392
  element_with_target_types = kwargs.get("elementWithTargetTypes", None)
@@ -599,6 +610,7 @@ class StixCoreRelationship:
599
610
  kill_chain_phases = kwargs.get("killChainPhases", None)
600
611
  granted_refs = kwargs.get("objectOrganization", None)
601
612
  x_opencti_workflow_id = kwargs.get("x_opencti_workflow_id", None)
613
+ x_opencti_stix_ids = kwargs.get("x_opencti_stix_ids", None)
602
614
  update = kwargs.get("update", False)
603
615
 
604
616
  self.opencti.app_logger.info(
@@ -642,6 +654,7 @@ class StixCoreRelationship:
642
654
  "externalReferences": external_references,
643
655
  "killChainPhases": kill_chain_phases,
644
656
  "x_opencti_workflow_id": x_opencti_workflow_id,
657
+ "x_opencti_stix_ids": x_opencti_stix_ids,
645
658
  "update": update,
646
659
  }
647
660
  },
@@ -1132,6 +1145,10 @@ class StixCoreRelationship:
1132
1145
  default_date = kwargs.get("defaultDate", False)
1133
1146
  if stix_relation is not None:
1134
1147
  # Search in extensions
1148
+ if "x_opencti_stix_ids" not in stix_relation:
1149
+ stix_relation["x_opencti_stix_ids"] = (
1150
+ self.opencti.get_attribute_in_extension("stix_ids", stix_relation)
1151
+ )
1135
1152
  if "x_opencti_granted_refs" not in stix_relation:
1136
1153
  stix_relation["x_opencti_granted_refs"] = (
1137
1154
  self.opencti.get_attribute_in_extension(
@@ -1213,6 +1230,11 @@ class StixCoreRelationship:
1213
1230
  if "x_opencti_workflow_id" in stix_relation
1214
1231
  else None
1215
1232
  ),
1233
+ x_opencti_stix_ids=(
1234
+ stix_relation["x_opencti_stix_ids"]
1235
+ if "x_opencti_stix_ids" in stix_relation
1236
+ else None
1237
+ ),
1216
1238
  update=update,
1217
1239
  )
1218
1240
  else:
@@ -262,7 +262,12 @@ class StixSightingRelationship:
262
262
  """
263
263
 
264
264
  @staticmethod
265
- def generate_id(source_ref, target_ref, first_seen=None, last_seen=None):
265
+ def generate_id(
266
+ sighting_of_ref,
267
+ where_sighted_refs,
268
+ first_seen=None,
269
+ last_seen=None,
270
+ ):
266
271
  if isinstance(first_seen, datetime.datetime):
267
272
  first_seen = first_seen.isoformat()
268
273
  if isinstance(last_seen, datetime.datetime):
@@ -270,20 +275,38 @@ class StixSightingRelationship:
270
275
 
271
276
  if first_seen is not None and last_seen is not None:
272
277
  data = {
273
- "source_ref": source_ref,
274
- "target_ref": target_ref,
278
+ "type": "sighting",
279
+ "sighting_of_ref": sighting_of_ref,
280
+ "where_sighted_refs": where_sighted_refs,
275
281
  "first_seen": first_seen,
276
282
  "last_seen": last_seen,
277
283
  }
284
+ elif first_seen is not None:
285
+ data = {
286
+ "type": "sighting",
287
+ "sighting_of_ref": sighting_of_ref,
288
+ "where_sighted_refs": where_sighted_refs,
289
+ "first_seen": first_seen,
290
+ }
278
291
  else:
279
292
  data = {
280
- "source_ref": source_ref,
281
- "target_ref": target_ref,
293
+ "type": "sighting",
294
+ "sighting_of_ref": sighting_of_ref,
295
+ "where_sighted_refs": where_sighted_refs,
282
296
  }
283
297
  data = canonicalize(data, utf8=False)
284
298
  id = str(uuid.uuid5(uuid.UUID("00abedb4-aa42-466c-9c01-fed23315a9b7"), data))
285
299
  return "sighting--" + id
286
300
 
301
+ @staticmethod
302
+ def generate_id_from_data(data):
303
+ return StixSightingRelationship.generate_id(
304
+ data["sighting_of_ref"],
305
+ data["where_sighted_refs"],
306
+ data.get("first_seen"),
307
+ data.get("last_seen"),
308
+ )
309
+
287
310
  """
288
311
  List stix_sightings objects
289
312
 
@@ -226,14 +226,17 @@ class Task:
226
226
 
227
227
  @staticmethod
228
228
  def generate_id(name, created):
229
- name = name.lower().strip()
230
229
  if isinstance(created, datetime.datetime):
231
230
  created = created.isoformat()
232
- data = {"name": name, "created": created}
231
+ data = {"name": name.lower().strip(), "created": created}
233
232
  data = canonicalize(data, utf8=False)
234
233
  id = str(uuid.uuid5(uuid.UUID("00abedb4-aa42-466c-9c01-fed23315a9b7"), data))
235
234
  return "task--" + id
236
235
 
236
+ @staticmethod
237
+ def generate_id_from_data(data):
238
+ return Task.generate_id(data["name"], data["created"])
239
+
237
240
  """
238
241
  List Task objects
239
242
 
@@ -142,13 +142,20 @@ class ThreatActor:
142
142
  """
143
143
 
144
144
  @staticmethod
145
- def generate_id(name):
146
- name = name.lower().strip()
147
- data = {"name": name}
145
+ def generate_id(name, opencti_type):
146
+ data = {"name": name.lower().strip(), "opencti_type": opencti_type}
148
147
  data = canonicalize(data, utf8=False)
149
148
  id = str(uuid.uuid5(uuid.UUID("00abedb4-aa42-466c-9c01-fed23315a9b7"), data))
150
149
  return "threat-actor--" + id
151
150
 
151
+ def generate_id_from_data(self, data):
152
+ data_type = "Threat-Actor-Group"
153
+ if "x_opencti_type" in data:
154
+ data_type = data["x_opencti_type"]
155
+ elif self.opencti.get_attribute_in_extension("type", data) is not None:
156
+ data_type = self.opencti.get_attribute_in_extension("type", data)
157
+ return ThreatActor.generate_id(data["name"], data_type)
158
+
152
159
  def list(self, **kwargs) -> dict:
153
160
  """List Threat-Actor objects
154
161
 
@@ -145,6 +145,10 @@ class ThreatActorGroup:
145
145
  id = str(uuid.uuid5(uuid.UUID("00abedb4-aa42-466c-9c01-fed23315a9b7"), data))
146
146
  return "threat-actor--" + id
147
147
 
148
+ @staticmethod
149
+ def generate_id_from_data(data):
150
+ return ThreatActorGroup.generate_id(data["name"])
151
+
148
152
  def list(self, **kwargs) -> dict:
149
153
  """List Threat-Actor-Group objects
150
154
 
@@ -145,6 +145,10 @@ class ThreatActorIndividual:
145
145
  id = str(uuid.uuid5(uuid.UUID("00abedb4-aa42-466c-9c01-fed23315a9b7"), data))
146
146
  return "threat-actor--" + id
147
147
 
148
+ @staticmethod
149
+ def generate_id_from_data(data):
150
+ return ThreatActorIndividual.generate_id(data["name"])
151
+
148
152
  def list(self, **kwargs) -> dict:
149
153
  """List Threat-Actor-Individual objects
150
154
 
@@ -134,6 +134,10 @@ class Tool:
134
134
  id = str(uuid.uuid5(uuid.UUID("00abedb4-aa42-466c-9c01-fed23315a9b7"), data))
135
135
  return "tool--" + id
136
136
 
137
+ @staticmethod
138
+ def generate_id_from_data(data):
139
+ return Tool.generate_id(data["name"])
140
+
137
141
  """
138
142
  List Tool objects
139
143
 
@@ -1,4 +1,7 @@
1
1
  import json
2
+ import uuid
3
+
4
+ from stix2.canonicalization.Canonicalize import canonicalize
2
5
 
3
6
 
4
7
  class Vocabulary:
@@ -15,6 +18,18 @@ class Vocabulary:
15
18
  }
16
19
  """
17
20
 
21
+ @staticmethod
22
+ def generate_id(name, category):
23
+ name = name.lower().strip()
24
+ data = {"name": name, "category": category}
25
+ data = canonicalize(data, utf8=False)
26
+ id = str(uuid.uuid5(uuid.UUID("00abedb4-aa42-466c-9c01-fed23315a9b7"), data))
27
+ return "vocabulary--" + id
28
+
29
+ @staticmethod
30
+ def generate_id_from_data(data):
31
+ return Vocabulary.generate_id(data["name"], data["category"])
32
+
18
33
  def list(self, **kwargs):
19
34
  filters = kwargs.get("filters", None)
20
35
  self.opencti.app_logger.info(
@@ -131,6 +131,10 @@ class Vulnerability:
131
131
  id = str(uuid.uuid5(uuid.UUID("00abedb4-aa42-466c-9c01-fed23315a9b7"), data))
132
132
  return "vulnerability--" + id
133
133
 
134
+ @staticmethod
135
+ def generate_id_from_data(data):
136
+ return Vulnerability.generate_id(data["name"])
137
+
134
138
  """
135
139
  List Vulnerability objects
136
140
 
@@ -176,7 +176,10 @@ class OpenCTIStix2:
176
176
  return None
177
177
 
178
178
  def import_bundle_from_file(
179
- self, file_path: str, update: bool = False, types: List = None
179
+ self,
180
+ file_path: str,
181
+ update: bool = False,
182
+ types: List = None,
180
183
  ) -> Optional[List]:
181
184
  """import a stix2 bundle from a file
182
185
 
@@ -194,7 +197,7 @@ class OpenCTIStix2:
194
197
  return None
195
198
  with open(os.path.join(file_path), encoding="utf-8") as file:
196
199
  data = json.load(file)
197
- return self.import_bundle(data, update, types)
200
+ return self.import_bundle(data, update, types, None)
198
201
 
199
202
  def import_bundle_from_json(
200
203
  self,
@@ -856,6 +859,59 @@ class OpenCTIStix2:
856
859
 
857
860
  # endregion
858
861
 
862
+ def get_stix_helper(self):
863
+ # Import
864
+ return {
865
+ # entities
866
+ "attack-pattern": self.opencti.attack_pattern,
867
+ "campaign": self.opencti.campaign,
868
+ "note": self.opencti.note,
869
+ "observed-data": self.opencti.observed_data,
870
+ "opinion": self.opencti.opinion,
871
+ "report": self.opencti.report,
872
+ "course-of-action": self.opencti.course_of_action,
873
+ "identity": self.opencti.identity,
874
+ "infrastructure": self.opencti.infrastructure,
875
+ "intrusion-set": self.opencti.intrusion_set,
876
+ "location": self.opencti.location,
877
+ "malware": self.opencti.malware,
878
+ "threat-actor": self.opencti.threat_actor,
879
+ "tool": self.opencti.tool,
880
+ "vulnerability": self.opencti.vulnerability,
881
+ "incident": self.opencti.incident,
882
+ "marking-definition": self.opencti.marking_definition,
883
+ "case-rfi": self.opencti.case_rfi,
884
+ "x-opencti-case-rfi": self.opencti.case_rfi,
885
+ "case-rft": self.opencti.case_rft,
886
+ "x-opencti-case-rft": self.opencti.case_rft,
887
+ "case-incident": self.opencti.case_incident,
888
+ "x-opencti-case-incident": self.opencti.case_incident,
889
+ "feedback": self.opencti.feedback,
890
+ "x-opencti-feedback": self.opencti.feedback,
891
+ "channel": self.opencti.channel,
892
+ "data-component": self.opencti.data_component,
893
+ "x-mitre-data-component": self.opencti.data_component,
894
+ "data-source": self.opencti.data_source,
895
+ "x-mitre-data-source": self.opencti.data_source,
896
+ "event": self.opencti.event,
897
+ "grouping": self.opencti.grouping,
898
+ "indicator": self.opencti.indicator,
899
+ "language": self.opencti.language,
900
+ "malware-analysis": self.opencti.malware_analysis,
901
+ "narrative": self.opencti.narrative,
902
+ "task": self.opencti.task,
903
+ "x-opencti-task": self.opencti.task,
904
+ "vocabulary": self.opencti.vocabulary,
905
+ # relationships
906
+ "relationship": self.opencti.stix_core_relationship,
907
+ "sighting": self.opencti.stix_sighting_relationship,
908
+ }
909
+
910
+ def generate_standard_id_from_stix(self, data):
911
+ stix_helpers = self.get_stix_helper()
912
+ helper = stix_helpers.get(data["type"])
913
+ return helper.generate_id_from_data(data)
914
+
859
915
  # region import
860
916
  def import_object(
861
917
  self, stix_object: Dict, update: bool = False, types: List = None
@@ -902,53 +958,16 @@ class OpenCTIStix2:
902
958
  "sample_ids": sample_refs_ids,
903
959
  }
904
960
 
905
- # Import
906
- importer = {
907
- "marking-definition": self.opencti.marking_definition.import_from_stix2,
908
- "attack-pattern": self.opencti.attack_pattern.import_from_stix2,
909
- "campaign": self.opencti.campaign.import_from_stix2,
910
- "channel": self.opencti.channel.import_from_stix2,
911
- "event": self.opencti.event.import_from_stix2,
912
- "note": self.opencti.note.import_from_stix2,
913
- "observed-data": self.opencti.observed_data.import_from_stix2,
914
- "opinion": self.opencti.opinion.import_from_stix2,
915
- "report": self.opencti.report.import_from_stix2,
916
- "grouping": self.opencti.grouping.import_from_stix2,
917
- "case-rfi": self.opencti.case_rfi.import_from_stix2,
918
- "x-opencti-case-rfi": self.opencti.case_rfi.import_from_stix2,
919
- "case-rft": self.opencti.case_rft.import_from_stix2,
920
- "x-opencti-case-rft": self.opencti.case_rft.import_from_stix2,
921
- "task": self.opencti.task.import_from_stix2,
922
- "x-opencti-task": self.opencti.task.import_from_stix2,
923
- "case-incident": self.opencti.case_incident.import_from_stix2,
924
- "x-opencti-case-incident": self.opencti.case_incident.import_from_stix2,
925
- "feedback": self.opencti.feedback.import_from_stix2,
926
- "x-opencti-feedback": self.opencti.feedback.import_from_stix2,
927
- "course-of-action": self.opencti.course_of_action.import_from_stix2,
928
- "data-component": self.opencti.data_component.import_from_stix2,
929
- "x-mitre-data-component": self.opencti.data_component.import_from_stix2,
930
- "data-source": self.opencti.data_source.import_from_stix2,
931
- "x-mitre-data-source": self.opencti.data_source.import_from_stix2,
932
- "identity": self.opencti.identity.import_from_stix2,
933
- "indicator": self.opencti.indicator.import_from_stix2,
934
- "infrastructure": self.opencti.infrastructure.import_from_stix2,
935
- "intrusion-set": self.opencti.intrusion_set.import_from_stix2,
936
- "location": self.opencti.location.import_from_stix2,
937
- "malware": self.opencti.malware.import_from_stix2,
938
- "malware-analysis": self.opencti.malware_analysis.import_from_stix2,
939
- "threat-actor": self.opencti.threat_actor.import_from_stix2,
940
- "tool": self.opencti.tool.import_from_stix2,
941
- "narrative": self.opencti.narrative.import_from_stix2,
942
- "vulnerability": self.opencti.vulnerability.import_from_stix2,
943
- "incident": self.opencti.incident.import_from_stix2,
944
- }
945
- do_import = importer.get(
946
- stix_object["type"],
947
- lambda **kwargs: self.unknown_type(stix_object),
948
- )
949
- stix_object_results = do_import(
950
- stixObject=stix_object, extras=extras, update=update
951
- )
961
+ stix_helper = self.get_stix_helper().get(stix_object["type"])
962
+ if stix_helper:
963
+ stix_object_results = stix_helper.import_from_stix2(
964
+ stixObject=stix_object, extras=extras, update=update
965
+ )
966
+ else:
967
+ stix_object_results = None
968
+ self.opencti.app_logger.error(
969
+ "Unknown object type, doing nothing...", {"type": stix_object["type"]}
970
+ )
952
971
 
953
972
  if stix_object_results is None:
954
973
  return None
@@ -1381,6 +1400,11 @@ class OpenCTIStix2:
1381
1400
  if "x_opencti_workflow_id" in stix_sighting
1382
1401
  else None
1383
1402
  ),
1403
+ x_opencti_stix_ids=(
1404
+ stix_sighting["x_opencti_stix_ids"]
1405
+ if "x_opencti_stix_ids" in stix_sighting
1406
+ else None
1407
+ ),
1384
1408
  update=update,
1385
1409
  ignore_dates=(
1386
1410
  stix_sighting["x_opencti_ignore_dates"]
@@ -2411,7 +2435,7 @@ class OpenCTIStix2:
2411
2435
  # region Resolve the to
2412
2436
  to_ids = []
2413
2437
  if "x_opencti_where_sighted_refs" in item:
2414
- for where_sighted_ref in item["_opencti_where_sighted_refs"]:
2438
+ for where_sighted_ref in item["x_opencti_where_sighted_refs"]:
2415
2439
  to_ids.append(where_sighted_ref)
2416
2440
  elif "where_sighted_refs" in item:
2417
2441
  for where_sighted_ref in item["where_sighted_refs"]:
@@ -2631,6 +2655,7 @@ class OpenCTIStix2:
2631
2655
  if "x_opencti_event_version" in stix_bundle
2632
2656
  else None
2633
2657
  )
2658
+
2634
2659
  stix2_splitter = OpenCTIStix2Splitter()
2635
2660
  _, bundles = stix2_splitter.split_bundle_with_expectations(
2636
2661
  stix_bundle, False, event_version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycti
3
- Version: 6.3.12
3
+ Version: 6.4.0
4
4
  Summary: Python API client for OpenCTI.
5
5
  Home-page: https://github.com/OpenCTI-Platform/client-python
6
6
  Author: Filigran
@@ -0,0 +1,74 @@
1
+ pycti/__init__.py,sha256=sYfXJNADoWgFD1QMR6qNywq89IwyVwF6cEJzYdMaKc8,5218
2
+ pycti/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ pycti/api/opencti_api_client.py,sha256=zTpdwD592cm_cpZmnK8Ba6CRyDK1Xe2jqaT2-HvTuKE,32187
4
+ pycti/api/opencti_api_connector.py,sha256=ubM_zPjTD8L33TEugCQgf_YF9zugDFg_7FgNubGlwJw,5447
5
+ pycti/api/opencti_api_playbook.py,sha256=456We78vESukfSOi_CctfZ9dbBJEi76EHClRc2f21Js,1628
6
+ pycti/api/opencti_api_work.py,sha256=JLfl7oy6Cq9IrYW_kUrqwzN46FoVzyIn1JJQKyK0h_w,7615
7
+ pycti/connector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ pycti/connector/opencti_connector.py,sha256=5oVvS27KWhzRiofJAeQPDtba-EP83FziSistyEd5l-U,2561
9
+ pycti/connector/opencti_connector_helper.py,sha256=b-6ymDF3e4pfVxRhB13vj8Vwzo3h2TcV1iud6pPrKOk,80672
10
+ pycti/connector/opencti_metric_handler.py,sha256=4jXHeJflomtHjuQ_YU0b36TG7o26vOWbY_jvU8Ezobs,3725
11
+ pycti/entities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ pycti/entities/opencti_attack_pattern.py,sha256=rj3o2bFCoXniLmD9Ithi09S9Us8ab1G-GFLgqS8jll0,22237
13
+ pycti/entities/opencti_campaign.py,sha256=QPvAPeydaIKFIl7ig3XUpfZCoRuiLABqoHSZG0uKbCE,17789
14
+ pycti/entities/opencti_case_incident.py,sha256=KaJenRG8k0SCHL8jhThI1gSDsUvrJjNRSIBdmfRzosA,33826
15
+ pycti/entities/opencti_case_rfi.py,sha256=PmXmzUqz2_VKJyrDh4_dceCcMR_WpD39E6LDaWJhwmo,32575
16
+ pycti/entities/opencti_case_rft.py,sha256=yxhGdVOx40pAFpT2n0IBsZrWFaNXC3tg50gZHhlb9T0,33459
17
+ pycti/entities/opencti_channel.py,sha256=6_R3e6WRnNe-qbZ4XHgXo7IalIRBd8l2YmKyNHpFtYM,16713
18
+ pycti/entities/opencti_course_of_action.py,sha256=uOTik5-nykN83q7fqG-ClgJt3axwHy6DkAWA2ToTaT4,18697
19
+ pycti/entities/opencti_data_component.py,sha256=8VpFJMr1fNmZg51kaHbzvmc_7KOZu_lMcwQsZylVQM4,19269
20
+ pycti/entities/opencti_data_source.py,sha256=ATOz3B-pv8m6CkUq93MY6sg5zA8H-Q5SJRKwmna85Wk,18154
21
+ pycti/entities/opencti_event.py,sha256=WUptWDmxMbuL-Mp0wX-BLTi15KJua1AO8L4n6tcSbTM,16809
22
+ pycti/entities/opencti_external_reference.py,sha256=iffppZFJPRy0pZjdbfYYNlKp5PXS2VIWiyxeBMdGuuI,13568
23
+ pycti/entities/opencti_feedback.py,sha256=t_4KnCi53lADEV-O_isD74v7GOMpoFz9Kf-eWJIBFoA,32420
24
+ pycti/entities/opencti_grouping.py,sha256=q6zRDF_Oc2sIt6iKecxbqa8bh50UzJ8HixYouhem7Cc,30279
25
+ pycti/entities/opencti_identity.py,sha256=QVXNBedhZ5jnQxx3w9IsrghvtRGpRhttpLdZ474TVZA,23803
26
+ pycti/entities/opencti_incident.py,sha256=R0LYEBll5gv83pJloUcWRqTR5tmr2gF0kRGUAtg8w40,18676
27
+ pycti/entities/opencti_indicator.py,sha256=cpz7Geiy7zkxPudnzdiVwRM5tUKs57LU7qTnl-M7wOE,20952
28
+ pycti/entities/opencti_infrastructure.py,sha256=9rL9Rk7470gvjG6wuTbqUqtjsGxmvDId1NksudArb94,20041
29
+ pycti/entities/opencti_intrusion_set.py,sha256=z5ziqushqrWFBL4ub8HrOxIYXIonZCsQH12F-R35in0,19067
30
+ pycti/entities/opencti_kill_chain_phase.py,sha256=Uk4phq-l8TJTpPKmHJa6_1zTJb59-lah2HDaYWqMOTk,8081
31
+ pycti/entities/opencti_label.py,sha256=6RZJPIa_dXf_YNNU4xXKghfBnpNjhU5YXOaSIcB4YrM,8800
32
+ pycti/entities/opencti_language.py,sha256=KugOaUMnygo8wDnv4RPJTv_EleNGWyEfsAOxI7NitLk,16282
33
+ pycti/entities/opencti_location.py,sha256=dbsqkgZbcnrh2mrG5u59kZmCv6HrclwUIgSb9BPm4DI,18395
34
+ pycti/entities/opencti_malware.py,sha256=JkwOhee1uqs9_OptLG9qiwPlwWo4WuI1v2VGomNPfDg,20460
35
+ pycti/entities/opencti_malware_analysis.py,sha256=Oz1rPrF6rUczmaKNB8j8k6JDsp-1UOcJN-2fIfckXNI,21798
36
+ pycti/entities/opencti_marking_definition.py,sha256=Q_WdW_LyS7H8MuhCiFOwCFzj-1r5zFCev13FhY2iyvc,13030
37
+ pycti/entities/opencti_narrative.py,sha256=jJz9v3DtApHS6gmpg6K8-jOG6E3s--K5ipzwc3WXF8A,17151
38
+ pycti/entities/opencti_note.py,sha256=vYgooFvqWI9d9586HEQjp0xEzsrdLYQ_I9kKetw41Pg,30776
39
+ pycti/entities/opencti_observed_data.py,sha256=9cTUTDB7DG7dKdyQsm30ucOUs8xxu6-r-VqVAYKzl68,31243
40
+ pycti/entities/opencti_opinion.py,sha256=Znwkqx1gUYYu-Rx7jIidDC3yj0PQfLA-G3gz_IVXZbs,22503
41
+ pycti/entities/opencti_report.py,sha256=W6lRCnW7J7vE5U_07X81wR6ff2Tk_GzeOV1B--NBiPA,35347
42
+ pycti/entities/opencti_stix.py,sha256=uMheSg8i1f2Ozx2Mk0iShWzHHjj6MMWDtV5nDjVxKEE,2275
43
+ pycti/entities/opencti_stix_core_object.py,sha256=Lc0-lytsEjQRWD9VkVTHPrWPgqOzqT99qwndOQIRYCw,51683
44
+ pycti/entities/opencti_stix_core_relationship.py,sha256=Jebd-pp5aMu-HE58jisBBsQm0D3U03HBmi3ZePcRmtc,44786
45
+ pycti/entities/opencti_stix_cyber_observable.py,sha256=ywZHND5Kfykurn-EUO2k0-hdpsrCHHFjpb4xONVGEt8,92094
46
+ pycti/entities/opencti_stix_domain_object.py,sha256=LyKy5DbhtffO_sHJO3Xo1_PcuPi27pTKp_ETYhdU_zs,78894
47
+ pycti/entities/opencti_stix_nested_ref_relationship.py,sha256=eGCF7yaEDqMsJbgvTDle0tVzRCF78CmEhE02jioUTCc,12605
48
+ pycti/entities/opencti_stix_object_or_stix_relationship.py,sha256=5qutzML6SyYzDhZ-QpI9Vh23hzLEs-xeFAAZOpGHZ2g,18049
49
+ pycti/entities/opencti_stix_sighting_relationship.py,sha256=FyvEcOwcSyVY_oYVqAVfi_VeeNLl7QJlTigM09tpXu0,28780
50
+ pycti/entities/opencti_task.py,sha256=vNergoXqXd5FeNM75-cqtI__u2jG0462sRhakXG3-p0,24711
51
+ pycti/entities/opencti_threat_actor.py,sha256=oo-WovanGdO_Ic9X1_uHBQB-4R25shLD1-6Sa7HJZKo,10365
52
+ pycti/entities/opencti_threat_actor_group.py,sha256=lo60v-3qFRxtTmQ5Bq_csQchzE8spsdHmhMgXRDBM-4,19724
53
+ pycti/entities/opencti_threat_actor_individual.py,sha256=hPcOrHKERTpcnVmFF8h8Dwe4gebWBK7h35BAMFf8P7g,19976
54
+ pycti/entities/opencti_tool.py,sha256=PVI7fOz1t8cNfF6wvlO1LLWZqS26m8Ayn3-s-XQpaWg,15339
55
+ pycti/entities/opencti_vocabulary.py,sha256=xupdHJ6TznCmvI3sVYU261SnfblSNc1nwg19MG9yrao,6499
56
+ pycti/entities/opencti_vulnerability.py,sha256=PxlfRKrwmkqU5E8o8WF04YRXJtCxBu5QBKbxvd96loY,22658
57
+ pycti/entities/indicator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
+ pycti/entities/indicator/opencti_indicator_properties.py,sha256=8X8YkCshM0gkHc9sQZ_WSNvVxOA4aTJmLta8ZG93HOU,5087
59
+ pycti/entities/stix_cyber_observable/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
+ pycti/entities/stix_cyber_observable/opencti_stix_cyber_observable_deprecated.py,sha256=BH65h6xBz7naG61t5nvBdhnGYnobNuiUZf8CJC4-nnc,1847
61
+ pycti/entities/stix_cyber_observable/opencti_stix_cyber_observable_properties.py,sha256=MN56CW8RWZwB0Pr8UiHZy_4nSzbgFbwdhSFKpsZ_d1Y,11293
62
+ pycti/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ pycti/utils/constants.py,sha256=ZgOVxY5bnrHiNvPgOfZLWk16sSDnaE_tg8JVjZpw24Q,11831
64
+ pycti/utils/opencti_logger.py,sha256=0dvB75V0SuPFGxL539dAQrxTt1N5Acx0A3Ogwl5WMJ8,2199
65
+ pycti/utils/opencti_stix2.py,sha256=oNB49_CB2cXjQ-a94zNOHJOZ86EcpexfJjkzToWRook,117554
66
+ pycti/utils/opencti_stix2_identifier.py,sha256=k8L1z4q1xdCBfxqUba4YS_kT-MmbJFxYh0RvfGOmrOs,837
67
+ pycti/utils/opencti_stix2_splitter.py,sha256=etnAWMDzNi2JCovSUJ5Td-XLVdzgKRdsV1XfpXOGols,11070
68
+ pycti/utils/opencti_stix2_update.py,sha256=CnMyqkeVA0jgyxEcgqna8sABU4YPMjkEJ228GVurIn4,14658
69
+ pycti/utils/opencti_stix2_utils.py,sha256=xgBZzm7HC76rLQYwTKkaUd_w9jJnVMoryHx7KDDIB_g,5065
70
+ pycti-6.4.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
71
+ pycti-6.4.0.dist-info/METADATA,sha256=HtkLweV-uJLiNdD6i_IF2MBHGI2d6pryDhCl-gsNU6o,5418
72
+ pycti-6.4.0.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
73
+ pycti-6.4.0.dist-info/top_level.txt,sha256=cqEpxitAhHP4VgSA6xmrak6Yk9MeBkwoMTB6k7d2ZnE,6
74
+ pycti-6.4.0.dist-info/RECORD,,
@@ -1,74 +0,0 @@
1
- pycti/__init__.py,sha256=iQhYHU0NWwFwtbD943PXfWHAb7UAZmNTzstxOMA8LII,5219
2
- pycti/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- pycti/api/opencti_api_client.py,sha256=WpJs3GtEO0kV29KXmKY-2JmtiL6JSPD-746-FbnIcik,31027
4
- pycti/api/opencti_api_connector.py,sha256=ubM_zPjTD8L33TEugCQgf_YF9zugDFg_7FgNubGlwJw,5447
5
- pycti/api/opencti_api_playbook.py,sha256=456We78vESukfSOi_CctfZ9dbBJEi76EHClRc2f21Js,1628
6
- pycti/api/opencti_api_work.py,sha256=JLfl7oy6Cq9IrYW_kUrqwzN46FoVzyIn1JJQKyK0h_w,7615
7
- pycti/connector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- pycti/connector/opencti_connector.py,sha256=5oVvS27KWhzRiofJAeQPDtba-EP83FziSistyEd5l-U,2561
9
- pycti/connector/opencti_connector_helper.py,sha256=KUir7ioe-5dhh9E8weZ_dRHu2j_lCpDsc0ORZJgZhz4,79371
10
- pycti/connector/opencti_metric_handler.py,sha256=4jXHeJflomtHjuQ_YU0b36TG7o26vOWbY_jvU8Ezobs,3725
11
- pycti/entities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- pycti/entities/opencti_attack_pattern.py,sha256=AP_lTsHk0NscvFsXdxjzXWLCpg0ZaHTUT-Yg2JyB4YU,22047
13
- pycti/entities/opencti_campaign.py,sha256=WXY9wOJYqmW7tbRHQPlFX-vNYsx5w9Gz_olS4vJ0MDM,17683
14
- pycti/entities/opencti_case_incident.py,sha256=BEP22Itt7-ZxMBwMNMHO7sbS8XfNSfiy0Y7chuOgWJ4,33699
15
- pycti/entities/opencti_case_rfi.py,sha256=3coAKmkyc6rmk6D9Co3JvggtpOcOCFJJRgR4TuGSpcI,32453
16
- pycti/entities/opencti_case_rft.py,sha256=cO-DJAJThKHMYAMvKH8yGGIPXu1C40h9qZaNbwVXfzo,33337
17
- pycti/entities/opencti_channel.py,sha256=cA8ltYJpB43rUSKvCPyLUJvtdb_RSJ4tuuUdi_EMF2Q,16608
18
- pycti/entities/opencti_course_of_action.py,sha256=j_yZqvfeCba2FBSf0Pf2ZoDYUL_qpntMAUwpc_AJ4ow,18577
19
- pycti/entities/opencti_data_component.py,sha256=081y2bc4lz5E8esNloLNrZnIUCDicD3vKycIETwsyuE,19158
20
- pycti/entities/opencti_data_source.py,sha256=QeBDLuH5BZs0_rnQmXZGs0wWfxfC6qPcRFEWuAuaSaM,18046
21
- pycti/entities/opencti_event.py,sha256=Pam3eeR_Ytl_the-kV9IxXcfJKs2vRqN61igyDAlVE4,16706
22
- pycti/entities/opencti_external_reference.py,sha256=t54oKLvhbg6wY_GN10AAmJzPRjOi97zBk8m4SHoM7d4,13378
23
- pycti/entities/opencti_feedback.py,sha256=tK_Y3ZK2h33xQTzsjxu3x8Za3cBsgkBth_xNzEj2Hms,32314
24
- pycti/entities/opencti_grouping.py,sha256=Er4931oZy4rQzH4HOOOPOQotqH9HsDFoVKFXRNF-5J4,30034
25
- pycti/entities/opencti_identity.py,sha256=Bt6z8cNNnmPdV4iPSHb_FvO_9CGZdOHvhw9pT0llWH4,23685
26
- pycti/entities/opencti_incident.py,sha256=KAaqn0mnlyIKJ2whtbK0Eg8AbfQfxKvppS9hyfn_04s,18553
27
- pycti/entities/opencti_indicator.py,sha256=gh69C4Wu2Z08PcI2LC9p_FtKC1Qq8I1DjVsukz17kGI,20842
28
- pycti/entities/opencti_infrastructure.py,sha256=-hgDXR3ld2B6Man9WkFFuXOY8ELprLgNIUcyE03TSDA,19929
29
- pycti/entities/opencti_intrusion_set.py,sha256=MXubQhDZ6LE69z1Wj8agAZNOrGeKiXU4IZs_9B0Expg,18957
30
- pycti/entities/opencti_kill_chain_phase.py,sha256=643ffNdq-ZaVZPUqqLm1S6ITgKEf7N3XVAJxJM6bbbQ,7938
31
- pycti/entities/opencti_label.py,sha256=6RZJPIa_dXf_YNNU4xXKghfBnpNjhU5YXOaSIcB4YrM,8800
32
- pycti/entities/opencti_language.py,sha256=eHB7qzf_l2Mno_Wy9kF0QUdcBktWgr4kRHhb9AxT0c0,16176
33
- pycti/entities/opencti_location.py,sha256=QSC8klDklTcXziulPFCpn8-UqeSIzPX287vfUYVDVbY,17776
34
- pycti/entities/opencti_malware.py,sha256=T8P3cuG_5wVqpD8ArNnfZ1vk5CKfMCvaY8ZjskQHGnY,20355
35
- pycti/entities/opencti_malware_analysis.py,sha256=iHw5G1mK9LGGuuFP7Wb0740336GR5btedK2lmy8lX84,21480
36
- pycti/entities/opencti_marking_definition.py,sha256=2HkU58XWOZHuEFXrscshQIHW-KVyZSr02JRzBQYZirI,12862
37
- pycti/entities/opencti_narrative.py,sha256=tUoq5h9VleK6Q-Wt1KSXAtcLsBUEvQ559rDhgg4y-E0,17044
38
- pycti/entities/opencti_note.py,sha256=2VzLIxiOIT5MVWQbfNkSyooTuKvwJH7sguRrUOVNpTY,30514
39
- pycti/entities/opencti_observed_data.py,sha256=123sp3_Xbu1HVZW5-5_Tu8DYo_wBf6RVGPYyCIuDBtw,31126
40
- pycti/entities/opencti_opinion.py,sha256=SPcY8-0zRJCMle-eDLka-CFPyAqU3CnVVBtfVYhzyJE,21837
41
- pycti/entities/opencti_report.py,sha256=y-in19XqQ1BN0MZjKfxiOWe_0Q4Wakrj2MLrqzFpokU,35224
42
- pycti/entities/opencti_stix.py,sha256=uMheSg8i1f2Ozx2Mk0iShWzHHjj6MMWDtV5nDjVxKEE,2275
43
- pycti/entities/opencti_stix_core_object.py,sha256=Lc0-lytsEjQRWD9VkVTHPrWPgqOzqT99qwndOQIRYCw,51683
44
- pycti/entities/opencti_stix_core_relationship.py,sha256=ldhS0rJ9L6LrY1wvX28f9TMpVD1rVxsK-GYhH06qJFo,43944
45
- pycti/entities/opencti_stix_cyber_observable.py,sha256=ywZHND5Kfykurn-EUO2k0-hdpsrCHHFjpb4xONVGEt8,92094
46
- pycti/entities/opencti_stix_domain_object.py,sha256=LyKy5DbhtffO_sHJO3Xo1_PcuPi27pTKp_ETYhdU_zs,78894
47
- pycti/entities/opencti_stix_nested_ref_relationship.py,sha256=eGCF7yaEDqMsJbgvTDle0tVzRCF78CmEhE02jioUTCc,12605
48
- pycti/entities/opencti_stix_object_or_stix_relationship.py,sha256=5qutzML6SyYzDhZ-QpI9Vh23hzLEs-xeFAAZOpGHZ2g,18049
49
- pycti/entities/opencti_stix_sighting_relationship.py,sha256=OPbdanElqnAj7cLu2eh1P5PBh_54xfxnW36HX_5wnEs,28077
50
- pycti/entities/opencti_task.py,sha256=gDlUVyeRcIlIoh5bKtar-NmFa5_3OmMd4OkRVi_AYco,24612
51
- pycti/entities/opencti_threat_actor.py,sha256=lRdPhXX_HsNSE5rTwkke_U5T_FAPGD22ow2-YeZdaYc,9950
52
- pycti/entities/opencti_threat_actor_group.py,sha256=RLwufTb8vFvOHgV81VXf2cA1sREz12Tzwp9uRXONu88,19610
53
- pycti/entities/opencti_threat_actor_individual.py,sha256=b4Zqd40ehrFeaU6f_bSY6343Dg5vq6PuiDtKLXUrv78,19857
54
- pycti/entities/opencti_tool.py,sha256=5A20xY0fDBNLkbQP_32srjS3FXEVYGNxhe1I1YnaIbA,15237
55
- pycti/entities/opencti_vocabulary.py,sha256=6JfOByggvSxvkfIXk1b60T7fyWOhxZ6YFkGbSeV8F-4,5988
56
- pycti/entities/opencti_vulnerability.py,sha256=B-7H9_gRNDnjfspkAq3o4z8WJg_3EQ7y0iAXa9WHWkg,22547
57
- pycti/entities/indicator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
- pycti/entities/indicator/opencti_indicator_properties.py,sha256=2HJiBkBzbLe75Yu5AeSrTZCSKikPwwM_DeDgJCl7wm4,4953
59
- pycti/entities/stix_cyber_observable/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- pycti/entities/stix_cyber_observable/opencti_stix_cyber_observable_deprecated.py,sha256=BH65h6xBz7naG61t5nvBdhnGYnobNuiUZf8CJC4-nnc,1847
61
- pycti/entities/stix_cyber_observable/opencti_stix_cyber_observable_properties.py,sha256=MN56CW8RWZwB0Pr8UiHZy_4nSzbgFbwdhSFKpsZ_d1Y,11293
62
- pycti/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- pycti/utils/constants.py,sha256=ZgOVxY5bnrHiNvPgOfZLWk16sSDnaE_tg8JVjZpw24Q,11831
64
- pycti/utils/opencti_logger.py,sha256=0dvB75V0SuPFGxL539dAQrxTt1N5Acx0A3Ogwl5WMJ8,2199
65
- pycti/utils/opencti_stix2.py,sha256=NIesCMOGpBFUCNCEqyV2JexZX0-ww5E9VNfeF7xVSpc,117315
66
- pycti/utils/opencti_stix2_identifier.py,sha256=k8L1z4q1xdCBfxqUba4YS_kT-MmbJFxYh0RvfGOmrOs,837
67
- pycti/utils/opencti_stix2_splitter.py,sha256=etnAWMDzNi2JCovSUJ5Td-XLVdzgKRdsV1XfpXOGols,11070
68
- pycti/utils/opencti_stix2_update.py,sha256=CnMyqkeVA0jgyxEcgqna8sABU4YPMjkEJ228GVurIn4,14658
69
- pycti/utils/opencti_stix2_utils.py,sha256=xgBZzm7HC76rLQYwTKkaUd_w9jJnVMoryHx7KDDIB_g,5065
70
- pycti-6.3.12.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
71
- pycti-6.3.12.dist-info/METADATA,sha256=cQPTcFLXNB5DG-W2tjU960MBuRnXA2xAhCrp2aq6E5I,5419
72
- pycti-6.3.12.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
73
- pycti-6.3.12.dist-info/top_level.txt,sha256=cqEpxitAhHP4VgSA6xmrak6Yk9MeBkwoMTB6k7d2ZnE,6
74
- pycti-6.3.12.dist-info/RECORD,,
File without changes