lib-unknown
一个神秘的共享库
零依赖([dependencies] 为空)、默认 no_std 的系统编程基础库,提供五个模块:硬件时间戳熵源与随机数(rand)、跨平台裸系统调用与动态符号解析(sys)、用后清零的定容内存类型(types)、实验性搅拌与流密码原语(crypto)、开发期动态编译运行 harness(dyntest,需 std)。
目录
设计哲学
核心原则
- 零依赖 ——
[dependencies]为空(wasm32下可选wasm-bindgen),不链接 libc,符号解析与系统调用全部手写asm!/ 动态解析。 no_std默认 —— 默认即无标准库,堆内存类型需显式开启alloc,dyntest等开发工具才需要std。- 不安全显式化 —— 所有裸调用与原始指针操作收敛在
unsafe边界内,公开unsafe fn均标注# Safety,内部unsafe块附SAFETY注释。
权衡取舍 (Trade-offs)
| 我们选择了 | 而不是 | 原因 |
|---|---|---|
| 自研搅拌/流密码 | 成熟审计算法 | 零依赖与体积优先;已在文档中明确标注实验性质,不可直接用于生产密码学场景 |
裸 syscall + 动态解析 |
链接 libc | 适配无 libc / 嵌入式环境;代价是不支持的目标组合编译期直接报错 |
非目标 (Non-Goals)
- 不追求密码学合规审计与 CSPRNG 认证,熵质量数据(NIST SP800-90B / PractRand)仅为作者自测记录。
- 不做上层业务抽象,只提供可组合的底层原语。
快速开始
[]
= "0.1.2"
运行此示例需启用 rand 特性(默认已启用)。
#
#
API 预览
以下是本库核心 API 的简化概览。完整签名(含泛型约束、特性门控)请以 docs.rs 为准。
模块结构
lib_unknown
├── rand — probe/seed/next/shuffle/random/fill_bytes/random_range
├── sys — syscall::syscall0~6,unix::resolve/sys_*,win::resolve
├── types — bytes::StackBytes/HeapBytes,str::StackStr/HeapStr
├── crypto — base::mix64/mse/imse(实验性质)
└── dyntest — DnyRun/BatchRunner(std-only,开发期用)
核心函数(节选)
rand::probe() -> u64 // 硬件时间戳熵源
rand::seed() -> u64 // 混合重播种(勿用于热路径)
rand::next() -> u64 // 热路径输出,每 1024 次重播种
sys::unix::syscall::sys_read(fd, buf) -> SysResult
types::bytes::StackBytes<N> // 定容字节容器,用后清零
crypto::base::mix64(x) -> u64 // 雪崩混合(内部搅拌用)
适用场景 vs 不适用场景
适合:
- 无 libc / 嵌入式 / 裸机环境需要熵源与系统调用
- 短密钥、令牌等敏感数据的定容内存处理
- 开发期需要动态编译运行代码片段的测试 harness
不适合:
- 需要合规审计的密码学与随机数场景(请使用
rand/getrandom等审计过的 crate) - 通用应用开发(本库只提供底层原语,无上层抽象)
特性标志
| Feature | 默认 | 说明 |
|---|---|---|
default |
✅ | rand + rand-expand + sys + types + crypto |
rand / rand-expand |
✅ | 熵源 probe/seed/next、区间采样与 fill_bytes |
sys / sys-syscall / sys-unix / sys-win |
✅ | 裸 syscall0~6、常量封装、动态符号解析 |
types / types-bytes / types-str |
✅ | StackBytes/HeapBytes/StackStr/HeapStr(用后清零) |
crypto |
✅ | mix64、mse/imse 流密码(实验性质,非审计算法) |
std / alloc |
❌ | std = ["alloc"],开启堆内存类型 |
rand-safe-stack |
❌ | seed 使用独立栈缓冲代替复用调用栈 |
dyntest |
❌ | 需 std,动态编译运行 harness |
平台与环境支持
- 操作系统:Linux / Android / macOS / Windows(
syscall按 target 分发,不支持目标编译期报错) no_std支持:是(默认即no_std,#![cfg_attr(not(feature = "std"), no_std)])- Unsafe 代码:含
unsafe(裸 syscall、asm!采样、原始指针拷贝),公开unsafe fn均已标注# Safety
最小 Rust 版本
MSRV 未在 Cargo.toml 声明,在 rustc 1.98.1 测试稳定。
安全性
- 本库含
unsafe(裸 syscall、asm!采样、原始指针拷贝),用途见平台与环境支持;调用unsafe接口前请阅读其# Safety。 crypto为未经审计的自研原语,仅供内部搅拌与实验,请勿用于生产密码学场景。dyntest会编译并执行传入的代码,仅可在隔离沙箱中使用,不可用于生产。
贡献
欢迎提交 Issue 和 Pull Request!
提交 PR 前请先阅读设计哲学,与项目核心原则冲突的功能建议可能不会被采纳(欢迎在 Issue 中先讨论)。
变更日志
详见 CHANGELOG.md。