Skip to content

Clinic signatures of HACL* hash functions are inconsistent with OpenSSL implementation #134696

Closed

Description

@8R0WNI3

Bug description:

According to its docstring, the function hashlib.shake_128(...).hexdigest() should accept an argument length, either as positional or as keyword argument. However, since Python 3.14, the function only accepts positional arguments and fails with TypeError: shake_128.hexdigest() takes no keyword arguments otherwise.

I narrowed the root cause for this behaviour down to the following two commits (I'm not 100% sure though as I don't have any C-background):

Reproducer:

import hashlib
hashlib.shake_128(b'').hexdigest(1) # working
hashlib.shake_128(b'').hexdigest(length=1) # not working anymore, but was working before

For example, on Python Python 3.13.3 (main, Apr 8 2025, 13:54:08) [Clang 17.0.0 (clang-1700.0.13.3)] on my mac I can still use the keyword argument, but on alpine:edge Python 3.12.10 (main, May 21 2025, 16:23:36) [GCC 14.2.0] on linux it is expecting positional arguments only.

CPython versions tested on:

CPython main branch, 3.14, 3.13, 3.12

Operating systems tested on:

Linux, macOS

Linked PRs

Activity

  1. picnixz commented on May 26, 2025

    @picnixz
    Member

    I cannot reproduce the issue. On Python 3.15, it works well and I don't think I change anything between 3.14 and 3.15 (namely I can use a keyword argument). If you cannot use a keyword argument on 3.12, then I think it's ok? I mean, the recent behavior is an extension of the old one.

  2. added
    pendingThe issue will be closed if no feedback is provided
    on May 26, 2025
  3. 8R0WNI3 commented on May 26, 2025

    @8R0WNI3
    Author

    On alpine:3 running Python 3.12.10 (main, May 21 2025, 20:03:03) [GCC 14.2.0], the keyword argument is allowed (this was the behaviour in the past and seems to be the case in 3.15 as well. However, on alpine:edge running Python 3.12.10 (main, May 21 2025, 16:23:36) [GCC 14.2.0], the keyword argument is not allowed anymore.

  4. picnixz commented on May 26, 2025

    @picnixz
    Member

    3.12 is security-only so we won't fix this IMO (it's not a security issue). In your comment, you're linking 3.12.10 twice so I don't really understand which one is 3.12 or not (only the timestamps change and I don't know which correspond to what)

  5. encukou commented on May 26, 2025

    @encukou
    Member

    Could you share how you're installing dependencies & building CPython on alpine:edge?

  6. 8R0WNI3 commented on May 26, 2025

    @8R0WNI3
    Author

    Reproducer:

    > docker run -it alpine:edge
      > apk add python3
      > python3 -c "import hashlib; print(hashlib.shake_128(b'').hexdigest(length=1))"

    However, in the meantime I figured if I run apk upgrade libcrypto3, the keyword argument is accepted again, so this might be an issue between Python and openssl?

  7. picnixz commented on May 26, 2025

    @picnixz
    Member

    I may have an idea. What's the output of type(hashlib.shak_128(b''). If OpenSSl is not installed, then we may have fell back on the HACL* implementation

  8. picnixz commented on May 26, 2025

    @picnixz
    Member

    And indeed there is some issue here:

    Image

    This is in _sha3module. So the HACL* implementation doesn't allow for keyword arguments. Thanks for spotting this disparity.

  9. changed the title [-]`hashlib.shake_128().hexdigest()` no support for keyword arguments anymore[/-] [+]Signature for `shake_{128,256}.hexdigest()` is not inconsistent between OpenSSL and HACL* implementation[/+] on May 26, 2025
  10. added
    3.13only security fixes
    and removed
    pendingThe issue will be closed if no feedback is provided
    on May 26, 2025
  11. 10 remaining items

  12. changed the title [-]Clinic signatures in `_sha3` and `_blake2` are inconsistent with OpenSSL implementation[/-] [+]Clinic signatures of HACL* hash functions are inconsistent with OpenSSL implementation[/+] on May 26, 2025
  13. added 9 commits that reference this issue on May 31, 2025
  14. added 2 commits that reference this issue on Jul 12, 2025
  15. added 2 commits that reference this issue on Aug 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

3.13only security fixes3.14bugs and security fixes3.15bugs and security fixesextension-modulesC modules in the Modules dirtype-bugAn unexpected behavior, bug, or error

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions