7 个版本

0.1.6 2022年6月17日
0.1.5 2022年2月8日
0.1.4 2021年12月13日
0.1.3 2021年11月30日

#1730 in 加密学

BSD-3-Clause

270KB
4K SLoC

KCAPI - libkcapi 的官方高级 Rust 绑定

CI Badge License Crate Badge

此仓库包含 libkcapi 官方高级 Rust 绑定的 rust 源代码 - 一个用于 Linux 内核加密 API (KCAPI) 的用户空间接口。这些绑定基于 kcapi-sys crate,它是此 crate 的子模块。

使用方法

要将此 crate 包含在依赖项中,请按以下方式将其包含在 Cargo.toml 中

kcapi = "*"

完成此操作后,您可以在 Rust 源文件中访问此 crate 提供的各种模块

此 crate 提供的主要模块包括

  • kcapi::md - 提供消息摘要功能
  • kcapi::skcipher - 提供对称密钥加密
  • kcapi::aead - 提供带有关联数据的身份验证加密 (AEAD) 加密
  • kcapi::rng - 提供随机数生成支持。
  • kcapi::akcipher - 提供非对称密钥加密。
  • kcapi::kdf - 提供密钥派生函数 (KDF) 支持。

以下是一个使用便捷哈希 API 的简单示例

fn main() {
    let input = "This is a test string to be hashed!".as_bytes().to_vec();
    let digest = match kcapi::md::digest(
        "sha1"  // The algorithm to be used for the digest (from /proc/crypto)
        input,  // The input to be digested
    ) {
        Ok(digest) => digest,
        Err(e) => panic!("{}", e),
    }

    println!("{}", hex::encode(digest));
}

提供的每个 API 都将返回一个 KcapiResult 类型的 Result 枚举。如果发生错误,将返回一个 KcapiError,其结构如下

struct KcapiError {
    code: i64,          // The Error code (generally errno style)
    message: String     // The error message which can be printed
}

构建和测试

本节描述了如何在本地上构建和测试 kcapi crate。

内核配置

此 crate 需要 Linux 内核使用以下选项编译

  • CONFIG_CRYPTO_USER=m - 编译 af_alg.ko 模块。
  • CONFIG_CRYPTO_USER_API=y - 启用用户空间加密 API。
  • CONFIG_CRYPTO_USER_API_HASH=y - 启用哈希 API。
  • CONFIG_CRYPTO_USER_API_SKCIPHER=y - 启用对称加密API。
  • CONFIG_CRYPTO_USER_API_RNG=y - 启用随机数生成器(RNG)API。
  • CONFIG_CRYPTO_USER_API_AEAD=y - 启用AEAD API。

如果您想对随机数生成器(RNG)执行加密算法验证计划(CAVP)测试,则还必须启用以下选项。

  • CONFIG_CRYPTO_USER_API_RNG_CAVP=y - 从用户空间启用RNG CAVP测试。

在此crate的kernel-patches目录中的补丁应用后,还可以启用以下配置选项

  • CONFIG_CRYPTO_USER_API_AKCIPHER=y - 启用非对称加密API。

一旦在Linux内核中启用了这些配置选项,并且编译成功,您就可以充分利用此crate。

先决条件

为了构建此项目,必须递归地检出所有子模块

git clone https://github.com/puru1761/kcapi.git --recurse-submodules

安装所有构建依赖项。这些是

  • autotools
  • autoconf
  • llvm-dev

基于RPM的软件包

sudo yum install automake autoconf llvm-devel

基于Debian的软件包

sudo apt-get install autotools-dev autoconf llvm-dev

如果未设置LLVM_CONFIG_PATH,则使用以下方法设置它

export LLVM_CONFIG_PATH="/path/to/llvm-config"

构建

我们使用cargo作为构建此crate的系统。使用以下命令构建它

cargo build

测试

我们已经编写了一些基本的测试来确保绑定按预期工作。使用以下命令运行这些测试

cargo test

所有这些测试都定义在src/test/test_*.rs中。欢迎开发人员在此处编写更多测试,以确保我们的代码质量最佳。

作者

依赖项

~0.3–2.3MB
~48K SLoC