#blake2 #hash #blake2b #crypto

no-std blake2-rfc

基于RFC 7693的BLAKE2纯Rust实现

19个版本

使用旧的Rust 2015

0.2.18 2017年11月24日
0.2.17 2016年2月27日
0.2.16 2016年1月30日
0.2.12 2015年12月24日
0.1.0 2015年5月24日

386加密学 中排名

Download history 42450/week @ 2024-03-14 41442/week @ 2024-03-21 58310/week @ 2024-03-28 46877/week @ 2024-04-04 47116/week @ 2024-04-11 42498/week @ 2024-04-18 37545/week @ 2024-04-25 34950/week @ 2024-05-02 33556/week @ 2024-05-09 42648/week @ 2024-05-16 53380/week @ 2024-05-23 44153/week @ 2024-05-30 42462/week @ 2024-06-06 43339/week @ 2024-06-13 44920/week @ 2024-06-20 36306/week @ 2024-06-27

174,385 每月下载量
用于 597 个crate (100 直接)

MIT/Apache

49KB
941

blake2-rfc

这是基于RFC 7693的BLAKE2纯Rust实现。

设计

此crate遵循常见的流式哈希函数API设计,其中有一个状态/上下文结构体和三个相关函数:一个用于初始化结构体,一个用于重复调用以处理传入数据,一个用于最终处理并返回哈希。对于全数据已存在于内存中的情况,有一个方便的函数可以在单个调用中完成这三个步骤。

此基本设计略作修改,以更好地利用Rust的特性:最终化函数消耗结构体,执行移动操作而不是借用操作,因此结构体在其内部状态被最终化覆盖后不能意外使用。

为了防止时间攻击,比较哈希值需要花费固定的时间。为了更容易做到这一点,最终化函数返回一个包装在结构体中的结果,该结构体默认执行固定时间比较。如果不需要固定时间比较,可以轻松地从该结构体中提取哈希结果。

限制

由于使用u64作为字节数计数器,单个BLAKE2b哈希限制为16埃字节,低于其理论极限(但与BLAKE2s的理论极限相同)。如果需要,可以在"稳定"Rust版本中可用后,通过extprim crate(及其u128类型)或OverflowingOps trait将其增加到更高。

此crate不试图从其工作内存(包括状态上下文、堆栈和处理器寄存器)中清除可能敏感的数据。这样做需要编译器的帮助才能正确完成而不会产生严重的性能损失。与其提供错误的保证,不如不尝试这样做。

非RFC用法

此crate仅限于RFC中描述的功能:只能使用"摘要长度"和"密钥长度"参数。

如果您需要使用其他高级BLAKE2功能,此crate有一个未记录的函数用于创建具有任意参数块的哈希上下文,以及一个未记录的函数用于在树哈希模式下最终化最后一个节点。您负责创建有效的参数块、在密钥哈希中使用时哈希填充密钥块,并调用正确的最终化函数。这些函数不会验证参数块。

向量指令优化

这个软件包支持显式的SIMD优化。由于使用了不稳定的功能,它需要nightly Rust版本。

以下cargo特性启用了显式的SIMD优化

  • simd 启用显式使用SIMD向量而不是普通结构体
  • simd_opt 此外还启用了使用SIMD洗牌来执行一些旋转
  • simd_asm 此外还启用了使用内联汇编来执行一些SIMD洗牌

虽然人们可能期望这些中的一个比上一个更快,而且它们都比没有启用显式SIMD向量更快,但这并不总是如此。这取决于目标架构和编译器选项。如果您需要这些优化提供的额外速度,请为每个进行基准测试(此软件包中的bench特性启用了cargo bench,因此您可以使用例如cargo bench"--features="bench simd_asm")。它们目前针对SSE2(x86和x86-64)和NEON(arm)进行了优化。

no_std 支持

默认情况下,此软件包通过链接Rust标准库来提供std::io::Write的实现。要构建no_std,请使用default-features = false

许可证

根据您的选择,许可为以下之一

贡献

除非您明确表示,否则根据Apache-2.0许可证定义,您提交的任何旨在包含在作品中的贡献,均应按上述方式双许可,不附加任何额外条款或条件。

依赖关系

~89–560KB
~17K SLoC