ceph-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 0/6]  lib/base64: add generic encoder/decoder, migrate users
@ 2025-11-14  5:58 Guan-Chun Wu
  2025-11-14  6:00 ` [PATCH v5 1/6] lib/base64: Add support for multiple variants Guan-Chun Wu
                   ` (5 more replies)
  0 siblings, 6 replies; 17+ messages in thread
From: Guan-Chun Wu @ 2025-11-14  5:58 UTC (permalink / raw)
  To: akpm, ebiggers, tytso, jaegeuk, xiubli, idryomov, kbusch, axboe,
	hch, sagi
  Cc: visitorckw, 409411716, home7438072, andriy.shevchenko,
	david.laight.linux, linux-nvme, linux-fscrypt, ceph-devel,
	linux-kernel

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


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2025-11-18 17:24 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-14  5:58 [PATCH v5 0/6] lib/base64: add generic encoder/decoder, migrate users Guan-Chun Wu
2025-11-14  6:00 ` [PATCH v5 1/6] lib/base64: Add support for multiple variants Guan-Chun Wu
2025-11-14  9:13   ` David Laight
2025-11-14  6:01 ` [PATCH v5 2/6] lib/base64: Optimize base64_decode() with reverse lookup tables Guan-Chun Wu
2025-11-14  9:14   ` David Laight
2025-11-14  6:01 ` [PATCH v5 3/6] lib/base64: rework encode/decode for speed and stricter validation Guan-Chun Wu
2025-11-14  9:18   ` David Laight
2025-11-16 10:28     ` Guan-Chun Wu
2025-11-17 17:46       ` Andrew Morton
2025-11-18 10:38         ` Andy Shevchenko
2025-11-18 17:24           ` Andrew Morton
2025-11-14  6:01 ` [PATCH v5 4/6] lib: add KUnit tests for base64 encoding/decoding Guan-Chun Wu
2025-11-14  6:02 ` [PATCH v5 5/6] fscrypt: replace local base64url helpers with lib/base64 Guan-Chun Wu
2025-11-14  6:02 ` [PATCH v5 6/6] ceph: replace local base64 " Guan-Chun Wu
2025-11-14 18:07   ` Viacheslav Dubeyko
2025-11-16 10:36     ` Guan-Chun Wu
2025-11-17 19:42       ` Viacheslav Dubeyko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).