Boyoung- 9 rokov pred
rodič
commit
c94c6fe63a
4 zmenil súbory, kde vykonal 47 pridanie a 16 odobranie
  1. 4 10
      src/oram/Bucket.java
  2. 0 2
      src/oram/Metadata.java
  3. 10 4
      src/oram/Tree.java
  4. 33 0
      test/oram/TestTree.java

+ 4 - 10
src/oram/Bucket.java

@@ -1,27 +1,20 @@
 package oram;
 
 public class Bucket {
-	private int tupleBytes;
 	private Tuple[] tuples;
 
-	public Bucket(int numTuples, int tb) {
-		tupleBytes = tb;
+	public Bucket(int numTuples) {
 		tuples = new Tuple[numTuples];
 	}
 
-	public Bucket(Tuple[] ts) {
-		tupleBytes = ts[0].getNumBytes();
-		tuples = ts;
+	public Bucket(Tuple[] tuples) {
+		this.tuples = tuples;
 	}
 
 	public int getNumTuples() {
 		return tuples.length;
 	}
 
-	public int getTupleBytes() {
-		return tupleBytes;
-	}
-
 	public Tuple[] getTuples() {
 		return tuples;
 	}
@@ -39,6 +32,7 @@ public class Bucket {
 	}
 
 	public byte[] toByteArray() {
+		int tupleBytes = tuples[0].getNumBytes();
 		byte[] bucket = new byte[tupleBytes * tuples.length];
 		for (int i = 0; i < tuples.length; i++) {
 			byte[] tuple = tuples[i].toByteArray();

+ 0 - 2
src/oram/Metadata.java

@@ -133,8 +133,6 @@ public class Metadata {
 			treeOffsets[i] = forestBytes;
 			forestBytes += treeBytes[i];
 		}
-
-		printInfo();
 	}
 
 	public void printInfo() {

+ 10 - 4
src/oram/Tree.java

@@ -37,9 +37,9 @@ public class Tree {
 		d = lBits + 1;
 
 		buckets = new Array64<Bucket>(numBuckets);
-		buckets.set(0, new Bucket(stashSize, tupleBytes));
+		buckets.set(0, new Bucket(stashSize));
 		for (int i = 1; i < numBuckets; i++)
-			buckets.set(i, new Bucket(w, tupleBytes));
+			buckets.set(i, new Bucket(w));
 	}
 
 	public int getTreeIndex() {
@@ -107,9 +107,15 @@ public class Tree {
 			return new long[] { 0 };
 		if (L < 0 || L > numBuckets / 2)
 			throw new InvalidPathLabelException(BigInteger.valueOf(L).toString(2));
+		BigInteger biL = BigInteger.valueOf(L);
 		long[] indices = new long[d];
-		for (int i = 0; i < d; i++)
-			indices[i] = (L >> (d - i)) + (long) Math.pow(2, i) - 1;
+		indices[0] = 0;
+		for (int i = 1; i < d; i++) {
+			if (biL.testBit(d - i - 1))
+				indices[i] = indices[i - 1] * 2 + 2;
+			else
+				indices[i] = indices[i - 1] * 2 + 1;
+		}
 		return indices;
 	}
 

+ 33 - 0
test/oram/TestTree.java

@@ -0,0 +1,33 @@
+package oram;
+
+import java.math.BigInteger;
+
+public class TestTree {
+
+	public static void main(String[] args) {
+		Metadata md = new Metadata();
+		Tree tree = new Tree(2, md);
+		long tupleCounter = 0;
+		for (int i = 0; i < tree.getD(); i++) {
+			long numBuckets = (long) Math.pow(2, i);
+			for (int j = 0; j < numBuckets; j++) {
+				long bucketIndex = j + numBuckets - 1;
+				Bucket bucket = tree.getBucket(bucketIndex);
+				for (int k = 0; k < bucket.getNumTuples(); k++) {
+					byte[] fnl = new byte[0];
+					byte[] a = BigInteger.valueOf(tupleCounter).toByteArray();
+					Tuple tuple = new Tuple(fnl, fnl, fnl, a);
+					tupleCounter++;
+					bucket.setTuple(k, tuple);
+				}
+			}
+		}
+
+		BigInteger L = new BigInteger("0110011", 2);
+		System.out.println(L.toString(2));
+		Bucket[] pathBuckets = tree.getBucketsOnPath(L.longValue());
+		for (int i = 0; i < pathBuckets.length; i++)
+			System.out.println(pathBuckets[i]);
+	}
+
+}