瀏覽代碼

dpf: fix HalfTreeSpDpf for domain size 1

Lennart Braun 2 年之前
父節點
當前提交
a3b100c59c
共有 1 個文件被更改,包括 34 次插入3 次删除
  1. 34 3
      dpf/src/spdpf.rs

+ 34 - 3
dpf/src/spdpf.rs

@@ -146,12 +146,38 @@ where
     fn generate_keys(log_domain_size: u64, alpha: u64, beta: V) -> (Self::Key, Self::Key) {
         assert!(alpha < (1 << log_domain_size));
 
+        let mut rng = thread_rng();
+
+        if log_domain_size == 0 {
+            // simply secret-share beta
+            let beta_0: V = PRConverter::convert(rng.gen::<u128>());
+            let beta_1: V = beta - beta_0;
+            return (
+                HalfTreeSpDpfKey {
+                    party_id: 0,
+                    log_domain_size,
+                    party_seed: Default::default(),
+                    correction_words: Default::default(),
+                    hcw: Default::default(),
+                    lcw: Default::default(),
+                    correction_word_np1: beta_0,
+                },
+                HalfTreeSpDpfKey {
+                    party_id: 1,
+                    log_domain_size,
+                    party_seed: Default::default(),
+                    correction_words: Default::default(),
+                    hcw: Default::default(),
+                    lcw: Default::default(),
+                    correction_word_np1: beta_1,
+                },
+            );
+        }
+
         let fkaes = FixedKeyAes::new(Self::FIXED_KEY_AES_KEY);
         let hash = |x: u128| fkaes.hash_ccr(Self::HASH_KEY ^ x);
         let convert = |x: u128| -> V { PRConverter::convert(x) };
 
-        let mut rng = thread_rng();
-
         let n = log_domain_size as usize;
         let alpha_bits: Vec<bool> = bit_decompose(alpha, n);
 
@@ -213,6 +239,11 @@ where
     fn evaluate_at(key: &Self::Key, index: u64) -> V {
         assert!(index < (1 << key.log_domain_size));
 
+        if key.log_domain_size == 0 {
+            // beta is simply secret-shared
+            return key.correction_word_np1;
+        }
+
         let fkaes = FixedKeyAes::new(Self::FIXED_KEY_AES_KEY);
         let hash = |x: u128| fkaes.hash_ccr(Self::HASH_KEY ^ x);
         let convert = |x: u128| -> V { PRConverter::convert(x) };
@@ -273,7 +304,7 @@ mod tests {
 
     #[test]
     fn test_spdpf() {
-        for log_domain_size in 5..10 {
+        for log_domain_size in 0..10 {
             test_spdpf_with_param::<DummySpDpf<u64>>(log_domain_size);
             test_spdpf_with_param::<HalfTreeSpDpf<Wrapping<u64>>>(log_domain_size);
         }