This series introduces a generic, customizable Base64 encoder/decoder to the kernel library, eliminating duplicated implementations and delivering significant performance improvements. The new helpers support a caller-supplied 64-character table and optional '=' padding, covering existing variants such as base64url (fscrypt) and Ceph's custom alphabet. As part of this series, both fscrypt and Ceph are migrated to the generic helpers, removing their local routines while preserving their specific formats. On the encoder side, the implementation operates on 3-byte input blocks mapped directly to 4 output symbols, avoiding bit-by-bit streaming. This reduces shifts, masks, and loop overhead, achieving up to ~2.7x speedup over previous implementations while remaining fully RFC 4648-compatible. On the decoder side, optimizations replace strchr()-based lookups with a direct mapping table. Together with stricter RFC 4648 validation, this yields a ~12-15x improvement in decode throughput. Overall, the series improves maintainability, correctness, and performance of Base64 handling across the kernel. Note: - The included KUnit patch provides correctness and performance comparison tests to help reviewers validate the improvements. All tests pass locally on x86_64 (KTAP: pass:3 fail:0 skip:0). Benchmark numbers are informational only and do not gate the tests. - Updates nvme-auth call sites to the new API. Thanks, Guan-Chun Wu --- v1 -> v2: - Add a KUnit test suite for lib/base64: * correctness tests (multiple alphabets, with/without padding) * simple microbenchmark for informational performance comparison - Rework encoder/decoder: * encoder: generalize to a caller-provided 64-character table and optional '=' padding * decoder: optimize and extend to generic tables - fscrypt: migrate from local base64url helpers to generic lib/base64 - ceph: migrate from local base64 helpers to generic lib/base64 --- Guan-Chun Wu (4): lib/base64: rework encoder/decoder with customizable support and update nvme-auth lib: add KUnit tests for base64 encoding/decoding fscrypt: replace local base64url helpers with generic lib/base64 helpers ceph: replace local base64 encode/decode with generic lib/base64 helpers Kuan-Wei Chiu (1): lib/base64: Replace strchr() for better performance drivers/nvme/common/auth.c | 7 +- fs/ceph/crypto.c | 53 +------- fs/ceph/crypto.h | 6 +- fs/ceph/dir.c | 5 +- fs/ceph/inode.c | 2 +- fs/crypto/fname.c | 86 +------------ include/linux/base64.h | 4 +- lib/Kconfig.debug | 19 ++- lib/base64.c | 239 ++++++++++++++++++++++++++++++------- lib/tests/Makefile | 1 + lib/tests/base64_kunit.c | 230 +++++++++++++++++++++++++++++++++++ 11 files changed, 466 insertions(+), 186 deletions(-) create mode 100644 lib/tests/base64_kunit.c -- 2.34.1