|
@@ -8,130 +8,138 @@ import exceptions.NoSuchPartyException;
|
|
|
import oram.Metadata;
|
|
|
import oram.Tree;
|
|
|
import oram.Tuple;
|
|
|
-import protocols.struct.OutAccess;
|
|
|
-import protocols.struct.Party;
|
|
|
-import protocols.struct.PreData;
|
|
|
+import struct.Party;
|
|
|
import util.Timer;
|
|
|
import util.Util;
|
|
|
|
|
|
public class Pipeline extends Thread {
|
|
|
|
|
|
- private Communication con1;
|
|
|
- private Communication con2;
|
|
|
- private Party party;
|
|
|
- private PreData[] predata;
|
|
|
- private Tree OTi;
|
|
|
- private int h;
|
|
|
- private Timer timer;
|
|
|
- private Metadata md;
|
|
|
- private int treeIndex;
|
|
|
- private byte[] Li;
|
|
|
- private OutAccess outaccess;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- public Pipeline(Communication con1, Communication con2, Party party, PreData[] predata, Tree OTi, int h,
|
|
|
- Timer timer, Metadata md, int treeIndex, byte[] Li, OutAccess outaccess) {
|
|
|
- this.con1 = con1;
|
|
|
- this.con2 = con2;
|
|
|
- this.party = party;
|
|
|
- this.predata = predata;
|
|
|
- this.OTi = OTi;
|
|
|
- this.h = h;
|
|
|
- this.timer = timer;
|
|
|
- this.md = md;
|
|
|
- this.treeIndex = treeIndex;
|
|
|
- this.Li = Li;
|
|
|
- this.outaccess = outaccess;
|
|
|
- }
|
|
|
-
|
|
|
- public void runE(PreData[] predata, Tree OTi, int h, Timer timer) {
|
|
|
-
|
|
|
- Access access = new Access(con1, con2);
|
|
|
- Reshuffle reshuffle = new Reshuffle(con1, con2);
|
|
|
- PostProcessT postprocesst = new PostProcessT(con1, con2);
|
|
|
- UpdateRoot updateroot = new UpdateRoot(con1, con2);
|
|
|
- Eviction eviction = new Eviction(con1, con2);
|
|
|
-
|
|
|
- Tuple[] path = reshuffle.runE(predata[0], outaccess.E_P, OTi.getTreeIndex() == 0, timer);
|
|
|
- Tuple Ti = postprocesst.runE(predata[0], outaccess.E_Ti, OTi.getTreeIndex() == h - 1, timer);
|
|
|
- Tuple[] root = Arrays.copyOfRange(path, 0, OTi.getStashSize());
|
|
|
- root = updateroot.runE(predata[0], OTi.getTreeIndex() == 0, outaccess.Li, root, Ti, timer);
|
|
|
- System.arraycopy(root, 0, path, 0, root.length);
|
|
|
- eviction.runE(predata[0], OTi.getTreeIndex() == 0, outaccess.Li,
|
|
|
- OTi.getTreeIndex() == 0 ? new Tuple[] { Ti } : path, OTi, timer);
|
|
|
-
|
|
|
-
|
|
|
- OutAccess outaccess2 = access.runE2(OTi, timer);
|
|
|
- Tuple[] path2 = outaccess2.E_P;
|
|
|
- Tuple Ti2 = outaccess2.E_Ti;
|
|
|
- Tuple[] root2 = Arrays.copyOfRange(path2, 0, OTi.getStashSize());
|
|
|
- root2 = updateroot.runE(predata[1], OTi.getTreeIndex() == 0, outaccess2.Li, root2, Ti2, timer);
|
|
|
- System.arraycopy(root2, 0, path2, 0, root2.length);
|
|
|
- eviction.runE(predata[1], OTi.getTreeIndex() == 0, outaccess2.Li,
|
|
|
- OTi.getTreeIndex() == 0 ? new Tuple[] { Ti2 } : path2, OTi, timer);
|
|
|
- }
|
|
|
-
|
|
|
- public void runD(PreData predata[], Tree OTi, Timer timer) {
|
|
|
-
|
|
|
- Access access = new Access(con1, con2);
|
|
|
- Reshuffle reshuffle = new Reshuffle(con1, con2);
|
|
|
- PostProcessT postprocesst = new PostProcessT(con1, con2);
|
|
|
- UpdateRoot updateroot = new UpdateRoot(con1, con2);
|
|
|
- Eviction eviction = new Eviction(con1, con2);
|
|
|
-
|
|
|
- reshuffle.runD();
|
|
|
- postprocesst.runD();
|
|
|
- updateroot.runD(predata[0], OTi.getTreeIndex() == 0, Li, OTi.getW(), timer);
|
|
|
- eviction.runD(predata[0], OTi.getTreeIndex() == 0, Li, OTi, timer);
|
|
|
-
|
|
|
-
|
|
|
- byte[] Li2 = access.runD2(OTi, timer);
|
|
|
- updateroot.runD(predata[1], OTi.getTreeIndex() == 0, Li2, OTi.getW(), timer);
|
|
|
- eviction.runD(predata[1], OTi.getTreeIndex() == 0, Li2, OTi, timer);
|
|
|
- }
|
|
|
-
|
|
|
- public OutAccess runC(PreData[] predata, Metadata md, int ti, byte[] Li, Timer timer) {
|
|
|
-
|
|
|
- Access access = new Access(con1, con2);
|
|
|
- Reshuffle reshuffle = new Reshuffle(con1, con2);
|
|
|
- PostProcessT postprocesst = new PostProcessT(con1, con2);
|
|
|
- UpdateRoot updateroot = new UpdateRoot(con1, con2);
|
|
|
- Eviction eviction = new Eviction(con1, con2);
|
|
|
-
|
|
|
- Tuple[] path = reshuffle.runC(predata[0], outaccess.C_P, ti == 0, timer);
|
|
|
- Tuple Ti = postprocesst.runC(predata[0], outaccess.C_Ti, Li, outaccess.C_Lip1, outaccess.C_j2,
|
|
|
- ti == md.getNumTrees() - 1, timer);
|
|
|
- Tuple[] root = Arrays.copyOfRange(path, 0, md.getStashSizeOfTree(ti));
|
|
|
- root = updateroot.runC(predata[0], ti == 0, root, Ti, timer);
|
|
|
- System.arraycopy(root, 0, path, 0, root.length);
|
|
|
- eviction.runC(predata[0], ti == 0, ti == 0 ? new Tuple[] { Ti } : path, md.getLBitsOfTree(ti) + 1,
|
|
|
- md.getStashSizeOfTree(ti), md.getW(), timer);
|
|
|
-
|
|
|
-
|
|
|
- byte[] Li2 = Util.nextBytes(md.getLBytesOfTree(ti), Crypto.sr);
|
|
|
- OutAccess outaccess2 = access.runC2(md, ti, Li2, timer);
|
|
|
- Tuple[] path2 = outaccess2.C_P;
|
|
|
- Tuple Ti2 = outaccess2.C_Ti;
|
|
|
- Tuple[] root2 = Arrays.copyOfRange(path2, 0, md.getStashSizeOfTree(ti));
|
|
|
- root2 = updateroot.runC(predata[1], ti == 0, root2, Ti2, timer);
|
|
|
- System.arraycopy(root2, 0, path2, 0, root2.length);
|
|
|
- eviction.runC(predata[1], ti == 0, ti == 0 ? new Tuple[] { Ti2 } : path2, md.getLBitsOfTree(ti) + 1,
|
|
|
- md.getStashSizeOfTree(ti), md.getW(), timer);
|
|
|
-
|
|
|
- return outaccess;
|
|
|
- }
|
|
|
-
|
|
|
- public void run() {
|
|
|
- if (party == Party.Eddie) {
|
|
|
- runE(predata, OTi, h, timer);
|
|
|
-
|
|
|
- } else if (party == Party.Debbie) {
|
|
|
- runD(predata, OTi, timer);
|
|
|
-
|
|
|
- } else if (party == Party.Charlie) {
|
|
|
- runC(predata, md, treeIndex, Li, timer);
|
|
|
-
|
|
|
- } else {
|
|
|
- throw new NoSuchPartyException(party + "");
|
|
|
- }
|
|
|
- }
|
|
|
}
|