#aes #encryption #no-alloc #crypto #no-std #rijndael

no-std aes_crypto

一个针对AES加密算法(Rijndael)的平台无关库

7个版本 (3个稳定版)

1.2.1 2024年7月20日
1.2.0 2024年5月19日
0.2.3 2024年5月13日
0.2.0 2024年4月21日
0.1.0 2024年4月21日

密码学类别中排名601

Download history 9/week @ 2024-04-27 247/week @ 2024-05-04 409/week @ 2024-05-11 226/week @ 2024-05-18 13/week @ 2024-05-25 9/week @ 2024-06-01 10/week @ 2024-06-08 2/week @ 2024-06-15 7/week @ 2024-07-06 120/week @ 2024-07-20 15/week @ 2024-07-27

每月下载量135

MIT许可MIT

130KB
3K SLoC

这是一个纯Rust平台无关的AES库,专注于可重用性和最佳性能。

该库确保在target_cpu(如果正确指定)上获得最佳性能。目前有6种实现,其中它会自动使用Cargo的target_feature标志决定最佳的(性能最出色的)实现。

实现及其要求如下

  • AES-NI(带有2-和4-块向量AES)=> 需要Nightly编译器,启用nightly特性,并使用带有avx512fvaes目标特性的x86(64)编译。
  • AES-NI(带有2块向量AES)=> 需要Nightly编译器,启用nightly特性,并使用带有vaes目标特性的x86(64)编译。(虽然vaes是AVX-512特性,但一些AlderLake CPU具有不带AVX-512支持的vaes
  • AES-NI => 需要使用带有sse4.1aes目标特性的x86(64)编译。
  • AES-Neon => 需要使用带有aes目标特性的AArch64或ARM64EC或ARM-v8编译(ARM-v8需要Nightly编译器和启用nightly特性)。
  • AES-RV => 需要Nightly编译器,启用nightly特性,并使用带有zknezknd目标特性的RISC-V RV64或RV32编译(如果启用unaligned-scalar-mem目标特性,性能将显著提高)
  • 软件AES => 基于rijmen和Daemen的优化实现的后备实现

如果您不确定要设置哪些target_feature标志,请在RUSTFLAGS环境变量中设置target_cpu=native(如果不是交叉编译),并且如果使用Nightly编译器,则只使用nightly特性。

警告

使用错误的 target_feature 标志可能导致程序因“未知指令”错误而崩溃。这个库使用这些标志来使用CPU内建函数以最大化性能。如果您不确定您的CPU支持哪些 target_feature,请使用以下命令:

    rustc --print cfg -C target-cpu=native

如果不使用夜间编译器而使用 nightly 功能,可能会导致编译失败,因此只有在您使用夜间编译器时才使用此功能。

依赖项