Skip to content

Commit

Permalink
Merge pull request #22 from gnosisguild/ng/bfv_actor
Browse files Browse the repository at this point in the history
Ng/bfv actor
  • Loading branch information
nginnever authored Aug 27, 2024
2 parents 1deef8a + bf992b8 commit a0eda40
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 17 deletions.
1 change: 1 addition & 0 deletions packages/ciphernode/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/ciphernode/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
[workspace]
members = ["core", "eth", "enclave", "enclave_node", "p2p"]
members = ["core", "eth", "enclave", "enclave_node", "p2p", "bfv"]
59 changes: 43 additions & 16 deletions packages/ciphernode/bfv/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,27 @@

mod util;

use std::{sync::Arc};
use fhe::{
bfv::{BfvParametersBuilder, Ciphertext, Encoding, Plaintext, SecretKey},
bfv::{BfvParameters, BfvParametersBuilder, Ciphertext, Encoding, Plaintext, SecretKey},
mbfv::{AggregateIter, CommonRandomPoly, DecryptionShare, PublicKeyShare},
};
use fhe_traits::{FheDecoder, Serialize as FheSerialize, DeserializeParametrized};
use fhe_traits::{FheDecoder, Serialize as FheSerialize, Deserialize, DeserializeParametrized};
use rand::{Rng, rngs::OsRng, thread_rng};
use util::timeit::{timeit};

pub struct EnclaveBFV {
pub address: String,
pub pk_share: Vec<u8>,
pub pk_share: PublicKeyShare,
sk_share: SecretKey,
pub params: Arc<BfvParameters>,
pub crp: CommonRandomPoly,
}

impl EnclaveBFV {
pub fn new(address: String) -> Self {
let degree = 4096;
let plaintext_modulus: u64 = 4096;
let moduli = vec![0xffffee001, 0xffffc4001, 0x1ffffe0001];
pub fn new(degree: usize, plaintext_modulus: u64, moduli: Vec<u64>) -> Self {
// let degree = 4096;
// let plaintext_modulus: u64 = 4096;
// let moduli = vec![0xffffee001, 0xffffc4001, 0x1ffffe0001];

// Generate the BFV parameters structure.
let params = timeit!(
Expand All @@ -34,13 +37,37 @@ impl EnclaveBFV {
);

let crp = CommonRandomPoly::new(&params, &mut thread_rng()).unwrap();
//let crp_bytes = crp.to_bytes();
let sk_share_1 = SecretKey::random(&params, &mut OsRng);
let pk_share_1 = PublicKeyShare::new(&sk_share_1, crp.clone(), &mut thread_rng()).unwrap();
// serialize pk_share
let pk_share = pk_share_1.to_bytes();
let sk_share = sk_share_1.coeffs.into_vec();

Self { address, pk_share }
//TODO: save encrypted sk_share to disk?
let sk_share = SecretKey::random(&params, &mut OsRng);
let pk_share = PublicKeyShare::new(&sk_share, crp.clone(), &mut thread_rng()).unwrap();

Self { pk_share, sk_share, params, crp }
}

pub fn serialize_pk(&mut self) -> Vec<u8> {
self.pk_share.to_bytes()
}

pub fn deserialize_pk(&mut self, bytes: Vec<u8>, par_bytes: Vec<u8>, crp_bytes: Vec<u8>) -> PublicKeyShare {
let params = Arc::new(BfvParameters::try_deserialize(&par_bytes).unwrap());
let crp = CommonRandomPoly::deserialize(&crp_bytes, &params).unwrap();
PublicKeyShare::deserialize(&bytes, &params, crp.clone()).unwrap()
}

pub fn serialize_crp(&mut self) -> Vec<u8> {
self.crp.to_bytes()
}

pub fn deserialize_crp(&mut self, bytes: Vec<u8>, par_bytes: Vec<u8>) -> CommonRandomPoly {
let params = Arc::new(BfvParameters::try_deserialize(&par_bytes).unwrap());
CommonRandomPoly::deserialize(&bytes, &params).unwrap()
}

pub fn serialize_params(&mut self) -> Vec<u8> {
self.params.to_bytes()
}

pub fn deserialize_params(&mut self, par_bytes: Vec<u8>) -> Arc<BfvParameters> {
Arc::new(BfvParameters::try_deserialize(&par_bytes).unwrap())
}
}
1 change: 1 addition & 0 deletions packages/ciphernode/enclave_node/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ repository = "https://github.com/gnosisguild/enclave/packages/ciphernode"
[dependencies]
eth = { path = "../eth" }
p2p = { path = "../p2p" }
bfv = { path = "../bfv" }
enclave-core = { path = "../core" }
async-std = "1.12.0"
fhe = { git = "https://github.com/gnosisguild/fhe.rs", version = "0.1.0-beta.7" }
Expand Down
7 changes: 7 additions & 0 deletions packages/ciphernode/enclave_node/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use std::error::Error;

use p2p::EnclaveRouter;
use bfv::EnclaveBFV;
use tokio::{
self,
io::{self, AsyncBufReadExt, BufReader},
Expand Down Expand Up @@ -33,6 +34,12 @@ async fn main() -> Result<(), Box<dyn Error>> {
println!("\n\n\n\n");
println!("Hello, cipher world!");

let mut new_bfv = EnclaveBFV::new(4096, 4096, vec![0xffffee001, 0xffffc4001, 0x1ffffe0001]);
let pk_bytes = new_bfv.serialize_pk();
let param_bytes = new_bfv.serialize_params();
let crp_bytes = new_bfv.serialize_crp();
let deserialized_pk = new_bfv.deserialize_pk(pk_bytes, param_bytes, crp_bytes);

let (mut p2p, tx, mut rx) = EnclaveRouter::new()?;
p2p.connect_swarm("mdns".to_string())?;
p2p.join_topic("enclave-keygen-01")?;
Expand Down

0 comments on commit a0eda40

Please sign in to comment.