From 6226002eb050b0f90b54718abccfc63565a487e0 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Fri, 7 Jan 2022 22:21:22 +0100 Subject: [PATCH] remove support for shake_* hashes, fixes #6082 --- src/borg/helpers/parseformat.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/borg/helpers/parseformat.py b/src/borg/helpers/parseformat.py index b42c5a6fd..a711c0448 100644 --- a/src/borg/helpers/parseformat.py +++ b/src/borg/helpers/parseformat.py @@ -672,7 +672,9 @@ class ArchiveFormatter(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 = { 'bpath': 'verbatim POSIX path, can contain any character except NUL', '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): if 'chunks' not in item: return "" - if hash_function in hashlib.algorithms_guaranteed: - hash = hashlib.new(hash_function) - elif hash_function == 'xxh64': + if hash_function == '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]): hash.update(data) return hash.hexdigest()