remove support for shake_* hashes, fixes #6082

This commit is contained in:
Thomas Waldmann 2022-01-07 22:21:22 +01:00
parent 3a878bb13c
commit 6226002eb0
1 changed files with 6 additions and 4 deletions

View File

@ -672,7 +672,9 @@ class ArchiveFormatter(BaseFormatter):
class ItemFormatter(BaseFormatter): class ItemFormatter(BaseFormatter):
hash_algorithms = hashlib.algorithms_guaranteed.union({'xxh64'}) # we provide the hash algos from python stdlib (except shake_*) and additionally xxh64.
# shake_* is not provided because it uses an incompatible .digest() method to support variable length.
hash_algorithms = hashlib.algorithms_guaranteed.union({'xxh64'}).difference({'shake_128', 'shake_256'})
KEY_DESCRIPTIONS = { KEY_DESCRIPTIONS = {
'bpath': 'verbatim POSIX path, can contain any character except NUL', 'bpath': 'verbatim POSIX path, can contain any character except NUL',
'path': 'path interpreted as text (might be missing non-text characters, see bpath)', 'path': 'path interpreted as text (might be missing non-text characters, see bpath)',
@ -836,10 +838,10 @@ class ItemFormatter(BaseFormatter):
def hash_item(self, hash_function, item): def hash_item(self, hash_function, item):
if 'chunks' not in item: if 'chunks' not in item:
return "" return ""
if hash_function in hashlib.algorithms_guaranteed: if hash_function == 'xxh64':
hash = hashlib.new(hash_function)
elif hash_function == 'xxh64':
hash = self.xxh64() hash = self.xxh64()
elif hash_function in self.hash_algorithms:
hash = hashlib.new(hash_function)
for data in self.archive.pipeline.fetch_many([c.id for c in item.chunks]): for data in self.archive.pipeline.fetch_many([c.id for c in item.chunks]):
hash.update(data) hash.update(data)
return hash.hexdigest() return hash.hexdigest()