pymisp 2.5.12__py3-none-any.whl → 2.5.17.1__py3-none-any.whl

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

Potentially problematic release.


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

pymisp/__init__.py CHANGED
@@ -77,7 +77,7 @@ __all__ = ['PyMISP', 'register_user', 'AbstractMISP', 'MISPTag',
77
77
  'MISPOrganisationBlocklist', 'MISPEventReport', 'MISPCorrelationExclusion',
78
78
  'MISPDecayingModel', 'MISPGalaxy', 'MISPGalaxyCluster', 'MISPGalaxyClusterElement',
79
79
  'MISPGalaxyClusterRelation', 'MISPNote', 'MISPOpinion', 'MISPRelationship',
80
- 'PyMISPError', 'NewEventError', 'NewAttributeError',
80
+ 'PyMISPError', 'NewEventError', 'NewAttributeError', 'MISPServerError',
81
81
  'NoURL', 'NoKey', 'InvalidMISPObject', 'UnknownMISPObjectTemplate', 'PyMISPInvalidFormat',
82
82
  'Distribution', 'ThreatLevel', 'Analysis', 'ExpandedPyMISP'
83
83
  ]
pymisp/abstract.py CHANGED
@@ -383,7 +383,7 @@ class MISPTag(AbstractMISP):
383
383
 
384
384
  def from_dict(self, **kwargs) -> None: # type: ignore[no-untyped-def]
385
385
  if kwargs.get('Tag'):
386
- kwargs = kwargs.get('Tag') # type: ignore[assignment]
386
+ kwargs = kwargs.get('Tag')
387
387
  super().from_dict(**kwargs)
388
388
 
389
389
  def _set_default(self) -> None:
pymisp/api.py CHANGED
@@ -129,10 +129,10 @@ def brotli_supported() -> bool:
129
129
  # urllib >= 1.25.1 includes brotli support
130
130
  version_splitted = version('urllib3').split('.') # noqa: F811
131
131
  if len(version_splitted) == 2:
132
- major, minor = version_splitted # type: ignore
132
+ major, minor = version_splitted
133
133
  patch = 0
134
134
  else:
135
- major, minor, patch = version_splitted # type: ignore
135
+ major, minor, patch = version_splitted
136
136
  major, minor, patch = int(major), int(minor), int(patch)
137
137
  urllib3_with_brotli = (major == 1 and ((minor == 25 and patch >= 1) or (minor >= 26))) or major >= 2
138
138
 
@@ -1050,7 +1050,7 @@ class PyMISP:
1050
1050
  # At this point, we assume the user tried to add an attribute on an event they don't own
1051
1051
  # Re-try with a proposal
1052
1052
  if isinstance(attribute, (MISPAttribute, dict)):
1053
- return self.add_attribute_proposal(event_id, attribute, pythonify) # type: ignore
1053
+ return self.add_attribute_proposal(event_id, attribute, pythonify)
1054
1054
  if not (self.global_pythonify or pythonify) or 'errors' in new_attribute:
1055
1055
  return new_attribute
1056
1056
  a = MISPAttribute()
@@ -1563,7 +1563,7 @@ class PyMISP:
1563
1563
  if isinstance(warninglist_id, list):
1564
1564
  query['id'] = warninglist_id
1565
1565
  else:
1566
- query['id'] = [warninglist_id] # type: ignore
1566
+ query['id'] = [warninglist_id]
1567
1567
  if warninglist_name is not None:
1568
1568
  if isinstance(warninglist_name, list):
1569
1569
  query['name'] = warninglist_name
@@ -3032,7 +3032,7 @@ class PyMISP:
3032
3032
  if return_format == 'csv':
3033
3033
  normalized_response_text = self._check_response(response)
3034
3034
  if (self.global_pythonify or pythonify) and not headerless:
3035
- return self._csv_to_dict(normalized_response_text) # type: ignore
3035
+ return self._csv_to_dict(normalized_response_text)
3036
3036
  else:
3037
3037
  return normalized_response_text
3038
3038
  elif return_format not in ['json', 'yara-json']:
@@ -3060,7 +3060,7 @@ class PyMISP:
3060
3060
  to_return.append(me)
3061
3061
  elif controller == 'attributes':
3062
3062
  # FIXME: obvs, this is hurting my soul. We need something generic.
3063
- for a in normalized_response['Attribute']: # type: ignore[call-overload]
3063
+ for a in normalized_response['Attribute']:
3064
3064
  ma = MISPAttribute()
3065
3065
  ma.from_dict(**a)
3066
3066
  if 'Event' in ma:
@@ -88,9 +88,9 @@
88
88
  "ui-priority": 1
89
89
  }
90
90
  },
91
- "description": "A case as defined by flowintel-cm.",
91
+ "description": "A case as defined by flowintel.",
92
92
  "meta-category": "misc",
93
- "name": "flowintel-cm-case",
93
+ "name": "flowintel-case",
94
94
  "uuid": "19df57c7-b315-4fd2-84e5-d81ab221425e",
95
- "version": 3
95
+ "version": 4
96
96
  }
@@ -78,9 +78,9 @@
78
78
  "ui-priority": 0
79
79
  }
80
80
  },
81
- "description": "A task as defined by flowintel-cm.",
81
+ "description": "A task as defined by flowintel.",
82
82
  "meta-category": "misc",
83
- "name": "flowintel-cm-task",
83
+ "name": "flowintel-task",
84
84
  "uuid": "2f525f6e-d3f2-4cb9-9ca0-f1160d99397d",
85
- "version": 4
85
+ "version": 5
86
86
  }
@@ -27,9 +27,9 @@
27
27
  "ui-priority": 2
28
28
  }
29
29
  },
30
- "description": "A task's note as defined by flowintel-cm.",
30
+ "description": "A task's note as defined by flowintel.",
31
31
  "meta-category": "misc",
32
- "name": "flowintel-cm-task-note",
32
+ "name": "flowintel-task-note",
33
33
  "uuid": "2c6f6aba-48b6-482f-a810-81934d29be9a",
34
- "version": 1
34
+ "version": 2
35
35
  }
@@ -0,0 +1,35 @@
1
+ {
2
+ "attributes": {
3
+ "origin-url": {
4
+ "description": "Origin of the task",
5
+ "disable_correlation": true,
6
+ "misp-attribute": "url",
7
+ "to_ids": false,
8
+ "ui-priority": 1
9
+ },
10
+ "resource": {
11
+ "description": "Resources of the task",
12
+ "disable_correlation": true,
13
+ "misp-attribute": "text",
14
+ "to_ids": false,
15
+ "ui-priority": 0
16
+ },
17
+ "resource-uuid": {
18
+ "description": "UUID of the resource",
19
+ "disable_correlation": true,
20
+ "misp-attribute": "text",
21
+ "ui-priority": 2
22
+ },
23
+ "task-uuid": {
24
+ "description": "UUID of the parent task",
25
+ "disable_correlation": true,
26
+ "misp-attribute": "text",
27
+ "ui-priority": 2
28
+ }
29
+ },
30
+ "description": "A task's note as defined by flowintel.",
31
+ "meta-category": "misc",
32
+ "name": "flowintel-task-resource",
33
+ "uuid": "dc1d5bae-3611-499c-bbd6-1ca3ad4048dd",
34
+ "version": 1
35
+ }
@@ -4,59 +4,107 @@
4
4
  "description": "GreyNoise Actor",
5
5
  "disable_correlation": true,
6
6
  "misp-attribute": "text",
7
+ "ui-priority": 4
8
+ },
9
+ "asn": {
10
+ "description": "GreyNoise ASN",
11
+ "disable_correlation": true,
12
+ "misp-attribute": "AS",
13
+ "ui-priority": 3
14
+ },
15
+ "bot": {
16
+ "description": "GreyNoise Is Bot Flag",
17
+ "disable_correlation": true,
18
+ "misp-attribute": "boolean",
7
19
  "ui-priority": 1
8
20
  },
9
21
  "classification": {
10
22
  "description": "GreyNoise Classification",
11
23
  "disable_correlation": true,
12
24
  "misp-attribute": "text",
13
- "ui-priority": 1
25
+ "ui-priority": 6
26
+ },
27
+ "domain": {
28
+ "description": "GreyNoise Domain",
29
+ "disable_correlation": false,
30
+ "misp-attribute": "domain",
31
+ "ui-priority": 6
14
32
  },
15
33
  "first-seen": {
16
34
  "description": "First Seen",
17
35
  "disable_correlation": true,
18
36
  "misp-attribute": "datetime",
19
- "ui-priority": 2
37
+ "ui-priority": 5
20
38
  },
21
39
  "ip-src": {
22
40
  "description": "Source IP address of the network connection.",
23
41
  "misp-attribute": "ip-src",
24
- "ui-priority": 1
42
+ "ui-priority": 7
25
43
  },
26
44
  "last-seen": {
27
45
  "description": "Last Seen",
28
46
  "disable_correlation": true,
29
47
  "misp-attribute": "datetime",
30
- "ui-priority": 1
48
+ "ui-priority": 5
31
49
  },
32
50
  "link": {
33
51
  "description": "GreyNoise Visualizer Link",
34
52
  "disable_correlation": true,
35
53
  "misp-attribute": "link",
36
- "ui-priority": 2
54
+ "ui-priority": 4
37
55
  },
38
56
  "noise": {
39
57
  "description": "GreyNoise Internet Scanning Flag",
40
58
  "disable_correlation": true,
41
59
  "misp-attribute": "text",
42
- "ui-priority": 1
60
+ "ui-priority": 4
43
61
  },
44
62
  "provider": {
45
63
  "description": "GreyNoise Service Provider",
46
64
  "disable_correlation": true,
47
65
  "misp-attribute": "text",
48
- "ui-priority": 1
66
+ "ui-priority": 4
67
+ },
68
+ "rdns": {
69
+ "description": "GreyNoise Reverse DNS Hostname",
70
+ "disable_correlation": false,
71
+ "misp-attribute": "hostname",
72
+ "ui-priority": 2
73
+ },
74
+ "rdns_parent": {
75
+ "description": "GreyNoise Reverse DNS Domain",
76
+ "disable_correlation": true,
77
+ "misp-attribute": "domain",
78
+ "ui-priority": 2
49
79
  },
50
80
  "riot": {
51
81
  "description": "GreyNoise Common Business Service Flag",
52
82
  "disable_correlation": true,
53
83
  "misp-attribute": "text",
84
+ "ui-priority": 4
85
+ },
86
+ "source_country": {
87
+ "description": "GreyNoise Source Country",
88
+ "disable_correlation": true,
89
+ "misp-attribute": "text",
90
+ "ui-priority": 3
91
+ },
92
+ "tor": {
93
+ "description": "GreyNoise Is Tor Flag",
94
+ "disable_correlation": true,
95
+ "misp-attribute": "boolean",
54
96
  "ui-priority": 1
55
97
  },
56
98
  "trust-level": {
57
99
  "description": "GreyNoise RIOT Trust Level",
58
100
  "disable_correlation": true,
59
101
  "misp-attribute": "text",
102
+ "ui-priority": 4
103
+ },
104
+ "vpn": {
105
+ "description": "GreyNoise Is VPN Flag",
106
+ "disable_correlation": true,
107
+ "misp-attribute": "boolean",
60
108
  "ui-priority": 1
61
109
  }
62
110
  },
@@ -67,5 +115,5 @@
67
115
  "ip-src"
68
116
  ],
69
117
  "uuid": "6B14A94A-46E4-4B82-B24D-0DBF8E8B3FD9",
70
- "version": 1
118
+ "version": 2
71
119
  }
@@ -0,0 +1,167 @@
1
+ {
2
+ "attributes": {
3
+ "counter": {
4
+ "description": "counter (ex.: bytes, packets, flows, events, etc)",
5
+ "disable_correlation": true,
6
+ "misp-attribute": "counter",
7
+ "multiple": true,
8
+ "ui-priority": 3
9
+ },
10
+ "data": {
11
+ "description": "network traffic (ex.: payload, log lines, etc)",
12
+ "disable_correlation": true,
13
+ "misp-attribute": "text",
14
+ "multiple": true,
15
+ "ui-priority": 0
16
+ },
17
+ "description": {
18
+ "categories": [
19
+ "Network activity",
20
+ "External analysis"
21
+ ],
22
+ "description": "describe type/content of the network data",
23
+ "disable_correlation": true,
24
+ "misp-attribute": "text",
25
+ "multiple": true,
26
+ "ui-priority": 15
27
+ },
28
+ "dst_ASN": {
29
+ "categories": [
30
+ "Network activity",
31
+ "External analysis"
32
+ ],
33
+ "description": "destination autonomous system number",
34
+ "disable_correlation": true,
35
+ "misp-attribute": "AS",
36
+ "multiple": true,
37
+ "ui-priority": 8
38
+ },
39
+ "dst_CC": {
40
+ "categories": [
41
+ "Network activity",
42
+ "External analysis"
43
+ ],
44
+ "description": "destination country code",
45
+ "disable_correlation": true,
46
+ "misp-attribute": "text",
47
+ "multiple": true,
48
+ "ui-priority": 9
49
+ },
50
+ "dst_IP": {
51
+ "categories": [
52
+ "Network activity",
53
+ "External analysis"
54
+ ],
55
+ "description": "destination IP address",
56
+ "misp-attribute": "ip-dst",
57
+ "multiple": true,
58
+ "ui-priority": 7
59
+ },
60
+ "dst_hostname": {
61
+ "categories": [
62
+ "Network activity",
63
+ "External analysis"
64
+ ],
65
+ "description": "destination hostname",
66
+ "misp-attribute": "hostname",
67
+ "multiple": true,
68
+ "ui-priority": 5
69
+ },
70
+ "dst_port": {
71
+ "categories": [
72
+ "Network activity",
73
+ "External analysis"
74
+ ],
75
+ "description": "destination port",
76
+ "disable_correlation": true,
77
+ "misp-attribute": "port",
78
+ "multiple": true,
79
+ "ui-priority": 6
80
+ },
81
+ "first_seen": {
82
+ "description": "timestamp of the first data seen",
83
+ "disable_correlation": true,
84
+ "misp-attribute": "datetime",
85
+ "ui-priority": 2
86
+ },
87
+ "last_seen": {
88
+ "description": "timestamp of the last data seen",
89
+ "disable_correlation": true,
90
+ "misp-attribute": "datetime",
91
+ "ui-priority": 1
92
+ },
93
+ "protocol": {
94
+ "categories": [
95
+ "Network activity",
96
+ "External analysis"
97
+ ],
98
+ "description": "protocol (ex.: TCP, UDP, ICMP, TLS, HTTP, HTTPS, SIP, etc)",
99
+ "disable_correlation": true,
100
+ "misp-attribute": "text",
101
+ "multiple": true,
102
+ "ui-priority": 4
103
+ },
104
+ "src_ASN": {
105
+ "categories": [
106
+ "Network activity",
107
+ "External analysis"
108
+ ],
109
+ "description": "source autonomous system number",
110
+ "disable_correlation": true,
111
+ "misp-attribute": "AS",
112
+ "multiple": true,
113
+ "ui-priority": 13
114
+ },
115
+ "src_CC": {
116
+ "categories": [
117
+ "Network activity",
118
+ "External analysis"
119
+ ],
120
+ "description": "source country code",
121
+ "disable_correlation": true,
122
+ "misp-attribute": "text",
123
+ "multiple": true,
124
+ "ui-priority": 14
125
+ },
126
+ "src_IP": {
127
+ "categories": [
128
+ "Network activity",
129
+ "External analysis"
130
+ ],
131
+ "description": "source IP address",
132
+ "misp-attribute": "ip-src",
133
+ "multiple": true,
134
+ "ui-priority": 12
135
+ },
136
+ "src_hostname": {
137
+ "categories": [
138
+ "Network activity",
139
+ "External analysis"
140
+ ],
141
+ "description": "source hostname",
142
+ "misp-attribute": "hostname",
143
+ "multiple": true,
144
+ "ui-priority": 10
145
+ },
146
+ "src_port": {
147
+ "categories": [
148
+ "Network activity",
149
+ "External analysis"
150
+ ],
151
+ "description": "source port",
152
+ "disable_correlation": true,
153
+ "misp-attribute": "port",
154
+ "multiple": true,
155
+ "ui-priority": 11
156
+ }
157
+ },
158
+ "description": "network data, including payloads/logs, relevant timestamps, data volume and enrichment of the TCP/IP 5-tuple connection information.",
159
+ "meta-category": "network",
160
+ "name": "network-data",
161
+ "requiredOneOf": [
162
+ "src_IP",
163
+ "data"
164
+ ],
165
+ "uuid": "64d5949b-98ac-459d-83b8-4688f45795de",
166
+ "version": 2
167
+ }
@@ -9,6 +9,7 @@
9
9
  "STIX 1.1",
10
10
  "STIX 1.2",
11
11
  "STIX 2.0",
12
+ "STIX 2.1",
12
13
  "OpenIOC"
13
14
  ],
14
15
  "ui-priority": 1
@@ -27,7 +27,9 @@
27
27
  "Google search query",
28
28
  "Ariel Query Language (qradar)",
29
29
  "Grep",
30
- "Devo LINQ"
30
+ "Devo LINQ",
31
+ "Microsoft Defender XDR",
32
+ "Sentinel Advanced Security Information Model"
31
33
  ],
32
34
  "ui-priority": 0
33
35
  },
@@ -49,5 +51,5 @@
49
51
  "query"
50
52
  ],
51
53
  "uuid": "006539b3-f68a-4a02-a213-e600762d39b5",
52
- "version": 3
54
+ "version": 4
53
55
  }
pymisp/mispevent.py CHANGED
@@ -2,9 +2,9 @@ from __future__ import annotations
2
2
 
3
3
  from datetime import timezone, datetime, date
4
4
  import copy
5
+ from dateutil.parser import parse
5
6
  import os
6
7
  import base64
7
- import sys
8
8
  from io import BytesIO, BufferedIOBase, TextIOBase
9
9
  from zipfile import ZipFile
10
10
  import uuid
@@ -111,12 +111,6 @@ class AnalystDataBehaviorMixin(AbstractMISP):
111
111
  self.add_relationship(**relationship)
112
112
 
113
113
 
114
- try:
115
- from dateutil.parser import parse
116
- except ImportError:
117
- logger.exception("Cannot import dateutil")
118
-
119
-
120
114
  def _make_datetime(value: int | float | str | datetime | date) -> datetime:
121
115
  if isinstance(value, (int, float)):
122
116
  # Timestamp
@@ -126,7 +120,7 @@ def _make_datetime(value: int | float | str | datetime | date) -> datetime:
126
120
  # faster
127
121
  value = datetime.fromisoformat(value)
128
122
  except Exception:
129
- value = parse(value) # type: ignore[arg-type]
123
+ value = parse(value)
130
124
  elif isinstance(value, datetime):
131
125
  pass
132
126
  elif isinstance(value, date): # NOTE: date has to be *after* datetime, or it will be overwritten
@@ -399,7 +393,7 @@ class MISPAttribute(AnalystDataBehaviorMixin):
399
393
  if self.type == 'malware-sample':
400
394
  try:
401
395
  # Ignore type, if data is None -> exception
402
- with ZipFile(self.data) as f: # type: ignore
396
+ with ZipFile(self.data) as f:
403
397
  if not self.__is_misp_encrypted_file(f):
404
398
  raise PyMISPError('Not an existing malware sample')
405
399
  for name in f.namelist():
@@ -415,7 +409,12 @@ class MISPAttribute(AnalystDataBehaviorMixin):
415
409
 
416
410
  def __setattr__(self, name: str, value: Any) -> None:
417
411
  if name in ['first_seen', 'last_seen']:
418
- _datetime = _make_datetime(value)
412
+ try:
413
+ _datetime = _make_datetime(value)
414
+ except Exception:
415
+ if value is not None:
416
+ logger.warning(f'Invalid value ({value}) for {name}, skipping.')
417
+ return None
419
418
 
420
419
  # NOTE: the two following should be exceptions, but there are existing events in this state,
421
420
  # And we cannot dump them if it is there.
@@ -488,7 +487,7 @@ class MISPAttribute(AnalystDataBehaviorMixin):
488
487
  return self._malware_binary
489
488
  elif hasattr(self, 'malware_filename'):
490
489
  # Have a binary, but didn't decrypt it yet
491
- with ZipFile(self.data) as f: # type: ignore
490
+ with ZipFile(self.data) as f:
492
491
  for name in f.namelist():
493
492
  if not name.endswith('.filename.txt'):
494
493
  with f.open(name, pwd=b'infected') as unpacked:
@@ -585,18 +584,13 @@ class MISPAttribute(AnalystDataBehaviorMixin):
585
584
  if self.type == 'datetime' and isinstance(self.value, str):
586
585
  try:
587
586
  # Faster
588
- if sys.version_info >= (3, 7):
589
- self.value = datetime.fromisoformat(self.value)
590
- else:
591
- if '+' in self.value or '-' in self.value:
592
- self.value = datetime.strptime(self.value, "%Y-%m-%dT%H:%M:%S.%f%z")
593
- elif '.' in self.value:
594
- self.value = datetime.strptime(self.value, "%Y-%m-%dT%H:%M:%S.%f")
595
- else:
596
- self.value = datetime.strptime(self.value, "%Y-%m-%dT%H:%M:%S")
587
+ self.value = datetime.fromisoformat(self.value)
597
588
  except ValueError:
598
589
  # Slower, but if the other ones fail, that's a good fallback
599
- self.value = parse(self.value)
590
+ try:
591
+ self.value = parse(self.value)
592
+ except Exception:
593
+ raise NewAttributeError(f'{self.value} is not a valid datetime, the attribute is broken.')
600
594
 
601
595
  # Default values
602
596
  self.category = kwargs.pop('category', type_defaults['default_category'])
@@ -862,7 +856,12 @@ class MISPObject(AnalystDataBehaviorMixin):
862
856
 
863
857
  def __setattr__(self, name: str, value: Any) -> None:
864
858
  if name in ['first_seen', 'last_seen']:
865
- value = _make_datetime(value)
859
+ try:
860
+ value = _make_datetime(value)
861
+ except Exception:
862
+ if value is not None:
863
+ logger.warning(f'Invalid value ({value}) for {name}, skipping.')
864
+ return None
866
865
 
867
866
  if name == 'last_seen' and hasattr(self, 'first_seen') and self.first_seen > value:
868
867
  logger.warning(f'last_seen ({value}) has to be after first_seen ({self.first_seen})')
@@ -1855,7 +1854,10 @@ class MISPEvent(AnalystDataBehaviorMixin):
1855
1854
  # faster
1856
1855
  value = date.fromisoformat(value)
1857
1856
  except Exception:
1858
- value = parse(value).date()
1857
+ try:
1858
+ value = parse(value).date()
1859
+ except Exception as e:
1860
+ raise NewEventError(f'Invalid format for the date: {e} - {type(value)} - {value}')
1859
1861
  elif isinstance(value, (int, float)):
1860
1862
  value = date.fromtimestamp(value)
1861
1863
  elif isinstance(value, datetime):
@@ -1871,7 +1873,7 @@ class MISPEvent(AnalystDataBehaviorMixin):
1871
1873
  :param ignore_invalid: if True, assigns current date if d is not an expected type
1872
1874
  """
1873
1875
  if isinstance(d, (str, int, float, datetime, date)):
1874
- self.date = d # type: ignore
1876
+ self.date = d
1875
1877
  elif ignore_invalid:
1876
1878
  self.date = date.today()
1877
1879
  else:
@@ -1938,7 +1940,7 @@ class MISPEvent(AnalystDataBehaviorMixin):
1938
1940
  for rel_event in kwargs.pop('RelatedEvent'):
1939
1941
  sub_event = MISPEvent()
1940
1942
  sub_event.load(rel_event)
1941
- self.RelatedEvent.append({'Event': sub_event}) # type: ignore[arg-type]
1943
+ self.RelatedEvent.append({'Event': sub_event})
1942
1944
  if kwargs.get('Tag'):
1943
1945
  [self.add_tag(tag) for tag in kwargs.pop('Tag')]
1944
1946
  if kwargs.get('Object'):
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  import logging
6
6
 
7
7
  from io import BytesIO
8
+ from pathlib import Path
8
9
  from typing import Any, TYPE_CHECKING
9
10
 
10
11
  from ..exceptions import MISPObjectException
@@ -35,7 +36,7 @@ class FileTypeNotImplemented(MISPObjectException):
35
36
  pass
36
37
 
37
38
 
38
- def make_binary_objects(filepath: str | None = None,
39
+ def make_binary_objects(filepath: str | Path | None = None,
39
40
  pseudofile: BytesIO | bytes | None = None,
40
41
  filename: str | None = None,
41
42
  standalone: bool = True,
@@ -43,13 +44,11 @@ def make_binary_objects(filepath: str | None = None,
43
44
  misp_file = FileObject(filepath=filepath, pseudofile=pseudofile, filename=filename,
44
45
  standalone=standalone, default_attributes_parameters=default_attributes_parameters)
45
46
  if HAS_LIEF and (filepath or pseudofile):
47
+ # Since lief 0.17, the parse method figures out what do to with the parameter itself.
46
48
  if filepath:
47
- lief_parsed = lief.parse(filepath=filepath)
49
+ lief_parsed = lief.parse(filepath)
48
50
  elif pseudofile:
49
- if isinstance(pseudofile, bytes):
50
- lief_parsed = lief.parse(raw=pseudofile)
51
- else: # BytesIO
52
- lief_parsed = lief.parse(obj=pseudofile)
51
+ lief_parsed = lief.parse(pseudofile)
53
52
  else:
54
53
  logger.critical('You need either a filepath, or a pseudofile and a filename.')
55
54
  lief_parsed = None
pymisp/tools/elfobject.py CHANGED
@@ -49,11 +49,11 @@ class ELFObject(AbstractMISPObjectGenerator):
49
49
  logger.warning("pydeep is missing, please install pymisp this way: pip install pymisp[fileobjects]")
50
50
  if pseudofile:
51
51
  if isinstance(pseudofile, BytesIO):
52
- e = lief.ELF.parse(obj=pseudofile)
52
+ e = lief.ELF.parse(pseudofile)
53
53
  elif isinstance(pseudofile, bytes):
54
- e = lief.ELF.parse(raw=list(pseudofile))
54
+ e = lief.ELF.parse(pseudofile)
55
55
  elif isinstance(pseudofile, list):
56
- e = lief.ELF.parse(raw=pseudofile)
56
+ e = lief.ELF.parse(pseudofile)
57
57
  else:
58
58
  raise InvalidMISPObject(f'Pseudo file can be BytesIO or bytes got {type(pseudofile)}')
59
59
  if not e:
@@ -10,7 +10,7 @@ from email import policy, message_from_bytes
10
10
  from email.message import EmailMessage
11
11
  from io import BytesIO
12
12
  from pathlib import Path
13
- from typing import cast, Any
13
+ from typing import Any
14
14
 
15
15
  from extract_msg import openMsg
16
16
  from extract_msg.msg_classes import MessageBase
@@ -50,7 +50,6 @@ class EMailObject(AbstractMISPObjectGenerator):
50
50
  eml = message_from_bytes(content_in_bytes,
51
51
  _class=EmailMessage,
52
52
  policy=policy.default)
53
- eml = cast(EmailMessage, eml) # Only needed to quiet mypy
54
53
  if len(eml) != 0:
55
54
  self.raw_emails['eml'] = self.__pseudofile
56
55
  return eml
@@ -73,7 +72,6 @@ class EMailObject(AbstractMISPObjectGenerator):
73
72
  eml_bytes = content_in_bytes.decode("utf_8_sig").encode("utf-8")
74
73
  eml = email.message_from_bytes(eml_bytes,
75
74
  policy=policy.default)
76
- eml = cast(EmailMessage, eml) # Only needed to quiet mypy
77
75
  if len(eml) != 0:
78
76
  self.raw_emails['eml'] = BytesIO(eml_bytes)
79
77
  return eml
@@ -99,7 +97,7 @@ class EMailObject(AbstractMISPObjectGenerator):
99
97
  def _msg_to_eml(self, msg_bytes: bytes) -> EmailMessage:
100
98
  """Converts a msg into an eml."""
101
99
  # NOTE: openMsg returns a MessageBase, not a MSGFile
102
- msg_obj: MessageBase = openMsg(msg_bytes) # type: ignore
100
+ msg_obj: MessageBase = openMsg(msg_bytes)
103
101
  # msg obj stores the original raw header here
104
102
  message, body, attachments = self._extract_msg_objects(msg_obj)
105
103
  eml = self._build_eml(message, body, attachments)
@@ -107,7 +105,7 @@ class EMailObject(AbstractMISPObjectGenerator):
107
105
 
108
106
  def _extract_msg_objects(self, msg_obj: MessageBase) -> tuple[EmailMessage, dict[str, Any], list[AttachmentBase] | list[SignedAttachment]]:
109
107
  """Extracts email objects needed to construct an eml from a msg."""
110
- message: EmailMessage = email.message_from_string(msg_obj.header.as_string(), policy=policy.default) # type: ignore
108
+ message: EmailMessage = email.message_from_string(msg_obj.header.as_string(), policy=policy.default)
111
109
  body = {}
112
110
  if msg_obj.body is not None:
113
111
  body['text'] = {"obj": msg_obj.body,
@@ -51,11 +51,11 @@ class MachOObject(AbstractMISPObjectGenerator):
51
51
  logger.warning("pydeep is missing, please install pymisp this way: pip install pymisp[fileobjects]")
52
52
  if pseudofile:
53
53
  if isinstance(pseudofile, BytesIO):
54
- m = lief.MachO.parse(obj=pseudofile)
54
+ m = lief.MachO.parse(pseudofile)
55
55
  elif isinstance(pseudofile, bytes):
56
- m = lief.MachO.parse(raw=list(pseudofile))
56
+ m = lief.MachO.parse(pseudofile)
57
57
  elif isinstance(pseudofile, list):
58
- m = lief.MachO.parse(raw=pseudofile)
58
+ m = lief.MachO.parse(pseudofile)
59
59
  else:
60
60
  raise InvalidMISPObject(f'Pseudo file can be BytesIO or bytes got {type(pseudofile)}')
61
61
  if not m:
pymisp/tools/peobject.py CHANGED
@@ -53,11 +53,11 @@ class PEObject(AbstractMISPObjectGenerator):
53
53
  logger.warning("pydeep is missing, please install pymisp this way: pip install pymisp[fileobjects]")
54
54
  if pseudofile:
55
55
  if isinstance(pseudofile, BytesIO):
56
- p = lief.PE.parse(obj=pseudofile)
56
+ p = lief.PE.parse(pseudofile)
57
57
  elif isinstance(pseudofile, bytes):
58
- p = lief.PE.parse(raw=list(pseudofile))
58
+ p = lief.PE.parse(pseudofile)
59
59
  elif isinstance(pseudofile, list):
60
- p = lief.PE.parse(raw=pseudofile)
60
+ p = lief.PE.parse(pseudofile)
61
61
  else:
62
62
  raise InvalidMISPObject(f'Pseudo file can be BytesIO or bytes got {type(pseudofile)}')
63
63
  if not p:
@@ -202,7 +202,7 @@ class PESigners(AbstractMISPObjectGenerator):
202
202
  self.add_attribute('digest_algorithm', value=str(self.__signer.digest_algorithm))
203
203
  self.add_attribute('encryption_algorithm', value=str(self.__signer.encryption_algorithm))
204
204
  self.add_attribute('digest-base64', value=b64encode(self.__signer.encrypted_digest))
205
- info: lief.PE.SpcSpOpusInfo = self.__signer.get_attribute(lief.PE.Attribute.TYPE.SPC_SP_OPUS_INFO) # type: ignore[assignment]
205
+ info: lief.PE.SpcSpOpusInfo = self.__signer.get_attribute(lief.PE.Attribute.TYPE.SPC_SP_OPUS_INFO)
206
206
  if info:
207
207
  self.add_attribute('program-name', value=info.program_name)
208
208
  self.add_attribute('url', value=info.more_info)
@@ -1,8 +1,9 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: pymisp
3
- Version: 2.5.12
3
+ Version: 2.5.17.1
4
4
  Summary: Python API for MISP.
5
- License: BSD-2-Clause
5
+ License-Expression: BSD-2-Clause
6
+ License-File: LICENSE
6
7
  Author: Raphaël Vinot
7
8
  Author-email: raphael.vinot@circl.lu
8
9
  Requires-Python: >=3.9.2,<4.0
@@ -11,13 +12,13 @@ Classifier: Environment :: Console
11
12
  Classifier: Intended Audience :: Information Technology
12
13
  Classifier: Intended Audience :: Science/Research
13
14
  Classifier: Intended Audience :: Telecommunications Industry
14
- Classifier: License :: OSI Approved :: BSD License
15
15
  Classifier: Operating System :: POSIX :: Linux
16
16
  Classifier: Programming Language :: Python :: 3
17
17
  Classifier: Programming Language :: Python :: 3.10
18
18
  Classifier: Programming Language :: Python :: 3.11
19
19
  Classifier: Programming Language :: Python :: 3.12
20
20
  Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Programming Language :: Python :: 3.14
21
22
  Classifier: Topic :: Internet
22
23
  Classifier: Topic :: Security
23
24
  Provides-Extra: brotli
@@ -29,22 +30,22 @@ Provides-Extra: pdfexport
29
30
  Provides-Extra: url
30
31
  Provides-Extra: virustotal
31
32
  Requires-Dist: RTFDE (>=0.1.2.1) ; (python_version <= "3.9") and (extra == "email")
32
- Requires-Dist: beautifulsoup4 (>=4.13.4) ; extra == "openioc"
33
+ Requires-Dist: beautifulsoup4 (>=4.13.5) ; extra == "openioc"
33
34
  Requires-Dist: deprecated (>=1.2.18)
34
- Requires-Dist: docutils (>=0.21.2) ; (python_version >= "3.11") and (extra == "docs")
35
- Requires-Dist: extract_msg (>=0.54.1) ; extra == "email"
36
- Requires-Dist: lief (>=0.16.5) ; extra == "fileobjects"
35
+ Requires-Dist: docutils (<0.22) ; (python_version >= "3.11") and (extra == "docs")
36
+ Requires-Dist: extract_msg (>=0.55.0) ; extra == "email"
37
+ Requires-Dist: lief (>=0.17.0) ; extra == "fileobjects"
37
38
  Requires-Dist: myst-parser (>=4.0.1) ; (python_version >= "3.11") and (extra == "docs")
38
39
  Requires-Dist: oletools (>=0.60.2) ; extra == "email"
39
40
  Requires-Dist: pydeep2 (>=0.5.1) ; extra == "fileobjects"
40
41
  Requires-Dist: pyfaup (>=1.2) ; extra == "url"
41
42
  Requires-Dist: python-dateutil (>=2.9.0.post0)
42
43
  Requires-Dist: python-magic (>=0.4.27) ; extra == "fileobjects"
43
- Requires-Dist: reportlab (>=4.4.0) ; extra == "pdfexport"
44
- Requires-Dist: requests (>=2.32.3)
44
+ Requires-Dist: reportlab (>=4.4.3) ; extra == "pdfexport"
45
+ Requires-Dist: requests (>=2.32.5)
45
46
  Requires-Dist: sphinx (>=8.2.3) ; (python_version >= "3.11") and (extra == "docs")
46
47
  Requires-Dist: sphinx-autodoc-typehints (>=3.2.0) ; (python_version >= "3.11") and (extra == "docs")
47
- Requires-Dist: urllib3 (>=2.4.0) ; extra == "brotli"
48
+ Requires-Dist: urllib3 (>=2.5.0) ; extra == "brotli"
48
49
  Requires-Dist: validators (>=0.35.0) ; extra == "virustotal"
49
50
  Project-URL: Documentation, https://pymisp.readthedocs.io
50
51
  Project-URL: Repository, https://github.com/MISP/PyMISP
@@ -1,6 +1,6 @@
1
- pymisp/__init__.py,sha256=NxD9URYrwmEvYsZdUDTtBqBuIsvzRjXnRr8QVPsuOGE,4004
2
- pymisp/abstract.py,sha256=hdf3heAGnEi3rFIxaAsCOKfO4Y1kT_UoDNpr564GiIk,15745
3
- pymisp/api.py,sha256=o-LEgdYLtpAMjJ4KgmbYddFuHq-JBs9xU_4FfKRUJMU,209471
1
+ pymisp/__init__.py,sha256=0xHLChUKY2NJ6iTd7XTRjZz1ypm5w83dNDiKqmL2n9g,4023
2
+ pymisp/abstract.py,sha256=QQ7qrgAzbNdTdmYBL3lRq_qn-xC-33Ao6O_De4xIr4Q,15717
3
+ pymisp/api.py,sha256=-9E_cnascTsGzLlngC5lf1TAHcmRnn4jSmmeDYv6VJU,209360
4
4
  pymisp/data/describeTypes.json,sha256=hoOy6U_FDVmfk9EdaFgGfEe_GMifmRnIrW8FAJ1ylJ4,45889
5
5
  pymisp/data/misp-objects/objects/ADS/definition.json,sha256=EtPXOaNcngjtH0ylJ0gw9UfErgkjzUWFOyzvzC6pGfM,3048
6
6
  pymisp/data/misp-objects/objects/abuseipdb/definition.json,sha256=xWtZfdAwWWTR5_J76K8chrxFViJeH9T8CQQ6aRhEk3Q,1070
@@ -91,9 +91,10 @@ pymisp/data/misp-objects/objects/facial-composite/definition.json,sha256=gj4wK-V
91
91
  pymisp/data/misp-objects/objects/fail2ban/definition.json,sha256=5bAMbq3txZHWQrIX-NDZMQRg6vrpUBTbimJcCyk4Ixw,1601
92
92
  pymisp/data/misp-objects/objects/favicon/definition.json,sha256=KL6P9RGHjaLRj41DPzszif0mmEvUsnbEj5I4nOz497g,996
93
93
  pymisp/data/misp-objects/objects/file/definition.json,sha256=wPPyh74-tOLlphUHlKfAtjEUYoYY7jNHn8JwzUgF_MA,12900
94
- pymisp/data/misp-objects/objects/flowintel-cm-case/definition.json,sha256=d-Eq_KbwENHU30aWhL7k62GqZfxEIK3nkb001kxxIVc,2494
95
- pymisp/data/misp-objects/objects/flowintel-cm-task/definition.json,sha256=BUOp4w4PSq8nAlJZTYWH5sFKK80--3H-Uj78LAjbs5U,2199
96
- pymisp/data/misp-objects/objects/flowintel-cm-task-note/definition.json,sha256=p9MZ78Ur4T4GhUac4JvTItM64fYeZ0l5nhm2i9P8COA,895
94
+ pymisp/data/misp-objects/objects/flowintel-case/definition.json,sha256=LCDG0OOJdpY_GbrGkv20edtyYfW6IUNn8rKc9hKiSbw,2488
95
+ pymisp/data/misp-objects/objects/flowintel-task/definition.json,sha256=9ON-1bXHSOB7A07t8fRNQ0_37aY32EuLvBd5bfSDuNQ,2193
96
+ pymisp/data/misp-objects/objects/flowintel-task-note/definition.json,sha256=wU5HLbzediH2Rol-dx45bClRIkXG-k8xxdUjCeTXSs4,889
97
+ pymisp/data/misp-objects/objects/flowintel-task-resource/definition.json,sha256=iO0K2Gj5-TYJ9C0nkmzJDR0Ui8R4z3cYxPpK5CHzozU,908
97
98
  pymisp/data/misp-objects/objects/forensic-case/definition.json,sha256=tOaSEp9SAleSBXVVe8ms8G8jjd2q_IpaIDmfqt8NAsY,1281
98
99
  pymisp/data/misp-objects/objects/forensic-evidence/definition.json,sha256=d1Sjj0mts5mZ5YiKTXEYrNJXtC-ZJ0lN7Q7ux0-FN9c,2274
99
100
  pymisp/data/misp-objects/objects/forged-document/definition.json,sha256=xBpiPFyJjwuBVM0xrmQSHY4wmm0bTOQIg45avB3NgLw,2816
@@ -159,7 +160,7 @@ pymisp/data/misp-objects/objects/gitlab-user/definition.json,sha256=xCqY6NAG1Dht
159
160
  pymisp/data/misp-objects/objects/google-account/definition.json,sha256=fsyjqkMU12X0F4NpI1Mx4i09MQHNb1n-1HwJSIVrO0Q,3467
160
161
  pymisp/data/misp-objects/objects/google-safe-browsing/definition.json,sha256=Bxo1eu_EbY8Q1mMv0y0lDv9Rn0xDwmPtesuZ8jtk4Xc,739
161
162
  pymisp/data/misp-objects/objects/google-threat-intelligence-report/definition.json,sha256=EZgeF_PbgrxLVGaszm_BJPoWbEB8D7O52anB68vkA8s,1879
162
- pymisp/data/misp-objects/objects/greynoise-ip/definition.json,sha256=pPp13wr0ATb1GYrrjJRLJxzkXJmkbajCifo4IfOeNYc,1850
163
+ pymisp/data/misp-objects/objects/greynoise-ip/definition.json,sha256=KQ99REeJsj3v63dMkxVOsVctR0CTV-_WdeMrkf1PXn0,3144
163
164
  pymisp/data/misp-objects/objects/gtp-attack/definition.json,sha256=WjQ4t_Iu1oMx74W20FWZ70UFJUJn9ta5hu7MPxXNZ7o,2611
164
165
  pymisp/data/misp-objects/objects/hashlookup/definition.json,sha256=rm3xJoDfJKqUuKhfGd8t17XE0xBJ2QMTWg6H7WJvKzI,2888
165
166
  pymisp/data/misp-objects/objects/hhhash/definition.json,sha256=HmPa_bN-FBaZQWDdz2_9fzZHqIREh1dkyio7OsWbzyo,1474
@@ -209,6 +210,7 @@ pymisp/data/misp-objects/objects/mutex/definition.json,sha256=zqun14zDa2seXkX5BG
209
210
  pymisp/data/misp-objects/objects/narrative/definition.json,sha256=VXEm_lcQgR7uFtMalrdbI73-ivv6HJHQVx6lPU0FYzA,2200
210
211
  pymisp/data/misp-objects/objects/netflow/definition.json,sha256=pQ_meRpiPEchaTBNTBUyUT5zPmL7QNIQgLGKdd_KTqE,4103
211
212
  pymisp/data/misp-objects/objects/network-connection/definition.json,sha256=6rGG8ZhW3YxgGAV_l91GFpZXk4QpyJ7iuedH5FU38HE,4248
213
+ pymisp/data/misp-objects/objects/network-data/definition.json,sha256=XxC2GxhybnzSfYOXNI6iufmj7EFFj_4by6cLTogreeA,4322
212
214
  pymisp/data/misp-objects/objects/network-profile/definition.json,sha256=urPC6ysgZ5kaiB2L2ilL19iGmR2GNUzjO4pcUngQl5E,6175
213
215
  pymisp/data/misp-objects/objects/network-socket/definition.json,sha256=qEE1yvRnrpylHut3jFDJnPWWfsz61ZJO0-Lp40WOSjM,6571
214
216
  pymisp/data/misp-objects/objects/network-traffic/definition.json,sha256=jZSGhItwP-1Vxm7fv_IqbijXqnAvPFFKhjxolaDXudE,3144
@@ -217,7 +219,7 @@ pymisp/data/misp-objects/objects/news-media/definition.json,sha256=Mb4TQz-Cj035H
217
219
  pymisp/data/misp-objects/objects/open-data-security/definition.json,sha256=fNTNdk-Hjd83DkmhbhGst6PJv09ZJzuXC6RitsEinZg,3052
218
220
  pymisp/data/misp-objects/objects/opentide/definition.json,sha256=KAhBYWYMp_PF0lTMjanOBKZirdju2120Y9tNOlpMzy8,1496
219
221
  pymisp/data/misp-objects/objects/organization/definition.json,sha256=2Dq4Gs4ynlcaP1rnxfvDCU8cCARO39_Z3azkHYJjhh4,3956
220
- pymisp/data/misp-objects/objects/original-imported-file/definition.json,sha256=lip2yP3wdLoCGxsiCrNMcBC6nyQJUPcJFZYzlkpxeOA,921
222
+ pymisp/data/misp-objects/objects/original-imported-file/definition.json,sha256=3GwBNwKhwKGjxM4V_mVxH7Za5t0yRgQ1i01ogIcHMvk,941
221
223
  pymisp/data/misp-objects/objects/paloalto-threat-event/definition.json,sha256=F1qMo6LN32i3e7ODjv38twX3BEzrgdLIqXN9PqL-3x4,2597
222
224
  pymisp/data/misp-objects/objects/parler-account/definition.json,sha256=YRDWupU7kbSGgTKzwnj7iIqNuAAlBCOPmocWBaYqcQw,3431
223
225
  pymisp/data/misp-objects/objects/parler-comment/definition.json,sha256=F6dwrsaryCXAmlu-EIjuqJq1ygDRqnfZcoaBsu2CI-8,3900
@@ -244,7 +246,7 @@ pymisp/data/misp-objects/objects/probabilistic-data-structure/definition.json,sh
244
246
  pymisp/data/misp-objects/objects/process/definition.json,sha256=JmRNrY6JTu5zw3C7uc8fcT4tgZBmBnfrg32NEKYreIM,5089
245
247
  pymisp/data/misp-objects/objects/publication/definition.json,sha256=j_ZEp8Xk0ZRNN-Gt2cGknPEL6fsN4rdFNpZX30CgoCI,3667
246
248
  pymisp/data/misp-objects/objects/python-etvx-event-log/definition.json,sha256=pEa37XSenCrGwPkJ3SqRd6umycXVoLWs5r3oZcKqcmc,4863
247
- pymisp/data/misp-objects/objects/query/definition.json,sha256=NmudWbuwIV8FoKQRhrim4Tc4U0_VKKwhVtfuThagkx8,1386
249
+ pymisp/data/misp-objects/objects/query/definition.json,sha256=aInnfBGGVw0gKf2rD0GOMQFzgnCNsvLvE-Z4C3Bi59c,1476
248
250
  pymisp/data/misp-objects/objects/r2graphity/definition.json,sha256=ESpT5SLLUnlCpYjB20wd88kXgUMFwTLE9UsKrXZgFpo,4596
249
251
  pymisp/data/misp-objects/objects/ransom-negotiation/definition.json,sha256=jvbnAloyXHIHI0rI4XyZ-fAPKzK5baym11PXGQF-9xg,4588
250
252
  pymisp/data/misp-objects/objects/ransomware-group-post/definition.json,sha256=dUZsHN7brIVgu1CgZo7rJRlwWmPoy3TZypiiFytnwBc,3132
@@ -370,17 +372,17 @@ pymisp/data/misp-objects/schema_relationships.json,sha256=MCusp9GAyuHTo3lLyBrsvl
370
372
  pymisp/data/schema-lax.json,sha256=2QICdCbtfXRJkTVjwb7xjF3ypys2wOtrUyE1ZDz_qes,8561
371
373
  pymisp/data/schema.json,sha256=79N2hObemthb_syUHksDqM4djFttsWZQDg1sTYZYxys,9178
372
374
  pymisp/exceptions.py,sha256=IgGGadv5lnLAvO7Q6AjF0vEbjoWwwDWLYwMn-8pkU_k,1965
373
- pymisp/mispevent.py,sha256=rDlW0amvLSizJFjEid5Bw0wVLdF0pOsWqvdb0JMyISc,121527
375
+ pymisp/mispevent.py,sha256=2FM7k1EwTSEiyUcyeCc2joUpTCInXbnXKp5DYpLTMYo,121613
374
376
  pymisp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
375
377
  pymisp/tools/__init__.py,sha256=_KCihYo82e8G5cHV321ak2sgbao2GyFjf4sSTMiN_IM,2233
376
378
  pymisp/tools/_psl_faup.py,sha256=JyK8RQm8DPWvNuoF4rQpiE0rBm-Az-sr38Kl46dmWcs,7034
377
379
  pymisp/tools/abstractgenerator.py,sha256=x9dBMtAt8bcUGVqVAjVQ3Gf5hgnZScyyoMZ4wHSS09M,2745
378
380
  pymisp/tools/asnobject.py,sha256=zWl29pdn7eu0g1YRAt609_aNSCp1R4BzLquVOlzkZ84,836
379
- pymisp/tools/create_misp_object.py,sha256=PP78t4Gc7jiZtjt3MGC-0NuH976vSadSmhbaSkibGk8,2829
381
+ pymisp/tools/create_misp_object.py,sha256=yTACToGdy99Plumc4_HQtMCcRWyWSHkLDfC2RNGRmxs,2806
380
382
  pymisp/tools/csvloader.py,sha256=d-Ox4KEehuXi9YxPE3hhf62etaj7D0pUHr5Qy4rPoqo,2588
381
383
  pymisp/tools/domainipobject.py,sha256=2w1ckOWPZvp9EW6TOAguT1Kwov72K1jJuJLqgU1whoo,847
382
- pymisp/tools/elfobject.py,sha256=thylyAVcAdF31II8ykVzG75Fe4Fgokc9qR90g1ybI8s,4966
383
- pymisp/tools/emailobject.py,sha256=sPgVAvQFyRiONMiXYDJNibSSMWsjX1df9J3EDZ5LDEE,22680
384
+ pymisp/tools/elfobject.py,sha256=JX080uLjbm4Oi1m4N9wD03C5HMrIQdeRMHniPzHtT2I,4948
385
+ pymisp/tools/emailobject.py,sha256=GjOj4MJ0IQsdStkfAk0pshxBe40OGn1_g0jTftym_0o,22500
384
386
  pymisp/tools/ext_lookups.py,sha256=acRbOVQftw7XpbjDZDrrdYzDmLDU4HmhoW48Og3UfaY,1022
385
387
  pymisp/tools/fail2banobject.py,sha256=VWxK8qWVL0AqO_YZSKmsOcaEnG_5j0jOok7OfEXWfMQ,740
386
388
  pymisp/tools/feed.py,sha256=eRG1D4fnG-2hZTFFy7SYUhGVozaAMVSiJXwxHoLP5Gg,700
@@ -389,11 +391,11 @@ pymisp/tools/genericgenerator.py,sha256=upQuQXlv8SF1juA3BHHWXF2bC0_g3-Vv6Q25K_ow
389
391
  pymisp/tools/geolocationobject.py,sha256=069_d6kHKWeCiX9bGxVI7Ky3r26SVKRAFzJLmhmOc4A,852
390
392
  pymisp/tools/git_vuln_finder_object.py,sha256=WTRUvUsXnG4hkmFMI3PBwQV8N7URkCPh8zPXnFexMhs,1278
391
393
  pymisp/tools/load_warninglists.py,sha256=4ahczPmCDCbMS7Ab25NMOxeDBCj_3lVniJbH08PuAw8,1003
392
- pymisp/tools/machoobject.py,sha256=tSyuWz6z_i-ChZ0uFVwxAh8LE2vW30L82SnoPDPuvWs,4789
394
+ pymisp/tools/machoobject.py,sha256=q87LW3mm_WMpKe3r_Zw-3wwaYoIeNIgQkseDXguqwk8,4771
393
395
  pymisp/tools/microblogobject.py,sha256=8_53_6M79VhfrJzR_itZ8HnPPclQwX9j0JdI9gMB2kg,6899
394
396
  pymisp/tools/neo4j.py,sha256=3Jr2QlOTk8D-P5c1DefYDEP6IIgKNswlZA7F5FocHjU,2088
395
397
  pymisp/tools/openioc.py,sha256=TwXcbUkWNzkZavmPoVXdZpjM_GcKB9bqLrw7o3xI24E,14458
396
- pymisp/tools/peobject.py,sha256=9XHvk4zpWsV1YvbI7YKQUrbnGrUuR21v86PE9z1Nxtg,11819
398
+ pymisp/tools/peobject.py,sha256=y7TAvv9CFS3ETDrVsXS7FTBxR3Izgrv3OUM9pcSxmgk,11773
397
399
  pymisp/tools/reportlab_generator.py,sha256=njt0sP-WTWywQ2ieF7Qy5h-dk5FLA0P1i_HF9qhz_4I,76994
398
400
  pymisp/tools/sbsignatureobject.py,sha256=aq5To8zcBJe7BHBRZzlqC9xG7N31Naem6yp6bGTOwrU,790
399
401
  pymisp/tools/sshauthkeyobject.py,sha256=GEByZkdR7QN3KgE4GcDw3LYS_h-DrUw5cWAy6rMvA_Y,1284
@@ -401,7 +403,7 @@ pymisp/tools/update_objects.py,sha256=sp_XshzgtRjAU0Mqg8FgRTaokjVKLImyQ02xIcPSrH
401
403
  pymisp/tools/urlobject.py,sha256=PIucy1356zaljUm1NbeKmEpHpAUK9yiK2lAugcMp2t8,2489
402
404
  pymisp/tools/vehicleobject.py,sha256=bs7f4d47IBi2-VumssSM3HlqkH0viyHTLmIHQxe8Iz8,3687
403
405
  pymisp/tools/vtreportobject.py,sha256=NsdYzgqm47dywYeW8UnWmEDeIsf07xZreD2iJzFm2wg,3217
404
- pymisp-2.5.12.dist-info/LICENSE,sha256=1oPSVvs96qLjbJVi3mPn0yvWs-6aoIF6BNXi6pVlFmY,1615
405
- pymisp-2.5.12.dist-info/METADATA,sha256=zKo_Bqx7xWbM3RvDTsXuMzEqbncOjUp0KAMHwP5yCnk,8884
406
- pymisp-2.5.12.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
407
- pymisp-2.5.12.dist-info/RECORD,,
406
+ pymisp-2.5.17.1.dist-info/METADATA,sha256=TiiskjaL3FyxVZoswCDGBwEblhFkM4AWwEe3BXouQy8,8916
407
+ pymisp-2.5.17.1.dist-info/WHEEL,sha256=M5asmiAlL6HEcOq52Yi5mmk9KmTVjY2RDPtO4p9DMrc,88
408
+ pymisp-2.5.17.1.dist-info/licenses/LICENSE,sha256=1oPSVvs96qLjbJVi3mPn0yvWs-6aoIF6BNXi6pVlFmY,1615
409
+ pymisp-2.5.17.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.2.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any