RustedBytes/wolfcose

GitHub: RustedBytes/wolfcose

wolfcose 为 wolfSSL/wolfCOSE 提供安全的 Rust API,用于构建和处理 CBOR/COSE 加密签名消息。

Stars: 1 | Forks: 0

# wolfcose [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/3b3fcdcd7d220516.svg)](https://github.com/RustedBytes/wolfcose/actions/workflows/ci.yml) [![Crates.io Version](https://img.shields.io/crates/v/wolfcose)](https://crates.io/crates/wolfcose) 用于 wolfSSL wolfCOSE 绑定和高级 COSE/CBOR API 的 Rust workspace。 本仓库提供: - `wolfcose-sys`:用于 wolfSSL/wolfCOSE 的底层 unsafe C 绑定。 - `wolfcose`:安全的 Rust API,包含 builders、类型化的 headers/messages、CBOR helpers、examples 和 benchmarks。 - `wolfcose-derive`:`#[derive(CborSerialize, CborDeserialize)]` macros,用于实现类似 serde 的 CBOR 模型,且不依赖 serde。 默认构建会 vendor wolfCOSE,并通过 `wolfcose-sys` 从源码拉取并构建 wolfSSL。wolfCOSE 和 wolfSSL 是 GPL/商业双授权项目;如需商业授权,请联系 wolfSSL。 ## 你可以构建什么 `wolfcose` 适用于需要交换已签名、已加密或已认证的 CBOR 消息的软件: - 固件更新和供应链元数据系统 - IoT 遥测和命令协议 - 安全的设备配置分发 - COSE 检查/签名/加密 CLI 工具 - 需要 CBOR 数据模型和 COSE envelopes 的嵌入式协议 SDK 高级 crate 包含了一个安全的无人机遥测/控制协议示例,该示例使用了加密遥测(`COSE_Encrypt0`)和已认证的命令(`COSE_Mac0`)。 ## 快速开始 运行 workspace 测试: ``` cargo test --workspace ``` 对于本地开发,推荐使用 `just` recipes: ``` just fmt-check just test just lint just check-wolfcose-alloc ``` 运行无人机协议示例: ``` cargo run -p wolfcose --example drone_protocol ``` 运行无人机协议 benchmark: ``` just bench-drone ``` ## 高级示例 ``` use wolfcose::{Algorithm, CoseKeyBuilder, Mac0Builder, PayloadMode}; let key = CoseKeyBuilder::symmetric([0x33u8; 32]) .algorithm(Algorithm::HMAC256) .kid(b"device-a") .build()?; let msg = Mac0Builder::new() .key(&key) .algorithm(Algorithm::HMAC256) .kid(b"device-a") .payload(PayloadMode::Attached(b"hello wolfCOSE")) .mac_to_vec()?; # let _ = msg; # Ok::<(), wolfcose::Error>(()) ``` ## API 覆盖范围 `wolfcose-sys` 绑定了公开的 wolfCOSE header 接口,包括: - 所有 `wc_CBOR_*` 函数 - 所有 `wc_CoseKey_*` 函数 - COSE_Sign1 和 COSE_Sign API - COSE_Encrypt0 和 COSE_Encrypt API - COSE_Mac0 和 COSE_Mac API - 公开的 `WOLFCOSE_*` 常量和结构体 - 引用的 wolfCrypt key/RNG 类型 `wolfcose` 为相同的操作组提供了安全 wrappers 和高级 API: - CBOR encoders/decoders 以及类似 serde 的 `to_vec` / `to_slice` / `from_slice` - 用于结构体和外部标记 enums 的 derive macros - 用于 Sign1、Sign、Encrypt0、Encrypt、Mac0 和 Mac 的 builders - 类型化的 headers 和已解析的 message envelopes - 对称 key builders 和 COSE_Key 元数据视图 - 可选的详细 CBOR/COSE 错误上下文 - 通过 `wolfcose::raw` 提供的显式原始 FFI escape hatch 可选的由 wolfSSL 支持的 key attachment 和 CBOR float 函数通过稳定的 shim-backed 方法暴露,当链接的 wolfSSL/wolfCOSE 构建未包含底层特性时,这些方法将返回 `Error::Unsupported`。 ## 特性和构建模式 默认的 `wolfcose` 特性集为: - `std` - `alloc` - `vendored` - `full` - `derive` 要进行真正的 no-std/no-alloc 高级构建,请禁用默认特性并仅保留 vendored 操作接口: ``` cargo check -p wolfcose --no-default-features --features "vendored full" ``` 此模式暴露了原始 CBOR encoder/decoder、基础 serializer traits、借用的 byte-string helpers、算法/key 类型常量、错误、stream item reader 以及 `wolfcose::raw`。依赖内存分配的 API(例如 builders、拥有的 keys、已解析的消息、动态 CBOR 值以及 `*_to_vec` helpers)需要启用 `alloc` 特性。 要在不使用 `std` 的情况下检查 `alloc`: ``` cargo check -p wolfcose --no-default-features \ --features "alloc derive vendored full" ``` 默认的 `wolfcose-sys` 特性集会 vendor wolfCOSE 并静态构建一个固定版本的 wolfSSL 源码 commit。对于离线构建,请预先填充 wolfSSL 源码树并设置: ``` WOLFSSL_SRC=/path/to/wolfssl ``` 要改为使用已安装的 wolfSSL,请禁用默认特性并启用 system 特性路径: ``` cargo test -p wolfcose-sys --no-default-features \ --features "vendored full system-wolfssl" ``` 请勿将 `--all-features` 作为默认的验证命令。它会启用诸如 `system-wolfssl` 和 `system-wolfcose` 之类的系统特性路径,这需要已安装的 headers/libraries,并且可能会在 CI 中失败。 CI 安全的 lint 命令已编码在 `just lint` 中。 ## 示例 示例位于 `crates/wolfcose/examples`: - `drone_protocol.rs`:安全的无人机遥测/控制协议。 - `builders.rs`:builder 优先的 Encrypt0 和 Mac0 流程。 - `derive_models.rs`:derive macros 和 CBOR 模型属性。 - `headers_messages.rs`:类型化的 COSE headers 和消息解析。 - `key_metadata.rs`:对称 keys 和 `CoseKeyView`。 - `detailed_errors.rs`:可选的详细解码错误。 - `stream_reader.rs`:顶层 CBOR item reader。 - `cbor.rs`、`encrypt0.rs`、`mac0.rs`、`multi_recipient.rs`:针对性的 API 示例。 - `sign1.rs`、`multi_sign.rs`:非对称签名 API 指南;真正的签名需要调用者拥有的 wolfCrypt keys。 Benchmarks 位于 `crates/wolfcose/benches`。 ## 开发 有用的命令: ``` just ci just docs just package cargo check -p wolfcose --examples cargo bench -p wolfcose --bench drone_protocol -- --test ``` GitHub workflow 会运行: ``` just fmt-check just test just lint just check-wolfcose-alloc ``` 有关特性选择、FFI 安全性、高质量 Rust 标准以及安全敏感型加密示例的代码库特定指南,请参阅 `AGENTS.md`。 ## 许可 wolfCOSE 和 wolfSSL 是 GPL/商业双授权项目。本 workspace 使用与 GPL 兼容的元数据。如果您的使用场景与 GPL 条款不兼容,请联系 wolfSSL 获取商业授权。
标签:CBOR, COSE, Rust, wolfSSL, 可视化界面, 密码学, 嵌入式开发, 手动系统调用, 物联网, 网络流量审计, 通知系统