Crate wedpr_ecies

Crate wedpr_ecies 

Source
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§

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