mirror of
https://github.com/stakwork/sphinx-key.git
synced 2026-02-02 06:14:21 +01:00
39 lines
1.1 KiB
Rust
39 lines
1.1 KiB
Rust
pub mod chacha;
|
|
pub mod ecdh;
|
|
|
|
pub use secp256k1;
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use crate::chacha::{decrypt, encrypt, MSG_LEN, NONCE_END_LEN};
|
|
use crate::ecdh::derive_shared_secret_from_slice;
|
|
use secp256k1::rand::{rngs::OsRng, thread_rng, RngCore};
|
|
use secp256k1::Secp256k1;
|
|
|
|
#[test]
|
|
fn test_crypter() -> anyhow::Result<()> {
|
|
// two keypairs
|
|
let s = Secp256k1::new();
|
|
let (sk1, pk1) = s.generate_keypair(&mut thread_rng());
|
|
let (sk2, pk2) = s.generate_keypair(&mut thread_rng());
|
|
|
|
// derive shared secrets
|
|
let sec1 = derive_shared_secret_from_slice(pk2.serialize(), sk1.secret_bytes())?;
|
|
let sec2 = derive_shared_secret_from_slice(pk1.serialize(), sk2.secret_bytes())?;
|
|
assert_eq!(sec1, sec2);
|
|
|
|
// encrypt plaintext with sec1
|
|
let plaintext = [1; MSG_LEN];
|
|
let mut nonce_end = [0; NONCE_END_LEN];
|
|
OsRng.fill_bytes(&mut nonce_end);
|
|
let cipher = encrypt(plaintext, sec1, nonce_end)?;
|
|
|
|
// decrypt with sec2
|
|
let plain = decrypt(cipher, sec2)?;
|
|
assert_eq!(plaintext, plain);
|
|
|
|
println!("PLAINTEXT MATCHES!");
|
|
Ok(())
|
|
}
|
|
}
|