2 个版本
0.1.1 | 2024年1月24日 |
---|---|
0.1.0 | 2022年12月22日 |
#492 在 WebAssembly
245KB
3.5K SLoC
crypto-wasi
crypto-wasi
是 nodejs 的 crypto 模块在 wasm32-wasi 上的 api 子集,使用 rust 实现,由 WASI 密码学 API 提供支持。
lib.rs
:
crypto-wasi
是 nodejs 的 crypto 模块在 wasm32-wasi 上的 api 子集,使用 rust 实现,由 WASI 密码学 API 提供支持。此库在 WasmEdge 运行时开发和测试
注意:此库的 api 与 nodejs 的 api 不完全一致。
目前实现的子集
- [Hash] (sha256, sha512, sha512-256)
- [Hmac] (sha256, sha512)
- [hkdf] (sha256, sha512)
- [pbkdf2] (sha256, sha512)
- scrypt
- [Cipheriv] & [Decipheriv] (aes-128-gcm, aes-256-gcm, chacha20-poly1305)
- [generate_key_pair] (rsa-[2048, 3072, 4096], rsa-pss-[2048, 3072, 4096], ecdsa-[prime256v1, secp256k1, secp384r1], ed25519, x25519)
- 密钥对象 ([PublicKey] & [PrivateKey])
- [sign] & [verify]
- [diffie_hellman]
正在工作中
- create_public_key & create_private_key
- ECDH (可以使用 generate_key_pair 和 diffie_hellman 作为替代)
未实现
createCipher
&createDecipher
:此函数对所有支持的加密方式都是语义上不安全的,对于计数器模式(如 CTR、GCM 或 CCM)中的加密方式则是致命的缺陷。generateKey
&createSecretKey
:在 nodejs 中,SecretKey
只存储原始密钥数据。在 wasi-crypto 中,SymmetricKey
等同于SecretKey
,在 WasmEdge 的实现中也只是存储原始密钥数据。但在 wasi-crypto 中,每个密钥都需要绑定到一种算法,这在使用密钥和密钥重用时造成了一些复杂性。因此,我们不打算实现SecretKey
。
已知问题
- ECDSA_P384_SHA384 密钥作为 Jwk 导出:椭圆曲线例程:ec_GFp_simple_point2oct:缓冲区太小
- ECDSA_P384_SHA384 在 sign & verify 中实际上使用 sha256 作为摘要
依赖关系
~1MB
~18K SLoC