1个不稳定版本
0.2.1 | 2024年5月25日 |
---|
#1458 在 密码学
390KB
1.5K SLoC
ML-KEM的C共享对象
此crate提供了一个共享对象(动态链接库),使用标准的C FFI ABI,提供了一个ML-KEM的功能实现。
此实现的目的是
- 简单性
- 正确性
- 调用者只处理序列化对象
- 没有库特定的内存管理(调用者管理所有对象)
- 库在调用之间不保留内部状态
- 最小化的符号可见性
- 稳定的API/ABI
安全相关目标
- 恒定时间操作
- 清理库RAM(对象应在函数退出前从任何库分配的内存中清零)
非目标是
- 速度
- 效率
- 大小
待完成的工作
- 更好的内部错误处理
- 测试!
- 在共享对象中减少符号可见性
考虑但放弃的路径
- 自动生成稳定的C头文件(例如使用cbindgen);考虑到API/ABI的简单性,手动编写的头文件可能没问题
快速入门
$ cd ffi # this directory
$ cargo build
$ (cd tests && make)
$ python3
>>> from fips203 import ML_KEM_512
>>>
>>> (encapsulation_key, decapsulation_key) = ML_KEM_512.keygen()
>>> (ciphertext, shared_secret_1) = encapsulation_key.encaps()
>>> shared_secret_2 = decapsulation_key.decaps(ciphertext)
>>> assert(shared_secret_1 == shared_secret_2)
依赖关系
~1.4–2MB
~27K SLoC