Browse Source

small on/offline separation in retrieve

Boyoung- 9 years ago
parent
commit
9aeeeb160b
1 changed files with 23 additions and 15 deletions
  1. 23 15
      src/protocols/Retrieve.java

+ 23 - 15
src/protocols/Retrieve.java

@@ -88,10 +88,28 @@ public class Retrieve extends Protocol {
 				System.out.println("Test: " + i + " " + j);
 				System.out.println("N=" + BigInteger.valueOf(N).toString(2));
 
-				byte[] Li = new byte[0];
+				System.out.print("Precomputation... ");
+				PreData[] predata = new PreData[numTrees];
+				PreRetrieve preretrieve = new PreRetrieve(con1, con2);
+				for (int ti = 0; ti < numTrees; ti++) {
+					predata[ti] = new PreData();
 
-				PreData prev = null;
+					if (party == Party.Eddie) {
+						preretrieve.runE(predata[ti], md, ti, timer);
+
+					} else if (party == Party.Debbie) {
+						preretrieve.runD(predata[ti], md, ti, ti == 0 ? null : predata[ti - 1], timer);
 
+					} else if (party == Party.Charlie) {
+						preretrieve.runC(predata[ti], md, ti, ti == 0 ? null : predata[ti - 1], timer);
+
+					} else {
+						throw new NoSuchPartyException(party + "");
+					}
+				}
+				System.out.println("done!");
+
+				byte[] Li = new byte[0];
 				for (int ti = 0; ti < numTrees; ti++) {
 					long Ni_value = Util.getSubBits(N, addrBits, addrBits - md.getNBitsOfTree(ti));
 					long Nip1_pr_value = Util.getSubBits(N, addrBits - md.getNBitsOfTree(ti),
@@ -99,12 +117,8 @@ public class Retrieve extends Protocol {
 					byte[] Ni = Util.longToBytes(Ni_value, md.getNBytesOfTree(ti));
 					byte[] Nip1_pr = Util.longToBytes(Nip1_pr_value, (tau + 7) / 8);
 
-					PreData predata = new PreData();
-					PreRetrieve preretrieve = new PreRetrieve(con1, con2);
-
 					if (party == Party.Eddie) {
 						Tree OTi = forest.getTree(ti);
-						preretrieve.runE(predata, md, ti, timer);
 
 						byte[] sE_Ni = Util.nextBytes(Ni.length, Crypto.sr);
 						byte[] sD_Ni = Util.xor(Ni, sE_Ni);
@@ -115,7 +129,7 @@ public class Retrieve extends Protocol {
 						con1.write(sD_Nip1_pr);
 
 						sw.start();
-						runE(predata, OTi, sE_Ni, sE_Nip1_pr, numTrees, timer);
+						runE(predata[ti], OTi, sE_Ni, sE_Nip1_pr, numTrees, timer);
 						sw.stop();
 
 						if (ti == numTrees - 1)
@@ -123,23 +137,19 @@ public class Retrieve extends Protocol {
 
 					} else if (party == Party.Debbie) {
 						Tree OTi = forest.getTree(ti);
-						preretrieve.runD(predata, md, ti, prev, timer);
 
 						byte[] sD_Ni = con1.read();
-
 						byte[] sD_Nip1_pr = con1.read();
 
 						sw.start();
-						runD(predata, OTi, sD_Ni, sD_Nip1_pr, timer);
+						runD(predata[ti], OTi, sD_Ni, sD_Nip1_pr, timer);
 						sw.stop();
 
 					} else if (party == Party.Charlie) {
-						preretrieve.runC(predata, md, ti, prev, timer);
-
 						System.out.println("L" + ti + "=" + new BigInteger(1, Li).toString(2));
 
 						sw.start();
-						OutAccess outaccess = runC(predata, md, ti, Li, numTrees, timer);
+						OutAccess outaccess = runC(predata[ti], md, ti, Li, numTrees, timer);
 						sw.stop();
 
 						Li = outaccess.C_Lip1;
@@ -158,8 +168,6 @@ public class Retrieve extends Protocol {
 					} else {
 						throw new NoSuchPartyException(party + "");
 					}
-
-					prev = predata;
 				}
 			}
 		}