Explorar o código

correct circuit input Li

Boyoung- %!s(int64=8) %!d(string=hai) anos
pai
achega
74cc1bda15

+ 6 - 11
src/gc/GCLib.java

@@ -1,6 +1,5 @@
 package gc;
 
-import java.math.BigInteger;
 import java.util.Arrays;
 
 import com.oblivm.backend.circuits.arithmetic.IntegerLib;
@@ -60,14 +59,11 @@ public class GCLib<T> extends IntegerLib<T> {
 		return output;
 	}
 
-	public T[][] findDeepestAndEmpty(int i, byte[] Li, T[] E_feBits, T[] C_feBits, T[][] E_tupleLabels,
+	public T[][] findDeepestAndEmpty(int i, T[] pathLabel, T[] E_feBits, T[] C_feBits, T[][] E_tupleLabels,
 			T[][] C_tupleLabels) {
-		T[] pathLabel = toSignals(new BigInteger(1, Li).longValue(), d - 1); // no
-																				// sign
-																				// bit
 		T[] feBits = xor(E_feBits, C_feBits);
-		T[][] tupleLabels = env.newTArray(E_tupleLabels.length, 0);
-		for (int j = 0; j < tupleLabels.length; j++)
+		T[][] tupleLabels = env.newTArray(w, 0);
+		for (int j = 0; j < w; j++)
 			tupleLabels[j] = xor(E_tupleLabels[j], C_tupleLabels[j]);
 
 		T[] l = padSignal(ones(d - 1 - i), d); // has sign bit
@@ -101,7 +97,7 @@ public class GCLib<T> extends IntegerLib<T> {
 		return output;
 	}
 
-	public T[][][] prepareDeepest(byte[] Li, T[][] E_feBits, T[][] C_feBits, T[][][] E_tupleLabels,
+	public T[][][] prepareDeepest(T[] Li, T[][] E_feBits, T[][] C_feBits, T[][][] E_tupleLabels,
 			T[][][] C_tupleLabels) {
 		T[] perpD = ones(logD + 1);
 		T[][][] output = env.newTArray(4, d, 0);
@@ -132,7 +128,6 @@ public class GCLib<T> extends IntegerLib<T> {
 	}
 
 	public T[][][] prepareTarget(T[][] deepest, T[][] j1, T[][] j2, T[][] et) {
-		// TODO: root bucket ft?
 		T[] ft = toSignals(w, logW + 1);
 		T[] perpD = ones(logD + 1);
 		T[] perpW = ones(logW + 1);
@@ -197,7 +192,7 @@ public class GCLib<T> extends IntegerLib<T> {
 		return output;
 	}
 
-	public T[][][] combineDeepestAndTarget(byte[] Li, T[][] E_feBits, T[][] C_feBits, T[][][] E_tupleLabels,
+	public T[][][] combineDeepestAndTarget(T[] Li, T[][] E_feBits, T[][] C_feBits, T[][][] E_tupleLabels,
 			T[][][] C_tupleLabels) {
 		T[][][] out = prepareDeepest(Li, E_feBits, C_feBits, E_tupleLabels, C_tupleLabels);
 		return prepareTarget(out[0], out[1], out[2], out[3]);
@@ -232,7 +227,7 @@ public class GCLib<T> extends IntegerLib<T> {
 		return target;
 	}
 
-	public T[][][] combineDeepestTargetCycle(byte[] Li, T[][] E_feBits, T[][] C_feBits, T[][][] E_tupleLabels,
+	public T[][][] combineDeepestTargetCycle(T[] Li, T[][] E_feBits, T[][] C_feBits, T[][][] E_tupleLabels,
 			T[][][] C_tupleLabels) {
 		T[][][] out = combineDeepestAndTarget(Li, E_feBits, C_feBits, E_tupleLabels, C_tupleLabels);
 		makeCycle(out[0], out[2][0], out[2][1], out[2][2], out[2][3]);

+ 9 - 6
src/protocols/DeepestAndEmpty.java

@@ -89,10 +89,13 @@ public class DeepestAndEmpty extends Protocol {
 		for (int j = 0; j < w; j++)
 			tupleLabels[j] = Util.nextBytes((d - 1 + 7) / 8, Crypto.sr);
 
+		GCSignal[][] LiKeyPairs = genKeyPairs(d - 1);
 		GCSignal[][] E_feKeyPairs = genKeyPairs(w);
 		GCSignal[][] C_feKeyPairs = genKeyPairs(w);
+		GCSignal[] LiZeroKeys = getZeroKeys(LiKeyPairs);
 		GCSignal[] E_feZeroKeys = getZeroKeys(E_feKeyPairs);
 		GCSignal[] C_feZeroKeys = getZeroKeys(C_feKeyPairs);
+		GCSignal[] LiKeyInput = revSelectKeys(LiKeyPairs, Li);
 		GCSignal[] E_feKeyInput = selectKeys(E_feKeyPairs, feBits);
 
 		GCSignal[][][] E_labelKeyPairs = new GCSignal[w][][];
@@ -109,7 +112,7 @@ public class DeepestAndEmpty extends Protocol {
 		}
 
 		con1.write(i);
-		con1.write(Li);
+		con1.write(LiKeyInput);
 		con1.write(E_feKeyInput);
 		con1.write(C_feZeroKeys);
 		con1.write(E_labelKeyInput);
@@ -117,8 +120,8 @@ public class DeepestAndEmpty extends Protocol {
 
 		Network channel = new Network(null, con1);
 		CompEnv<GCSignal> gen = new GCGen(channel);
-		GCSignal[][] E_out = new GCLib<GCSignal>(gen, d, w).findDeepestAndEmpty(i, Li, E_feZeroKeys, C_feZeroKeys,
-				E_labelZeroKeys, C_labelZeroKeys);
+		GCSignal[][] E_out = new GCLib<GCSignal>(gen, d, w).findDeepestAndEmpty(i, LiZeroKeys, E_feZeroKeys,
+				C_feZeroKeys, E_labelZeroKeys, C_labelZeroKeys);
 
 		GCSignal[][] D_out = con1.readObject();
 
@@ -157,7 +160,7 @@ public class DeepestAndEmpty extends Protocol {
 
 	public void runD() {
 		int i = con1.readObject();
-		byte[] Li = con1.read();
+		GCSignal[] LiKeyInput = con1.readObject();
 		GCSignal[] E_feKeyInput = con1.readObject();
 		GCSignal[] C_feZeroKeys = con1.readObject();
 		GCSignal[][] E_labelKeyInput = con1.readObject();
@@ -166,10 +169,10 @@ public class DeepestAndEmpty extends Protocol {
 		Network channel = new Network(con1, null);
 		CompEnv<GCSignal> gen = new GCEva(channel);
 		GCLib<GCSignal> dae = new GCLib<GCSignal>(gen, d, w);
-		dae.findDeepestAndEmpty(i, Li, E_feKeyInput, C_feZeroKeys, E_labelKeyInput, C_labelZeroKeys);
+		dae.findDeepestAndEmpty(i, LiKeyInput, E_feKeyInput, C_feZeroKeys, E_labelKeyInput, C_labelZeroKeys);
 
 		gen.setEvaluate();
-		GCSignal[][] D_out = dae.findDeepestAndEmpty(i, Li, E_feKeyInput, C_feZeroKeys, E_labelKeyInput,
+		GCSignal[][] D_out = dae.findDeepestAndEmpty(i, LiKeyInput, E_feKeyInput, C_feZeroKeys, E_labelKeyInput,
 				C_labelZeroKeys);
 
 		con1.write(D_out);

+ 14 - 10
src/protocols/MakeCycle.java

@@ -88,6 +88,10 @@ public class MakeCycle extends Protocol {
 		byte[][] feBits = new byte[d][];
 		byte[][][] tupleLabels = new byte[d][w][];
 
+		GCSignal[][] LiKeyPairs = genKeyPairs(d - 1);
+		GCSignal[] LiZeroKeys = getZeroKeys(LiKeyPairs);
+		GCSignal[] LiKeyInput = revSelectKeys(LiKeyPairs, Li);
+
 		GCSignal[][][] E_feKeyPairs = new GCSignal[d][][];
 		GCSignal[][][] C_feKeyPairs = new GCSignal[d][][];
 		GCSignal[][] E_feZeroKeys = new GCSignal[d][];
@@ -121,7 +125,7 @@ public class MakeCycle extends Protocol {
 			}
 		}
 
-		con1.write(Li);
+		con1.write(LiKeyInput);
 		con1.write(E_feKeyInput);
 		con1.write(C_feZeroKeys);
 		con1.write(E_labelKeyInput);
@@ -130,14 +134,14 @@ public class MakeCycle extends Protocol {
 		Network channel = new Network(null, con1);
 
 		CompEnv<GCSignal> gen1 = new GCGen(channel);
-		GCSignal[][][] E_out1 = new GCLib<GCSignal>(gen1, d, w).combineDeepestAndTarget(Li, E_feZeroKeys, C_feZeroKeys,
-				E_labelZeroKeys, C_labelZeroKeys);
+		GCSignal[][][] E_out1 = new GCLib<GCSignal>(gen1, d, w).combineDeepestAndTarget(LiZeroKeys, E_feZeroKeys,
+				C_feZeroKeys, E_labelZeroKeys, C_labelZeroKeys);
 
 		GCSignal[][][] D_out1 = con1.readObject();
 
 		CompEnv<GCSignal> gen = new GCGen(channel);
-		GCSignal[][][] E_out = new GCLib<GCSignal>(gen, d, w).combineDeepestTargetCycle(Li, E_feZeroKeys, C_feZeroKeys,
-				E_labelZeroKeys, C_labelZeroKeys);
+		GCSignal[][][] E_out = new GCLib<GCSignal>(gen, d, w).combineDeepestTargetCycle(LiZeroKeys, E_feZeroKeys,
+				C_feZeroKeys, E_labelZeroKeys, C_labelZeroKeys);
 
 		GCSignal[][][] D_out = con1.readObject();
 
@@ -196,7 +200,7 @@ public class MakeCycle extends Protocol {
 	}
 
 	public void runD() {
-		byte[] Li = con1.read();
+		GCSignal[] LiKeyInput = con1.readObject();
 		GCSignal[][] E_feKeyInput = con1.readObject();
 		GCSignal[][] C_feZeroKeys = con1.readObject();
 		GCSignal[][][] E_labelKeyInput = con1.readObject();
@@ -206,20 +210,20 @@ public class MakeCycle extends Protocol {
 
 		CompEnv<GCSignal> gen1 = new GCEva(channel);
 		GCLib<GCSignal> dae1 = new GCLib<GCSignal>(gen1, d, w);
-		dae1.combineDeepestAndTarget(Li, E_feKeyInput, C_feZeroKeys, E_labelKeyInput, C_labelZeroKeys);
+		dae1.combineDeepestAndTarget(LiKeyInput, E_feKeyInput, C_feZeroKeys, E_labelKeyInput, C_labelZeroKeys);
 
 		gen1.setEvaluate();
-		GCSignal[][][] D_out1 = dae1.combineDeepestAndTarget(Li, E_feKeyInput, C_feZeroKeys, E_labelKeyInput,
+		GCSignal[][][] D_out1 = dae1.combineDeepestAndTarget(LiKeyInput, E_feKeyInput, C_feZeroKeys, E_labelKeyInput,
 				C_labelZeroKeys);
 
 		con1.write(D_out1);
 
 		CompEnv<GCSignal> gen = new GCEva(channel);
 		GCLib<GCSignal> dae = new GCLib<GCSignal>(gen, d, w);
-		dae.combineDeepestTargetCycle(Li, E_feKeyInput, C_feZeroKeys, E_labelKeyInput, C_labelZeroKeys);
+		dae.combineDeepestTargetCycle(LiKeyInput, E_feKeyInput, C_feZeroKeys, E_labelKeyInput, C_labelZeroKeys);
 
 		gen.setEvaluate();
-		GCSignal[][][] D_out = dae.combineDeepestTargetCycle(Li, E_feKeyInput, C_feZeroKeys, E_labelKeyInput,
+		GCSignal[][][] D_out = dae.combineDeepestTargetCycle(LiKeyInput, E_feKeyInput, C_feZeroKeys, E_labelKeyInput,
 				C_labelZeroKeys);
 
 		con1.write(D_out);

+ 10 - 5
src/protocols/PrepareDeepest.java

@@ -88,6 +88,10 @@ public class PrepareDeepest extends Protocol {
 		byte[][] feBits = new byte[d][];
 		byte[][][] tupleLabels = new byte[d][w][];
 
+		GCSignal[][] LiKeyPairs = genKeyPairs(d - 1);
+		GCSignal[] LiZeroKeys = getZeroKeys(LiKeyPairs);
+		GCSignal[] LiKeyInput = revSelectKeys(LiKeyPairs, Li);
+
 		GCSignal[][][] E_feKeyPairs = new GCSignal[d][][];
 		GCSignal[][][] C_feKeyPairs = new GCSignal[d][][];
 		GCSignal[][] E_feZeroKeys = new GCSignal[d][];
@@ -120,7 +124,7 @@ public class PrepareDeepest extends Protocol {
 			}
 		}
 
-		con1.write(Li);
+		con1.write(LiKeyInput);
 		con1.write(E_feKeyInput);
 		con1.write(C_feZeroKeys);
 		con1.write(E_labelKeyInput);
@@ -128,7 +132,7 @@ public class PrepareDeepest extends Protocol {
 
 		Network channel = new Network(null, con1);
 		CompEnv<GCSignal> gen = new GCGen(channel);
-		GCSignal[][][] E_out = new GCLib<GCSignal>(gen, d, w).prepareDeepest(Li, E_feZeroKeys, C_feZeroKeys,
+		GCSignal[][][] E_out = new GCLib<GCSignal>(gen, d, w).prepareDeepest(LiZeroKeys, E_feZeroKeys, C_feZeroKeys,
 				E_labelZeroKeys, C_labelZeroKeys);
 
 		GCSignal[][][] D_out = con1.readObject();
@@ -178,7 +182,7 @@ public class PrepareDeepest extends Protocol {
 	}
 
 	public void runD() {
-		byte[] Li = con1.read();
+		GCSignal[] LiKeyInput = con1.readObject();
 		GCSignal[][] E_feKeyInput = con1.readObject();
 		GCSignal[][] C_feZeroKeys = con1.readObject();
 		GCSignal[][][] E_labelKeyInput = con1.readObject();
@@ -187,10 +191,11 @@ public class PrepareDeepest extends Protocol {
 		Network channel = new Network(con1, null);
 		CompEnv<GCSignal> gen = new GCEva(channel);
 		GCLib<GCSignal> dae = new GCLib<GCSignal>(gen, d, w);
-		dae.prepareDeepest(Li, E_feKeyInput, C_feZeroKeys, E_labelKeyInput, C_labelZeroKeys);
+		dae.prepareDeepest(LiKeyInput, E_feKeyInput, C_feZeroKeys, E_labelKeyInput, C_labelZeroKeys);
 
 		gen.setEvaluate();
-		GCSignal[][][] D_out = dae.prepareDeepest(Li, E_feKeyInput, C_feZeroKeys, E_labelKeyInput, C_labelZeroKeys);
+		GCSignal[][][] D_out = dae.prepareDeepest(LiKeyInput, E_feKeyInput, C_feZeroKeys, E_labelKeyInput,
+				C_labelZeroKeys);
 
 		con1.write(D_out);
 	}

+ 14 - 9
src/protocols/PrepareTarget.java

@@ -88,6 +88,10 @@ public class PrepareTarget extends Protocol {
 		byte[][] feBits = new byte[d][];
 		byte[][][] tupleLabels = new byte[d][w][];
 
+		GCSignal[][] LiKeyPairs = genKeyPairs(d - 1);
+		GCSignal[] LiZeroKeys = getZeroKeys(LiKeyPairs);
+		GCSignal[] LiKeyInput = revSelectKeys(LiKeyPairs, Li);
+
 		GCSignal[][][] E_feKeyPairs = new GCSignal[d][][];
 		GCSignal[][][] C_feKeyPairs = new GCSignal[d][][];
 		GCSignal[][] E_feZeroKeys = new GCSignal[d][];
@@ -120,7 +124,7 @@ public class PrepareTarget extends Protocol {
 			}
 		}
 
-		con1.write(Li);
+		con1.write(LiKeyInput);
 		con1.write(E_feKeyInput);
 		con1.write(C_feZeroKeys);
 		con1.write(E_labelKeyInput);
@@ -129,14 +133,14 @@ public class PrepareTarget extends Protocol {
 		Network channel = new Network(null, con1);
 
 		CompEnv<GCSignal> gen = new GCGen(channel);
-		GCSignal[][][] E_out = new GCLib<GCSignal>(gen, d, w).prepareDeepest(Li, E_feZeroKeys, C_feZeroKeys,
+		GCSignal[][][] E_out = new GCLib<GCSignal>(gen, d, w).prepareDeepest(LiZeroKeys, E_feZeroKeys, C_feZeroKeys,
 				E_labelZeroKeys, C_labelZeroKeys);
 
 		GCSignal[][][] D_out = con1.readObject();
 
 		CompEnv<GCSignal> gen1 = new GCGen(channel);
-		GCSignal[][][] E_out1 = new GCLib<GCSignal>(gen1, d, w).combineDeepestAndTarget(Li, E_feZeroKeys, C_feZeroKeys,
-				E_labelZeroKeys, C_labelZeroKeys);
+		GCSignal[][][] E_out1 = new GCLib<GCSignal>(gen1, d, w).combineDeepestAndTarget(LiZeroKeys, E_feZeroKeys,
+				C_feZeroKeys, E_labelZeroKeys, C_labelZeroKeys);
 
 		GCSignal[][][] D_out1 = con1.readObject();
 
@@ -202,7 +206,7 @@ public class PrepareTarget extends Protocol {
 	}
 
 	public void runD() {
-		byte[] Li = con1.read();
+		GCSignal[] LiKeyInput = con1.readObject();
 		GCSignal[][] E_feKeyInput = con1.readObject();
 		GCSignal[][] C_feZeroKeys = con1.readObject();
 		GCSignal[][][] E_labelKeyInput = con1.readObject();
@@ -212,19 +216,20 @@ public class PrepareTarget extends Protocol {
 
 		CompEnv<GCSignal> gen = new GCEva(channel);
 		GCLib<GCSignal> dae = new GCLib<GCSignal>(gen, d, w);
-		dae.prepareDeepest(Li, E_feKeyInput, C_feZeroKeys, E_labelKeyInput, C_labelZeroKeys);
+		dae.prepareDeepest(LiKeyInput, E_feKeyInput, C_feZeroKeys, E_labelKeyInput, C_labelZeroKeys);
 
 		gen.setEvaluate();
-		GCSignal[][][] D_out = dae.prepareDeepest(Li, E_feKeyInput, C_feZeroKeys, E_labelKeyInput, C_labelZeroKeys);
+		GCSignal[][][] D_out = dae.prepareDeepest(LiKeyInput, E_feKeyInput, C_feZeroKeys, E_labelKeyInput,
+				C_labelZeroKeys);
 
 		con1.write(D_out);
 
 		CompEnv<GCSignal> gen1 = new GCEva(channel);
 		GCLib<GCSignal> dae1 = new GCLib<GCSignal>(gen1, d, w);
-		dae1.combineDeepestAndTarget(Li, E_feKeyInput, C_feZeroKeys, E_labelKeyInput, C_labelZeroKeys);
+		dae1.combineDeepestAndTarget(LiKeyInput, E_feKeyInput, C_feZeroKeys, E_labelKeyInput, C_labelZeroKeys);
 
 		gen1.setEvaluate();
-		GCSignal[][][] D_out1 = dae1.combineDeepestAndTarget(Li, E_feKeyInput, C_feZeroKeys, E_labelKeyInput,
+		GCSignal[][][] D_out1 = dae1.combineDeepestAndTarget(LiKeyInput, E_feKeyInput, C_feZeroKeys, E_labelKeyInput,
 				C_labelZeroKeys);
 
 		con1.write(D_out1);