Browse Source

reorganized some code

Boyoung- 9 years ago
parent
commit
aa928dd878
38 changed files with 227 additions and 134 deletions
  1. 1 1
      config/config.yaml
  2. 14 13
      src/gc/GCUtil.java
  3. 0 14
      src/measure/P.java
  4. 23 24
      src/oram/Bucket.java
  5. 6 6
      src/oram/Metadata.java
  6. 20 9
      src/oram/Tree.java
  7. 9 3
      src/protocols/Access.java
  8. 4 1
      src/protocols/Eviction.java
  9. 4 1
      src/protocols/PermuteIndex.java
  10. 4 1
      src/protocols/PermuteTarget.java
  11. 8 3
      src/protocols/PostProcessT.java
  12. 3 1
      src/protocols/Protocol.java
  13. 8 3
      src/protocols/Reshuffle.java
  14. 5 1
      src/protocols/Retrieve.java
  15. 7 3
      src/protocols/SSCOT.java
  16. 7 3
      src/protocols/SSIOT.java
  17. 7 4
      src/protocols/SSXOT.java
  18. 4 1
      src/protocols/UpdateRoot.java
  19. 7 4
      src/protocols/precomputation/PreAccess.java
  20. 5 2
      src/protocols/precomputation/PreEviction.java
  21. 5 2
      src/protocols/precomputation/PrePermuteIndex.java
  22. 5 2
      src/protocols/precomputation/PrePermuteTarget.java
  23. 7 4
      src/protocols/precomputation/PrePostProcessT.java
  24. 7 4
      src/protocols/precomputation/PreReshuffle.java
  25. 5 2
      src/protocols/precomputation/PreRetrieve.java
  26. 7 4
      src/protocols/precomputation/PreSSCOT.java
  27. 7 4
      src/protocols/precomputation/PreSSIOT.java
  28. 7 4
      src/protocols/precomputation/PreSSXOT.java
  29. 5 2
      src/protocols/precomputation/PreUpdateRoot.java
  30. 1 1
      src/protocols/struct/OutAccess.java
  31. 1 1
      src/protocols/struct/OutSSCOT.java
  32. 1 1
      src/protocols/struct/OutSSIOT.java
  33. 1 1
      src/protocols/struct/Party.java
  34. 1 1
      src/protocols/struct/PreData.java
  35. 1 0
      src/ui/CLI.java
  36. 1 1
      src/util/M.java
  37. 18 0
      src/util/P.java
  38. 1 2
      src/util/Timer.java

+ 1 - 1
config/config.yaml

@@ -4,4 +4,4 @@ w: 4					# number of tuples in each bucket
 dBytes: 4 				# record D bytes in the last tree
 
 insert: 1000			# number of records to be initially inserted (-1 means insert max number)
-stash: 16				# stash size(temporarily set here)
+stash: 16				# stash size

+ 14 - 13
src/gc/GCUtil.java

@@ -6,6 +6,7 @@ import com.oblivm.backend.gc.GCGenComp;
 import com.oblivm.backend.gc.GCSignal;
 
 import crypto.Crypto;
+import exceptions.LengthNotMatchException;
 import oram.Tuple;
 import util.Util;
 
@@ -40,14 +41,17 @@ public class GCUtil {
 		return out;
 	}
 
-	/*
-	 * public static GCSignal[] selectKeys(GCSignal[][] pairs, byte[] input) {
-	 * BigInteger in = new BigInteger(1, input); GCSignal[] out = new
-	 * GCSignal[pairs.length]; for (int i = 0; i < pairs.length; i++) out[i] =
-	 * pairs[i][in.testBit(pairs.length - 1 - i) ? 1 : 0]; return out; }
-	 */
+	public static GCSignal[] selectKeys(GCSignal[][] pairs, byte[] input) {
+		BigInteger in = new BigInteger(1, input);
+		GCSignal[] out = new GCSignal[pairs.length];
+		for (int i = 0; i < pairs.length; i++)
+			out[i] = pairs[i][in.testBit(pairs.length - 1 - i) ? 1 : 0];
+		return out;
+	}
 
 	public static GCSignal[][] selectLabelKeys(GCSignal[][][] labelPairs, Tuple[] tuples) {
+		if (tuples.length != labelPairs.length)
+			throw new LengthNotMatchException(tuples.length + " != " + labelPairs.length);
 		GCSignal[][] out = new GCSignal[tuples.length][];
 		for (int i = 0; i < tuples.length; i++)
 			out[i] = revSelectKeys(labelPairs[i], tuples[i].getL());
@@ -55,6 +59,8 @@ public class GCUtil {
 	}
 
 	public static GCSignal[] selectFeKeys(GCSignal[][] pairs, Tuple[] tuples) {
+		if (tuples.length != pairs.length)
+			throw new LengthNotMatchException(tuples.length + " != " + pairs.length);
 		GCSignal[] out = new GCSignal[pairs.length];
 		for (int i = 0; i < pairs.length; i++)
 			out[i] = pairs[i][new BigInteger(tuples[i].getF()).testBit(0) ? 1 : 0];
@@ -70,6 +76,8 @@ public class GCUtil {
 	}
 
 	public static BigInteger evaOutKeys(GCSignal[] outKeys, BigInteger[] genHashes) {
+		if (outKeys.length != genHashes.length)
+			throw new LengthNotMatchException(outKeys.length + " != " + genHashes.length);
 		BigInteger[] evaHashes = genOutKeyHashes(outKeys);
 		BigInteger output = BigInteger.ZERO;
 		for (int i = 0; i < outKeys.length; i++) {
@@ -92,13 +100,6 @@ public class GCUtil {
 		return pairs;
 	}
 
-	public static byte[] xorAll(GCSignal[] keys) {
-		byte[] out = keys[0].bytes.clone();
-		for (int i = 1; i < keys.length; i++)
-			Util.setXor(out, keys[i].bytes);
-		return out;
-	}
-
 	public static byte[] hashAll(GCSignal[] keys) {
 		for (int i = 0; i < keys.length; i++)
 			Crypto.sha1.update(keys[i].bytes);

+ 0 - 14
src/measure/P.java

@@ -1,14 +0,0 @@
-package measure;
-
-public class P {
-	public static final int size = 6;
-
-	public static final int ACC = 0;
-	public static final int COT = 1;
-	public static final int IOT = 2;
-	public static final int PPT = 3;
-	public static final int RSF = 4;
-	public static final int XOT = 5;
-
-	public static final String[] names = { "ACC", "COT", "IOT", "PPT", "RSF", "XOT" };
-}

+ 23 - 24
src/oram/Bucket.java

@@ -53,11 +53,6 @@ public class Bucket implements Serializable {
 		return tuples;
 	}
 
-	public void setTuples(Tuple[] tuples) {
-		// TODO: add checks
-		this.tuples = tuples;
-	}
-
 	public Tuple getTuple(int i) {
 		return tuples[i];
 	}
@@ -92,24 +87,6 @@ public class Bucket implements Serializable {
 		return numBytes == b.getNumBytes();
 	}
 
-	public byte[] toByteArray() {
-		int tupleBytes = tuples[0].getNumBytes();
-		byte[] bucket = new byte[numBytes];
-		for (int i = 0; i < tuples.length; i++) {
-			byte[] tuple = tuples[i].toByteArray();
-			System.arraycopy(tuple, 0, bucket, i * tupleBytes, tupleBytes);
-		}
-		return bucket;
-	}
-
-	@Override
-	public String toString() {
-		String str = "Bucket:";
-		for (int i = 0; i < tuples.length; i++)
-			str += ("\n  " + tuples[i]);
-		return str;
-	}
-
 	public static Tuple[] bucketsToTuples(Bucket[] buckets) {
 		int numTuples = 0;
 		for (int i = 0; i < buckets.length; i++)
@@ -136,15 +113,19 @@ public class Bucket implements Serializable {
 			int end = i == 0 ? sw : start + w;
 			buckets[i] = new Bucket(Arrays.copyOfRange(tuples, start, end));
 		}
+
 		return buckets;
 	}
 
 	public void expand(Tuple[] ts) {
-		// TODO: add check
+		if (!tuples[0].sameLength(ts[0]))
+			throw new LengthNotMatchException(tuples[0].getNumBytes() + " != " + ts[0].getNumBytes());
+
 		tuples = ArrayUtils.addAll(tuples, ts);
 		numBytes = tuples.length * tuples[0].getNumBytes();
 	}
 
+	// append empty random content tuples
 	public void expand(int numTuples) {
 		if (tuples.length >= numTuples)
 			return;
@@ -171,4 +152,22 @@ public class Bucket implements Serializable {
 		tuples = Arrays.copyOfRange(tuples, 0, numTuples);
 		numBytes = tuples.length * tuples[0].getNumBytes();
 	}
+
+	public byte[] toByteArray() {
+		int tupleBytes = tuples[0].getNumBytes();
+		byte[] bucket = new byte[numBytes];
+		for (int i = 0; i < tuples.length; i++) {
+			byte[] tuple = tuples[i].toByteArray();
+			System.arraycopy(tuple, 0, bucket, i * tupleBytes, tupleBytes);
+		}
+		return bucket;
+	}
+
+	@Override
+	public String toString() {
+		String str = "Bucket:";
+		for (int i = 0; i < tuples.length; i++)
+			str += ("\n  " + tuples[i]);
+		return str;
+	}
 }

+ 6 - 6
src/oram/Metadata.java

@@ -28,7 +28,7 @@ public class Metadata {
 	private int addrBits;
 	private int w;
 	private int dBytes;
-	private int tempStashSize;
+	private int stashSize;
 	private int numTrees;
 	private long maxNumRecords;
 	private long numInsertRecords;
@@ -73,7 +73,7 @@ public class Metadata {
 		w = Integer.parseInt(configMap.get(W).toString());
 		dBytes = Integer.parseInt(configMap.get(DBYTES).toString());
 		numInsertRecords = Long.parseLong(configMap.get(INSERT).toString(), 10);
-		tempStashSize = Integer.parseInt(configMap.get(STASH).toString());
+		stashSize = Integer.parseInt(configMap.get(STASH).toString());
 
 		init();
 		setDefaultForestFileName();
@@ -128,7 +128,7 @@ public class Metadata {
 				treeBytes[i] = tupleBytes[i];
 			} else {
 				tupleBytes[i] = 1 + nBytes[i] + lBytes[i] + aBytes[i];
-				stashSizes[i] = tempStashSize;
+				stashSizes[i] = stashSize;
 				treeBytes[i] = ((numBuckets[i] - 1) * w + stashSizes[i]) * tupleBytes[i];
 			}
 
@@ -184,7 +184,7 @@ public class Metadata {
 		configMap.put(W, "" + w);
 		configMap.put(DBYTES, "" + dBytes);
 		configMap.put(INSERT, "" + numInsertRecords);
-		configMap.put(STASH, "" + tempStashSize);
+		configMap.put(STASH, "" + stashSize);
 
 		yaml.dump(configMap, writer);
 	}
@@ -200,7 +200,7 @@ public class Metadata {
 		defaultForestFileName += "w" + w;
 		defaultForestFileName += "d" + dBytes;
 		defaultForestFileName += "_i" + numInsertRecords;
-		defaultForestFileName += "s" + tempStashSize;
+		defaultForestFileName += "s" + stashSize;
 		defaultForestFileName += ".bin";
 	}
 
@@ -237,7 +237,7 @@ public class Metadata {
 	}
 
 	public int getTempStashSize() {
-		return tempStashSize;
+		return stashSize;
 	}
 
 	public int getNumTrees() {

+ 20 - 9
src/oram/Tree.java

@@ -115,19 +115,14 @@ public class Tree implements Serializable {
 		return numBytes == t.getNumBytes();
 	}
 
-	private long[] getBucketIndicesOnPath(long L) {
+	private long[] getBucketIndicesOnPath(BigInteger L) {
 		if (treeIndex == 0)
 			return new long[] { 0 };
 
-		// if (L < 0 || L > numBuckets / 2)
-		// throw new
-		// InvalidPathLabelException(BigInteger.valueOf(L).toString(2));
 		L = Util.getSubBits(L, lBits, 0);
-
-		BigInteger biL = BigInteger.valueOf(L);
 		long[] indices = new long[d];
 		for (int i = 1; i < d; i++) {
-			if (biL.testBit(d - i - 1))
+			if (L.testBit(d - i - 1))
 				indices[i] = indices[i - 1] * 2 + 2;
 			else
 				indices[i] = indices[i - 1] * 2 + 1;
@@ -135,7 +130,7 @@ public class Tree implements Serializable {
 		return indices;
 	}
 
-	public Bucket[] getBucketsOnPath(long L) {
+	public Bucket[] getBucketsOnPath(BigInteger L) {
 		long[] indices = getBucketIndicesOnPath(L);
 		Bucket[] buckets = new Bucket[indices.length];
 		for (int i = 0; i < indices.length; i++)
@@ -143,7 +138,15 @@ public class Tree implements Serializable {
 		return buckets;
 	}
 
-	public void setBucketsOnPath(long L, Bucket[] buckets) {
+	public Bucket[] getBucketsOnPath(byte[] L) {
+		return getBucketsOnPath(new BigInteger(1, L));
+	}
+
+	public Bucket[] getBucketsOnPath(long L) {
+		return getBucketsOnPath(BigInteger.valueOf(L));
+	}
+
+	public void setBucketsOnPath(BigInteger L, Bucket[] buckets) {
 		long[] indices = getBucketIndicesOnPath(L);
 		if (indices.length != buckets.length)
 			throw new LengthNotMatchException(indices.length + " != " + buckets.length);
@@ -151,6 +154,14 @@ public class Tree implements Serializable {
 			setBucket(indices[i], buckets[i]);
 	}
 
+	public void setBucketsOnPath(byte[] L, Bucket[] buckets) {
+		setBucketsOnPath(new BigInteger(1, L), buckets);
+	}
+
+	public void setBucketsOnPath(long L, Bucket[] buckets) {
+		setBucketsOnPath(BigInteger.valueOf(L), buckets);
+	}
+
 	public int getTau() {
 		return tau;
 	}

+ 9 - 3
src/protocols/Access.java

@@ -9,15 +9,21 @@ import communication.Communication;
 import crypto.Crypto;
 import exceptions.AccessException;
 import exceptions.NoSuchPartyException;
-import measure.M;
-import measure.P;
-import measure.Timer;
 import oram.Bucket;
 import oram.Forest;
 import oram.Metadata;
 import oram.Tree;
 import oram.Tuple;
+import protocols.precomputation.PreAccess;
+import protocols.struct.OutAccess;
+import protocols.struct.OutSSCOT;
+import protocols.struct.OutSSIOT;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.M;
+import util.P;
 import util.StopWatch;
+import util.Timer;
 import util.Util;
 
 public class Access extends Protocol {

+ 4 - 1
src/protocols/Eviction.java

@@ -9,12 +9,15 @@ import communication.Communication;
 import crypto.Crypto;
 import exceptions.NoSuchPartyException;
 import gc.GCUtil;
-import measure.Timer;
 import oram.Bucket;
 import oram.Forest;
 import oram.Metadata;
 import oram.Tree;
 import oram.Tuple;
+import protocols.precomputation.PreEviction;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.Timer;
 import util.Util;
 
 public class Eviction extends Protocol {

+ 4 - 1
src/protocols/PermuteIndex.java

@@ -5,9 +5,12 @@ import java.math.BigInteger;
 import communication.Communication;
 import crypto.Crypto;
 import exceptions.NoSuchPartyException;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
+import protocols.precomputation.PrePermuteIndex;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.Timer;
 import util.Util;
 
 public class PermuteIndex extends Protocol {

+ 4 - 1
src/protocols/PermuteTarget.java

@@ -8,9 +8,12 @@ import communication.Communication;
 import crypto.Crypto;
 import exceptions.NoSuchPartyException;
 import gc.GCUtil;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
+import protocols.precomputation.PrePermuteTarget;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.Timer;
 import util.Util;
 
 public class PermuteTarget extends Protocol {

+ 8 - 3
src/protocols/PostProcessT.java

@@ -6,13 +6,18 @@ import communication.Communication;
 import crypto.Crypto;
 import exceptions.AccessException;
 import exceptions.NoSuchPartyException;
-import measure.M;
-import measure.P;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
 import oram.Tree;
 import oram.Tuple;
+import protocols.precomputation.PreAccess;
+import protocols.precomputation.PrePostProcessT;
+import protocols.struct.OutAccess;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.M;
+import util.P;
+import util.Timer;
 import util.Util;
 
 public class PostProcessT extends Protocol {

+ 3 - 1
src/protocols/Protocol.java

@@ -4,9 +4,11 @@ import communication.Communication;
 import exceptions.NoSuchPartyException;
 import oram.Forest;
 import oram.Metadata;
+import protocols.struct.Party;
 
 public abstract class Protocol {
-	Communication con1, con2;
+	protected Communication con1;
+	protected Communication con2;
 
 	/*
 	 * Connections are alphabetized so:

+ 8 - 3
src/protocols/Reshuffle.java

@@ -6,13 +6,18 @@ import communication.Communication;
 import crypto.Crypto;
 import exceptions.AccessException;
 import exceptions.NoSuchPartyException;
-import measure.M;
-import measure.P;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
 import oram.Tree;
 import oram.Tuple;
+import protocols.precomputation.PreAccess;
+import protocols.precomputation.PreReshuffle;
+import protocols.struct.OutAccess;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.M;
+import util.P;
+import util.Timer;
 import util.Util;
 
 public class Reshuffle extends Protocol {

+ 5 - 1
src/protocols/Retrieve.java

@@ -7,12 +7,16 @@ import communication.Communication;
 import crypto.Crypto;
 import exceptions.AccessException;
 import exceptions.NoSuchPartyException;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
 import oram.Tree;
 import oram.Tuple;
+import protocols.precomputation.PreRetrieve;
+import protocols.struct.OutAccess;
+import protocols.struct.Party;
+import protocols.struct.PreData;
 import util.StopWatch;
+import util.Timer;
 import util.Util;
 
 public class Retrieve extends Protocol {

+ 7 - 3
src/protocols/SSCOT.java

@@ -5,11 +5,15 @@ import crypto.Crypto;
 import crypto.PRG;
 import exceptions.NoSuchPartyException;
 import exceptions.SSCOTException;
-import measure.M;
-import measure.P;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
+import protocols.precomputation.PreSSCOT;
+import protocols.struct.OutSSCOT;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.M;
+import util.P;
+import util.Timer;
 import util.Util;
 
 public class SSCOT extends Protocol {

+ 7 - 3
src/protocols/SSIOT.java

@@ -5,11 +5,15 @@ import crypto.Crypto;
 import crypto.PRG;
 import exceptions.NoSuchPartyException;
 import exceptions.SSIOTException;
-import measure.M;
-import measure.P;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
+import protocols.precomputation.PreSSIOT;
+import protocols.struct.OutSSIOT;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.M;
+import util.P;
+import util.Timer;
 import util.Util;
 
 public class SSIOT extends Protocol {

+ 7 - 4
src/protocols/SSXOT.java

@@ -5,11 +5,14 @@ import java.math.BigInteger;
 import communication.Communication;
 import crypto.Crypto;
 import exceptions.NoSuchPartyException;
-import measure.M;
-import measure.P;
-import measure.Timer;
 import oram.Metadata;
 import oram.Tuple;
+import protocols.precomputation.PreSSXOT;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.M;
+import util.P;
+import util.Timer;
 import util.Util;
 
 public class SSXOT extends Protocol {
@@ -112,7 +115,7 @@ public class SSXOT extends Protocol {
 
 	// for testing correctness
 	@Override
-	public void run(protocols.Party party, Metadata md, oram.Forest forest) {
+	public void run(protocols.struct.Party party, Metadata md, oram.Forest forest) {
 		Timer timer = new Timer();
 
 		for (int j = 0; j < 100; j++) {

+ 4 - 1
src/protocols/UpdateRoot.java

@@ -10,10 +10,13 @@ import communication.Communication;
 import crypto.Crypto;
 import exceptions.NoSuchPartyException;
 import gc.GCUtil;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
 import oram.Tuple;
+import protocols.precomputation.PreUpdateRoot;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.Timer;
 import util.Util;
 
 public class UpdateRoot extends Protocol {

+ 7 - 4
src/protocols/PreAccess.java → src/protocols/precomputation/PreAccess.java

@@ -1,13 +1,16 @@
-package protocols;
+package protocols.precomputation;
 
 import communication.Communication;
 import crypto.Crypto;
-import measure.M;
-import measure.P;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
 import oram.Tuple;
+import protocols.Protocol;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.M;
+import util.P;
+import util.Timer;
 import util.Util;
 
 public class PreAccess extends Protocol {

+ 5 - 2
src/protocols/PreEviction.java → src/protocols/precomputation/PreEviction.java

@@ -1,4 +1,4 @@
-package protocols;
+package protocols.precomputation;
 
 import java.math.BigInteger;
 
@@ -12,9 +12,12 @@ import communication.Communication;
 import crypto.Crypto;
 import gc.GCRoute;
 import gc.GCUtil;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
+import protocols.Protocol;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.Timer;
 import util.Util;
 
 public class PreEviction extends Protocol {

+ 5 - 2
src/protocols/PrePermuteIndex.java → src/protocols/precomputation/PrePermuteIndex.java

@@ -1,12 +1,15 @@
-package protocols;
+package protocols.precomputation;
 
 import java.math.BigInteger;
 
 import communication.Communication;
 import crypto.Crypto;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
+import protocols.Protocol;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.Timer;
 import util.Util;
 
 public class PrePermuteIndex extends Protocol {

+ 5 - 2
src/protocols/PrePermuteTarget.java → src/protocols/precomputation/PrePermuteTarget.java

@@ -1,4 +1,4 @@
-package protocols;
+package protocols.precomputation;
 
 import java.math.BigInteger;
 
@@ -7,9 +7,12 @@ import com.oblivm.backend.gc.GCSignal;
 import communication.Communication;
 import crypto.Crypto;
 import gc.GCUtil;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
+import protocols.Protocol;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.Timer;
 import util.Util;
 
 public class PrePermuteTarget extends Protocol {

+ 7 - 4
src/protocols/PrePostProcessT.java → src/protocols/precomputation/PrePostProcessT.java

@@ -1,12 +1,15 @@
-package protocols;
+package protocols.precomputation;
 
 import communication.Communication;
 import crypto.Crypto;
-import measure.M;
-import measure.P;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
+import protocols.Protocol;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.M;
+import util.P;
+import util.Timer;
 import util.Util;
 
 public class PrePostProcessT extends Protocol {

+ 7 - 4
src/protocols/PreReshuffle.java → src/protocols/precomputation/PreReshuffle.java

@@ -1,13 +1,16 @@
-package protocols;
+package protocols.precomputation;
 
 import communication.Communication;
 import crypto.Crypto;
-import measure.M;
-import measure.P;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
 import oram.Tuple;
+import protocols.Protocol;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.M;
+import util.P;
+import util.Timer;
 import util.Util;
 
 public class PreReshuffle extends Protocol {

+ 5 - 2
src/protocols/PreRetrieve.java → src/protocols/precomputation/PreRetrieve.java

@@ -1,9 +1,12 @@
-package protocols;
+package protocols.precomputation;
 
 import communication.Communication;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
+import protocols.Protocol;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.Timer;
 
 public class PreRetrieve extends Protocol {
 	public PreRetrieve(Communication con1, Communication con2) {

+ 7 - 4
src/protocols/PreSSCOT.java → src/protocols/precomputation/PreSSCOT.java

@@ -1,13 +1,16 @@
-package protocols;
+package protocols.precomputation;
 
 import communication.Communication;
 import crypto.Crypto;
 import crypto.PRF;
-import measure.M;
-import measure.P;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
+import protocols.Protocol;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.M;
+import util.P;
+import util.Timer;
 
 public class PreSSCOT extends Protocol {
 	public PreSSCOT(Communication con1, Communication con2) {

+ 7 - 4
src/protocols/PreSSIOT.java → src/protocols/precomputation/PreSSIOT.java

@@ -1,13 +1,16 @@
-package protocols;
+package protocols.precomputation;
 
 import communication.Communication;
 import crypto.Crypto;
 import crypto.PRF;
-import measure.M;
-import measure.P;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
+import protocols.Protocol;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.M;
+import util.P;
+import util.Timer;
 import util.Util;
 
 public class PreSSIOT extends Protocol {

+ 7 - 4
src/protocols/PreSSXOT.java → src/protocols/precomputation/PreSSXOT.java

@@ -1,13 +1,16 @@
-package protocols;
+package protocols.precomputation;
 
 import communication.Communication;
 import crypto.Crypto;
-import measure.M;
-import measure.P;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
 import oram.Tuple;
+import protocols.Protocol;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.M;
+import util.P;
+import util.Timer;
 import util.Util;
 
 public class PreSSXOT extends Protocol {

+ 5 - 2
src/protocols/PreUpdateRoot.java → src/protocols/precomputation/PreUpdateRoot.java

@@ -1,4 +1,4 @@
-package protocols;
+package protocols.precomputation;
 
 import java.math.BigInteger;
 
@@ -11,9 +11,12 @@ import com.oblivm.backend.network.Network;
 import communication.Communication;
 import gc.GCUpdateRoot;
 import gc.GCUtil;
-import measure.Timer;
 import oram.Forest;
 import oram.Metadata;
+import protocols.Protocol;
+import protocols.struct.Party;
+import protocols.struct.PreData;
+import util.Timer;
 
 public class PreUpdateRoot extends Protocol {
 	public PreUpdateRoot(Communication con1, Communication con2) {

+ 1 - 1
src/protocols/OutAccess.java → src/protocols/struct/OutAccess.java

@@ -1,4 +1,4 @@
-package protocols;
+package protocols.struct;
 
 import oram.Tuple;
 

+ 1 - 1
src/protocols/OutSSCOT.java → src/protocols/struct/OutSSCOT.java

@@ -1,4 +1,4 @@
-package protocols;
+package protocols.struct;
 
 public class OutSSCOT {
 	public int t;

+ 1 - 1
src/protocols/OutSSIOT.java → src/protocols/struct/OutSSIOT.java

@@ -1,4 +1,4 @@
-package protocols;
+package protocols.struct;
 
 public class OutSSIOT {
 	public int t;

+ 1 - 1
src/protocols/Party.java → src/protocols/struct/Party.java

@@ -1,4 +1,4 @@
-package protocols;
+package protocols.struct;
 
 public enum Party {
 	Charlie("charlie"), Debbie("debbie"), Eddie("eddie");

+ 1 - 1
src/protocols/PreData.java → src/protocols/struct/PreData.java

@@ -1,4 +1,4 @@
-package protocols;
+package protocols.struct;
 
 import java.math.BigInteger;
 

+ 1 - 0
src/ui/CLI.java

@@ -13,6 +13,7 @@ import org.apache.commons.cli.ParseException;
 import communication.Communication;
 import exceptions.NoSuchPartyException;
 import protocols.*;
+import protocols.struct.Party;
 
 public class CLI {
 	public static final int DEFAULT_PORT = 8000;

+ 1 - 1
src/measure/M.java → src/util/M.java

@@ -1,4 +1,4 @@
-package measure;
+package util;
 
 public class M {
 	public static final int size = 6;

+ 18 - 0
src/util/P.java

@@ -0,0 +1,18 @@
+package util;
+
+public class P {
+
+	public static final int ACC = 0;
+	public static final int COT = 1;
+	public static final int IOT = 2;
+	public static final int PPT = 3;
+	public static final int RSF = 4;
+	public static final int UR = 5;
+	public static final int EVI = 6;
+	public static final int PT = 7;
+	public static final int PI = 8;
+	public static final int XOT = 9;
+
+	public static final String[] names = { "ACC", "COT", "IOT", "PPT", "RSF", "UR", "EVI", "PT", "PI", "XOT" };
+	public static final int size = names.length;
+}

+ 1 - 2
src/measure/Timer.java → src/util/Timer.java

@@ -1,9 +1,8 @@
-package measure;
+package util;
 
 import java.util.Stack;
 
 import exceptions.TimingException;
-import util.StopWatch;
 
 public class Timer {
 	StopWatch[][] watches;