Browse Source

Added symmetric encryption

Andrew Beams 3 years ago
parent
commit
0c00139100
2 changed files with 15 additions and 41 deletions
  1. 1 37
      pir.cpp
  2. 14 4
      pir_client.cpp

+ 1 - 37
pir.cpp

@@ -80,10 +80,6 @@ void gen_pir_params(uint64_t ele_num, uint64_t ele_size, uint32_t d,
         expansion_ratio += ceil(logqi / logt);
     }
 
-    if(!enable_symmetric){
-        expansion_ratio = expansion_ratio << 1;
-    }
-
     pir_params.enable_symmetric = enable_symmetric;
     pir_params.enable_batching = enable_batching;
     pir_params.ele_num = ele_num;
@@ -91,7 +87,7 @@ void gen_pir_params(uint64_t ele_num, uint64_t ele_size, uint32_t d,
     pir_params.elements_per_plaintext = elements_per_plaintext;
     pir_params.num_of_plaintexts = num_of_plaintexts;
     pir_params.d = d;                 
-    pir_params.expansion_ratio = expansion_ratio;           
+    pir_params.expansion_ratio = expansion_ratio << 1;           
     pir_params.nvec = nvec;
     pir_params.n = num_of_plaintexts;
 }
@@ -108,38 +104,6 @@ void print_pir_params(const PirParams &pir_params){
     cout << "n: " << pir_params.n << endl;
 }
 
-void gen_params(uint64_t ele_num, uint64_t ele_size, uint32_t N, uint32_t logt,
-                uint32_t d, EncryptionParameters &params,
-                PirParams &pir_params) {
-    
-
-    params.set_poly_modulus_degree(N);
-    params.set_coeff_modulus(CoeffModulus::BFVDefault(N));
-    params.set_plain_modulus(PlainModulus::Batching(N, logt));
-
-    logt = floor(log2(params.plain_modulus().value()));
-
-    cout << "logt: " << logt << endl << "N: " << N << endl <<
-    "ele_num: " << ele_num << endl << "ele_size: " << ele_size << endl;
-
-    uint64_t plaintext_num = plaintexts_per_db(logt, N, ele_num, ele_size);
-
-    vector<uint64_t> nvec = get_dimensions(plaintext_num, d);
-
-    uint32_t expansion_ratio = 0;
-    for (uint32_t i = 0; i < params.coeff_modulus().size(); ++i) {
-        double logqi = log2(params.coeff_modulus()[i].value());
-        cout << "PIR: logqi = " << logqi << endl;
-        expansion_ratio += ceil(logqi / logt);
-    }
-
-    pir_params.d = d;
-    pir_params.n = plaintext_num;
-    pir_params.nvec = nvec;
-    pir_params.expansion_ratio = expansion_ratio << 1; // because one ciphertext = two polys
-}
-
-
 uint32_t plainmod_after_expansion(uint32_t logt, uint32_t N, uint32_t d, 
         uint64_t ele_num, uint64_t ele_size) {
 

+ 14 - 4
pir_client.cpp

@@ -15,11 +15,16 @@ PIRClient::PIRClient(const EncryptionParameters &enc_params,
     
     PublicKey public_key;
     keygen_->create_public_key(public_key);
-    encryptor_ = make_unique<Encryptor>(*context_, public_key);
-
     SecretKey secret_key = keygen_->secret_key();
-    decryptor_ = make_unique<Decryptor>(*context_, secret_key);
 
+    if(pir_params_.enable_symmetric){
+        encryptor_ = make_unique<Encryptor>(*context_, secret_key);
+    }
+    else{
+        encryptor_ = make_unique<Encryptor>(*context_, public_key);
+    }
+    
+    decryptor_ = make_unique<Decryptor>(*context_, secret_key);
     evaluator_ = make_unique<Evaluator>(*context_);
 }
 
@@ -53,7 +58,12 @@ PirQuery PIRClient::generate_query(uint64_t desiredIndex) {
                 pt[real_index] = invert_mod(pow(2, log_total), enc_params_.plain_modulus());
             }
             Ciphertext dest;
-            encryptor_->encrypt(pt, dest);
+            if(pir_params_.enable_symmetric){
+                encryptor_->encrypt_symmetric(pt, dest);
+            }
+            else{
+                encryptor_->encrypt(pt, dest);
+            }
             result[i].push_back(dest);
         }   
     }