Skip to content

Rewrite & cleanup HACL*-based extension modules #135532

@picnixz

Description

@picnixz
Member

I recently rewrote the _blake2 module. I want to the same for other modules where I can align the naming of functions across the different modules. The reason why I'm doing this is because it's becoming harder to make "similar" changes everywhere. In general, if I need to change something in MD5, then I also need to change it in SHA1/SHA2/SHA3, and it's easier if the code looks similar elsewhere.

There are some places that need to be updated because they are dead code, e.g.:

/*[clinic input]
module _sha2
class SHA256Type "SHA256object *" "&PyType_Type"
class SHA512Type "SHA512object *" "&PyType_Type"
[clinic start generated code]*/

should be

/*[clinic input]
module _sha2
class SHA256Type "SHA256object *" "clinic_state()->sha256_type"
class SHA512Type "SHA512object *" "clinic_state()->sha512_type"
[clinic start generated code]*/

Linked PRs

Bug fixes (3.14+)

Backported PRs (HMAC-only)

Abandoned

Activity

self-assigned this
on Jun 15, 2025
picnixz

picnixz commented on Jun 19, 2025

@picnixz
MemberAuthor

I've rewritten SHA-2 and SHA-3 modules with generic macros but I'm torn between the now cleaner modules and the fact that I entirely rewrote them. SHA-2 is smaller but SHA-3 is larger.

picnixz

picnixz commented on Jun 19, 2025

@picnixz
MemberAuthor

Offline I found other stuff that need to be updated independently:

  • SHA-3 types in Argument Clinic code.
    MD-5 digests computations don't use _Py_strhex.
    Useless memory allocation for 0-length SHAKE hashes (we can switch conditions checks)
    Usage of unsigned char where we could use uint8_t: HACL* code expects an uint8_t so we can consistently use it.
    Inconsistentcies in naming classes: we have _sha2.SHA256Type vs _sha3.sha3_224. Note SHA-2 doesn't expose a __new__ method but SHA-3 does. MD-5/SHA-1/SHA-1 don't have a tp_new slot but SHA-3 and BLAKE-2 do. I don't know which one is the best, but I don't think we should have both.
added a commit that references this issue on Jun 20, 2025
2dbada1
added a commit that references this issue on Jun 20, 2025
added a commit that references this issue on Jun 20, 2025
d057cb4
added a commit that references this issue on Jun 20, 2025
57dba7c

21 remaining items

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

extension-modulesC modules in the Modules dirtype-refactorCode refactoring (with no changes in behavior)

Projects

No projects

Milestone

No milestone

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @picnixz

      Issue actions

        Rewrite & cleanup HACL*-based extension modules · Issue #135532 · python/cpython