# ed25519_enc [github](https://github.com/Experimental-Projects-NAS/ed25519_enc) [crates.io](https://crates.io/crates/ed25519_enc) [NPM Version](https://img.shields.io/npm/v/ed25519_enc) [docs.rs](https://docs.rs/ed25519_enc) [build status](https://github.com/Experimental-Projects-NAS/ed25519_enc/actions?query=branch%3Amain) A Rust library that facilitates secure encryption and decryption by converting **Ed25519** keys to **X25519** keys. Utilizes **elliptic-curve Diffie-Hellman (ECDH)** to derive a shared secret for **aes-gcm-256** symmetrical encryption. ## Installation ```shell $ cargo add ed25519_enc ``` ## Usage From **ed25519** private key to **x25519**: ```rust use ed25519_enc::{to_x25519_priv}; ... let ed25519_priv: [u8; 32] = [ 157, 097, 177, 157, 239, 253, 090, 096, 186, 132, 074, 244, 146, 236, 044, 196, 068, 073, 197, 105, 123, 050, 105, 025, 112, 059, 172, 003, 028, 174, 127, 096, ]; let x25519_priv: [u8; 32] = to_x25519_priv(ed25519_priv); ``` From **ed25519** public key to **x25519**: ```rust use ed25519_enc::{to_x25519_pub}; ... let ed25519_pub: [u8; 32] = [ 215, 090, 152, 001, 130, 177, 010, 183, 213, 075, 254, 211, 201, 100, 007, 058, 014, 225, 114, 243, 218, 166, 035, 037, 175, 002, 026, 104, 247, 007, 081, 026, ]; let x25519_pub: [u8; 32] = to_x25519_pub(ed25519_pub); ``` Encrypt and decrypt data/message using **ed25519** keys and **aes-gcm-256**: ```rust use ed25519_enc::{encrypt, decrypt} ... let sender_ed25519_priv: [u8; 32] = [ 157, 097, 177, 157, 239, 253, 090, 096, 186, 132, 074, 244, 146, 236, 044, 196, 068, 073, 197, 105, 123, 050, 105, 025, 112, 059, 172, 003, 028, 174, 127, 096, ]; let sender_ed25519_pub: [u8; 32] = [ 215, 090, 152, 001, 130, 177, 010, 183, 213, 075, 254, 211, 201, 100, 007, 058, 014, 225, 114, 243, 218, 166, 035, 037, 175, 002, 026, 104, 247, 007, 081, 026, ]; let receiver_ed25519_priv: [u8; 32] = [ 074, 032, 095, 005, 083, 039, 001, 050, 066, 088, 090, 056, 021, 011, 031, 011, 087, 068, 033, 014, 025, 028, 010, 043, 024, 066, 058, 076, 030, 074, 017, 076, ]; let receiver_ed25519_pub: [u8; 32] = [ 204, 095, 038, 061, 080, 055, 143, 219, 253, 138, 015, 190, 145, 041, 028, 081, 001, 004, 227, 080, 197, 078, 000, 043, 160, 130, 158, 047, 197, 058, 228, 232 ]; let data: &[u8] = b"Hello world!"; let enc_msg: Vec = encrypt( sender_ed25519_priv, receiver_ed25519_pub, data ); let dec_data: Vec = decrypt( receiver_ed25519_priv, sender_ed25519_pub, &enc_msg ); println!("{:?}", dec_data); // should prints "Hello world!" ``` ## License [MIT](LICENSE-MIT) or [Apache License 2.0](LICENSE-APACHE) (at your option).