Skip to content

Commit b48b1cf

Browse files
committed
hash: Pretend to type annotate
It's not really possible to annotate hash correctly but let's do something... Signed-off-by: Jussi Kukkonen <jkukkonen@google.com>
1 parent 162ed6a commit b48b1cf

1 file changed

Lines changed: 24 additions & 21 deletions

File tree

securesystemslib/hash.py

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@
2222
"""
2323

2424
import hashlib
25+
from typing import IO, Any
2526

2627
from securesystemslib import exceptions
27-
from securesystemslib.storage import FilesystemBackend
28+
from securesystemslib.storage import FilesystemBackend, StorageBackendInterface
2829

2930
DEFAULT_CHUNK_SIZE = 4096
3031
DEFAULT_HASH_ALGORITHM = "sha256"
@@ -40,7 +41,7 @@
4041
from cryptography.hazmat.primitives import hashes as _pyca_hashes
4142

4243
# Dictionary of `pyca/cryptography` supported hash algorithms.
43-
PYCA_DIGEST_OBJECTS_CACHE = {
44+
PYCA_DIGEST_OBJECTS_CACHE: dict[str, type[_pyca_hashes.HashAlgorithm]] = {
4445
"sha224": _pyca_hashes.SHA224,
4546
"sha256": _pyca_hashes.SHA256,
4647
"sha384": _pyca_hashes.SHA384,
@@ -82,34 +83,36 @@ class PycaDiggestWrapper:
8283
method.
8384
"""
8485

85-
def __init__(self, digest_obj):
86+
def __init__(self, digest_obj: Any) -> None:
8687
self._digest_obj = digest_obj
8788

8889
@property
89-
def algorithm(self):
90+
def algorithm(self) -> str:
9091
return self._digest_obj.algorithm
9192

9293
@property
93-
def digest_size(self):
94+
def digest_size(self) -> int:
9495
return self._digest_obj.algorithm.digest_size
9596

96-
def digest(self):
97+
def digest(self) -> bytes:
9798
digest_obj_copy = self._digest_obj.copy()
9899
digest = self._digest_obj.finalize()
99100
self._digest_obj = digest_obj_copy
100101
return digest
101102

102-
def hexdigest(self):
103+
def hexdigest(self) -> str:
103104
return binascii.hexlify(self.digest()).decode("utf-8")
104105

105-
def update(self, data):
106+
def update(self, data: Any) -> None:
106107
self._digest_obj.update(data)
107108

108109
except ImportError: # pragma: no cover
109110
pass
110111

111112

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:
113116
"""
114117
<Purpose>
115118
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):
164167
if hash_library == "hashlib" and hash_library in SUPPORTED_LIBRARIES:
165168
try:
166169
if algorithm == "blake2b-256":
167-
return hashlib.new("blake2b", digest_size=32)
170+
return hashlib.blake2b(digest_size=32)
168171
else:
169172
return hashlib.new(algorithm)
170173

@@ -194,11 +197,11 @@ def digest(algorithm=DEFAULT_HASH_ALGORITHM, hash_library=DEFAULT_HASH_LIBRARY):
194197

195198

196199
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:
202205
"""
203206
<Purpose>
204207
Generate a digest object given a file object. The new digest object
@@ -288,12 +291,12 @@ def digest_fileobject(
288291

289292

290293
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:
297300
"""
298301
<Purpose>
299302
Generate a digest object, update its hash using a file object

0 commit comments

Comments
 (0)