8 个版本
0.3.1 | 2024年7月19日 |
---|---|
0.3.0 | 2024年7月19日 |
0.2.3 | 2024年6月3日 |
0.2.2 | 2024年4月24日 |
0.1.1 | 2024年3月11日 |
#672 in 密码学
每月306次下载
用于 2 crates
70KB
1.5K SLoC
prople/crypto
警告
我们从版本
0.3.0
开始有重大更改,请至少使用此版本以获得更好的API库结构
此库提供多个核心算法
ECDH / X25519
用于数字签名和密钥协商EdDSA / ED25519
用于数字签名和账户管理AEAD (带有关联数据的认证加密)
用于标准加密密钥ChaCha20Poly1305
:用作主要加密算法
Argon2
用作主要KDF (密钥派生函数)
以哈希密码Blake3
用作从ECDH
生成共享密钥时的主要哈希函数Chacha RNG
用作主要随机数生成器
注意
ECDH
,生成的密钥秘密,将使用字节并转换为十六进制。EdDSA
,生成的私钥,将使用字节并转换为标准的PEM
格式。
信息
所有这些密码学算法都用于满足
Prople
项目的需求。只要你的项目与Prople
相似,就可以使用所有这些算法。
所有这些生成的密钥都将按照 Ethereum KeyStore
策略放入并加密到 KeySecure
格式,这意味着生成的 json 将存储在磁盘上。示例 json 输出
{
"id": "ea433df6-6fcc-49e5-a535-20704c18e126",
"context": "X25519",
"crypto": {
"cipher": "xchacha20poly1305",
"cipherText": "712cd6261ea338100906c8c017d640d37d27bd58f91b1bf8f809a5a02a73e4e3b80002910b678f847b77e533ef6e1f29",
"cipherParams": {
"nonce": "f7e1d00e48a538936b3d48eeebc3847057acba24edb06f9b"
},
"kdf": "argon2",
"kdfParams": {
"params": {
"m_cost": 19456,
"t_cost": 2,
"p_cost": 1,
"outputLen": 32
},
"salt": "5Qm7QPATRUE6czNKJWODtg"
}
}
}
安装
[dependencies]
prople-crypto = {version = "~0.3"}
用法
ECDH
生成 KeyPair
use prople_crypto::ecdh::keypair::KeyPair;
let keypair = KeyPair::generate();
// get public key
let pubkey = keypair.pub_key();
生成共享密钥
信息
要生成共享密钥,双方必须交换他们的公钥
use prople_crypto::ecdh::keypair::KeyPair;
// assumed alice and bob as parties
let keypair_alice = KeyPair::generate();
let keypair_bob = KeyPair::generate();
let pubkey_alice = keypair_alice.pub_key();
let pubkey_bob = keypair_bob.pub_key();
let public_alice_hex = pubkey_alice.to_hex();
let public_bob_hex = pubkey_bob.to_hex();
// alice need bob's public key
let secret_alice = keypair_alice.secret(&public_bob_hex);
// bob need alice's public key
let secret_bob = keypair_bob.secret(&public_alice_hex);
// hash the generated secret using `BLAKE3`
let shared_secret_alice_blake3 = secret_alice.to_blake3();
let shared_secret_bob_blake3 = secret_bob.to_blake3();
请参阅我们的API库文档中的 ecdh
模块以获取更详细说明和可用的公共方法
EDDSA
生成 KeyPair
use prople_crypto::eddsa::keypair::KeyPair;
let keypair1 = KeyPair::generate();
// generate PEM value
let private_key_pem: Result<String, EddsaError> = keypair.priv_key().to_pem();
// generate from PEM
ley keypair2 = KeyPair::from_pem(private_key_pem.unwrap());
生成数字签名
use prople_crypto::eddsa::keypair::KeyPair;
let keypair = KeyPair::generate();
let signature = keypair.signature("my message".as_bytes());
let digital_signature = signature.to_hex();
请查阅我们的API库文档,了解关于 eddsa
模块更详细的解释和可用的公共方法。
KeySecure
我们的 keysecure::KeySecure
格式实际上尝试遵循来自 Ethereum KeyStore
的策略和模式。
示例:从 ECDH
密钥对生成 KeySecure
use prople_crypto::ecdh::keypair::KeyPair;
let keypair = KeyPair::generate();
let keysecure: Result<KeySecure, KeySecureError> = keypair.to_keysecure("password".to_string);
信息
无论是
ECDH
还是EDDSA
生成的密钥对,都已经实现了ToKeySecure
特性行为,因此这两者生成的数据都将使用相同的方法来生成其KeySecure
格式。
依赖项
~14–24MB
~440K SLoC