[−][src]Crate ecies
Elliptic Curve Integrated Encryption Scheme for secp256k1 in Rust, based on pure Rust implementation of secp256k1.
ECIES functionalities are built upon AES-GCM-256 and HKDF-SHA256.
This is the Rust version of eciespy.
This library can be compiled to the WASM target at your option, see WASM compatibility.
Quick Start
use ecies::{decrypt, encrypt, utils::generate_keypair}; const MSG: &str = "helloworld"; let (sk, pk) = generate_keypair(); let (sk, pk) = (&sk.serialize(), &pk.serialize()); let msg = MSG.as_bytes(); assert_eq!( msg, decrypt(sk, &encrypt(pk, msg).unwrap()).unwrap().as_slice() );
Optional pure Rust AES backend
You can choose to use OpenSSL implementation or pure Rust implementation of AES-256-GCM:
ecies = {version = "0.2", default-features = false, features = ["pure"]}
Due to some performance problem, OpenSSL is the default backend.
Pure Rust implementation is sometimes useful, such as building on WASM:
cargo build --no-default-features --features pure --target=wasm32-unknown-unknown
If you select the pure Rust backend on modern CPUs, consider building with
RUSTFLAGS="-Ctarget-cpu=sandybridge -Ctarget-feature=+aes,+sse2,+sse4.1,+ssse3"
to speed up AES encryption/decryption. This would be no longer necessary when aes-gcm supports automatic CPU detection.
WASM compatibility
It's also possible to build to the wasm32-unknown-unknown target with the pure Rust backend. Check out this repo for more details.
Modules
| consts | Constant variables |
| types | Type aliases |
| utils | Utility functions for ecies |
Structs
| PublicKey | Public key on a secp256k1 curve. |
| SecretKey | Secret key (256-bit) on a secp256k1 curve. |
Enums
| SecpError |
Constants
| FULL_PUBLIC_KEY_SIZE |
Functions
| decrypt | Decrypt a message by a secret key |
| encrypt | Encrypt a message by a public key |