#加密密钥 #prople #ecdh #eddsa #共享密钥 #私钥

prople-crypto

一套基于Prople系统需求的加密数据库和函数助手

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 密码学

Download history 266/week @ 2024-04-22 9/week @ 2024-05-20 13/week @ 2024-05-27 184/week @ 2024-06-03 10/week @ 2024-06-10 2/week @ 2024-06-24 26/week @ 2024-07-01 218/week @ 2024-07-15 13/week @ 2024-07-22 52/week @ 2024-07-29

每月306次下载
用于 2 crates

GPL-3.0-only

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