mirror of
https://github.com/arnaucube/fhe-study.git
synced 2026-01-24 04:33:52 +01:00
fusion TFHE to use GFHE underthehood
This commit is contained in:
18
README.md
18
README.md
@@ -19,8 +19,8 @@ and the line `type S = TWLE<K>` to use `CKKS<Q, N>` or `BFV<Q, N, T>`.
|
||||
|
||||
```rust
|
||||
const T: u64 = 128; // msg space (msg modulus)
|
||||
const K: usize = 16;
|
||||
type S = TLWE<K>;
|
||||
type M = Rq<T, 1>; // msg space
|
||||
type S = TLWE<256>;
|
||||
|
||||
let mut rng = rand::thread_rng();
|
||||
let msg_dist = Uniform::new(0_u64, T);
|
||||
@@ -28,13 +28,13 @@ let msg_dist = Uniform::new(0_u64, T);
|
||||
let (sk, pk) = S::new_key(&mut rng)?;
|
||||
|
||||
// get two random msgs in Z_t
|
||||
let m1 = Rq::<T, 1>::rand_u64(&mut rng, msg_dist)?;
|
||||
let m2 = Rq::<T, 1>::rand_u64(&mut rng, msg_dist)?;
|
||||
let m3 = Rq::<T, 1>::rand_u64(&mut rng, msg_dist)?;
|
||||
let m1 = M::rand_u64(&mut rng, msg_dist)?;
|
||||
let m2 = M::rand_u64(&mut rng, msg_dist)?;
|
||||
let m3 = M::rand_u64(&mut rng, msg_dist)?;
|
||||
|
||||
// encode the msgs into the plaintext space
|
||||
let p1: Tn<1> = S::encode::<T>(&m1); // plaintext
|
||||
let p2: Tn<1> = S::encode::<T>(&m2); // plaintext
|
||||
let p1 = S::encode::<T>(&m1); // plaintext
|
||||
let p2 = S::encode::<T>(&m2); // plaintext
|
||||
let c3_const: Tn<1> = Tn(array::from_fn(|i| T64(m3.coeffs()[i].0))); // encode it as constant value
|
||||
|
||||
let c1 = S::encrypt(&mut rng, &pk, &p1)?;
|
||||
@@ -42,8 +42,8 @@ let c2 = S::encrypt(&mut rng, &pk, &p2)?;
|
||||
|
||||
// now we can do encrypted operations (notice that we do them using simple
|
||||
// operations by operator overloading):
|
||||
let c3 = c1 + c2;
|
||||
let c4 = c2 * c3_const;
|
||||
let c_12 = c1 + c2;
|
||||
let c4 = c_12 * c3_const;
|
||||
|
||||
// decrypt & decode
|
||||
let p4_recovered = c4.decrypt(&sk);
|
||||
|
||||
Reference in New Issue
Block a user