| 
					
				 | 
			
			
				@@ -2,20 +2,21 @@ CONTENTS OF THIS FILE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 --------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * Introduction 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * Setting up the docker 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Setting up the docker and running the experimental scripts 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * Running the code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Important Warning 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 INTRODUCTION 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ------------ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  `/preprocessing` holds code for the 3-Party preprocessing phase 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  `/2p-preprocessing` holds the OT-based code 2-Party preprocessing phase 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- `/duoram-online` holds the code for online phase of the 3-Party Duoram and 2-Party reads 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ `/duoram-online` holds the code for online phase of the 3-Party Duoram and 2-Party writes. For 2-Party writes, switch off the `-ThreeParty` flag in the Makefile 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  `/cpir-read`  includes the code CPIR-based reads 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Setting up the docker 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Setting up the docker and running the experimental scripts 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+---------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 -   `sh build-docker.sh` builds the docker image 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 -   `sh run-docker.sh` launches three docker containers for parties P2, P0, and P1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 -   `sh set-networking.sh` sets up the latencies and bandwidth constraints among the three docker containers launched; pass arguments of latency and bandwidth  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -29,25 +30,38 @@ Setting up the docker 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 -   `sh cleanup.sh` stops the three dockers. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Running the code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+----------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    1.  Prepreprocessing: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    1.  3-Party Prepreprocessing: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Let ip0, ip1, and ip2 be the IP addresses of the three docker containers. Consider a database of size `2^N`. Suppose the goal is to generate `r` DPFs. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         The pre-processing generates DPFs with leaves of 128 bits. We use the first 64-bits for the writes. The remaining 64-bits are used for share conversion (XOR shared-flag vectors to additive shares) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        1.1 `cd duoram/preprocessing` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        1.1 `cd duoram/preprocessing & make` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         1.2 `./p2preprocessing ip1 ip0 N r` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         1.3 `./preprocessing1  ip2 ip0 N r` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         1.4 `./preprocessing0  ip2 ip1 N r` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         This writes the evaluations of DPFs into a file which we use in the online phase. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    2.  Online Phase: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    2.  3-Party Online Phase: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          Let ip0, ip1, and ip2 be the IP addresses of the three docker containers. Consider a database of size `2^N`.   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         2.1 `cd duoram/duoram-online` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         2.1 `cd duoram/duoram-online & make` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          2.2 `./p2      ip1 ip0 N W D I A`  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          2.3 `./duoram1 ip0 ip2 N W D I A` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          2.4 `./duoram0 ip1 ip2 N W D I A` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    3. 2-Party Preprocessing: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Let ip0 and ip1 be the IP addresses of the two docker containers. To generate `W` blinding factors: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        3.1 `cd duoram/2p-preprocessing & make` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        3.2 `./OT ip0 ip1 1 128*W 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        3.3 `./OT ip0 ip1 1 128*W 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        3.4 `./preprocessing1  ip0 N r` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        3.5 `./preprocessing0  ip1 N r` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    4. 2-Party Read: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        4.1 `cd duoram/cpir-read/cxx & make` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        4.2 ./spir_test1 ip0 N threads npreproc queries  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        4.3 ./spir_test0 ip1 N threads npreproc queries  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  Important Warning 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  -------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 This software is for performance testing ONLY! The purpose of this software is to evaluate the performance of the system, NOT to be used in a deployment scenario. 
			 |