[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20251114055829.87814-1-409411716@gms.tku.edu.tw>
Date: Fri, 14 Nov 2025 13:58:29 +0800
From: Guan-Chun Wu <409411716@....tku.edu.tw>
To: akpm@...ux-foundation.org,
ebiggers@...nel.org,
tytso@....edu,
jaegeuk@...nel.org,
xiubli@...hat.com,
idryomov@...il.com,
kbusch@...nel.org,
axboe@...nel.dk,
hch@....de,
sagi@...mberg.me
Cc: visitorckw@...il.com,
409411716@....tku.edu.tw,
home7438072@...il.com,
andriy.shevchenko@...el.com,
david.laight.linux@...il.com,
linux-nvme@...ts.infradead.org,
linux-fscrypt@...r.kernel.org,
ceph-devel@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: [PATCH v5 0/6] lib/base64: add generic encoder/decoder, migrate users
This series introduces a generic Base64 encoder/decoder to the kernel
library, eliminating duplicated implementations and delivering significant
performance improvements.
The Base64 API has been extended to support multiple variants (Standard,
URL-safe, and IMAP) as defined in RFC 4648 and RFC 3501. The API now takes
a variant parameter and an option to control padding. As part of this
series, users are migrated to the new interface while preserving their
specific formats: fscrypt now uses BASE64_URLSAFE, Ceph uses BASE64_IMAP,
and NVMe is updated to BASE64_STD.
On the encoder side, the implementation processes input in 3-byte blocks,
mapping 24 bits directly to 4 output symbols. This avoids bit-by-bit
streaming and reduces loop overhead, achieving about a 2.7x speedup compared
to previous implementations.
On the decoder side, replace strchr() lookups with per-variant reverse tables
and process input in 4-character groups. Each group is mapped to numeric values
and combined into 3 bytes. Padded and unpadded forms are validated explicitly,
rejecting invalid '=' usage and enforcing tail rules. This improves throughput
by ~43-52x.
Thanks,
Guan-Chun Wu
Link: https://lore.kernel.org/lkml/20251029101725.541758-1-409411716@gms.tku.edu.tw/
---
v4 -> v5:
- lib/base64: Fixed initializer-overrides compiler error by replacing designated
initializer approach with macro-based constant expressions.
---
Guan-Chun Wu (4):
lib/base64: rework encode/decode for speed and stricter validation
lib: add KUnit tests for base64 encoding/decoding
fscrypt: replace local base64url helpers with lib/base64
ceph: replace local base64 helpers with lib/base64
Kuan-Wei Chiu (2):
lib/base64: Add support for multiple variants
lib/base64: Optimize base64_decode() with reverse lookup tables
drivers/nvme/common/auth.c | 4 +-
fs/ceph/crypto.c | 60 +-------
fs/ceph/crypto.h | 6 +-
fs/ceph/dir.c | 5 +-
fs/ceph/inode.c | 2 +-
fs/crypto/fname.c | 89 +----------
include/linux/base64.h | 10 +-
lib/Kconfig.debug | 19 ++-
lib/base64.c | 188 +++++++++++++++++-------
lib/tests/Makefile | 1 +
lib/tests/base64_kunit.c | 294 +++++++++++++++++++++++++++++++++++++
11 files changed, 472 insertions(+), 206 deletions(-)
create mode 100644 lib/tests/base64_kunit.c
--
2.34.1
Powered by blists - more mailing lists