[PATCH 00/10] BLAKE2b library API

Eric Biggers posted 10 patches 3 months, 3 weeks ago
arch/arm/crypto/Kconfig                       |  16 -
arch/arm/crypto/Makefile                      |   2 -
arch/arm/crypto/blake2b-neon-glue.c           | 104 ------
crypto/Kconfig                                |   3 +-
crypto/Makefile                               |   3 +-
crypto/blake2b.c                              | 111 ++++++
crypto/blake2b_generic.c                      | 192 ----------
crypto/testmgr.c                              |   4 +
drivers/char/random.c                         |   6 +-
drivers/net/wireguard/cookie.c                |  18 +-
drivers/net/wireguard/noise.c                 |  32 +-
fs/btrfs/Kconfig                              |   8 +-
fs/btrfs/compression.c                        |   1 -
fs/btrfs/disk-io.c                            |  68 +---
fs/btrfs/file-item.c                          |   4 -
fs/btrfs/fs.c                                 |  97 ++++-
fs/btrfs/fs.h                                 |  23 +-
fs/btrfs/inode.c                              |  13 +-
fs/btrfs/scrub.c                              |  16 +-
fs/btrfs/super.c                              |   4 -
fs/btrfs/sysfs.c                              |   6 +-
include/crypto/blake2b.h                      | 143 ++++++--
include/crypto/blake2s.h                      | 126 +++++--
include/crypto/internal/blake2b.h             | 101 ------
include/linux/byteorder/generic.h             |  16 +
lib/crypto/Kconfig                            |  11 +
lib/crypto/Makefile                           |  10 +
.../crypto/arm}/blake2b-neon-core.S           |  29 +-
lib/crypto/arm/blake2b.h                      |  41 +++
lib/crypto/arm/blake2s-core.S                 |  14 +-
lib/crypto/arm/blake2s.h                      |   4 +-
lib/crypto/blake2b.c                          | 174 +++++++++
lib/crypto/blake2s.c                          |  66 ++--
lib/crypto/tests/Kconfig                      |   9 +
lib/crypto/tests/Makefile                     |   1 +
lib/crypto/tests/blake2b-testvecs.h           | 342 ++++++++++++++++++
lib/crypto/tests/blake2b_kunit.c              | 133 +++++++
lib/crypto/tests/blake2s_kunit.c              |  39 +-
lib/crypto/x86/blake2s.h                      |  22 +-
scripts/crypto/gen-hash-testvecs.py           |  29 +-
40 files changed, 1333 insertions(+), 708 deletions(-)
delete mode 100644 arch/arm/crypto/blake2b-neon-glue.c
create mode 100644 crypto/blake2b.c
delete mode 100644 crypto/blake2b_generic.c
delete mode 100644 include/crypto/internal/blake2b.h
rename {arch/arm/crypto => lib/crypto/arm}/blake2b-neon-core.S (94%)
create mode 100644 lib/crypto/arm/blake2b.h
create mode 100644 lib/crypto/blake2b.c
create mode 100644 lib/crypto/tests/blake2b-testvecs.h
create mode 100644 lib/crypto/tests/blake2b_kunit.c
[PATCH 00/10] BLAKE2b library API
Posted by Eric Biggers 3 months, 3 weeks ago
This series can also be retrieved from:

    git fetch https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux.git blake2b-lib-v1

This series adds BLAKE2b support to lib/crypto/ and reimplements the
blake2b-* crypto_shash algorithms on top of it.

To prepare for that, patches 1-4 clean up the BLAKE2s library code a
bit, and patch 5 adds some missing 64-bit byteorder helper functions.
Patches 6-8 add the BLAKE2b library API (closely mirroring the BLAKE2s
one), and patch 9 makes crypto_shash use it.  As usual, the library APIs
are documented (with kerneldoc) and tested (with KUnit).

With that done, all of btrfs's checksum algorithms have library APIs.
So patch 10 converts btrfs to use the library APIs instead of shash.
This has quite a few benefits, as detailed in that patch.

Patches 1-9 are targeting libcrypto-next for 6.19.  Patch 10 can go
through the btrfs tree later.

Eric Biggers (10):
  lib/crypto: blake2s: Adjust parameter order of blake2s()
  lib/crypto: blake2s: Rename blake2s_state to blake2s_ctx
  lib/crypto: blake2s: Drop excessive const & rename block => data
  lib/crypto: blake2s: Document the BLAKE2s library API
  byteorder: Add le64_to_cpu_array() and cpu_to_le64_array()
  lib/crypto: blake2b: Add BLAKE2b library functions
  lib/crypto: arm/blake2b: Migrate optimized code into library
  lib/crypto: tests: Add KUnit tests for BLAKE2b
  crypto: blake2b - Reimplement using library API
  btrfs: switch to library APIs for checksums

 arch/arm/crypto/Kconfig                       |  16 -
 arch/arm/crypto/Makefile                      |   2 -
 arch/arm/crypto/blake2b-neon-glue.c           | 104 ------
 crypto/Kconfig                                |   3 +-
 crypto/Makefile                               |   3 +-
 crypto/blake2b.c                              | 111 ++++++
 crypto/blake2b_generic.c                      | 192 ----------
 crypto/testmgr.c                              |   4 +
 drivers/char/random.c                         |   6 +-
 drivers/net/wireguard/cookie.c                |  18 +-
 drivers/net/wireguard/noise.c                 |  32 +-
 fs/btrfs/Kconfig                              |   8 +-
 fs/btrfs/compression.c                        |   1 -
 fs/btrfs/disk-io.c                            |  68 +---
 fs/btrfs/file-item.c                          |   4 -
 fs/btrfs/fs.c                                 |  97 ++++-
 fs/btrfs/fs.h                                 |  23 +-
 fs/btrfs/inode.c                              |  13 +-
 fs/btrfs/scrub.c                              |  16 +-
 fs/btrfs/super.c                              |   4 -
 fs/btrfs/sysfs.c                              |   6 +-
 include/crypto/blake2b.h                      | 143 ++++++--
 include/crypto/blake2s.h                      | 126 +++++--
 include/crypto/internal/blake2b.h             | 101 ------
 include/linux/byteorder/generic.h             |  16 +
 lib/crypto/Kconfig                            |  11 +
 lib/crypto/Makefile                           |  10 +
 .../crypto/arm}/blake2b-neon-core.S           |  29 +-
 lib/crypto/arm/blake2b.h                      |  41 +++
 lib/crypto/arm/blake2s-core.S                 |  14 +-
 lib/crypto/arm/blake2s.h                      |   4 +-
 lib/crypto/blake2b.c                          | 174 +++++++++
 lib/crypto/blake2s.c                          |  66 ++--
 lib/crypto/tests/Kconfig                      |   9 +
 lib/crypto/tests/Makefile                     |   1 +
 lib/crypto/tests/blake2b-testvecs.h           | 342 ++++++++++++++++++
 lib/crypto/tests/blake2b_kunit.c              | 133 +++++++
 lib/crypto/tests/blake2s_kunit.c              |  39 +-
 lib/crypto/x86/blake2s.h                      |  22 +-
 scripts/crypto/gen-hash-testvecs.py           |  29 +-
 40 files changed, 1333 insertions(+), 708 deletions(-)
 delete mode 100644 arch/arm/crypto/blake2b-neon-glue.c
 create mode 100644 crypto/blake2b.c
 delete mode 100644 crypto/blake2b_generic.c
 delete mode 100644 include/crypto/internal/blake2b.h
 rename {arch/arm/crypto => lib/crypto/arm}/blake2b-neon-core.S (94%)
 create mode 100644 lib/crypto/arm/blake2b.h
 create mode 100644 lib/crypto/blake2b.c
 create mode 100644 lib/crypto/tests/blake2b-testvecs.h
 create mode 100644 lib/crypto/tests/blake2b_kunit.c


base-commit: 123fa1574bccee87da735d13e89c931e88288b40
-- 
2.51.1.dirty
Re: [PATCH 00/10] BLAKE2b library API
Posted by Ard Biesheuvel 3 months, 2 weeks ago
On Sat, 18 Oct 2025 at 06:36, Eric Biggers <ebiggers@kernel.org> wrote:
>
> This series can also be retrieved from:
>
>     git fetch https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux.git blake2b-lib-v1
>
> This series adds BLAKE2b support to lib/crypto/ and reimplements the
> blake2b-* crypto_shash algorithms on top of it.
>
> To prepare for that, patches 1-4 clean up the BLAKE2s library code a
> bit, and patch 5 adds some missing 64-bit byteorder helper functions.
> Patches 6-8 add the BLAKE2b library API (closely mirroring the BLAKE2s
> one), and patch 9 makes crypto_shash use it.  As usual, the library APIs
> are documented (with kerneldoc) and tested (with KUnit).
>
> With that done, all of btrfs's checksum algorithms have library APIs.
> So patch 10 converts btrfs to use the library APIs instead of shash.
> This has quite a few benefits, as detailed in that patch.
>
> Patches 1-9 are targeting libcrypto-next for 6.19.  Patch 10 can go
> through the btrfs tree later.
>
> Eric Biggers (10):
>   lib/crypto: blake2s: Adjust parameter order of blake2s()
>   lib/crypto: blake2s: Rename blake2s_state to blake2s_ctx
>   lib/crypto: blake2s: Drop excessive const & rename block => data
>   lib/crypto: blake2s: Document the BLAKE2s library API
>   byteorder: Add le64_to_cpu_array() and cpu_to_le64_array()
>   lib/crypto: blake2b: Add BLAKE2b library functions
>   lib/crypto: arm/blake2b: Migrate optimized code into library
>   lib/crypto: tests: Add KUnit tests for BLAKE2b
>   crypto: blake2b - Reimplement using library API
>   btrfs: switch to library APIs for checksums
>

Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
Re: [PATCH 00/10] BLAKE2b library API
Posted by Eric Biggers 3 months, 2 weeks ago
On Fri, Oct 17, 2025 at 09:30:56PM -0700, Eric Biggers wrote:
> This series can also be retrieved from:
> 
>     git fetch https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux.git blake2b-lib-v1
> 
> This series adds BLAKE2b support to lib/crypto/ and reimplements the
> blake2b-* crypto_shash algorithms on top of it.
> 
> To prepare for that, patches 1-4 clean up the BLAKE2s library code a
> bit, and patch 5 adds some missing 64-bit byteorder helper functions.
> Patches 6-8 add the BLAKE2b library API (closely mirroring the BLAKE2s
> one), and patch 9 makes crypto_shash use it.  As usual, the library APIs
> are documented (with kerneldoc) and tested (with KUnit).
> 
> With that done, all of btrfs's checksum algorithms have library APIs.
> So patch 10 converts btrfs to use the library APIs instead of shash.
> This has quite a few benefits, as detailed in that patch.
> 
> Patches 1-9 are targeting libcrypto-next for 6.19.  Patch 10 can go
> through the btrfs tree later.
> 
> Eric Biggers (10):
>   lib/crypto: blake2s: Adjust parameter order of blake2s()
>   lib/crypto: blake2s: Rename blake2s_state to blake2s_ctx
>   lib/crypto: blake2s: Drop excessive const & rename block => data
>   lib/crypto: blake2s: Document the BLAKE2s library API
>   byteorder: Add le64_to_cpu_array() and cpu_to_le64_array()
>   lib/crypto: blake2b: Add BLAKE2b library functions
>   lib/crypto: arm/blake2b: Migrate optimized code into library
>   lib/crypto: tests: Add KUnit tests for BLAKE2b
>   crypto: blake2b - Reimplement using library API
>   btrfs: switch to library APIs for checksums

Applied patches 1-9 (i.e., all except the btrfs patch) to
https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux.git/log/?h=libcrypto-next

I folded the following fixup into patch 7 to address
https://lore.kernel.org/r/20251019163249.GD1604@sol/ and
https://lore.kernel.org/r/202510221007.WnlC6PmP-lkp@intel.com/

diff --git a/lib/crypto/Makefile b/lib/crypto/Makefile
index 5c9a933928188..bc26777d08e97 100644
--- a/lib/crypto/Makefile
+++ b/lib/crypto/Makefile
@@ -37,5 +37,5 @@ CFLAGS_blake2b.o := -Wframe-larger-than=4096 #  https://gcc.gnu.org/bugzilla/sho
 ifeq ($(CONFIG_CRYPTO_LIB_BLAKE2B_ARCH),y)
 CFLAGS_blake2b.o += -I$(src)/$(SRCARCH)
-obj-$(CONFIG_ARM) += arm/blake2b-neon-core.o
+libblake2b-$(CONFIG_ARM) += arm/blake2b-neon-core.o
 endif # CONFIG_CRYPTO_LIB_BLAKE2B_ARCH