Crates.io | concrete_lib |
lib.rs | concrete_lib |
version | 0.1.5 |
source | src |
created_at | 2020-10-01 20:06:47.909765 |
updated_at | 2020-12-04 16:51:28.141939 |
description | Concrete is a fully homomorphic encryption (FHE) library that implements Zama's variant of TFHE. |
homepage | https://crates.io/crates/concrete_lib |
repository | https://github.com/zama-ai/concrete |
max_upload_size | |
id | 295148 |
size | 1,927,513 |
Development has moved to the concrete crate. Watch out that your Cargo.toml
file has the right following dependency:
[dependencies]
concrete = "^0.1"
We thank Daniel May for supporting this project and donating the Concrete crate.
Concrete is a fully homomorphic encryption (FHE) library that implements Zama's variant of TFHE. Concrete is based on the Learning With Errors (LWE) problem and on the Ring Learning With Errors (RLWE) problem, which are well studied cryptographic hardness assumptions believed to be secure even against quantum computers.
To use Concrete, you must install Rust, FFTW and add concrete to the list of dependencies.
To install rust on Linux or Macos, you can do the following:
curl --tlsv1.2 -sSf https://sh.rustup.rs | sh
If you want other rust installation methods, please refer to rust website.
You also need to install FFTW and openssl library.
The more straightforward way to install fftw is to use Homebrew Formulae. To install homebrew, you can do the following:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
And then install FFTW and openssl.
brew install fftw
brew install openssl
To install FFTW on a debian-based distribution, you can do the following:
sudo apt-get update && sudo apt-get install -y libfftw3-dev libssl-dev
If you want to install FFTW directly from source, you can follow the steps described in FFTW's website.
concrete
in your own projectYou need to add the Concrete library as a dependency in your Rust project.
To do so, simply add the dependency in the Cargo.toml
file.
Here is a simple example:
[package]
name = "play_with_fhe"
version = "0.1.0"
authors = ["FHE Curious"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
concrete_lib = "0.1"
Now, you can compile your project with the cargo build
command, which will fetch the Concrete library.
It is also possible to build the library from source by cloning this repository and running:
cd concrete
make build
To run the tests, you can do the following
cd concrete
make test
use concrete_lib::*;
use crypto_api::error::CryptoAPIError;
fn main() -> Result<(), CryptoAPIError> {
// generate a secret key
let secret_key = LWESecretKey::new(&LWE128_630);
// the two values to add
let m1 = 8.2;
let m2 = 5.6;
// specify the range and precision to encode messages into plaintexts
// here we encode in [0, 10[ with 8 bits of precision and 1 bit of padding
let encoder = Encoder::new(0., 10., 8, 1)?;
// encode the messages into plaintexts
let p1 = encoder.encode_single(m1)?;
let p2 = encoder.encode_single(m2)?;
// encrypt plaintexts
let mut c1 = VectorLWE::encrypt(&secret_key, &p1)?;
let c2 = VectorLWE::encrypt(&secret_key, &p2)?;
// add the two ciphertexts homomorphically
c1.add_with_padding_inplace(&c2)?;
// decrypt and decode the result
let m3 = c1.decrypt_decode(&secret_key)?;
// print the result and compare to non-FHE addition
println!("Real: {} + {} = {}", m1, m2, m1 + m2);
println!(
"FHE: {} + {} = {}",
p1.decode()?[0],
p2.decode()?[0],
m3[0]
);
Ok(())
}
This library uses several dependencies and we would like to thank the contributors of those libraries :
FFTW (rust wrapper) : Toshiki Teramura (GPLv3)
FFTW (lib) : M. Frigo and S. G. Johnson (GPLv3)
kolmogorov_smirnov: D. O. Crualaoich (Apache 2.0)
openssl (rust wrapper): S. Fackler (Apache-2.0)
openssl (lib):
serde: E. Tryzelaar and D. Tolnay (MIT or Apache 2.0)
colored: T. Wickham (MPL-2.0)
We also use some crates published by The Rust Project Developers
under the MIT or Apache 2.0 license :
This software is distributed under the AGPL-v3 license. If you have any question, please contact us at hello@zama.ai.