123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package protocols.precomputation;
- import communication.Communication;
- import crypto.Crypto;
- 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 PrePermuteIndex extends Protocol {
- private int pid = P.PI;
- public PrePermuteIndex(Communication con1, Communication con2) {
- super(con1, con2);
- }
- public void runE(PreData predata, int d, int w, Timer timer) {
- timer.start(pid, M.offline_comp);
- int logW = (int) Math.ceil(Math.log(w + 1) / Math.log(2));
- predata.pi_p = new byte[d][];
- predata.pi_r = new byte[d][];
- predata.pi_a = new byte[d][];
- for (int i = 0; i < d; i++) {
- predata.pi_p[i] = Util.nextBytes((logW + 7) / 8, Crypto.sr);
- predata.pi_r[i] = Util.nextBytes((logW + 7) / 8, Crypto.sr);
- predata.pi_a[i] = Util.xor(predata.pi_p[i], predata.pi_r[i]);
- }
- predata.pi_a = Util.permute(predata.pi_a, predata.evict_pi);
- timer.start(pid, M.offline_write);
- con1.write(predata.pi_p);
- con1.write(predata.pi_a);
- con2.write(predata.pi_r);
- timer.stop(pid, M.offline_write);
- timer.stop(pid, M.offline_comp);
- }
- public void runD(PreData predata, Timer timer) {
- timer.start(pid, M.offline_read);
- predata.pi_p = con1.readDoubleByteArray();
- predata.pi_a = con1.readDoubleByteArray();
- timer.stop(pid, M.offline_read);
- }
- public void runC(PreData predata, Timer timer) {
- timer.start(pid, M.offline_read);
- predata.pi_r = con1.readDoubleByteArray();
- timer.stop(pid, M.offline_read);
- }
- @Override
- public void run(Party party, Metadata md, Forest forest) {
- }
- }
|