mirror of
https://github.com/Sunscreen-tech/Sunscreen.git
synced 2026-01-22 12:07:54 -05:00
* Offer a simpler API for runtime creation * Update docs and examples to use `FheRuntime::new`
52 lines
1.4 KiB
Markdown
52 lines
1.4 KiB
Markdown
# Intro
|
|
|
|
Sunscreen is an ecosystem for building privacy-preserving applications using fully homomorphic encryption.
|
|
|
|
This project is licensed under the terms of the GNU AGPLv3 license. If you require a different license for your application, please reach out to us.
|
|
|
|
*WARNING!* This library is meant for experiments only. It has not been externally audited and is *not* intended for use in production.
|
|
|
|
# Example
|
|
Below, we look at how to multiply two encrypted integers together.
|
|
|
|
```rust
|
|
use sunscreen::{
|
|
fhe_program,
|
|
types::{bfv::Signed, Cipher},
|
|
Compiler, Error, FheRuntime,
|
|
};
|
|
|
|
#[fhe_program(scheme = "bfv")]
|
|
fn simple_multiply(a: Cipher<Signed>, b: Cipher<Signed>) -> Cipher<Signed> {
|
|
a * b
|
|
}
|
|
|
|
fn main() -> Result<(), Error> {
|
|
let app = Compiler::new()
|
|
.fhe_program(simple_multiply)
|
|
.compile()?;
|
|
|
|
let runtime = FheRuntime::new(app.params())?;
|
|
|
|
let (public_key, private_key) = runtime.generate_keys()?;
|
|
|
|
let a = runtime.encrypt(Signed::from(15), &public_key)?;
|
|
let b = runtime.encrypt(Signed::from(5), &public_key)?;
|
|
|
|
let results = runtime.run(app.get_fhe_program(simple_multiply).unwrap(), vec![a, b], &public_key)?;
|
|
|
|
let c: Signed = runtime.decrypt(&results[0], &private_key)?;
|
|
|
|
assert_eq!(c, 75.into());
|
|
|
|
Ok(())
|
|
}
|
|
```
|
|
|
|
# Docs
|
|
* [User guide](https://docs.sunscreen.tech)
|
|
* [API docs](https://docs.rs/sunscreen)
|
|
|
|
# Getting help
|
|
For questions about Sunscreen, join our [Discord](https://discord.gg/WHCs6jNNDS)!
|