Expand description
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§
- Constant variables
- Type aliases
- Utility functions for ecies
Structs§
- Public key on a secp256k1 curve.
- Secret key (256-bit) on a secp256k1 curve.
Enums§
Constants§
Functions§
- Decrypt a message by a secret key
- Encrypt a message by a public key