txt2stix 1.2.0__tar.gz → 1.2.2__tar.gz

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.
Files changed (264) hide show
  1. {txt2stix-1.2.0 → txt2stix-1.2.2}/PKG-INFO +1 -1
  2. {txt2stix-1.2.0 → txt2stix-1.2.2}/docs/stix-mapping.md +45 -27
  3. {txt2stix-1.2.0 → txt2stix-1.2.2}/pyproject.toml +1 -1
  4. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/src/test_indicator.py +21 -0
  5. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/indicator.py +27 -26
  6. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/txt2stix.py +15 -11
  7. {txt2stix-1.2.0 → txt2stix-1.2.2}/.env.example +0 -0
  8. {txt2stix-1.2.0 → txt2stix-1.2.2}/.env.markdown +0 -0
  9. {txt2stix-1.2.0 → txt2stix-1.2.2}/.github/workflows/create-release.yml +0 -0
  10. {txt2stix-1.2.0 → txt2stix-1.2.2}/.github/workflows/run-tests.yml +0 -0
  11. {txt2stix-1.2.0 → txt2stix-1.2.2}/.gitignore +0 -0
  12. {txt2stix-1.2.0 → txt2stix-1.2.2}/LICENSE +0 -0
  13. {txt2stix-1.2.0 → txt2stix-1.2.2}/README.md +0 -0
  14. {txt2stix-1.2.0 → txt2stix-1.2.2}/docs/README.md +0 -0
  15. {txt2stix-1.2.0 → txt2stix-1.2.2}/docs/txt2stix.png +0 -0
  16. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/__init__.py +0 -0
  17. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/extractions/ai/config.yaml +0 -0
  18. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/extractions/lookup/config.yaml +0 -0
  19. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/extractions/pattern/config.yaml +0 -0
  20. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/helpers/mimetype_filename_extension_list.csv +0 -0
  21. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/helpers/stix_relationship_types.txt +0 -0
  22. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/helpers/tlds.txt +0 -0
  23. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/helpers/windows_registry_key_prefix.txt +0 -0
  24. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/_README.md +0 -0
  25. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/_generate_lookups.py +0 -0
  26. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/attack_pattern.txt +0 -0
  27. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/campaign.txt +0 -0
  28. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/country_iso3166_alpha2.txt +0 -0
  29. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/course_of_action.txt +0 -0
  30. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/disarm_id_v1_6.txt +0 -0
  31. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/disarm_name_v1_6.txt +0 -0
  32. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/extensions.txt +0 -0
  33. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/identity.txt +0 -0
  34. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/infrastructure.txt +0 -0
  35. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/intrusion_set.txt +0 -0
  36. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/malware.txt +0 -0
  37. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_atlas_id_v4_9_0.txt +0 -0
  38. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_atlas_name_v4_9_0.txt +0 -0
  39. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_attack_enterprise_aliases_v18_0.txt +0 -0
  40. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_attack_enterprise_id_v18_0.txt +0 -0
  41. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_attack_enterprise_name_v18_0.txt +0 -0
  42. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_attack_ics_aliases_v18_0.txt +0 -0
  43. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_attack_ics_id_v18_0.txt +0 -0
  44. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_attack_ics_name_v18_0.txt +0 -0
  45. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_attack_mobile_aliases_v18_0.txt +0 -0
  46. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_attack_mobile_id_v18_0.txt +0 -0
  47. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_attack_mobile_name_v18_0.txt +0 -0
  48. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_capec_id_v3_9.txt +0 -0
  49. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_capec_name_v3_9.txt +0 -0
  50. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_cwe_id_v4_18.txt +0 -0
  51. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/mitre_cwe_name_v4_18.txt +0 -0
  52. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/sector_aliases_v1_0.txt +0 -0
  53. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/threat_actor.txt +0 -0
  54. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/tld.txt +0 -0
  55. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/lookups/tool.txt +0 -0
  56. {txt2stix-1.2.0 → txt2stix-1.2.2}/includes/tests/test_cases.yaml +0 -0
  57. {txt2stix-1.2.0 → txt2stix-1.2.2}/requirements.txt +0 -0
  58. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/README.md +0 -0
  59. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/ai_country.txt +0 -0
  60. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/ai_mitre_attack_enterprise.txt +0 -0
  61. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/ai_mitre_attack_ics.txt +0 -0
  62. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/ai_mitre_attack_mobile.txt +0 -0
  63. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/ai_mitre_capec.txt +0 -0
  64. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/ai_mitre_cwe.txt +0 -0
  65. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/all_cases.txt +0 -0
  66. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_autonomous_system_number.txt +0 -0
  67. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_bank_card_all.txt +0 -0
  68. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_bank_card_amex.txt +0 -0
  69. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_bank_card_diners.txt +0 -0
  70. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_bank_card_discover.txt +0 -0
  71. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_bank_card_jcb.txt +0 -0
  72. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_bank_card_mastercard.txt +0 -0
  73. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_bank_card_union_pay.txt +0 -0
  74. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_bank_card_visa.txt +0 -0
  75. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_country_alpha2.txt +0 -0
  76. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_cpe_uri.txt +0 -0
  77. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_cryptocurrency_btc_transaction.txt +0 -0
  78. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_cryptocurrency_btc_wallet.txt +0 -0
  79. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_cryptocurrency_eth_transaction.txt +0 -0
  80. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_cryptocurrency_eth_wallet.txt +0 -0
  81. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_cryptocurrency_xmr_transaction.txt +0 -0
  82. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_cryptocurrency_xmr_wallet.txt +0 -0
  83. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_cve_id.txt +0 -0
  84. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_directory_unix.txt +0 -0
  85. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_directory_unix_file.txt +0 -0
  86. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_directory_windows.txt +0 -0
  87. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_directory_windows_with_file.txt +0 -0
  88. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_disarm.txt +0 -0
  89. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_disarm_name.txt +0 -0
  90. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_domain_name_only.txt +0 -0
  91. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_domain_name_subdomain.txt +0 -0
  92. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_email_address.txt +0 -0
  93. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_file_hash_md5.txt +0 -0
  94. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_file_hash_sha_1.txt +0 -0
  95. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_file_hash_sha_224.txt +0 -0
  96. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_file_hash_sha_256.txt +0 -0
  97. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_file_hash_sha_384.txt +0 -0
  98. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_file_hash_sha_512.txt +0 -0
  99. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_file_name.txt +0 -0
  100. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_host_name.txt +0 -0
  101. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_host_name_file.txt +0 -0
  102. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_host_name_path.txt +0 -0
  103. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_host_name_subdomain.txt +0 -0
  104. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_host_name_url.txt +0 -0
  105. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_iban_number.txt +0 -0
  106. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_ipv4_address_cidr.txt +0 -0
  107. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_ipv4_address_only.txt +0 -0
  108. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_ipv4_address_port.txt +0 -0
  109. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_ipv6_address_cidr.txt +0 -0
  110. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_ipv6_address_only.txt +0 -0
  111. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_ipv6_address_port.txt +0 -0
  112. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mac_address.txt +0 -0
  113. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_atlas.txt +0 -0
  114. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_atlas_name.txt +0 -0
  115. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_attack_enterprise.txt +0 -0
  116. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_attack_enterprise_aliases.txt +0 -0
  117. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_attack_enterprise_name.txt +0 -0
  118. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_attack_ics.txt +0 -0
  119. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_attack_ics_aliases.txt +0 -0
  120. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_attack_ics_name.txt +0 -0
  121. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_attack_mobile.txt +0 -0
  122. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_attack_mobile_aliases.txt +0 -0
  123. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_attack_mobile_name.txt +0 -0
  124. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_capec.txt +0 -0
  125. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_capec_name.txt +0 -0
  126. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_cwe.txt +0 -0
  127. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_mitre_cwe_name.txt +0 -0
  128. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_phone_number.txt +0 -0
  129. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_sector_aliases.txt +0 -0
  130. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_url.txt +0 -0
  131. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_url_file.txt +0 -0
  132. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_url_path.txt +0 -0
  133. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_user_agent.txt +0 -0
  134. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/generic_windows_registry_key.txt +0 -0
  135. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/lookup_attack_pattern.txt +0 -0
  136. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/lookup_campaign.txt +0 -0
  137. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/lookup_course_of_action.txt +0 -0
  138. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/lookup_identity.txt +0 -0
  139. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/lookup_infrastructure.txt +0 -0
  140. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/lookup_intrusion_set.txt +0 -0
  141. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/lookup_malware.txt +0 -0
  142. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/lookup_threat_actor.txt +0 -0
  143. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/extraction_types/lookup_tool.txt +0 -0
  144. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/ai_index_position.txt +0 -0
  145. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/attack_flow_demo.txt +0 -0
  146. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/attack_navigator_demo.txt +0 -0
  147. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/bad_vulmatch_lookups.txt +0 -0
  148. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/basic_relationship.txt +0 -0
  149. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/char_length_too_long.txt +0 -0
  150. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/descriptive_for_ai_relationships_1.txt +0 -0
  151. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/disarm_demo.txt +0 -0
  152. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/embedded_img_ignore.txt +0 -0
  153. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/embedded_link_ignore.txt +0 -0
  154. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/ip1.txt +0 -0
  155. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/ip2.txt +0 -0
  156. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/known_whitelist_match.txt +0 -0
  157. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/mitre_attack_enterprise_ai_demo.txt +0 -0
  158. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/mitre_attack_enterprise_lookup_demo.txt +0 -0
  159. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/mixed_extractions.txt +0 -0
  160. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/not_security_content.txt +0 -0
  161. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/test_ai_hash_error_with_stix2_lib.txt +0 -0
  162. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/test_aliases.txt +0 -0
  163. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/test_extraction_boundary.txt +0 -0
  164. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/manually_generated_reports/test_extraction_escapes.txt +0 -0
  165. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/real_intel_reports/APT28-Center-of-Storm-2017.txt +0 -0
  166. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/real_intel_reports/Bitdefender-Labs-Report-X-creat6958-en-EN.txt +0 -0
  167. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/real_intel_reports/FireEyeAPT39.txt +0 -0
  168. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/real_intel_reports/France_CERT_APT31_Pakdoor_TLPWHITE.txt +0 -0
  169. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/real_intel_reports/Group-IB_Ransomware_Uncovered_whitepaper_eng.txt +0 -0
  170. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/real_intel_reports/JOINT_CSA_HUNTING_RU_INTEL_SNAKE_MALWARE_20230509.txt +0 -0
  171. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/real_intel_reports/TA22-0126-QAKBOT-analysis-TLP-GREEN.txt +0 -0
  172. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/real_intel_reports/dinners_card.txt +0 -0
  173. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/real_intel_reports/mandiant-apt1.txt +0 -0
  174. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/data/real_intel_reports/mykings_report_final.txt +0 -0
  175. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/manual-tests/cases-ai-relationships.md +0 -0
  176. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/manual-tests/cases-extraction-type-ai.md +0 -0
  177. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/manual-tests/cases-extraction-type-lookup.md +0 -0
  178. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/manual-tests/cases-extraction-type-pattern.md +0 -0
  179. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/manual-tests/cases-standard-tests.md +0 -0
  180. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/scripts/generate_simple_extraction_test_cases_txt_files.py +0 -0
  181. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/src/__init__.py +0 -0
  182. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/src/test_attack_flow.py +0 -0
  183. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/src/test_bundler.py +0 -0
  184. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/src/test_extractors.py +0 -0
  185. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/src/test_lookups.py +0 -0
  186. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/src/test_main.py +0 -0
  187. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/src/test_retriever.py +0 -0
  188. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/src/test_run_txt2stix.py +0 -0
  189. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/src/test_utils.py +0 -0
  190. {txt2stix-1.2.0 → txt2stix-1.2.2}/tests/src/utils.py +0 -0
  191. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/__init__.py +0 -0
  192. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/ai_extractor/__init__.py +0 -0
  193. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/ai_extractor/anthropic.py +0 -0
  194. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/ai_extractor/base.py +0 -0
  195. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/ai_extractor/deepseek.py +0 -0
  196. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/ai_extractor/gemini.py +0 -0
  197. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/ai_extractor/openai.py +0 -0
  198. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/ai_extractor/openrouter.py +0 -0
  199. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/ai_extractor/prompts.py +0 -0
  200. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/ai_extractor/utils.py +0 -0
  201. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/attack_flow.py +0 -0
  202. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/bundler.py +0 -0
  203. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/common.py +0 -0
  204. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/credential_checker.py +0 -0
  205. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/extractions.py +0 -0
  206. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/lookups.py +0 -0
  207. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/__init__.py +0 -0
  208. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/__init__.py +0 -0
  209. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/base_extractor.py +0 -0
  210. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/card/README.md +0 -0
  211. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/card/__init__.py +0 -0
  212. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/card/amex_card_extractor.py +0 -0
  213. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/card/diners_card_extractor.py +0 -0
  214. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/card/discover_card_extractor.py +0 -0
  215. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/card/jcb_card_extractor.py +0 -0
  216. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/card/master_card_extractor.py +0 -0
  217. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/card/union_card_extractor.py +0 -0
  218. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/card/visa_card_extractor.py +0 -0
  219. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/crypto/__init__.py +0 -0
  220. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/crypto/btc_extractor.py +0 -0
  221. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/directory/__init__.py +0 -0
  222. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/directory/unix_directory_extractor.py +0 -0
  223. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/directory/unix_file_path_extractor.py +0 -0
  224. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/directory/windows_directory_path_extractor.py +0 -0
  225. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/directory/windows_file_path_extractor.py +0 -0
  226. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/domain/__init__.py +0 -0
  227. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/domain/domain_extractor.py +0 -0
  228. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/domain/hostname_extractor.py +0 -0
  229. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/domain/sub_domain_extractor.py +0 -0
  230. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/hashes/__init__.py +0 -0
  231. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/hashes/md5_extractor.py +0 -0
  232. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/hashes/sha1_extractor.py +0 -0
  233. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/hashes/sha224_extractor.py +0 -0
  234. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/hashes/sha2_256_exactor.py +0 -0
  235. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/hashes/sha2_512_exactor.py +0 -0
  236. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/hashes/sha3_256_exactor.py +0 -0
  237. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/hashes/sha3_512_exactor.py +0 -0
  238. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/helper.py +0 -0
  239. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/ip/__init__.py +0 -0
  240. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/ip/ipv4_cidr_extractor.py +0 -0
  241. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/ip/ipv4_extractor.py +0 -0
  242. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/ip/ipv4_port_extractor.py +0 -0
  243. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/ip/ipv6_cidr_extractor.py +0 -0
  244. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/ip/ipv6_extractor.py +0 -0
  245. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/ip/ipv6_port_extractor.py +0 -0
  246. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/others/__init__.py +0 -0
  247. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/others/asn_extractor.py +0 -0
  248. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/others/cpe_extractor.py +0 -0
  249. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/others/cve_extractor.py +0 -0
  250. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/others/email_extractor.py +0 -0
  251. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/others/filename_extractor.py +0 -0
  252. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/others/iban_extractor.py +0 -0
  253. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/others/mac_address_extractor.py +0 -0
  254. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/others/phonenumber_extractor.py +0 -0
  255. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/others/user_agent_extractor.py +0 -0
  256. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/others/windows_registry_key_extractor.py +0 -0
  257. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/url/__init__.py +0 -0
  258. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/url/url_extractor.py +0 -0
  259. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/url/url_file_extractor.py +0 -0
  260. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/pattern/extractors/url/url_path_extractor.py +0 -0
  261. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/retriever.py +0 -0
  262. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/stix.py +0 -0
  263. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix/utils.py +0 -0
  264. {txt2stix-1.2.0 → txt2stix-1.2.2}/txt2stix.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: txt2stix
3
- Version: 1.2.0
3
+ Version: 1.2.2
4
4
  Summary: txt2stix is a Python script that is designed to identify and extract IoCs and TTPs from text files, identify the relationships between them, convert them to STIX 2.1 objects, and output as a STIX 2.1 bundle.
5
5
  Project-URL: Homepage, https://github.com/muchdogesec/txt2stix
6
6
  Project-URL: Issues, https://github.com/muchdogesec/txt2stix/issues
@@ -1251,10 +1251,10 @@ Objects created:
1251
1251
  {
1252
1252
  "type": "attack-pattern",
1253
1253
  "spec_version": "2.1",
1254
- "id": "campaign--<GENERATED BY STIX2 LIBRARY>",
1254
+ "id": "campaign--<UUIDV5>",
1255
1255
  "created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
1256
- "created": "<REPORT CREATED PROPERTY VALUE>",
1257
- "modified": "<REPORT MODIFIED PROPERTY VALUE>",
1256
+ "created": "2020-01-01T00:00:00.000Z",
1257
+ "modified": "2020-01-01T00:00:00.000Z",
1258
1258
  "name": "<EXTRACTED VALUE>",
1259
1259
  "object_marking_refs": [
1260
1260
  "marking-definition--<TLP LEVEL SET>",
@@ -1273,6 +1273,8 @@ Objects created:
1273
1273
  }
1274
1274
  ```
1275
1275
 
1276
+ UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
1277
+
1276
1278
  ### stix-mapping: `campaign`
1277
1279
 
1278
1280
  Objects created:
@@ -1283,10 +1285,10 @@ Objects created:
1283
1285
  {
1284
1286
  "type": "campaign",
1285
1287
  "spec_version": "2.1",
1286
- "id": "campaign--<GENERATED BY STIX2 LIBRARY>",
1288
+ "id": "campaign--<UUIDV5>",
1287
1289
  "created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
1288
- "created": "<REPORT CREATED PROPERTY VALUE>",
1289
- "modified": "<REPORT MODIFIED PROPERTY VALUE>",
1290
+ "created": "2020-01-01T00:00:00.000Z",
1291
+ "modified": "2020-01-01T00:00:00.000Z",
1290
1292
  "name": "<EXTRACTED VALUE>",
1291
1293
  "object_marking_refs": [
1292
1294
  "marking-definition--<TLP LEVEL SET>",
@@ -1305,6 +1307,8 @@ Objects created:
1305
1307
  }
1306
1308
  ```
1307
1309
 
1310
+ UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
1311
+
1308
1312
  ### stix-mapping: `course-of-action`
1309
1313
 
1310
1314
  Objects created:
@@ -1315,10 +1319,10 @@ Objects created:
1315
1319
  {
1316
1320
  "type": "course-of-action",
1317
1321
  "spec_version": "2.1",
1318
- "id": "course-of-action--<GENERATED BY STIX2 LIBRARY>",
1322
+ "id": "course-of-action--<UUIDV5>",
1319
1323
  "created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
1320
- "created": "<REPORT CREATED PROPERTY VALUE>",
1321
- "modified": "<REPORT MODIFIED PROPERTY VALUE>",
1324
+ "created": "2020-01-01T00:00:00.000Z",
1325
+ "modified": "2020-01-01T00:00:00.000Z",
1322
1326
  "name": "<EXTRACTED VALUE>",
1323
1327
  "object_marking_refs": [
1324
1328
  "marking-definition--<TLP LEVEL SET>",
@@ -1337,6 +1341,8 @@ Objects created:
1337
1341
  }
1338
1342
  ```
1339
1343
 
1344
+ UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
1345
+
1340
1346
  ### stix-mapping: `infrastructure`
1341
1347
 
1342
1348
  Objects created:
@@ -1347,10 +1353,10 @@ Objects created:
1347
1353
  {
1348
1354
  "type":"infrastructure",
1349
1355
  "spec_version": "2.1",
1350
- "id":"infrastructure--<GENERATED BY STIX2 LIBRARY>",
1356
+ "id":"infrastructure--<UUIDV5>",
1351
1357
  "created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
1352
- "created": "<REPORT CREATED PROPERTY VALUE>",
1353
- "modified": "<REPORT MODIFIED PROPERTY VALUE>",
1358
+ "created": "2020-01-01T00:00:00.000Z",
1359
+ "modified": "2020-01-01T00:00:00.000Z",
1354
1360
  "name": "<EXTRACTED VALUE>",
1355
1361
  "infrastructure_types": ["unknown"],
1356
1362
  "object_marking_refs": [
@@ -1370,6 +1376,8 @@ Objects created:
1370
1376
  }
1371
1377
  ```
1372
1378
 
1379
+ UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
1380
+
1373
1381
  ### stix-mapping: `intrusion-set`
1374
1382
 
1375
1383
  Objects created:
@@ -1380,10 +1388,10 @@ Objects created:
1380
1388
  {
1381
1389
  "type": "intrusion-set",
1382
1390
  "spec_version": "2.1",
1383
- "id": "intrusion-set--<GENERATED BY STIX2 LIBRARY>",
1391
+ "id": "intrusion-set--<UUIDV5>",
1384
1392
  "created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
1385
- "created": "<REPORT CREATED PROPERTY VALUE>",
1386
- "modified": "<REPORT MODIFIED PROPERTY VALUE>",
1393
+ "created": "2020-01-01T00:00:00.000Z",
1394
+ "modified": "2020-01-01T00:00:00.000Z",
1387
1395
  "name": "<EXTRACTED VALUE>",
1388
1396
  "object_marking_refs": [
1389
1397
  "marking-definition--<TLP LEVEL SET>",
@@ -1402,6 +1410,8 @@ Objects created:
1402
1410
  }
1403
1411
  ```
1404
1412
 
1413
+ UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
1414
+
1405
1415
  ### stix-mapping: `malware`
1406
1416
 
1407
1417
  Objects created:
@@ -1412,10 +1422,10 @@ Objects created:
1412
1422
  {
1413
1423
  "type": "malware",
1414
1424
  "spec_version": "2.1",
1415
- "id": "malware--<GENERATED BY STIX2 LIBRARY>",
1425
+ "id": "malware--<UUIDV5>",
1416
1426
  "created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
1417
- "created": "<REPORT CREATED PROPERTY VALUE>",
1418
- "modified": "<REPORT MODIFIED PROPERTY VALUE>",
1427
+ "created": "2020-01-01T00:00:00.000Z",
1428
+ "modified": "2020-01-01T00:00:00.000Z",
1419
1429
  "name": "<EXTRACTED VALUE>",
1420
1430
  "malware_types": ["unknown"],
1421
1431
  "is_family": true,
@@ -1436,6 +1446,8 @@ Objects created:
1436
1446
  }
1437
1447
  ```
1438
1448
 
1449
+ UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
1450
+
1439
1451
  ### stix-mapping: `threat-actor`
1440
1452
 
1441
1453
  Objects created:
@@ -1446,10 +1458,10 @@ Objects created:
1446
1458
  {
1447
1459
  "type": "threat-actor",
1448
1460
  "spec_version": "2.1",
1449
- "id": "threat-actor--<GENERATED BY STIX2 LIBRARY>",
1461
+ "id": "threat-actor--<UUIDV5>",
1450
1462
  "created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
1451
- "created": "<REPORT CREATED PROPERTY VALUE>",
1452
- "modified": "<REPORT MODIFIED PROPERTY VALUE>",
1463
+ "created": "2020-01-01T00:00:00.000Z",
1464
+ "modified": "2020-01-01T00:00:00.000Z",
1453
1465
  "name": "<EXTRACTED VALUE>",
1454
1466
  "threat_actor_types": "unknown",
1455
1467
  "object_marking_refs": [
@@ -1469,6 +1481,8 @@ Objects created:
1469
1481
  }
1470
1482
  ```
1471
1483
 
1484
+ UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
1485
+
1472
1486
  ### stix-mapping: `tool`
1473
1487
 
1474
1488
  Objects created:
@@ -1479,10 +1493,10 @@ Objects created:
1479
1493
  {
1480
1494
  "type": "tool",
1481
1495
  "spec_version": "2.1",
1482
- "id": "tool--<GENERATED BY STIX2 LIBRARY>",
1496
+ "id": "tool--<UUIDV5>",
1483
1497
  "created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
1484
- "created": "<REPORT CREATED PROPERTY VALUE>",
1485
- "modified": "<REPORT MODIFIED PROPERTY VALUE>",
1498
+ "created": "2020-01-01T00:00:00.000Z",
1499
+ "modified": "2020-01-01T00:00:00.000Z",
1486
1500
  "name": "<EXTRACTED VALUE>",
1487
1501
  "tool_types": "unknown",
1488
1502
  "object_marking_refs": [
@@ -1502,6 +1516,8 @@ Objects created:
1502
1516
  }
1503
1517
  ```
1504
1518
 
1519
+ UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
1520
+
1505
1521
  ### stix-mapping: `identity`
1506
1522
 
1507
1523
  Objects created:
@@ -1512,10 +1528,10 @@ Objects created:
1512
1528
  {
1513
1529
  "type": "identity",
1514
1530
  "spec_version": "2.1",
1515
- "id": "identity--<GENERATED BY STIX2 LIBRARY>",
1531
+ "id": "identity--<UUIDV5>",
1516
1532
  "created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
1517
- "created": "<REPORT CREATED PROPERTY VALUE>",
1518
- "modified": "<REPORT MODIFIED PROPERTY VALUE>",
1533
+ "created": "2020-01-01T00:00:00.000Z",
1534
+ "modified": "2020-01-01T00:00:00.000Z",
1519
1535
  "name": "<EXTRACTED VALUE>",
1520
1536
  "identity_class": "unspecified",
1521
1537
  "object_marking_refs": [
@@ -1535,6 +1551,8 @@ Objects created:
1535
1551
  }
1536
1552
  ```
1537
1553
 
1554
+ UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
1555
+
1538
1556
  ## STIX Mapping (remotely created objects)
1539
1557
 
1540
1558
  Some objects created for extractions do not need to be generated by txt2stix, they can be looked up from an external databases.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "txt2stix"
7
- version = "1.2.0"
7
+ version = "1.2.2"
8
8
  authors = [{ name = "dogesec" }]
9
9
  maintainers = [{ name = "dogesec" }]
10
10
  description = "txt2stix is a Python script that is designed to identify and extract IoCs and TTPs from text files, identify the relationships between them, convert them to STIX 2.1 objects, and output as a STIX 2.1 bundle."
@@ -396,6 +396,27 @@ all_extractors = get_all_extractors()
396
396
  {"identity--2e0aadad-9b58-5c8c-bef6-4c258b35f319"},
397
397
  id="identity-ii",
398
398
  ),
399
+
400
+ ## generic sdo extracts (course-of-action, threat-actor, tool)
401
+ pytest.param(
402
+ "EvilTool v2.0",
403
+ "lookup_tool",
404
+ {
405
+ "tool--1b13ef4f-7bd5-563a-9ca1-00ebdb7071a8",
406
+ },
407
+ {"tool--1b13ef4f-7bd5-563a-9ca1-00ebdb7071a8"},
408
+ id="generic tool",
409
+ ),
410
+
411
+ pytest.param(
412
+ "EvilActor",
413
+ "lookup_threat_actor",
414
+ {
415
+ "threat-actor--4c4be570-b34e-556e-a8e0-5cb290668770",
416
+ },
417
+ {"threat-actor--4c4be570-b34e-556e-a8e0-5cb290668770"},
418
+ id="generic threat-actor",
419
+ ),
399
420
  ],
400
421
  )
401
422
  def test_build_observables(value, extractor_name, expected_objects, expected_rels):
@@ -686,17 +686,18 @@ def _build_observables(
686
686
  f"txt2stix+{extracted_value}",
687
687
  )
688
688
  )
689
+ _date = datetime(2020, 1, 1, tzinfo=UTC)
689
690
 
690
691
  if stix_mapping == "attack-pattern":
691
692
  stix_objects = [
692
693
  dict_to_stix2(
693
694
  {
694
695
  "type": "attack-pattern",
695
- # "id": stix_mapping + "--" + _id_part,
696
+ "id": stix_mapping + "--" + _id_part,
696
697
  "spec_version": "2.1",
697
698
  "created_by_ref": indicator["created_by_ref"],
698
- "created": indicator["created"],
699
- "modified": indicator["modified"],
699
+ "created": _date,
700
+ "modified": _date,
700
701
  "name": extracted_value,
701
702
  "external_references": indicator["external_references"],
702
703
  }
@@ -708,11 +709,11 @@ def _build_observables(
708
709
  dict_to_stix2(
709
710
  {
710
711
  "type": "campaign",
711
- # "id": stix_mapping + "--" + _id_part,
712
+ "id": stix_mapping + "--" + _id_part,
712
713
  "spec_version": "2.1",
713
714
  "created_by_ref": indicator["created_by_ref"],
714
- "created": indicator["created"],
715
- "modified": indicator["modified"],
715
+ "created": _date,
716
+ "modified": _date,
716
717
  "name": extracted_value,
717
718
  "object_marking_refs": indicator["object_marking_refs"],
718
719
  "external_references": indicator["external_references"],
@@ -725,11 +726,11 @@ def _build_observables(
725
726
  dict_to_stix2(
726
727
  {
727
728
  "type": "course-of-action",
728
- # "id": stix_mapping + "--" + _id_part,
729
+ "id": stix_mapping + "--" + _id_part,
729
730
  "spec_version": "2.1",
730
731
  "created_by_ref": indicator["created_by_ref"],
731
- "created": indicator["created"],
732
- "modified": indicator["modified"],
732
+ "created": _date,
733
+ "modified": _date,
733
734
  "name": extracted_value,
734
735
  "object_marking_refs": indicator["object_marking_refs"],
735
736
  "external_references": indicator["external_references"],
@@ -742,11 +743,11 @@ def _build_observables(
742
743
  dict_to_stix2(
743
744
  {
744
745
  "type": "infrastructure",
745
- # "id": stix_mapping + "--" + _id_part,
746
+ "id": stix_mapping + "--" + _id_part,
746
747
  "spec_version": "2.1",
747
748
  "created_by_ref": indicator["created_by_ref"],
748
- "created": indicator["created"],
749
- "modified": indicator["modified"],
749
+ "created": _date,
750
+ "modified": _date,
750
751
  "name": extracted_value,
751
752
  "infrastructure_types": ["unknown"],
752
753
  "object_marking_refs": indicator["object_marking_refs"],
@@ -760,11 +761,11 @@ def _build_observables(
760
761
  dict_to_stix2(
761
762
  {
762
763
  "type": "intrusion-set",
763
- # "id": stix_mapping + "--" + _id_part,
764
+ "id": stix_mapping + "--" + _id_part,
764
765
  "spec_version": "2.1",
765
766
  "created_by_ref": indicator["created_by_ref"],
766
- "created": indicator["created"],
767
- "modified": indicator["modified"],
767
+ "created": _date,
768
+ "modified": _date,
768
769
  "name": extracted_value,
769
770
  "object_marking_refs": indicator["object_marking_refs"],
770
771
  "external_references": indicator["external_references"],
@@ -777,11 +778,11 @@ def _build_observables(
777
778
  dict_to_stix2(
778
779
  {
779
780
  "type": "malware",
780
- # "id": stix_mapping + "--" + _id_part,
781
+ "id": stix_mapping + "--" + _id_part,
781
782
  "spec_version": "2.1",
782
783
  "created_by_ref": indicator["created_by_ref"],
783
- "created": indicator["created"],
784
- "modified": indicator["modified"],
784
+ "created": _date,
785
+ "modified": _date,
785
786
  "name": extracted_value,
786
787
  "malware_types": ["unknown"],
787
788
  "is_family": True,
@@ -796,11 +797,11 @@ def _build_observables(
796
797
  dict_to_stix2(
797
798
  {
798
799
  "type": "threat-actor",
799
- # "id": stix_mapping + "--" + _id_part,
800
+ "id": stix_mapping + "--" + _id_part,
800
801
  "spec_version": "2.1",
801
802
  "created_by_ref": indicator["created_by_ref"],
802
- "created": indicator["created"],
803
- "modified": indicator["modified"],
803
+ "created": _date,
804
+ "modified": _date,
804
805
  "name": extracted_value,
805
806
  "threat_actor_types": "unknown",
806
807
  "object_marking_refs": indicator["object_marking_refs"],
@@ -814,11 +815,11 @@ def _build_observables(
814
815
  dict_to_stix2(
815
816
  {
816
817
  "type": "tool",
817
- # "id": stix_mapping + "--" + _id_part,
818
+ "id": stix_mapping + "--" + _id_part,
818
819
  "spec_version": "2.1",
819
820
  "created_by_ref": indicator["created_by_ref"],
820
- "created": indicator["created"],
821
- "modified": indicator["modified"],
821
+ "created": _date,
822
+ "modified": _date,
822
823
  "name": extracted_value,
823
824
  "tool_types": "unknown",
824
825
  "object_marking_refs": indicator["object_marking_refs"],
@@ -834,8 +835,8 @@ def _build_observables(
834
835
  "type": "identity",
835
836
  "spec_version": "2.1",
836
837
  "created_by_ref": indicator["created_by_ref"],
837
- "created": datetime(2020, 1, 1, tzinfo=UTC),
838
- "modified": datetime(2020, 1, 1, tzinfo=UTC),
838
+ "created": _date,
839
+ "modified": _date,
839
840
  "id": "identity--" + _id_part,
840
841
  "name": extracted_value,
841
842
  "identity_class": "unspecified",
@@ -461,17 +461,21 @@ def run_txt2stix(
461
461
  # First, perform extraction-phase (LLM and extractor calls). This does not
462
462
  # modify the provided bundler so the results can be saved and replayed.
463
463
  # skip extraction phase if txt2stix_data is passed
464
- txt2stix_data = txt2stix_data or extraction_phase(
465
- preprocessed_text,
466
- extractors_map,
467
- ai_content_check_provider=ai_content_check_provider,
468
- input_token_limit=input_token_limit,
469
- ai_settings_extractions=ai_settings_extractions,
470
- ai_settings_relationships=ai_settings_relationships,
471
- relationship_mode=relationship_mode,
472
- ignore_extraction_boundary=ignore_extraction_boundary,
473
- ai_extract_if_no_incidence=ai_extract_if_no_incidence,
474
- )
464
+ if not txt2stix_data:
465
+ logging.info("=== Extraction Phase ===")
466
+ txt2stix_data = extraction_phase(
467
+ preprocessed_text,
468
+ extractors_map,
469
+ ai_content_check_provider=ai_content_check_provider,
470
+ input_token_limit=input_token_limit,
471
+ ai_settings_extractions=ai_settings_extractions,
472
+ ai_settings_relationships=ai_settings_relationships,
473
+ relationship_mode=relationship_mode,
474
+ ignore_extraction_boundary=ignore_extraction_boundary,
475
+ ai_extract_if_no_incidence=ai_extract_if_no_incidence,
476
+ )
477
+ else:
478
+ logging.info("=== Skipping Extraction Phase (replaying saved data) ===")
475
479
 
476
480
  # Then, process the extracted data into the bundler (no LLM calls).
477
481
  processing_phase(
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes