|
22 | 22 | """ |
23 | 23 |
|
24 | 24 | import hashlib |
| 25 | +from typing import IO, Any |
25 | 26 |
|
26 | 27 | from securesystemslib import exceptions |
27 | | -from securesystemslib.storage import FilesystemBackend |
| 28 | +from securesystemslib.storage import FilesystemBackend, StorageBackendInterface |
28 | 29 |
|
29 | 30 | DEFAULT_CHUNK_SIZE = 4096 |
30 | 31 | DEFAULT_HASH_ALGORITHM = "sha256" |
|
40 | 41 | from cryptography.hazmat.primitives import hashes as _pyca_hashes |
41 | 42 |
|
42 | 43 | # Dictionary of `pyca/cryptography` supported hash algorithms. |
43 | | - PYCA_DIGEST_OBJECTS_CACHE = { |
| 44 | + PYCA_DIGEST_OBJECTS_CACHE: dict[str, type[_pyca_hashes.HashAlgorithm]] = { |
44 | 45 | "sha224": _pyca_hashes.SHA224, |
45 | 46 | "sha256": _pyca_hashes.SHA256, |
46 | 47 | "sha384": _pyca_hashes.SHA384, |
@@ -82,34 +83,36 @@ class PycaDiggestWrapper: |
82 | 83 | method. |
83 | 84 | """ |
84 | 85 |
|
85 | | - def __init__(self, digest_obj): |
| 86 | + def __init__(self, digest_obj: Any) -> None: |
86 | 87 | self._digest_obj = digest_obj |
87 | 88 |
|
88 | 89 | @property |
89 | | - def algorithm(self): |
| 90 | + def algorithm(self) -> str: |
90 | 91 | return self._digest_obj.algorithm |
91 | 92 |
|
92 | 93 | @property |
93 | | - def digest_size(self): |
| 94 | + def digest_size(self) -> int: |
94 | 95 | return self._digest_obj.algorithm.digest_size |
95 | 96 |
|
96 | | - def digest(self): |
| 97 | + def digest(self) -> bytes: |
97 | 98 | digest_obj_copy = self._digest_obj.copy() |
98 | 99 | digest = self._digest_obj.finalize() |
99 | 100 | self._digest_obj = digest_obj_copy |
100 | 101 | return digest |
101 | 102 |
|
102 | | - def hexdigest(self): |
| 103 | + def hexdigest(self) -> str: |
103 | 104 | return binascii.hexlify(self.digest()).decode("utf-8") |
104 | 105 |
|
105 | | - def update(self, data): |
| 106 | + def update(self, data: Any) -> None: |
106 | 107 | self._digest_obj.update(data) |
107 | 108 |
|
108 | 109 | except ImportError: # pragma: no cover |
109 | 110 | pass |
110 | 111 |
|
111 | 112 |
|
112 | | -def digest(algorithm=DEFAULT_HASH_ALGORITHM, hash_library=DEFAULT_HASH_LIBRARY): |
| 113 | +def digest( |
| 114 | + algorithm: str = DEFAULT_HASH_ALGORITHM, hash_library: str = DEFAULT_HASH_LIBRARY |
| 115 | +) -> Any: |
113 | 116 | """ |
114 | 117 | <Purpose> |
115 | 118 | Provide the caller with the ability to create digest objects without having |
@@ -164,7 +167,7 @@ def digest(algorithm=DEFAULT_HASH_ALGORITHM, hash_library=DEFAULT_HASH_LIBRARY): |
164 | 167 | if hash_library == "hashlib" and hash_library in SUPPORTED_LIBRARIES: |
165 | 168 | try: |
166 | 169 | if algorithm == "blake2b-256": |
167 | | - return hashlib.new("blake2b", digest_size=32) |
| 170 | + return hashlib.blake2b(digest_size=32) |
168 | 171 | else: |
169 | 172 | return hashlib.new(algorithm) |
170 | 173 |
|
@@ -194,11 +197,11 @@ def digest(algorithm=DEFAULT_HASH_ALGORITHM, hash_library=DEFAULT_HASH_LIBRARY): |
194 | 197 |
|
195 | 198 |
|
196 | 199 | def digest_fileobject( |
197 | | - file_object, |
198 | | - algorithm=DEFAULT_HASH_ALGORITHM, |
199 | | - hash_library=DEFAULT_HASH_LIBRARY, |
200 | | - normalize_line_endings=False, |
201 | | -): |
| 200 | + file_object: IO, |
| 201 | + algorithm: str = DEFAULT_HASH_ALGORITHM, |
| 202 | + hash_library: str = DEFAULT_HASH_LIBRARY, |
| 203 | + normalize_line_endings: bool = False, |
| 204 | +) -> Any: |
202 | 205 | """ |
203 | 206 | <Purpose> |
204 | 207 | Generate a digest object given a file object. The new digest object |
@@ -288,12 +291,12 @@ def digest_fileobject( |
288 | 291 |
|
289 | 292 |
|
290 | 293 | def digest_filename( |
291 | | - filename, |
292 | | - algorithm=DEFAULT_HASH_ALGORITHM, |
293 | | - hash_library=DEFAULT_HASH_LIBRARY, |
294 | | - normalize_line_endings=False, |
295 | | - storage_backend=None, |
296 | | -): |
| 294 | + filename: str, |
| 295 | + algorithm: str = DEFAULT_HASH_ALGORITHM, |
| 296 | + hash_library: str = DEFAULT_HASH_LIBRARY, |
| 297 | + normalize_line_endings: bool = False, |
| 298 | + storage_backend: StorageBackendInterface | None = None, |
| 299 | +) -> Any: |
297 | 300 | """ |
298 | 301 | <Purpose> |
299 | 302 | Generate a digest object, update its hash using a file object |
|
0 commit comments