-
-
Notifications
You must be signed in to change notification settings - Fork 32.4k
gh-136547: refactor hashlib_helper
for blocking and requesting digests
#136762
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
# re-import '_hashlib' in case it was mocked | ||
_hashlib = try_import_module("_hashlib") | ||
mod = _hashlib if openssl and _hashlib is not None else hashlib | ||
constructor = partial(mod.new, digestname, **kwargs) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I shouldn't return a partial function with "**kwargs" as it makes it impossible to use otherwise. I should only check if the call will succeed if I were to pass such keywords.
_hashlib = importlib.import_module("_hashlib") | ||
except ImportError as exc: | ||
raise SkipNoHash(digestname, "openssl") from exc | ||
constructor = partial(_hashlib.new, digestname, **kwargs) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ditto.
I made some mistakes in my previous PR and the design I introduced for requesting hashes could actually be greatly simplified. As those two are tightly coupled, I've decided to do both the fix & refactoring at the same time.
Because of all build possibilities we can have, whether at runtime or not, and because some functions can't be given
usedforsecurity
, tests easily fail because of the underlying configurations. Default builds where we don't have some FIPS module are easy to test, but when FIPS mode is enabled, it's hard to know what is blocked and what is not.One really annoying thing is the treatment of BLAKE-2 which always falls back to the built-in implementations. Thus, blocking BLAKE-2 may be quite hard and quite different. Well, if we block BLAKE-2 and we don't have OpenSSL at all, then tests don't pass because hashlib.py can't even be imported. Anywsay, I'm opening a draft for now and I'll continue working on this tomorrow.