devsecops-engine-tools 1.11.4__py3-none-any.whl → 1.12.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 devsecops-engine-tools might be problematic. Click here for more details.

@@ -65,14 +65,14 @@ class TrufflehogRun(ToolGateway):
65
65
  secret = None
66
66
 
67
67
  if secret_tool is not None:
68
- secret = secret_tool["github_token"] if "github" in secret_tool else None
68
+ secret = secret_tool["github_token"] if "github_token" in secret_tool else None
69
69
  elif secret_external_checks is not None:
70
70
  secret = secret_external_checks.split("github:")[1] if "github" in secret_external_checks else None
71
71
 
72
72
  if enable_custom_rules == "true" and secret is not None:
73
73
  self.configurate_external_checks(config_tool, secret)
74
74
  else: #In case that remote config from tool is enable but in the args dont send any type of secrets. So dont modified command
75
- enable_custom_rules == "false"
75
+ enable_custom_rules = "false"
76
76
 
77
77
  with concurrent.futures.ThreadPoolExecutor(max_workers=config_tool.number_threads) as executor:
78
78
  results = executor.map(
@@ -15,24 +15,22 @@ from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.en
15
15
  )
16
16
 
17
17
 
18
- def runner_engine_dependencies(dict_args, config_tool, secret_tool, devops_platform_gateway):
18
+ def runner_engine_dependencies(
19
+ dict_args, config_tool, secret_tool, devops_platform_gateway
20
+ ):
19
21
  try:
20
22
  tools_mapping = {
21
- "XRAY": {
22
- "tool_run": XrayScan,
23
- "tool_deserializator": XrayDeserializator
24
- },
23
+ "XRAY": {"tool_run": XrayScan, "tool_deserializator": XrayDeserializator},
25
24
  "DEPENDENCY_CHECK": {
26
25
  "tool_run": DependencyCheckTool,
27
- "tool_deserializator": DependencyCheckDeserialize
28
- }
26
+ "tool_deserializator": DependencyCheckDeserialize,
27
+ },
29
28
  }
30
29
 
31
30
  selected_tool = config_tool["ENGINE_DEPENDENCIES"]["TOOL"]
32
31
  tool_run = tools_mapping[selected_tool]["tool_run"]()
33
32
  tool_deserializator = tools_mapping[selected_tool]["tool_deserializator"]()
34
33
 
35
-
36
34
  return init_engine_dependencies(
37
35
  tool_run,
38
36
  devops_platform_gateway,
@@ -14,6 +14,7 @@ from devsecops_engine_tools.engine_utilities import settings
14
14
 
15
15
  logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
16
16
 
17
+
17
18
  @dataclass
18
19
  class DependencyCheckDeserialize(DeserializatorGateway):
19
20
 
@@ -38,7 +39,7 @@ class DependencyCheckDeserialize(DeserializatorGateway):
38
39
  finding_open = Finding(
39
40
  id=vulnerability["name"][:20],
40
41
  cvss=str(vulnerability.get("cvssv3", {})),
41
- where=dependency.get("fileName").split(':')[-1].strip(),
42
+ where=dependency.get("fileName").split(":")[-1].strip(),
42
43
  description=vulnerability["description"][:170].replace("\n\n", " "),
43
44
  severity=vulnerability["severity"].lower(),
44
45
  identification_date=datetime.now().strftime("%d%m%Y"),
@@ -46,12 +47,12 @@ class DependencyCheckDeserialize(DeserializatorGateway):
46
47
  module="engine_dependencies",
47
48
  category=Category.VULNERABILITY,
48
49
  requirements=fix,
49
- tool="DEPENDENCY_CHECK"
50
+ tool="DEPENDENCY_CHECK",
50
51
  )
51
52
  list_open_vulnerabilities.append(finding_open)
52
53
 
53
54
  return list_open_vulnerabilities
54
-
55
+
55
56
  def load_results(self, dependencies_scanned_file):
56
57
  try:
57
58
  with open(dependencies_scanned_file) as f:
@@ -9,7 +9,9 @@ import platform
9
9
  import shutil
10
10
 
11
11
  from devsecops_engine_tools.engine_utilities.utils.utils import Utils
12
- from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.helpers.get_artifacts import GetArtifacts
12
+ from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.helpers.get_artifacts import (
13
+ GetArtifacts,
14
+ )
13
15
  from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
14
16
  from devsecops_engine_tools.engine_utilities import settings
15
17
 
@@ -22,7 +24,9 @@ class DependencyCheckTool(ToolGateway):
22
24
  url = f"https://github.com/jeremylong/DependencyCheck/releases/download/v{cli_version}/dependency-check-{cli_version}-release.zip"
23
25
  response = requests.get(url, allow_redirects=True)
24
26
  home_directory = os.path.expanduser("~")
25
- zip_name = os.path.join(home_directory, f"dependency_check_{cli_version}.zip")
27
+ zip_name = os.path.join(
28
+ home_directory, f"dependency_check_{cli_version}.zip"
29
+ )
26
30
  with open(zip_name, "wb") as f:
27
31
  f.write(response.content)
28
32
 
@@ -39,7 +43,9 @@ class DependencyCheckTool(ToolGateway):
39
43
  return command_prefix
40
44
 
41
45
  home_directory = os.path.expanduser("~")
42
- bin_route = os.path.join(home_directory, f"dependency-check/bin/{command_prefix}")
46
+ bin_route = os.path.join(
47
+ home_directory, f"dependency-check/bin/{command_prefix}"
48
+ )
43
49
 
44
50
  if shutil.which(bin_route):
45
51
  return bin_route
@@ -50,18 +56,38 @@ class DependencyCheckTool(ToolGateway):
50
56
  if os.path.exists(bin_route):
51
57
  if not is_windows:
52
58
  subprocess.run(["chmod", "+x", bin_route], check=True)
53
- return bin_route
59
+ return bin_route
54
60
  except Exception as e:
55
61
  logger.error(f"Error installing OWASP dependency check: {e}")
56
62
  return None
57
63
 
58
64
  def scan_dependencies(self, command_prefix, file_to_scan, token):
59
65
  try:
60
- command = [command_prefix, "--format", "JSON", "--format", "XML", "--nvdApiKey", token, "--scan", file_to_scan,]
66
+ command = [
67
+ command_prefix,
68
+ "--format",
69
+ "JSON",
70
+ "--format",
71
+ "XML",
72
+ "--nvdApiKey",
73
+ token,
74
+ "--scan",
75
+ file_to_scan,
76
+ ]
61
77
 
62
78
  if not token:
63
- print("¡¡Remember!!, it is recommended to use the API key for faster vulnerability database downloads.")
64
- command = [command_prefix, "--format", "JSON", "--format", "XML", "--scan", file_to_scan,]
79
+ print(
80
+ "¡¡Remember!!, it is recommended to use the API key for faster vulnerability database downloads."
81
+ )
82
+ command = [
83
+ command_prefix,
84
+ "--format",
85
+ "JSON",
86
+ "--format",
87
+ "XML",
88
+ "--scan",
89
+ file_to_scan,
90
+ ]
65
91
 
66
92
  subprocess.run(command, capture_output=True, check=True)
67
93
  except subprocess.CalledProcessError as error:
@@ -85,7 +111,7 @@ class DependencyCheckTool(ToolGateway):
85
111
  except Exception as ex:
86
112
  logger.error(f"An error ocurred search dependency-check results {ex}")
87
113
  return None
88
-
114
+
89
115
  def is_java_installed(self):
90
116
  return shutil.which("java") is not None
91
117
 
@@ -97,17 +123,21 @@ class DependencyCheckTool(ToolGateway):
97
123
  pipeline_name,
98
124
  to_scan,
99
125
  token,
100
- token_engine_dependencies
126
+ token_engine_dependencies,
101
127
  ):
102
128
  if not self.is_java_installed():
103
- logger.error("Java is not installed, please install it to run dependency check")
129
+ logger.error(
130
+ "Java is not installed, please install it to run dependency check"
131
+ )
104
132
  return None
105
133
 
106
134
  cli_version = remote_config["DEPENDENCY_CHECK"]["CLI_VERSION"]
107
135
 
108
136
  get_artifacts = GetArtifacts()
109
137
 
110
- pattern = get_artifacts.excluded_files(remote_config, pipeline_name, exclusion, "DEPENDENCY_CHECK")
138
+ pattern = get_artifacts.excluded_files(
139
+ remote_config, pipeline_name, exclusion, "DEPENDENCY_CHECK"
140
+ )
111
141
  to_scan = get_artifacts.find_artifacts(
112
142
  to_scan, pattern, remote_config["DEPENDENCY_CHECK"]["PACKAGES_TO_SCAN"]
113
143
  )
@@ -9,7 +9,9 @@ import re
9
9
  import os
10
10
  import json
11
11
 
12
- from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.helpers.get_artifacts import GetArtifacts
12
+ from devsecops_engine_tools.engine_sca.engine_dependencies.src.infrastructure.helpers.get_artifacts import (
13
+ GetArtifacts,
14
+ )
13
15
  from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
14
16
  from devsecops_engine_tools.engine_utilities import settings
15
17
 
@@ -99,7 +101,7 @@ class XrayScan(ToolGateway):
99
101
  if os.path.exists(gradlew_path):
100
102
  os.chmod(gradlew_path, 0o755)
101
103
 
102
- def scan_dependencies(self, prefix, cwd, mode, to_scan):
104
+ def scan_dependencies(self, prefix, cwd, config, mode, to_scan):
103
105
  command = [
104
106
  prefix,
105
107
  mode,
@@ -110,8 +112,7 @@ class XrayScan(ToolGateway):
110
112
  command, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
111
113
  )
112
114
  if result.stdout or all(
113
- word in result.stderr
114
- for word in ["Technology", "WorkingDirectory", "Descriptors"]
115
+ word in result.stderr for word in config["XRAY"]["STDERR_EXPECTED_WORDS"]
115
116
  ):
116
117
  if result.stdout:
117
118
  scan_result = json.loads(result.stdout)
@@ -119,7 +120,12 @@ class XrayScan(ToolGateway):
119
120
  scan_result = {}
120
121
  if any(
121
122
  word in result.stderr
122
- for word in ["What went wrong", "Caused by"]
123
+ for word in config["XRAY"]["STDERR_BREAK_ERRORS"]
124
+ ):
125
+ raise Exception(f"Error executing Xray scan: {result.stderr}")
126
+ if any(
127
+ word in result.stderr
128
+ for word in config["XRAY"]["STDERR_ACCEPTED_ERRORS"]
123
129
  ):
124
130
  logger.error(f"Error executing Xray scan: {result.stderr}")
125
131
  return None
@@ -142,12 +148,14 @@ class XrayScan(ToolGateway):
142
148
  pipeline_name,
143
149
  to_scan,
144
150
  secret_tool,
145
- token_engine_dependencies
151
+ token_engine_dependencies,
146
152
  ):
147
153
  token = secret_tool["token_xray"] if secret_tool else token_engine_dependencies
148
154
  if dict_args["xray_mode"] == "scan":
149
155
  get_artifacts = GetArtifacts()
150
- pattern = get_artifacts.excluded_files(remote_config, pipeline_name, exclusion, "XRAY")
156
+ pattern = get_artifacts.excluded_files(
157
+ remote_config, pipeline_name, exclusion, "XRAY"
158
+ )
151
159
  to_scan = get_artifacts.find_artifacts(
152
160
  to_scan, pattern, remote_config["XRAY"]["PACKAGES_TO_SCAN"]
153
161
  )
@@ -180,6 +188,7 @@ class XrayScan(ToolGateway):
180
188
  results_file = self.scan_dependencies(
181
189
  command_prefix,
182
190
  cwd,
191
+ remote_config,
183
192
  dict_args["xray_mode"],
184
193
  to_scan,
185
194
  )
@@ -9,6 +9,7 @@ from devsecops_engine_tools.engine_utilities import settings
9
9
 
10
10
  logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
11
11
 
12
+
12
13
  class GetArtifacts:
13
14
 
14
15
  def excluded_files(self, remote_config, pipeline_name, exclusions, tool):
@@ -29,7 +30,7 @@ class GetArtifacts:
29
30
  pattern = pattern2
30
31
 
31
32
  return pattern
32
-
33
+
33
34
  def find_packages(self, pattern, packages, working_dir):
34
35
  packages_list = []
35
36
  files_list = []
@@ -47,7 +48,7 @@ class GetArtifacts:
47
48
  if extension_pattern.search(file):
48
49
  files_list.append(os.path.join(root, file))
49
50
  return packages_list, files_list
50
-
51
+
51
52
  def compress_and_mv(self, tar_path, package):
52
53
  try:
53
54
  with tarfile.open(tar_path, "w") as tar:
@@ -65,7 +66,7 @@ class GetArtifacts:
65
66
  target = os.path.join(dir_to_scan_path, os.path.basename(file))
66
67
  shutil.copy2(file, target)
67
68
  logger.debug(f"File to scan: {file}")
68
-
69
+
69
70
  def find_artifacts(self, to_scan, pattern, packages):
70
71
  dir_to_scan_path = os.path.join(to_scan, "dependencies_to_scan")
71
72
  if os.path.exists(dir_to_scan_path):
@@ -1 +1 @@
1
- version = '1.11.4'
1
+ version = '1.12.0'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: devsecops-engine-tools
3
- Version: 1.11.4
3
+ Version: 1.12.0
4
4
  Summary: Tool for DevSecOps strategy
5
5
  Home-page: https://github.com/bancolombia/devsecops-engine-tools
6
6
  Author: Bancolombia DevSecOps Team
@@ -1,5 +1,5 @@
1
1
  devsecops_engine_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- devsecops_engine_tools/version.py,sha256=dLej3TvDZZqWTdmM8kau4jcXAhNExTiL86KzPRNkyCQ,19
2
+ devsecops_engine_tools/version.py,sha256=_hM9gYjHieUUv92NWz7PuNTHTkGMFFY3PU1jjcd7tWM,19
3
3
  devsecops_engine_tools/engine_core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  devsecops_engine_tools/engine_core/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  devsecops_engine_tools/engine_core/src/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -153,7 +153,7 @@ devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/__init__.py,
153
153
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
154
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
155
155
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_deserealizator.py,sha256=WpFFswOmP38cLvfZHCrPDiRtdwH86n1CqVNS3K4s6uA,1968
156
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py,sha256=MIf5Bun5dBnk_py-5vi8TvFQQ8HiHD9dlAv_XTC67Fc,7152
156
+ devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py,sha256=8rLnIpvPeWNgujOO03q0GzjXhv_BAGicf7vyUqOe8jA,7157
157
157
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
158
  devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py,sha256=TAEZ2HquyM_0ZWMh5_8-qE0OI5EMG0VfyOlypZswbLI,1019
159
159
  devsecops_engine_tools/engine_sca/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -189,7 +189,7 @@ devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/__
189
189
  devsecops_engine_tools/engine_sca/engine_dependencies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
190
190
  devsecops_engine_tools/engine_sca/engine_dependencies/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
191
191
  devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
192
- devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/runner_dependencies_scan.py,sha256=xOdEmGIwBZNbD-C7f1h-tPP1uaVJ59F6z2a-BB9KAgc,1871
192
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/runner_dependencies_scan.py,sha256=cPJwdfJSunJFVoakr2WkiTZ8Topm6HLZx6ihwyRxwNo,1832
193
193
  devsecops_engine_tools/engine_sca/engine_dependencies/src/deployment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
194
194
  devsecops_engine_tools/engine_sca/engine_dependencies/src/deployment/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
195
195
  devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -204,15 +204,15 @@ devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/set_in
204
204
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
205
205
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
206
206
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
207
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_deserialize.py,sha256=kFBTOYSQlXdUL05NyiDHVEpQbWxpwbr3El9Fn8tTpN0,2584
208
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_tool.py,sha256=auTknpEMwGgmEmg-OmsOZf8-H6W0O56VQD8DZNiT9HM,4600
207
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_deserialize.py,sha256=ihsWd10JnYmnhsm22KbND_GvBKGwAeEuPbiBe0Wx1kQ,2582
208
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/dependency_check/dependency_check_tool.py,sha256=a63ny6Jt8tZzcb7dS8Nes2DqOHs9oQuLFhzz7nEMhHQ,5059
209
209
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
210
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_deserialize_output.py,sha256=Vm0pj1i6a34xXouXUU95Y04hzR--9tcMQuycR7IMUnQ,2221
211
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py,sha256=F6XmJNowQQCbfe_aRxals7xzw9XK9QRMCWmqYkqXFxQ,7109
211
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py,sha256=u8SAtVuTqJ6o2B6jC-gMNG2Pn7a_bHWT_B1a_55iYZ4,7408
212
212
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
213
213
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py,sha256=qau5EXjyvKuXkcDPxVdc5B4lhwqv6VhcSBsAjFjNlCM,2536
214
214
  devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
215
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/get_artifacts.py,sha256=EdEVr7hDyl0TSrSOBtfUVwk3ugkGTpBR5rLpIZnkp8I,4016
215
+ devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/get_artifacts.py,sha256=KjRqQ3zxEq8MUNMW5LjS0EK2EIku3GWhSz9wUbDsZz0,4005
216
216
  devsecops_engine_tools/engine_utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
217
217
  devsecops_engine_tools/engine_utilities/settings.py,sha256=CPnDndwVeRgQNml3HVzvytVruDd8dTd1ICHbkMDSgTM,2144
218
218
  devsecops_engine_tools/engine_utilities/azuredevops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -286,8 +286,8 @@ devsecops_engine_tools/engine_utilities/utils/name_conversion.py,sha256=ADJrRGax
286
286
  devsecops_engine_tools/engine_utilities/utils/printers.py,sha256=amYAr9YQfYgR6jK9a2l26z3oovFPQ3FAKmhq6BKhEBA,623
287
287
  devsecops_engine_tools/engine_utilities/utils/session_manager.py,sha256=yNtlT-8Legz1sHbGPH8LNYjL-LgDUE0zXG2rYjiab7U,290
288
288
  devsecops_engine_tools/engine_utilities/utils/utils.py,sha256=esLnDBxP9MQBvV8noVohTrdWSVuljTKRpZgrn2kaD_c,192
289
- devsecops_engine_tools-1.11.4.dist-info/METADATA,sha256=au1AunWdHwuu_4rt25z_G1K1Xkbp1m2DznMMNcweu18,10854
290
- devsecops_engine_tools-1.11.4.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
291
- devsecops_engine_tools-1.11.4.dist-info/entry_points.txt,sha256=9IjXF_7Zpgowq_SY6OSmsA9vZze18a8_AeHwkQVrgKk,131
292
- devsecops_engine_tools-1.11.4.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
293
- devsecops_engine_tools-1.11.4.dist-info/RECORD,,
289
+ devsecops_engine_tools-1.12.0.dist-info/METADATA,sha256=5vQsyP7UszBQcM0I_60LWiR_mwdP_rDtOZuDf6rose8,10854
290
+ devsecops_engine_tools-1.12.0.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
291
+ devsecops_engine_tools-1.12.0.dist-info/entry_points.txt,sha256=9IjXF_7Zpgowq_SY6OSmsA9vZze18a8_AeHwkQVrgKk,131
292
+ devsecops_engine_tools-1.12.0.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
293
+ devsecops_engine_tools-1.12.0.dist-info/RECORD,,