Skip to main content

Crate ferritls_backend_x86_64

Crate ferritls_backend_x86_64 

Source
Expand description

§ferritls-backend-x86_64

ferritls-core 的 x86_64 硬件执行核心(AES-NI + CLMUL GHASH + SHA-NI)。FIPS 边界外 crate(docs/FIPS.md §1),仅 x86_64—— 其余目标编译为空 crate。

§用法

#[cfg(target_arch = "x86_64")]
{
    // 进程初始化阶段(构造任何密钥之前)一次性安装。本 crate 仅
    // x86_64 有内容,其他目标上此块被裁掉、示例仍然可编译。
    ferritls_backend_x86_64::install()?;
}
// 此后 ferritls_core::gcm::{Aes128Gcm, Aes256Gcm} 的新实例走
// AES-NI/CLMUL 路径;已构造的实例与未安装的环境不受影响。

安装语义(详见 ferritls_core::ops 模块文档):

  • 探测 aes + pclmulqdq,任一缺失返回 Unsupported(不降级、不安装);
  • 安装前在本 crate 的执行核心上跑 McGrew–Viega TC5/TC16 已知答案 自检,失败返回 SelfTestFailed 并拒绝安装;
  • 批准模式(ferritls-core 以 fips feature 构建)下 core 拒绝一切 安装,软件路径固定;
  • 进程级一次,重复安装由 core 拒绝。

§unsafe 纪律(借鉴 fearless_simd 的模式,零依赖自建)

crate 根 #![deny(unsafe_code)];unsafe 只存在于唯一叶子模块 raw(仅内存读写包装)与各 kernel 的进入点 trampoline (new/seal/open 与 SHA 的压缩函数注册点)。kernel 本体标注 #[target_feature(enable = ...)] 并在上下文内直调 intrinsic(安全、 编译为裸指令)——从无 feature 上下文包装调用会因 feature 不匹配 被禁止内联,每个调用退化为真实函数调用(见 ARCHITECTURE.md §4)。 CPU 能力以 AesNi token 进入类型系统:token 只能经运行时探测 构造(其 clone 同样源自一次成功探测),是进入 trampoline 的安全 论证。除 trampoline 外的全部代码均为安全代码。

常数时间:AES/GCM 指令为固定延迟、数据无关;kernel 内无以秘密为 条件的分支或访存(轮密钥按公开轮号索引);标签比较统一由 core 的 公开类型完成(本 crate 只计算、不比较)。

Structs§

AesNi
AES-NI + PCLMULQDQ 可用性证明(零大小)。
ShaNi
SHA 扩展可用性证明(零大小;语义同 AesNi)。

Functions§

detect
探测 AES-NI + CLMUL(不安装)。
install
探测 → 上电 KAT 自检 → 安装到 ferritls-core(进程级一次)。
install_hash
探测 SHA 扩展 → KAT 自检 → 安装 SHA-256 压缩后端(进程级一次)。