Skip to content

Commit

Permalink
Fix detection of FIPS mode for blake2b (#879)
Browse files Browse the repository at this point in the history
* Fix detection of FIPS mode for blake2b

Blake2 algorithms are disabled on FIPS mode on OpenSSL level
and preferred on Python level which cause the check of
API (attributes) to fail sooner than OpenSSL raises ValueError
for unavailable function.

* Update test

* Add changelog entry

Co-authored-by: Brian Rutledge <brian@bhrutledge.com>
  • Loading branch information
frenzymadness and bhrutledge authored Feb 28, 2022
1 parent f69d4b7 commit a9e9cd6
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 3 deletions.
1 change: 1 addition & 0 deletions changelog/879.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Improve detection of disabled BLAKE2 hashing due to FIPS mode.
5 changes: 3 additions & 2 deletions tests/test_package.py
Original file line number Diff line number Diff line change
Expand Up @@ -307,9 +307,10 @@ def test_fips_hash_manager_md5(monkeypatch):
assert hasher.hexdigest() == hashes


def test_fips_hash_manager_blake2(monkeypatch):
@pytest.mark.parametrize("exception_class", [TypeError, ValueError])
def test_fips_hash_manager_blake2(exception_class, monkeypatch):
"""Generate hexdigest without BLAKE2 when hashlib is using FIPS mode."""
replaced_blake2b = pretend.raiser(ValueError("fipsmode"))
replaced_blake2b = pretend.raiser(exception_class("fipsmode"))
monkeypatch.setattr(package_file.hashlib, "blake2b", replaced_blake2b)

filename = "tests/fixtures/twine-1.5.0-py2.py3-none-any.whl"
Expand Down
2 changes: 1 addition & 1 deletion twine/package.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ def __init__(self, filename: str) -> None:
self._blake_hasher = None
try:
self._blake_hasher = hashlib.blake2b(digest_size=256 // 8)
except ValueError:
except (ValueError, TypeError):
# FIPS mode disables blake2
pass

Expand Down

0 comments on commit a9e9cd6

Please sign in to comment.