3 个版本

0.1.2 2023年11月26日
0.1.1 2023年11月13日
0.1.0 2023年11月3日

#2813 in 解析器实现

Apache-2.0 协议

575KB
443 行(不包括注释)

vb64

快速,SIMD base64 编解码器。

此包实现了尽可能快的 base64 编码和解码。为了获得最佳性能,请使用 -Ctarget-cpu=native-Zbuild-std 进行编译,这将确保理想指令选择。

以下是在 Zen 2 机器上使用 AVX2 指令与 base64 包的性能比较;数字越小越好。

perf comparison with base64

在 Zen 2 机器上,并使用支持 AVX2 的编译器进行编译时,解码速度比 base64 快 2 倍到 2.5 倍,而编码速度大约快 1.2 倍到 1.5 倍;仅使用 SSSE3 时,解码性能与 base64 相当,而编码性能则大大降低。

除非您正在解析嵌入在 JSON 中的 base64 块,否则 base64 解码不太可能成为您应用程序的巨大瓶颈,这很重要;您可能希望考虑使用 Protobuf 这样的二进制格式。

此外,此包使用 std::simd,因此需要使用 nightly 版本。

许可证:Apache-2.0


lib.rs:

快速,SIMD base64 编解码器。

此包实现了尽可能快的 base64 编码和解码。为了获得最佳性能,请使用 -Ctarget-cpu=native-Zbuild-std 进行编译,这将确保理想指令选择。

以下是在 Zen 2 机器上使用 AVX2 指令与 base64 包的性能比较;数字越小越好。

![与 base64 的性能比较][graph-png]

在 Zen 2 机器上,并使用支持 AVX2 的编译器进行编译时,解码速度比 base64 快 2 倍到 2.5 倍,而编码速度大约快 1.2 倍到 1.5 倍;仅使用 SSSE3 时,解码性能与 base64 相当,而编码性能则大大降低。

除非您正在解析嵌入在 JSON 中的 base64 块,否则 base64 解码不太可能成为您应用程序的巨大瓶颈,这很重要;您可能希望考虑使用 Protobuf 这样的二进制格式。

此外,此包使用 std::simd,因此需要使用 nightly 版本。

恒定时间?? 👀

对于解码有效的 base64(以及编码任何消息),实现基本上是恒定时间的,但这主要是偶然的,因为它们是无分支的,并使用基于 shuffle 的查找表。是否相信这可以解码您的私钥 .pem 文件,而不泄露关键材料(OpenSSL 以这种方式 100% 泄露您的私钥),由您自己决定。

无运行时依赖项