Crate prople_crypto
source ·Expand description
§prople/crypto
INFO
We have a significant changes since version
0.2.0
, please use at least this version for a better API library structure
This library provides multiple core algorithms :
ECDH / X25519
used for digital signature and key agreementEdDSA / ED25519
used for digital signature and account managementAEAD (Authenticated Encryption with Associated Data)
used for standard encryption keysChaCha20Poly1305
: Used as main encryption algorithm
Argon2
used as mainKDF (Key Deriviation Function)
to hash the passwordBlake3
used as main hash function when hashing generated shared secret key fromECDH
Chacha RNG
used as main random generator
Notes:
- The
ECDH
, the generated key secret, will using bytes and converted to hex. - The
EdDSA
, the generated private key, will using bytes and converted to standardPEM
format.
INFO
All of these cryptographic algorithms used to fulfill
Prople
project’s needs It’s still possible to use all of these algorithms, as long as your project has a similarity withProple
All of these generated keys will be put and encrypted into KeySecure
format following Ethereum KeyStore
strategy, which means the generated json will be stored in disk. Example json output:
{
"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"
}
}
}
§Installation
[dependencies]
prople-crypto = {version = "0.2.3"}
§Usages
§ECDH
Generate KeyPair
:
use prople_crypto::ecdh::keypair::KeyPair;
let keypair = KeyPair::generate();
// get public key
let pubkey = keypair.pub_key();
Generate shared secret :
INFO
To generate shared secret, both parties must exchange their public keys
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();
Please explore our API library documentation for the ecdh
module for more detail explanation and available public methods
§EDDSA
Generate 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());
Generate digital signature
use prople_crypto::eddsa::keypair::KeyPair;
let keypair = KeyPair::generate();
let signature = keypair.signature("my message".as_bytes());
let digital_signature = signature.to_hex();
Please explore our API library documentation for the eddsa
module for more detail explanation and available public methods
§KeySecure
Our keysecure::KeySecure
format actually try to following strategy and pattern from Ethereum KeyStore
.
Example generate KeySecure
from ECDH
keypair
use prople_crypto::ecdh::keypair::KeyPair;
let keypair = KeyPair::generate();
let keysecure: Result<KeySecure, KeySecureError> = keypair.to_keysecure("password".to_string);
INFO
Both
ECDH
andEDDSA
generated keypairs already implementToKeySecure
trait behavior, so both of this generated data will use same method to generate it’sKeySecure
format
Modules§
aead
is a module used to maintain the primary object ofAEAD (Authenticated Encryption with Associated Data
ecdh
is an module used specifically to maintain allECDH
operations. This module provides a set of abstractions built on top ofx25519_dalek
eddsa
is a module that provides a set of abstraction built on top ofed25519_dalek
library.errors
provides base error which isCommonError
external
used to re-export all cryptography libraries fromrst_common
keysecure
is a module used to save a critical information such as for generatedPrivate Key
passphrase
is a module used to hash a given secret passphrase or apassword