Browse Source

Added non-private query api (to be used for adding/modifying/deleting database elements

Andrew Beams 2 years ago
parent
commit
1bc6236a8c

BIN
src/CMakeFiles/main.dir/main.cpp.o


+ 0 - 4
src/CMakeFiles/sealpir.dir/CXX.includecache

@@ -20,10 +20,6 @@ string
 vector
 -
 
-/home/andrew/Documents/Research/AC-PIR/SealPIR/src/pir_client.cpp
-pir_client.hpp
-/home/andrew/Documents/Research/AC-PIR/SealPIR/src/pir_client.hpp
-
 /home/andrew/Documents/Research/AC-PIR/SealPIR/src/pir_client.hpp
 pir.hpp
 /home/andrew/Documents/Research/AC-PIR/SealPIR/src/pir.hpp

BIN
src/CMakeFiles/sealpir.dir/pir_client.cpp.o


BIN
src/CMakeFiles/sealpir.dir/pir_server.cpp.o


+ 7 - 0
src/pir_client.cpp

@@ -275,3 +275,10 @@ Ciphertext PIRClient::compose_to_ciphertext(vector<Plaintext> plains) {
 
     return result;
 }
+
+Ciphertext PIRClient::get_one(){
+    Plaintext pt("1");
+    Ciphertext ct;
+    encryptor_->encrypt(pt, ct);
+    return ct;
+}

+ 3 - 0
src/pir_client.hpp

@@ -31,6 +31,9 @@ class PIRClient {
     uint64_t get_fv_index(uint64_t element_index);
     uint64_t get_fv_offset(uint64_t element_index);
 
+    // Only used for simple_query
+    seal::Ciphertext get_one();
+
 
   private:
     seal::EncryptionParameters enc_params_;

+ 14 - 0
src/pir_server.cpp

@@ -461,3 +461,17 @@ vector<Plaintext> PIRServer::decompose_to_plaintexts(const Ciphertext &encrypted
 
     return result;
 }
+
+Ciphertext PIRServer::simple_query(uint64_t index){
+    //There is no transform_from_ntt that takes a plaintext
+    Ciphertext ct;
+    Plaintext pt = db_->operator[](index);
+    evaluator_->multiply_plain(one_, pt, ct);
+    evaluator_->transform_from_ntt_inplace(ct);
+    return ct;
+}
+
+void PIRServer::set_one_ct(Ciphertext one){
+    one_ = one;
+    evaluator_->transform_to_ntt_inplace(one_);
+}

+ 7 - 2
src/pir_server.hpp

@@ -24,10 +24,12 @@ class PIRServer {
     // Serializes the reply into the provided stream and returns the number of bytes written
     int serialize_reply(PirReply &reply, std::stringstream &stream);
 
-    seal::Plaintext simple_query(std::uint64_t index, std::uint64_t offset);
-
     void set_galois_key(std::uint32_t client_id, seal::GaloisKeys galkey);
 
+    seal::Ciphertext simple_query(std::uint64_t index);
+    //This is only used for simple_query
+    void set_one_ct(seal::Ciphertext one);
+
   private:
     seal::EncryptionParameters enc_params_; // SEAL parameters
     PirParams pir_params_;              // PIR parameters
@@ -38,6 +40,9 @@ class PIRServer {
     std::unique_ptr<seal::BatchEncoder> encoder_;
     std::shared_ptr<seal::SEALContext> context_;
 
+    //This is only uesd for simple_query
+    seal::Ciphertext one_;
+
     void decompose_to_plaintexts_ptr(const seal::Ciphertext &encrypted, seal::Plaintext *plain_ptr, int logt);
     std::vector<seal::Plaintext> decompose_to_plaintexts(const seal::Ciphertext &encrypted);
     void multiply_power_of_X(const seal::Ciphertext &encrypted, seal::Ciphertext &destination,

BIN
test/CMakeFiles/expand_test.dir/expand_test.cpp.o


+ 1 - 1
test/CMakeFiles/progress.marks

@@ -1 +1 @@
-8
+10

BIN
test/CMakeFiles/query_test.dir/query_test.cpp.o


+ 1024 - 0
test/CMakeFiles/simple_query_test.dir/CXX.includecache

@@ -0,0 +1,1024 @@
+#IncludeRegexLine: ^[ 	]*[#%][ 	]*(include|import)[ 	]*[<"]([^">]+)([">])
+
+#IncludeRegexScan: ^.*$
+
+#IncludeRegexComplain: ^$
+
+#IncludeRegexTransform: 
+
+/home/andrew/Documents/Research/AC-PIR/SealPIR/test/simple_query_test.cpp
+pir.hpp
+/home/andrew/Documents/Research/AC-PIR/SealPIR/test/pir.hpp
+pir_client.hpp
+/home/andrew/Documents/Research/AC-PIR/SealPIR/test/pir_client.hpp
+pir_server.hpp
+/home/andrew/Documents/Research/AC-PIR/SealPIR/test/pir_server.hpp
+seal/seal.h
+-
+chrono
+-
+memory
+-
+random
+-
+cstdint
+-
+cstddef
+-
+
+/usr/local/include/SEAL-3.6/gsl/gsl_assert
+intrin.h
+-
+exception
+-
+
+/usr/local/include/SEAL-3.6/gsl/gsl_byte
+type_traits
+-
+cstddef
+-
+cstddef
+-
+
+/usr/local/include/SEAL-3.6/gsl/span
+gsl/gsl_assert
+-
+gsl/gsl_byte
+-
+array
+-
+cstddef
+-
+iterator
+-
+type_traits
+-
+
+/usr/local/include/SEAL-3.6/seal/batchencoder.h
+seal/context.h
+/usr/local/include/SEAL-3.6/seal/seal/context.h
+seal/plaintext.h
+/usr/local/include/SEAL-3.6/seal/seal/plaintext.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+vector
+-
+gsl/span
+/usr/local/include/SEAL-3.6/seal/gsl/span
+
+/usr/local/include/SEAL-3.6/seal/ciphertext.h
+seal/context.h
+/usr/local/include/SEAL-3.6/seal/seal/context.h
+seal/dynarray.h
+/usr/local/include/SEAL-3.6/seal/seal/dynarray.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/randomgen.h
+/usr/local/include/SEAL-3.6/seal/seal/randomgen.h
+seal/valcheck.h
+/usr/local/include/SEAL-3.6/seal/seal/valcheck.h
+seal/version.h
+/usr/local/include/SEAL-3.6/seal/seal/version.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/seal/util/common.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+algorithm
+-
+cstddef
+-
+cstdint
+-
+functional
+-
+iostream
+-
+stdexcept
+-
+string
+-
+
+/usr/local/include/SEAL-3.6/seal/ckks.h
+seal/context.h
+/usr/local/include/SEAL-3.6/seal/seal/context.h
+seal/plaintext.h
+/usr/local/include/SEAL-3.6/seal/seal/plaintext.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/seal/util/common.h
+seal/util/croots.h
+/usr/local/include/SEAL-3.6/seal/seal/util/croots.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+seal/util/dwthandler.h
+/usr/local/include/SEAL-3.6/seal/seal/util/dwthandler.h
+seal/util/uintarithsmallmod.h
+/usr/local/include/SEAL-3.6/seal/seal/util/uintarithsmallmod.h
+seal/util/uintcore.h
+/usr/local/include/SEAL-3.6/seal/seal/util/uintcore.h
+cmath
+-
+complex
+-
+limits
+-
+type_traits
+-
+vector
+-
+gsl/span
+/usr/local/include/SEAL-3.6/seal/gsl/span
+
+/usr/local/include/SEAL-3.6/seal/context.h
+seal/encryptionparams.h
+/usr/local/include/SEAL-3.6/seal/seal/encryptionparams.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/modulus.h
+/usr/local/include/SEAL-3.6/seal/seal/modulus.h
+seal/util/galois.h
+/usr/local/include/SEAL-3.6/seal/seal/util/galois.h
+seal/util/ntt.h
+/usr/local/include/SEAL-3.6/seal/seal/util/ntt.h
+seal/util/pointer.h
+/usr/local/include/SEAL-3.6/seal/seal/util/pointer.h
+seal/util/rns.h
+/usr/local/include/SEAL-3.6/seal/seal/util/rns.h
+memory
+-
+unordered_map
+-
+
+/usr/local/include/SEAL-3.6/seal/decryptor.h
+seal/ciphertext.h
+/usr/local/include/SEAL-3.6/seal/seal/ciphertext.h
+seal/context.h
+/usr/local/include/SEAL-3.6/seal/seal/context.h
+seal/encryptionparams.h
+/usr/local/include/SEAL-3.6/seal/seal/encryptionparams.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/modulus.h
+/usr/local/include/SEAL-3.6/seal/seal/modulus.h
+seal/plaintext.h
+/usr/local/include/SEAL-3.6/seal/seal/plaintext.h
+seal/randomgen.h
+/usr/local/include/SEAL-3.6/seal/seal/randomgen.h
+seal/secretkey.h
+/usr/local/include/SEAL-3.6/seal/seal/secretkey.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+seal/util/iterator.h
+/usr/local/include/SEAL-3.6/seal/seal/util/iterator.h
+seal/util/locks.h
+/usr/local/include/SEAL-3.6/seal/seal/util/locks.h
+seal/util/ntt.h
+/usr/local/include/SEAL-3.6/seal/seal/util/ntt.h
+seal/util/rns.h
+/usr/local/include/SEAL-3.6/seal/seal/util/rns.h
+
+/usr/local/include/SEAL-3.6/seal/dynarray.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/serialization.h
+/usr/local/include/SEAL-3.6/seal/seal/serialization.h
+seal/version.h
+/usr/local/include/SEAL-3.6/seal/seal/version.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/seal/util/common.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+seal/util/pointer.h
+/usr/local/include/SEAL-3.6/seal/seal/util/pointer.h
+algorithm
+-
+iostream
+-
+limits
+-
+type_traits
+-
+gsl/span
+/usr/local/include/SEAL-3.6/seal/gsl/span
+
+/usr/local/include/SEAL-3.6/seal/encryptionparams.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/modulus.h
+/usr/local/include/SEAL-3.6/seal/seal/modulus.h
+seal/randomgen.h
+/usr/local/include/SEAL-3.6/seal/seal/randomgen.h
+seal/serialization.h
+/usr/local/include/SEAL-3.6/seal/seal/serialization.h
+seal/version.h
+/usr/local/include/SEAL-3.6/seal/seal/version.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+seal/util/globals.h
+/usr/local/include/SEAL-3.6/seal/seal/util/globals.h
+seal/util/hash.h
+/usr/local/include/SEAL-3.6/seal/seal/util/hash.h
+seal/util/ztools.h
+/usr/local/include/SEAL-3.6/seal/seal/util/ztools.h
+functional
+-
+iostream
+-
+memory
+-
+numeric
+-
+
+/usr/local/include/SEAL-3.6/seal/encryptor.h
+seal/ciphertext.h
+/usr/local/include/SEAL-3.6/seal/seal/ciphertext.h
+seal/context.h
+/usr/local/include/SEAL-3.6/seal/seal/context.h
+seal/encryptionparams.h
+/usr/local/include/SEAL-3.6/seal/seal/encryptionparams.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/plaintext.h
+/usr/local/include/SEAL-3.6/seal/seal/plaintext.h
+seal/publickey.h
+/usr/local/include/SEAL-3.6/seal/seal/publickey.h
+seal/secretkey.h
+/usr/local/include/SEAL-3.6/seal/seal/secretkey.h
+seal/serializable.h
+/usr/local/include/SEAL-3.6/seal/seal/serializable.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+seal/util/ntt.h
+/usr/local/include/SEAL-3.6/seal/seal/util/ntt.h
+vector
+-
+
+/usr/local/include/SEAL-3.6/seal/evaluator.h
+seal/ciphertext.h
+/usr/local/include/SEAL-3.6/seal/seal/ciphertext.h
+seal/context.h
+/usr/local/include/SEAL-3.6/seal/seal/context.h
+seal/galoiskeys.h
+/usr/local/include/SEAL-3.6/seal/seal/galoiskeys.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/modulus.h
+/usr/local/include/SEAL-3.6/seal/seal/modulus.h
+seal/plaintext.h
+/usr/local/include/SEAL-3.6/seal/seal/plaintext.h
+seal/relinkeys.h
+/usr/local/include/SEAL-3.6/seal/seal/relinkeys.h
+seal/secretkey.h
+/usr/local/include/SEAL-3.6/seal/seal/secretkey.h
+seal/valcheck.h
+/usr/local/include/SEAL-3.6/seal/seal/valcheck.h
+seal/util/iterator.h
+/usr/local/include/SEAL-3.6/seal/seal/util/iterator.h
+map
+-
+stdexcept
+-
+vector
+-
+
+/usr/local/include/SEAL-3.6/seal/galoiskeys.h
+seal/ciphertext.h
+/usr/local/include/SEAL-3.6/seal/seal/ciphertext.h
+seal/kswitchkeys.h
+/usr/local/include/SEAL-3.6/seal/seal/kswitchkeys.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+seal/util/galois.h
+/usr/local/include/SEAL-3.6/seal/seal/util/galois.h
+vector
+-
+
+/usr/local/include/SEAL-3.6/seal/keygenerator.h
+seal/context.h
+/usr/local/include/SEAL-3.6/seal/seal/context.h
+seal/galoiskeys.h
+/usr/local/include/SEAL-3.6/seal/seal/galoiskeys.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/publickey.h
+/usr/local/include/SEAL-3.6/seal/seal/publickey.h
+seal/relinkeys.h
+/usr/local/include/SEAL-3.6/seal/seal/relinkeys.h
+seal/secretkey.h
+/usr/local/include/SEAL-3.6/seal/seal/secretkey.h
+seal/serializable.h
+/usr/local/include/SEAL-3.6/seal/seal/serializable.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+seal/util/iterator.h
+/usr/local/include/SEAL-3.6/seal/seal/util/iterator.h
+random
+-
+
+/usr/local/include/SEAL-3.6/seal/kswitchkeys.h
+seal/encryptionparams.h
+/usr/local/include/SEAL-3.6/seal/seal/encryptionparams.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/publickey.h
+/usr/local/include/SEAL-3.6/seal/seal/publickey.h
+seal/valcheck.h
+/usr/local/include/SEAL-3.6/seal/seal/valcheck.h
+seal/version.h
+/usr/local/include/SEAL-3.6/seal/seal/version.h
+iostream
+-
+vector
+-
+
+/usr/local/include/SEAL-3.6/seal/memorymanager.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+seal/util/globals.h
+/usr/local/include/SEAL-3.6/seal/seal/util/globals.h
+seal/util/mempool.h
+/usr/local/include/SEAL-3.6/seal/seal/util/mempool.h
+memory
+-
+stdexcept
+-
+unordered_map
+-
+utility
+-
+mutex
+-
+thread
+-
+
+/usr/local/include/SEAL-3.6/seal/modulus.h
+seal/serialization.h
+/usr/local/include/SEAL-3.6/seal/seal/serialization.h
+seal/version.h
+/usr/local/include/SEAL-3.6/seal/seal/version.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+seal/util/hestdparms.h
+/usr/local/include/SEAL-3.6/seal/seal/util/hestdparms.h
+seal/util/uintcore.h
+/usr/local/include/SEAL-3.6/seal/seal/util/uintcore.h
+seal/util/ztools.h
+/usr/local/include/SEAL-3.6/seal/seal/util/ztools.h
+array
+-
+cstddef
+-
+cstdint
+-
+iostream
+-
+vector
+-
+
+/usr/local/include/SEAL-3.6/seal/plaintext.h
+seal/context.h
+/usr/local/include/SEAL-3.6/seal/seal/context.h
+seal/dynarray.h
+/usr/local/include/SEAL-3.6/seal/seal/dynarray.h
+seal/encryptionparams.h
+/usr/local/include/SEAL-3.6/seal/seal/encryptionparams.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/valcheck.h
+/usr/local/include/SEAL-3.6/seal/seal/valcheck.h
+seal/version.h
+/usr/local/include/SEAL-3.6/seal/seal/version.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/seal/util/common.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+seal/util/polycore.h
+/usr/local/include/SEAL-3.6/seal/seal/util/polycore.h
+algorithm
+-
+functional
+-
+stdexcept
+-
+string
+-
+gsl/span
+/usr/local/include/SEAL-3.6/seal/gsl/span
+
+/usr/local/include/SEAL-3.6/seal/publickey.h
+seal/ciphertext.h
+/usr/local/include/SEAL-3.6/seal/seal/ciphertext.h
+seal/context.h
+/usr/local/include/SEAL-3.6/seal/seal/context.h
+seal/valcheck.h
+/usr/local/include/SEAL-3.6/seal/seal/valcheck.h
+iostream
+-
+
+/usr/local/include/SEAL-3.6/seal/randomgen.h
+seal/dynarray.h
+/usr/local/include/SEAL-3.6/seal/seal/dynarray.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/version.h
+/usr/local/include/SEAL-3.6/seal/seal/version.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/seal/util/common.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+algorithm
+-
+array
+-
+cstddef
+-
+cstdint
+-
+memory
+-
+mutex
+-
+
+/usr/local/include/SEAL-3.6/seal/randomtostd.h
+seal/randomgen.h
+/usr/local/include/SEAL-3.6/seal/seal/randomgen.h
+cstdint
+-
+limits
+-
+memory
+-
+stdexcept
+-
+
+/usr/local/include/SEAL-3.6/seal/relinkeys.h
+seal/ciphertext.h
+/usr/local/include/SEAL-3.6/seal/seal/ciphertext.h
+seal/kswitchkeys.h
+/usr/local/include/SEAL-3.6/seal/seal/kswitchkeys.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+vector
+-
+
+/usr/local/include/SEAL-3.6/seal/seal.h
+seal/batchencoder.h
+/usr/local/include/SEAL-3.6/seal/seal/batchencoder.h
+seal/ciphertext.h
+/usr/local/include/SEAL-3.6/seal/seal/ciphertext.h
+seal/ckks.h
+/usr/local/include/SEAL-3.6/seal/seal/ckks.h
+seal/context.h
+/usr/local/include/SEAL-3.6/seal/seal/context.h
+seal/decryptor.h
+/usr/local/include/SEAL-3.6/seal/seal/decryptor.h
+seal/dynarray.h
+/usr/local/include/SEAL-3.6/seal/seal/dynarray.h
+seal/encryptionparams.h
+/usr/local/include/SEAL-3.6/seal/seal/encryptionparams.h
+seal/encryptor.h
+/usr/local/include/SEAL-3.6/seal/seal/encryptor.h
+seal/evaluator.h
+/usr/local/include/SEAL-3.6/seal/seal/evaluator.h
+seal/galoiskeys.h
+/usr/local/include/SEAL-3.6/seal/seal/galoiskeys.h
+seal/keygenerator.h
+/usr/local/include/SEAL-3.6/seal/seal/keygenerator.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/modulus.h
+/usr/local/include/SEAL-3.6/seal/seal/modulus.h
+seal/plaintext.h
+/usr/local/include/SEAL-3.6/seal/seal/plaintext.h
+seal/publickey.h
+/usr/local/include/SEAL-3.6/seal/seal/publickey.h
+seal/randomgen.h
+/usr/local/include/SEAL-3.6/seal/seal/randomgen.h
+seal/randomtostd.h
+/usr/local/include/SEAL-3.6/seal/seal/randomtostd.h
+seal/relinkeys.h
+/usr/local/include/SEAL-3.6/seal/seal/relinkeys.h
+seal/secretkey.h
+/usr/local/include/SEAL-3.6/seal/seal/secretkey.h
+seal/serializable.h
+/usr/local/include/SEAL-3.6/seal/seal/serializable.h
+seal/serialization.h
+/usr/local/include/SEAL-3.6/seal/seal/serialization.h
+seal/valcheck.h
+/usr/local/include/SEAL-3.6/seal/seal/valcheck.h
+seal/version.h
+/usr/local/include/SEAL-3.6/seal/seal/version.h
+
+/usr/local/include/SEAL-3.6/seal/secretkey.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/seal/memorymanager.h
+seal/plaintext.h
+/usr/local/include/SEAL-3.6/seal/seal/plaintext.h
+seal/randomgen.h
+/usr/local/include/SEAL-3.6/seal/seal/randomgen.h
+seal/valcheck.h
+/usr/local/include/SEAL-3.6/seal/seal/valcheck.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/seal/util/common.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+cstddef
+-
+cstdint
+-
+iostream
+-
+random
+-
+
+/usr/local/include/SEAL-3.6/seal/serializable.h
+seal/serialization.h
+/usr/local/include/SEAL-3.6/seal/seal/serialization.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+seal/util/streambuf.h
+/usr/local/include/SEAL-3.6/seal/seal/util/streambuf.h
+ios
+-
+iostream
+-
+
+/usr/local/include/SEAL-3.6/seal/serialization.h
+seal/version.h
+/usr/local/include/SEAL-3.6/seal/seal/version.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+cstdint
+-
+cstring
+-
+functional
+-
+iostream
+-
+
+/usr/local/include/SEAL-3.6/seal/util/blake2.h
+stddef.h
+-
+stdint.h
+-
+
+/usr/local/include/SEAL-3.6/seal/util/clang.h
+seal/util/config.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/config.h
+arm_neon.h
+-
+x86intrin.h
+-
+
+/usr/local/include/SEAL-3.6/seal/util/common.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+algorithm
+-
+cmath
+-
+cstdint
+-
+limits
+-
+stdexcept
+-
+tuple
+-
+type_traits
+-
+utility
+-
+vector
+-
+
+/usr/local/include/SEAL-3.6/seal/util/config.h
+
+/usr/local/include/SEAL-3.6/seal/util/croots.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/util/seal/memorymanager.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+seal/util/uintcore.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/uintcore.h
+complex
+-
+cstddef
+-
+stdexcept
+-
+
+/usr/local/include/SEAL-3.6/seal/util/defines.h
+seal/util/msvc.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/msvc.h
+seal/util/clang.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/clang.h
+seal/util/gcc.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/gcc.h
+cstddef
+-
+
+/usr/local/include/SEAL-3.6/seal/util/dwthandler.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/util/seal/memorymanager.h
+seal/modulus.h
+/usr/local/include/SEAL-3.6/seal/util/seal/modulus.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+seal/util/iterator.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/iterator.h
+seal/util/pointer.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/pointer.h
+seal/util/uintarithsmallmod.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/uintarithsmallmod.h
+seal/util/uintcore.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/uintcore.h
+stdexcept
+-
+
+/usr/local/include/SEAL-3.6/seal/util/galois.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/util/seal/memorymanager.h
+seal/modulus.h
+/usr/local/include/SEAL-3.6/seal/util/seal/modulus.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+seal/util/iterator.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/iterator.h
+seal/util/pointer.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/pointer.h
+cstddef
+-
+cstdint
+-
+stdexcept
+-
+
+/usr/local/include/SEAL-3.6/seal/util/gcc.h
+seal/util/config.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/config.h
+arm_neon.h
+-
+x86intrin.h
+-
+
+/usr/local/include/SEAL-3.6/seal/util/globals.h
+seal/util/hestdparms.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/hestdparms.h
+cstddef
+-
+map
+-
+memory
+-
+vector
+-
+
+/usr/local/include/SEAL-3.6/seal/util/hash.h
+seal/util/blake2.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/blake2.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/common.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+array
+-
+cstddef
+-
+cstdint
+-
+
+/usr/local/include/SEAL-3.6/seal/util/hestdparms.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+cstddef
+-
+
+/usr/local/include/SEAL-3.6/seal/util/iterator.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/common.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+seal/util/pointer.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/pointer.h
+algorithm
+-
+cstddef
+-
+cstdint
+-
+iostream
+-
+iterator
+-
+stdexcept
+-
+tuple
+-
+type_traits
+-
+utility
+-
+vector
+-
+
+/usr/local/include/SEAL-3.6/seal/util/locks.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+shared_mutex
+-
+atomic
+-
+utility
+-
+
+/usr/local/include/SEAL-3.6/seal/util/mempool.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/common.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+seal/util/globals.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/globals.h
+seal/util/locks.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/locks.h
+algorithm
+-
+atomic
+-
+cstdint
+-
+cstring
+-
+limits
+-
+memory
+-
+new
+-
+stdexcept
+-
+type_traits
+-
+vector
+-
+
+/usr/local/include/SEAL-3.6/seal/util/msvc.h
+seal/util/config.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/config.h
+intrin.h
+-
+
+/usr/local/include/SEAL-3.6/seal/util/ntt.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/util/seal/memorymanager.h
+seal/modulus.h
+/usr/local/include/SEAL-3.6/seal/util/seal/modulus.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+seal/util/dwthandler.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/dwthandler.h
+seal/util/iterator.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/iterator.h
+seal/util/pointer.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/pointer.h
+seal/util/uintarithsmallmod.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/uintarithsmallmod.h
+seal/util/uintcore.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/uintcore.h
+stdexcept
+-
+
+/usr/local/include/SEAL-3.6/seal/util/numth.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/util/seal/memorymanager.h
+seal/modulus.h
+/usr/local/include/SEAL-3.6/seal/util/seal/modulus.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/common.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+seal/util/pointer.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/pointer.h
+cmath
+-
+cstddef
+-
+cstdint
+-
+stdexcept
+-
+tuple
+-
+vector
+-
+
+/usr/local/include/SEAL-3.6/seal/util/pointer.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/common.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+seal/util/mempool.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/mempool.h
+iterator
+-
+memory
+-
+type_traits
+-
+utility
+-
+
+/usr/local/include/SEAL-3.6/seal/util/polyarithsmallmod.h
+seal/modulus.h
+/usr/local/include/SEAL-3.6/seal/util/seal/modulus.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/common.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+seal/util/iterator.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/iterator.h
+seal/util/pointer.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/pointer.h
+seal/util/polycore.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/polycore.h
+seal/util/uintarithsmallmod.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/uintarithsmallmod.h
+algorithm
+-
+cstdint
+-
+stdexcept
+-
+
+/usr/local/include/SEAL-3.6/seal/util/polycore.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/common.h
+seal/util/pointer.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/pointer.h
+seal/util/uintcore.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/uintcore.h
+algorithm
+-
+cstdint
+-
+cstring
+-
+limits
+-
+sstream
+-
+stdexcept
+-
+
+/usr/local/include/SEAL-3.6/seal/util/rns.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/util/seal/memorymanager.h
+seal/modulus.h
+/usr/local/include/SEAL-3.6/seal/util/seal/modulus.h
+seal/util/iterator.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/iterator.h
+seal/util/ntt.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/ntt.h
+seal/util/pointer.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/pointer.h
+seal/util/uintarithsmallmod.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/uintarithsmallmod.h
+cstddef
+-
+cstdint
+-
+functional
+-
+stdexcept
+-
+vector
+-
+
+/usr/local/include/SEAL-3.6/seal/util/streambuf.h
+seal/dynarray.h
+/usr/local/include/SEAL-3.6/seal/util/seal/dynarray.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+cstddef
+-
+ios
+-
+streambuf
+-
+
+/usr/local/include/SEAL-3.6/seal/util/uintarith.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/common.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+seal/util/pointer.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/pointer.h
+seal/util/uintcore.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/uintcore.h
+algorithm
+-
+cstdint
+-
+functional
+-
+stdexcept
+-
+type_traits
+-
+
+/usr/local/include/SEAL-3.6/seal/util/uintarithsmallmod.h
+seal/modulus.h
+/usr/local/include/SEAL-3.6/seal/util/seal/modulus.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+seal/util/numth.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/numth.h
+seal/util/pointer.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/pointer.h
+seal/util/uintarith.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/uintarith.h
+cstdint
+-
+type_traits
+-
+
+/usr/local/include/SEAL-3.6/seal/util/uintcore.h
+seal/util/common.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/common.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+seal/util/pointer.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/pointer.h
+algorithm
+-
+cstdint
+-
+cstring
+-
+limits
+-
+stdexcept
+-
+
+/usr/local/include/SEAL-3.6/seal/util/ztools.h
+seal/dynarray.h
+/usr/local/include/SEAL-3.6/seal/util/seal/dynarray.h
+seal/memorymanager.h
+/usr/local/include/SEAL-3.6/seal/util/seal/memorymanager.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/util/seal/util/defines.h
+ios
+-
+iostream
+-
+
+/usr/local/include/SEAL-3.6/seal/valcheck.h
+seal/context.h
+/usr/local/include/SEAL-3.6/seal/seal/context.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+
+/usr/local/include/SEAL-3.6/seal/version.h
+seal/util/defines.h
+/usr/local/include/SEAL-3.6/seal/seal/util/defines.h
+cstdint
+-
+
+src/pir.hpp
+seal/seal.h
+src/seal/seal.h
+seal/util/polyarithsmallmod.h
+src/seal/util/polyarithsmallmod.h
+cassert
+-
+cmath
+-
+string
+-
+vector
+-
+
+src/pir_client.hpp
+pir.hpp
+src/pir.hpp
+memory
+-
+vector
+-
+
+src/pir_server.hpp
+pir.hpp
+src/pir.hpp
+map
+-
+memory
+-
+vector
+-
+pir_client.hpp
+src/pir_client.hpp
+

+ 23 - 0
test/CMakeFiles/simple_query_test.dir/DependInfo.cmake

@@ -0,0 +1,23 @@
+# The set of languages for which implicit dependencies are needed:
+set(CMAKE_DEPENDS_LANGUAGES
+  "CXX"
+  )
+# The set of files for implicit dependencies of each language:
+set(CMAKE_DEPENDS_CHECK_CXX
+  "/home/andrew/Documents/Research/AC-PIR/SealPIR/test/simple_query_test.cpp" "/home/andrew/Documents/Research/AC-PIR/SealPIR/test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o"
+  )
+set(CMAKE_CXX_COMPILER_ID "GNU")
+
+# The include file search paths:
+set(CMAKE_CXX_TARGET_INCLUDE_PATH
+  "src"
+  "/usr/local/include/SEAL-3.6"
+  )
+
+# Targets to which this target links.
+set(CMAKE_TARGET_LINKED_INFO_FILES
+  "/home/andrew/Documents/Research/AC-PIR/SealPIR/src/CMakeFiles/sealpir.dir/DependInfo.cmake"
+  )
+
+# Fortran module output directory.
+set(CMAKE_Fortran_TARGET_MODULE_DIR "")

+ 100 - 0
test/CMakeFiles/simple_query_test.dir/build.make

@@ -0,0 +1,100 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.16
+
+# Delete rule output on recipe failure.
+.DELETE_ON_ERROR:
+
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/bin/cmake
+
+# The command to remove a file.
+RM = /usr/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /home/andrew/Documents/Research/AC-PIR/SealPIR
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /home/andrew/Documents/Research/AC-PIR/SealPIR
+
+# Include any dependencies generated for this target.
+include test/CMakeFiles/simple_query_test.dir/depend.make
+
+# Include the progress variables for this target.
+include test/CMakeFiles/simple_query_test.dir/progress.make
+
+# Include the compile flags for this target's objects.
+include test/CMakeFiles/simple_query_test.dir/flags.make
+
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: test/CMakeFiles/simple_query_test.dir/flags.make
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: test/simple_query_test.cpp
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/andrew/Documents/Research/AC-PIR/SealPIR/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o"
+	cd /home/andrew/Documents/Research/AC-PIR/SealPIR/test && /usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o -c /home/andrew/Documents/Research/AC-PIR/SealPIR/test/simple_query_test.cpp
+
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.i: cmake_force
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/simple_query_test.dir/simple_query_test.cpp.i"
+	cd /home/andrew/Documents/Research/AC-PIR/SealPIR/test && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/andrew/Documents/Research/AC-PIR/SealPIR/test/simple_query_test.cpp > CMakeFiles/simple_query_test.dir/simple_query_test.cpp.i
+
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.s: cmake_force
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/simple_query_test.dir/simple_query_test.cpp.s"
+	cd /home/andrew/Documents/Research/AC-PIR/SealPIR/test && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/andrew/Documents/Research/AC-PIR/SealPIR/test/simple_query_test.cpp -o CMakeFiles/simple_query_test.dir/simple_query_test.cpp.s
+
+# Object files for target simple_query_test
+simple_query_test_OBJECTS = \
+"CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o"
+
+# External object files for target simple_query_test
+simple_query_test_EXTERNAL_OBJECTS =
+
+bin/simple_query_test: test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o
+bin/simple_query_test: test/CMakeFiles/simple_query_test.dir/build.make
+bin/simple_query_test: src/libsealpir.a
+bin/simple_query_test: /usr/local/lib/libseal-3.6.a
+bin/simple_query_test: test/CMakeFiles/simple_query_test.dir/link.txt
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/andrew/Documents/Research/AC-PIR/SealPIR/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable ../bin/simple_query_test"
+	cd /home/andrew/Documents/Research/AC-PIR/SealPIR/test && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/simple_query_test.dir/link.txt --verbose=$(VERBOSE)
+
+# Rule to build all files generated by this target.
+test/CMakeFiles/simple_query_test.dir/build: bin/simple_query_test
+
+.PHONY : test/CMakeFiles/simple_query_test.dir/build
+
+test/CMakeFiles/simple_query_test.dir/clean:
+	cd /home/andrew/Documents/Research/AC-PIR/SealPIR/test && $(CMAKE_COMMAND) -P CMakeFiles/simple_query_test.dir/cmake_clean.cmake
+.PHONY : test/CMakeFiles/simple_query_test.dir/clean
+
+test/CMakeFiles/simple_query_test.dir/depend:
+	cd /home/andrew/Documents/Research/AC-PIR/SealPIR && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/andrew/Documents/Research/AC-PIR/SealPIR /home/andrew/Documents/Research/AC-PIR/SealPIR/test /home/andrew/Documents/Research/AC-PIR/SealPIR /home/andrew/Documents/Research/AC-PIR/SealPIR/test /home/andrew/Documents/Research/AC-PIR/SealPIR/test/CMakeFiles/simple_query_test.dir/DependInfo.cmake --color=$(COLOR)
+.PHONY : test/CMakeFiles/simple_query_test.dir/depend
+

+ 10 - 0
test/CMakeFiles/simple_query_test.dir/cmake_clean.cmake

@@ -0,0 +1,10 @@
+file(REMOVE_RECURSE
+  "../bin/simple_query_test"
+  "../bin/simple_query_test.pdb"
+  "CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o"
+)
+
+# Per-language clean rules from dependency scanning.
+foreach(lang CXX)
+  include(CMakeFiles/simple_query_test.dir/cmake_clean_${lang}.cmake OPTIONAL)
+endforeach()

+ 63 - 0
test/CMakeFiles/simple_query_test.dir/depend.internal

@@ -0,0 +1,63 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.16
+
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o
+ /home/andrew/Documents/Research/AC-PIR/SealPIR/test/simple_query_test.cpp
+ /usr/local/include/SEAL-3.6/gsl/gsl_assert
+ /usr/local/include/SEAL-3.6/gsl/gsl_byte
+ /usr/local/include/SEAL-3.6/gsl/span
+ /usr/local/include/SEAL-3.6/seal/batchencoder.h
+ /usr/local/include/SEAL-3.6/seal/ciphertext.h
+ /usr/local/include/SEAL-3.6/seal/ckks.h
+ /usr/local/include/SEAL-3.6/seal/context.h
+ /usr/local/include/SEAL-3.6/seal/decryptor.h
+ /usr/local/include/SEAL-3.6/seal/dynarray.h
+ /usr/local/include/SEAL-3.6/seal/encryptionparams.h
+ /usr/local/include/SEAL-3.6/seal/encryptor.h
+ /usr/local/include/SEAL-3.6/seal/evaluator.h
+ /usr/local/include/SEAL-3.6/seal/galoiskeys.h
+ /usr/local/include/SEAL-3.6/seal/keygenerator.h
+ /usr/local/include/SEAL-3.6/seal/kswitchkeys.h
+ /usr/local/include/SEAL-3.6/seal/memorymanager.h
+ /usr/local/include/SEAL-3.6/seal/modulus.h
+ /usr/local/include/SEAL-3.6/seal/plaintext.h
+ /usr/local/include/SEAL-3.6/seal/publickey.h
+ /usr/local/include/SEAL-3.6/seal/randomgen.h
+ /usr/local/include/SEAL-3.6/seal/randomtostd.h
+ /usr/local/include/SEAL-3.6/seal/relinkeys.h
+ /usr/local/include/SEAL-3.6/seal/seal.h
+ /usr/local/include/SEAL-3.6/seal/secretkey.h
+ /usr/local/include/SEAL-3.6/seal/serializable.h
+ /usr/local/include/SEAL-3.6/seal/serialization.h
+ /usr/local/include/SEAL-3.6/seal/util/blake2.h
+ /usr/local/include/SEAL-3.6/seal/util/clang.h
+ /usr/local/include/SEAL-3.6/seal/util/common.h
+ /usr/local/include/SEAL-3.6/seal/util/config.h
+ /usr/local/include/SEAL-3.6/seal/util/croots.h
+ /usr/local/include/SEAL-3.6/seal/util/defines.h
+ /usr/local/include/SEAL-3.6/seal/util/dwthandler.h
+ /usr/local/include/SEAL-3.6/seal/util/galois.h
+ /usr/local/include/SEAL-3.6/seal/util/gcc.h
+ /usr/local/include/SEAL-3.6/seal/util/globals.h
+ /usr/local/include/SEAL-3.6/seal/util/hash.h
+ /usr/local/include/SEAL-3.6/seal/util/hestdparms.h
+ /usr/local/include/SEAL-3.6/seal/util/iterator.h
+ /usr/local/include/SEAL-3.6/seal/util/locks.h
+ /usr/local/include/SEAL-3.6/seal/util/mempool.h
+ /usr/local/include/SEAL-3.6/seal/util/msvc.h
+ /usr/local/include/SEAL-3.6/seal/util/ntt.h
+ /usr/local/include/SEAL-3.6/seal/util/numth.h
+ /usr/local/include/SEAL-3.6/seal/util/pointer.h
+ /usr/local/include/SEAL-3.6/seal/util/polyarithsmallmod.h
+ /usr/local/include/SEAL-3.6/seal/util/polycore.h
+ /usr/local/include/SEAL-3.6/seal/util/rns.h
+ /usr/local/include/SEAL-3.6/seal/util/streambuf.h
+ /usr/local/include/SEAL-3.6/seal/util/uintarith.h
+ /usr/local/include/SEAL-3.6/seal/util/uintarithsmallmod.h
+ /usr/local/include/SEAL-3.6/seal/util/uintcore.h
+ /usr/local/include/SEAL-3.6/seal/util/ztools.h
+ /usr/local/include/SEAL-3.6/seal/valcheck.h
+ /usr/local/include/SEAL-3.6/seal/version.h
+ src/pir.hpp
+ src/pir_client.hpp
+ src/pir_server.hpp

+ 63 - 0
test/CMakeFiles/simple_query_test.dir/depend.make

@@ -0,0 +1,63 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.16
+
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: test/simple_query_test.cpp
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/gsl/gsl_assert
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/gsl/gsl_byte
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/gsl/span
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/batchencoder.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/ciphertext.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/ckks.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/context.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/decryptor.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/dynarray.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/encryptionparams.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/encryptor.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/evaluator.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/galoiskeys.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/keygenerator.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/kswitchkeys.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/memorymanager.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/modulus.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/plaintext.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/publickey.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/randomgen.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/randomtostd.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/relinkeys.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/seal.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/secretkey.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/serializable.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/serialization.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/blake2.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/clang.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/common.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/config.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/croots.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/defines.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/dwthandler.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/galois.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/gcc.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/globals.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/hash.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/hestdparms.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/iterator.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/locks.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/mempool.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/msvc.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/ntt.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/numth.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/pointer.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/polyarithsmallmod.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/polycore.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/rns.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/streambuf.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/uintarith.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/uintarithsmallmod.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/uintcore.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/util/ztools.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/valcheck.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: /usr/local/include/SEAL-3.6/seal/version.h
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: src/pir.hpp
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: src/pir_client.hpp
+test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o: src/pir_server.hpp
+

+ 10 - 0
test/CMakeFiles/simple_query_test.dir/flags.make

@@ -0,0 +1,10 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.16
+
+# compile CXX with /usr/bin/c++
+CXX_FLAGS =   -pthread -std=gnu++17
+
+CXX_DEFINES = 
+
+CXX_INCLUDES = -I/home/andrew/Documents/Research/AC-PIR/SealPIR/src -isystem /usr/local/include/SEAL-3.6 
+

+ 1 - 0
test/CMakeFiles/simple_query_test.dir/link.txt

@@ -0,0 +1 @@
+/usr/bin/c++     CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o  -o ../bin/simple_query_test  ../src/libsealpir.a /usr/local/lib/libseal-3.6.a -pthread 

+ 3 - 0
test/CMakeFiles/simple_query_test.dir/progress.make

@@ -0,0 +1,3 @@
+CMAKE_PROGRESS_1 = 11
+CMAKE_PROGRESS_2 = 12
+

BIN
test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o


+ 4 - 0
test/CMakeLists.txt

@@ -7,3 +7,7 @@ add_test(NAME expand_test COMMAND expand_test)
 add_executable(query_test query_test.cpp)
 target_link_libraries(query_test sealpir)
 add_test(NAME query_test COMMAND query_test)
+
+add_executable(simple_query_test simple_query_test.cpp)
+target_link_libraries(simple_query_test sealpir)
+add_test(NAME simple_query_test COMMAND simple_query_test)

+ 2 - 0
test/CTestTestfile.cmake

@@ -8,3 +8,5 @@ add_test(expand_test "/home/andrew/Documents/Research/AC-PIR/SealPIR/bin/expand_
 set_tests_properties(expand_test PROPERTIES  _BACKTRACE_TRIPLES "/home/andrew/Documents/Research/AC-PIR/SealPIR/test/CMakeLists.txt;5;add_test;/home/andrew/Documents/Research/AC-PIR/SealPIR/test/CMakeLists.txt;0;")
 add_test(query_test "/home/andrew/Documents/Research/AC-PIR/SealPIR/bin/query_test")
 set_tests_properties(query_test PROPERTIES  _BACKTRACE_TRIPLES "/home/andrew/Documents/Research/AC-PIR/SealPIR/test/CMakeLists.txt;9;add_test;/home/andrew/Documents/Research/AC-PIR/SealPIR/test/CMakeLists.txt;0;")
+add_test(simple_query_test "/home/andrew/Documents/Research/AC-PIR/SealPIR/bin/simple_query_test")
+set_tests_properties(simple_query_test PROPERTIES  _BACKTRACE_TRIPLES "/home/andrew/Documents/Research/AC-PIR/SealPIR/test/CMakeLists.txt;13;add_test;/home/andrew/Documents/Research/AC-PIR/SealPIR/test/CMakeLists.txt;0;")

+ 58 - 12
test/Makefile

@@ -56,17 +56,6 @@ CMAKE_BINARY_DIR = /home/andrew/Documents/Research/AC-PIR/SealPIR
 #=============================================================================
 # Targets provided globally by CMake.
 
-# Special rule for the target rebuild_cache
-rebuild_cache:
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
-	/usr/bin/cmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
-.PHONY : rebuild_cache
-
-# Special rule for the target rebuild_cache
-rebuild_cache/fast: rebuild_cache
-
-.PHONY : rebuild_cache/fast
-
 # Special rule for the target edit_cache
 edit_cache:
 	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..."
@@ -89,6 +78,17 @@ test/fast: test
 
 .PHONY : test/fast
 
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+	/usr/bin/cmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+
+.PHONY : rebuild_cache/fast
+
 # The main all target
 all: cmake_check_build_system
 	cd /home/andrew/Documents/Research/AC-PIR/SealPIR && $(CMAKE_COMMAND) -E cmake_progress_start /home/andrew/Documents/Research/AC-PIR/SealPIR/CMakeFiles /home/andrew/Documents/Research/AC-PIR/SealPIR/test/CMakeFiles/progress.marks
@@ -121,6 +121,21 @@ depend:
 	cd /home/andrew/Documents/Research/AC-PIR/SealPIR && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
 .PHONY : depend
 
+# Convenience name for target.
+test/CMakeFiles/simple_query_test.dir/rule:
+	cd /home/andrew/Documents/Research/AC-PIR/SealPIR && $(MAKE) -f CMakeFiles/Makefile2 test/CMakeFiles/simple_query_test.dir/rule
+.PHONY : test/CMakeFiles/simple_query_test.dir/rule
+
+# Convenience name for target.
+simple_query_test: test/CMakeFiles/simple_query_test.dir/rule
+
+.PHONY : simple_query_test
+
+# fast build rule for target.
+simple_query_test/fast:
+	cd /home/andrew/Documents/Research/AC-PIR/SealPIR && $(MAKE) -f test/CMakeFiles/simple_query_test.dir/build.make test/CMakeFiles/simple_query_test.dir/build
+.PHONY : simple_query_test/fast
+
 # Convenience name for target.
 test/CMakeFiles/query_test.dir/rule:
 	cd /home/andrew/Documents/Research/AC-PIR/SealPIR && $(MAKE) -f CMakeFiles/Makefile2 test/CMakeFiles/query_test.dir/rule
@@ -205,15 +220,43 @@ query_test.cpp.s:
 	cd /home/andrew/Documents/Research/AC-PIR/SealPIR && $(MAKE) -f test/CMakeFiles/query_test.dir/build.make test/CMakeFiles/query_test.dir/query_test.cpp.s
 .PHONY : query_test.cpp.s
 
+simple_query_test.o: simple_query_test.cpp.o
+
+.PHONY : simple_query_test.o
+
+# target to build an object file
+simple_query_test.cpp.o:
+	cd /home/andrew/Documents/Research/AC-PIR/SealPIR && $(MAKE) -f test/CMakeFiles/simple_query_test.dir/build.make test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.o
+.PHONY : simple_query_test.cpp.o
+
+simple_query_test.i: simple_query_test.cpp.i
+
+.PHONY : simple_query_test.i
+
+# target to preprocess a source file
+simple_query_test.cpp.i:
+	cd /home/andrew/Documents/Research/AC-PIR/SealPIR && $(MAKE) -f test/CMakeFiles/simple_query_test.dir/build.make test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.i
+.PHONY : simple_query_test.cpp.i
+
+simple_query_test.s: simple_query_test.cpp.s
+
+.PHONY : simple_query_test.s
+
+# target to generate assembly for a file
+simple_query_test.cpp.s:
+	cd /home/andrew/Documents/Research/AC-PIR/SealPIR && $(MAKE) -f test/CMakeFiles/simple_query_test.dir/build.make test/CMakeFiles/simple_query_test.dir/simple_query_test.cpp.s
+.PHONY : simple_query_test.cpp.s
+
 # Help Target
 help:
 	@echo "The following are some of the valid targets for this Makefile:"
 	@echo "... all (the default if no target is provided)"
 	@echo "... clean"
 	@echo "... depend"
-	@echo "... rebuild_cache"
 	@echo "... edit_cache"
 	@echo "... test"
+	@echo "... rebuild_cache"
+	@echo "... simple_query_test"
 	@echo "... query_test"
 	@echo "... expand_test"
 	@echo "... expand_test.o"
@@ -222,6 +265,9 @@ help:
 	@echo "... query_test.o"
 	@echo "... query_test.i"
 	@echo "... query_test.s"
+	@echo "... simple_query_test.o"
+	@echo "... simple_query_test.i"
+	@echo "... simple_query_test.s"
 .PHONY : help
 
 

+ 136 - 0
test/simple_query_test.cpp

@@ -0,0 +1,136 @@
+#include "pir.hpp"
+#include "pir_client.hpp"
+#include "pir_server.hpp"
+#include <seal/seal.h>
+#include <chrono>
+#include <memory>
+#include <random>
+#include <cstdint>
+#include <cstddef>
+
+using namespace std::chrono;
+using namespace std;
+using namespace seal;
+
+int simple_query_test(uint64_t num_items, uint64_t item_size, uint32_t degree, uint32_t lt, uint32_t dim);
+
+int main(int argc, char *argv[]) {
+    // Quick check
+    assert(simple_query_test(1 << 10, 288, 4096, 20, 1) == 0);
+
+    // Forces ciphertext expansion to be the same as the degree
+    assert(simple_query_test(1 << 20, 288, 4096, 20, 1) == 0);
+
+    
+    assert(simple_query_test(1 << 20, 288, 4096, 20, 2) == 0);
+}
+
+
+int simple_query_test(uint64_t num_items, uint64_t item_size, uint32_t degree, uint32_t lt, uint32_t dim){
+    uint64_t number_of_items = num_items;
+    uint64_t size_per_item = item_size; // in bytes
+    uint32_t N = degree;
+
+    // Recommended values: (logt, d) = (12, 2) or (8, 1). 
+    uint32_t logt = lt; 
+    uint32_t d = dim;
+
+    EncryptionParameters enc_params(scheme_type::bfv);
+    PirParams pir_params;
+
+    // Generates all parameters
+    
+    cout << "Main: Generating SEAL parameters" << endl;
+    gen_encryption_params(N, logt, enc_params);
+    
+    cout << "Main: Verifying SEAL parameters" << endl;
+    verify_encryption_params(enc_params);
+    cout << "Main: SEAL parameters are good" << endl;
+
+    cout << "Main: Generating PIR parameters" << endl;
+    gen_pir_params(number_of_items, size_per_item, d, enc_params, pir_params);
+    
+    
+    
+    //gen_params(number_of_items, size_per_item, N, logt, d, enc_params, pir_params);
+    print_pir_params(pir_params);
+
+    cout << "Main: Initializing the database (this may take some time) ..." << endl;
+
+    // Create test database
+    auto db(make_unique<uint8_t[]>(number_of_items * size_per_item));
+
+    // Copy of the database. We use this at the end to make sure we retrieved
+    // the correct element.
+    auto db_copy(make_unique<uint8_t[]>(number_of_items * size_per_item));
+
+    random_device rd;
+    for (uint64_t i = 0; i < number_of_items; i++) {
+        for (uint64_t j = 0; j < size_per_item; j++) {
+            uint8_t val = rd() % 256;
+            db.get()[(i * size_per_item) + j] = val;
+            db_copy.get()[(i * size_per_item) + j] = val;
+        }
+    }
+
+    // Initialize PIR Server
+    cout << "Main: Initializing server and client" << endl;
+    PIRServer server(enc_params, pir_params);
+
+    // Initialize PIR client....
+    PIRClient client(enc_params, pir_params);
+    Ciphertext one_ct = client.get_one();
+    
+    // Measure database setup
+    auto time_pre_s = high_resolution_clock::now();
+    server.set_database(move(db), number_of_items, size_per_item);
+    server.preprocess_database();
+    server.set_one_ct(one_ct);
+    cout << "Main: database pre processed " << endl;
+    auto time_pre_e = high_resolution_clock::now();
+    auto time_pre_us = duration_cast<microseconds>(time_pre_e - time_pre_s).count();
+
+
+    // Choose an index of an element in the DB
+    uint64_t ele_index = rd() % number_of_items; // element in DB at random position
+    uint64_t index = client.get_fv_index(ele_index);   // index of FV plaintext
+    uint64_t offset = client.get_fv_offset(ele_index); // offset in FV plaintext
+    cout << "Main: element index = " << ele_index << " from [0, " << number_of_items -1 << "]" << endl;
+    cout << "Main: FV index = " << index << ", FV offset = " << offset << endl; 
+
+    // Measure query processing (including expansion)
+    auto time_server_s = high_resolution_clock::now();
+    Ciphertext reply = server.simple_query(index);
+    auto time_server_e = high_resolution_clock::now();
+    auto time_server_us = duration_cast<microseconds>(time_server_e - time_server_s).count();
+
+    // Measure response extraction
+    auto time_decode_s = chrono::high_resolution_clock::now();
+    vector<uint8_t> elems = client.extract_bytes(client.decrypt(reply), offset);
+    auto time_decode_e = chrono::high_resolution_clock::now();
+    auto time_decode_us = duration_cast<microseconds>(time_decode_e - time_decode_s).count();
+
+    assert(elems.size() == size_per_item);
+
+    bool failed = false;
+    // Check that we retrieved the correct element
+    for (uint32_t i = 0; i < size_per_item; i++) {
+        if (elems[i] != db_copy.get()[(ele_index * size_per_item) + i]) {
+            cout << "Main: elems " << (int)elems[i] << ", db "
+                << (int) db_copy.get()[(ele_index * size_per_item) + i] << endl;
+            cout << "Main: PIR result wrong at " << i <<  endl;
+            failed = true;
+        }
+    }
+    if(failed){
+        return -1;
+    }
+
+    // Output results
+    cout << "Main: PIR result correct!" << endl;
+    cout << "Main: PIRServer pre-processing time: " << time_pre_us / 1000 << " ms" << endl;
+    cout << "Main: PIRServer reply generation time: " << time_server_us / 1000 << " ms" << endl;
+    cout << "Main: PIRClient answer decode time: " << time_decode_us / 1000 << " ms" << endl;
+
+    return 0;
+}