amend interactive fhe uint8 example

This commit is contained in:
Janmajaya Mall
2024-07-02 15:28:46 +05:30
parent 0406a4b47c
commit 4e6a9aa3a7
5 changed files with 182 additions and 56 deletions

View File

@@ -22,7 +22,7 @@ use crate::{
pbs::{pbs, PbsInfo, PbsKey, WithShoupRepr},
random::{
DefaultSecureRng, NewWithSeed, RandomFill, RandomFillGaussianInModulus,
RandomFillUniformInModulus, RandomGaussianElementInModulus,
RandomFillUniformInModulus,
},
rgsw::{
generate_auto_map, public_key_encrypt_rgsw, rgsw_by_rgsw_inplace, rgsw_x_rgsw_scratch_rows,

View File

@@ -43,7 +43,7 @@ pub fn set_parameter_set(select: ParameterSelector) {
}
/// Set application specific interactive multi-party common reference string
pub fn set_mp_seed(seed: [u8; 32]) {
pub fn set_common_reference_seed(seed: [u8; 32]) {
assert!(
MULTI_PARTY_CRS
.set(InteractiveMultiPartyCrs { seed: seed })
@@ -57,9 +57,9 @@ pub fn gen_client_key() -> ClientKey {
BoolEvaluator::with_local(|e| e.client_key())
}
/// Generate client's share for collective public key, i.e round 1, of the
/// protocol
pub fn gen_mp_keys_phase1(
/// Generate client's share for collective public key, i.e round 1 share, in
/// round 1 of the 2 round protocol
pub fn interactive_multi_party_round1_share(
ck: &ClientKey,
) -> CommonReferenceSeededCollectivePublicKeyShare<Vec<u64>, [u8; 32], BoolParameters<u64>> {
BoolEvaluator::with_local(|e| {
@@ -319,13 +319,16 @@ mod tests {
set_parameter_set(ParameterSelector::InteractiveLTE2Party);
let mut seed = [0u8; 32];
thread_rng().fill_bytes(&mut seed);
set_mp_seed(seed);
set_common_reference_seed(seed);
let parties = 2;
let cks = (0..parties).map(|_| gen_client_key()).collect_vec();
// round 1
let pk_shares = cks.iter().map(|k| gen_mp_keys_phase1(k)).collect_vec();
let pk_shares = cks
.iter()
.map(|k| interactive_multi_party_round1_share(k))
.collect_vec();
// collective pk
let pk = aggregate_public_key_shares(&pk_shares);
@@ -408,13 +411,16 @@ mod tests {
set_parameter_set(ParameterSelector::InteractiveLTE2Party);
let mut seed = [0u8; 32];
thread_rng().fill_bytes(&mut seed);
set_mp_seed(seed);
set_common_reference_seed(seed);
let parties = 2;
let cks = (0..parties).map(|_| gen_client_key()).collect_vec();
// round 1
let pk_shares = cks.iter().map(|k| gen_mp_keys_phase1(k)).collect_vec();
let pk_shares = cks
.iter()
.map(|k| interactive_multi_party_round1_share(k))
.collect_vec();
// collective pk
let pk = aggregate_public_key_shares(&pk_shares);

View File

@@ -374,19 +374,22 @@ mod tests {
evaluator::InteractiveMultiPartyCrs,
keys::{key_size::KeySize, ServerKeyEvaluationDomain},
},
gen_client_key, gen_mp_keys_phase1, gen_mp_keys_phase2,
gen_client_key, gen_mp_keys_phase2, interactive_multi_party_round1_share,
parameters::CiphertextModulus,
random::DefaultSecureRng,
set_mp_seed, set_parameter_set,
set_common_reference_seed, set_parameter_set,
utils::WithLocal,
BoolEvaluator, DefaultDecomposer, ModularOpsU64, Ntt, NttBackendU64,
};
set_parameter_set(crate::ParameterSelector::InteractiveLTE2Party);
set_mp_seed(InteractiveMultiPartyCrs::random().seed);
set_common_reference_seed(InteractiveMultiPartyCrs::random().seed);
let parties = 2;
let cks = (0..parties).map(|_| gen_client_key()).collect_vec();
let pk_shares = cks.iter().map(|k| gen_mp_keys_phase1(k)).collect_vec();
let pk_shares = cks
.iter()
.map(|k| interactive_multi_party_round1_share(k))
.collect_vec();
let pk = aggregate_public_key_shares(&pk_shares);
let server_key_shares = cks