Parcourir la source

added load path cheat

Boyoung- il y a 9 ans
Parent
commit
963fb0d963
4 fichiers modifiés avec 40 ajouts et 7 suppressions
  1. 2 0
      src/oram/Metadata.java
  2. 24 4
      src/oram/Tree.java
  3. 10 2
      src/protocols/Protocol.java
  4. 4 1
      src/protocols/Retrieve.java

+ 2 - 0
src/oram/Metadata.java

@@ -49,6 +49,8 @@ public class Metadata {
 
 	private long forestBytes;
 
+	public static boolean cheat = false;
+
 	public Metadata() {
 		setup(configFileName);
 	}

+ 24 - 4
src/oram/Tree.java

@@ -34,6 +34,9 @@ public class Tree implements Serializable {
 
 	private Array64<Bucket> buckets;
 
+	// only for cheat
+	private Bucket[] pathBuckets;
+
 	public Tree(int index, Metadata md, Random rand) {
 		tau = md.getTau();
 		twoTauPow = md.getTwoTauPow();
@@ -55,10 +58,19 @@ public class Tree implements Serializable {
 
 		int fBytes = treeIndex == 0 ? 0 : 1;
 		int[] tupleParams = new int[] { fBytes, nBytes, lBytes, aBytes };
-		buckets = new Array64<Bucket>(numBuckets);
-		buckets.set(0, new Bucket(stashSize, tupleParams, rand));
-		for (int i = 1; i < numBuckets; i++)
-			buckets.set(i, new Bucket(w, tupleParams, rand));
+		if (!Metadata.cheat) {
+			buckets = new Array64<Bucket>(numBuckets);
+			buckets.set(0, new Bucket(stashSize, tupleParams, rand));
+			for (int i = 1; i < numBuckets; i++)
+				buckets.set(i, new Bucket(w, tupleParams, rand));
+		} else {
+			pathBuckets = new Bucket[d];
+			pathBuckets[0] = new Bucket(stashSize, tupleParams, null);
+			for (int i = 1; i < d; i++)
+				pathBuckets[i] = new Bucket(w, tupleParams, null);
+			if (rand != null && treeIndex > 0)
+				pathBuckets[0].getTuple(0).setF(new byte[] { 1 });
+		}
 	}
 
 	// only used for xor operation
@@ -131,6 +143,9 @@ public class Tree implements Serializable {
 	}
 
 	public Bucket[] getBucketsOnPath(BigInteger L) {
+		if (Metadata.cheat)
+			return pathBuckets;
+
 		long[] indices = getBucketIndicesOnPath(L);
 		Bucket[] buckets = new Bucket[indices.length];
 		for (int i = 0; i < indices.length; i++)
@@ -147,6 +162,11 @@ public class Tree implements Serializable {
 	}
 
 	public void setBucketsOnPath(BigInteger L, Bucket[] buckets) {
+		if (Metadata.cheat) {
+			pathBuckets = buckets;
+			return;
+		}
+
 		long[] indices = getBucketIndicesOnPath(L);
 		if (indices.length != buckets.length)
 			throw new LengthNotMatchException(indices.length + " != " + buckets.length);

+ 10 - 2
src/protocols/Protocol.java

@@ -1,6 +1,7 @@
 package protocols;
 
 import communication.Communication;
+import crypto.Crypto;
 import exceptions.NoSuchPartyException;
 import oram.Forest;
 import oram.Metadata;
@@ -51,17 +52,24 @@ public abstract class Protocol {
 		Metadata md = new Metadata(configFile);
 		Forest forest = null;
 
+		Metadata.cheat = true;
+
 		if (party == Party.Eddie) {
-			if (forestFile == null)
+			if (Metadata.cheat)
+				forest = new Forest(md, Crypto.sr);
+			else if (forestFile == null)
 				forest = Forest.readFromFile(md.getDefaultSharesName1());
 			else
 				forest = Forest.readFromFile(forestFile);
 		} else if (party == Party.Debbie) {
-			if (forestFile == null)
+			if (Metadata.cheat)
+				forest = new Forest(md, null);
+			else if (forestFile == null)
 				forest = Forest.readFromFile(md.getDefaultSharesName2());
 			else
 				forest = Forest.readFromFile(forestFile);
 		} else if (party == Party.Charlie) {
+
 		} else {
 			throw new NoSuchPartyException(party.toString());
 		}

+ 4 - 1
src/protocols/Retrieve.java

@@ -112,6 +112,9 @@ public class Retrieve extends Protocol {
 	// for testing correctness
 	@Override
 	public void run(Party party, Metadata md, Forest forest) {
+		if (Metadata.cheat)
+			System.out.println("Cheat Mode is On");
+
 		int records = 6;
 		int repeat = 5;
 		int reset = 1;
@@ -130,7 +133,7 @@ public class Retrieve extends Protocol {
 		System.out.println();
 
 		for (int i = 0; i < records; i++) {
-			long N = Util.nextLong(numInsert, Crypto.sr);
+			long N = Metadata.cheat ? 0 : Util.nextLong(numInsert, Crypto.sr);
 
 			for (int j = 0; j < repeat; j++) {
 				int cycleIndex = i * repeat + j;