cpython/Modules/_hacl
Jonathan Protzenko 325e9b8ef4
gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316)
This replaces the existing hashlib Blake2 module with a single implementation that uses HACL\*'s Blake2b/Blake2s implementations. We added support for all the modes exposed by the Python API, including tree hashing, leaf nodes, and so on. We ported and merged all of these changes upstream in HACL\*, added test vectors based on Python's existing implementation, and exposed everything needed for hashlib.

This was joint work done with @R1kM.

See the PR for much discussion and benchmarking details.   TL;DR: On many systems, 8-50% faster (!) than `libb2`, on some systems it appeared 10-20% slower than `libb2`.
2024-08-13 21:42:19 +00:00
..
include/krml gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
internal gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
Hacl_Hash_Blake2b.c gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
Hacl_Hash_Blake2b.h gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
Hacl_Hash_Blake2b_Simd256.c gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
Hacl_Hash_Blake2b_Simd256.h gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
Hacl_Hash_Blake2s.c gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
Hacl_Hash_Blake2s.h gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
Hacl_Hash_Blake2s_Simd128.c gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
Hacl_Hash_Blake2s_Simd128.h gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
Hacl_Hash_MD5.c gh-99108: Refresh HACL*; update modules accordingly; fix namespacing (GH-117237) 2024-03-26 00:35:26 +00:00
Hacl_Hash_MD5.h gh-99108: Refresh HACL*; update modules accordingly; fix namespacing (GH-117237) 2024-03-26 00:35:26 +00:00
Hacl_Hash_SHA1.c gh-99108: Refresh HACL*; update modules accordingly; fix namespacing (GH-117237) 2024-03-26 00:35:26 +00:00
Hacl_Hash_SHA1.h gh-99108: Refresh HACL*; update modules accordingly; fix namespacing (GH-117237) 2024-03-26 00:35:26 +00:00
Hacl_Hash_SHA2.c gh-99108: Refresh HACL*; update modules accordingly; fix namespacing (GH-117237) 2024-03-26 00:35:26 +00:00
Hacl_Hash_SHA2.h gh-99108: Refresh HACL*; update modules accordingly; fix namespacing (GH-117237) 2024-03-26 00:35:26 +00:00
Hacl_Hash_SHA3.c gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
Hacl_Hash_SHA3.h gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
Hacl_Streaming_Types.h gh-99108: Refresh HACL* (#104808) 2023-05-24 13:30:11 -07:00
Lib_Memzero0.c gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
README.md
lib_memzero0.h gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
libintvector.h gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
python_hacl_namespaces.h gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00
refresh.sh gh-99108: Add HACL* Blake2 implementation to hashlib (GH-119316) 2024-08-13 21:42:19 +00:00

README.md

Algorithm implementations used by the hashlib module.

This code comes from the HACL* project.

HACL* is a cryptographic library that has been formally verified for memory safety, functional correctness, and secret independence.

Updating HACL*

Use the refresh.sh script in this directory to pull in a new upstream code version. The upstream git hash used for the most recent code pull is recorded in the script. Modify the script as needed to bring in more if changes are needed based on upstream code refactoring.

Never manually edit HACL* files. Always add transformation shell code to the refresh.sh script to perform any necessary edits. If there are serious code changes needed, work with the upstream repository.

Local files

  1. ./include/python_hacl_namespaces.h
  2. ./README.md
  3. ./refresh.sh

ACKS