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 加密学
270KB
4K SLoC
KCAPI - libkcapi 的官方高级 Rust 绑定
此仓库包含 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
中。欢迎开发人员在此处编写更多测试,以确保我们的代码质量最佳。
作者
- Purushottam A. Kulkarni <[email protected]>
依赖项
~0.3–2.3MB
~48K SLoC