number generation
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,2 +1,4 @@
|
|||||||
/target
|
/target
|
||||||
*.pdf
|
*.pdf
|
||||||
|
|
||||||
|
Cargo.lock
|
||||||
|
7
Cargo.lock
generated
7
Cargo.lock
generated
@ -1,7 +0,0 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
|
||||||
# It is not intended for manual editing.
|
|
||||||
version = 3
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "homomorphic-encryption"
|
|
||||||
version = "0.1.0"
|
|
@ -1,16 +1,21 @@
|
|||||||
mod dghv;
|
mod dghv;
|
||||||
|
mod dghv_asym;
|
||||||
|
mod utils;
|
||||||
use crate::dghv::{decrypt_bit, encrypt_bit, generate_secret_key};
|
use crate::dghv::{decrypt_bit, encrypt_bit, generate_secret_key};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let eta = 64;
|
let eta = 10000;
|
||||||
let secret_key = generate_secret_key(eta);
|
let secret_key = generate_secret_key(eta);
|
||||||
|
|
||||||
let bit = 1;
|
let bit = 1;
|
||||||
let ciphertext = encrypt_bit(bit, &secret_key);
|
let ciphertext = encrypt_bit(bit, &secret_key, 10000, 512);
|
||||||
let decrypted = decrypt_bit(&ciphertext, &secret_key);
|
let decrypted = decrypt_bit(&ciphertext, &secret_key);
|
||||||
|
let opx2 = ciphertext.clone() * encrypt_bit(1, &secret_key, 10000, 512);
|
||||||
|
let decrypted_opx2 = decrypt_bit(&opx2, &secret_key);
|
||||||
|
|
||||||
println!("clear bit (b): {}", bit);
|
println!("clear bit (b): {}", bit);
|
||||||
println!("Secret key (p): {}", secret_key);
|
println!("Secret key (p): {}", secret_key);
|
||||||
println!("Encrypted bit (c): {}", ciphertext);
|
println!("Encrypted bit (c): {}", ciphertext);
|
||||||
println!("decrypted bit : {}", decrypted);
|
println!("decrypted bit : {}", decrypted);
|
||||||
|
println!("decrypted bit AND 1: {}", decrypted_opx2);
|
||||||
}
|
}
|
||||||
|
12
src/utils.rs
12
src/utils.rs
@ -4,9 +4,15 @@ use rand::SeedableRng;
|
|||||||
use rug::Integer;
|
use rug::Integer;
|
||||||
|
|
||||||
pub fn generate_random_odd_integer(num_bits: u32) -> Integer {
|
pub fn generate_random_odd_integer(num_bits: u32) -> Integer {
|
||||||
std::iter::repeat_with(|| generate_random_integer(num_bits))
|
let mut rng = StdRng::from_os_rng();
|
||||||
.find(|p: &Integer| p.is_odd())
|
let mut x = Integer::from(1);
|
||||||
.unwrap()
|
for _ in 1..(num_bits-1) {
|
||||||
|
x <<= 1;
|
||||||
|
x += rng.random_range(0..=1);
|
||||||
|
}
|
||||||
|
x <<= 1;
|
||||||
|
x += 1;
|
||||||
|
x
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_random_integer(num_bits: u32) -> Integer {
|
pub fn generate_random_integer(num_bits: u32) -> Integer {
|
||||||
|
Reference in New Issue
Block a user