12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package com.oblivm.backend.gc.halfANDs;
- import com.oblivm.backend.flexsc.Flag;
- import com.oblivm.backend.flexsc.Mode;
- import com.oblivm.backend.gc.GCEvaComp;
- import com.oblivm.backend.gc.GCSignal;
- import com.oblivm.backend.network.Network;
- public class GCEva extends GCEvaComp {
- Garbler gb;
- public GCEva(Network channel) {
- super(channel, Mode.OPT);
- gb = new Garbler();
- }
- public GCSignal and(GCSignal a, GCSignal b) {
- Flag.sw.startGC();
- GCSignal res;
- if (a.isPublic() && b.isPublic())
- res = ((a.v && b.v) ? new GCSignal(true) : new GCSignal(false));
- else if (a.isPublic())
- res = a.v ? b : new GCSignal(false);
- else if (b.isPublic())
- res = b.v ? a : new GCSignal(false);
- else {
- ++numOfAnds;
- int i0 = a.getLSB();
- int i1 = b.getLSB();
- GCSignal TG = GCSignal.ZERO, WG, TE = GCSignal.ZERO, WE;
- try {
- Flag.sw.startGCIO();
- TG = GCSignal.receive(channel);
- TE = GCSignal.receive(channel);
- Flag.sw.stopGCIO();
- } catch (Exception e) {
- e.printStackTrace();
- System.exit(1);
- }
- WG = gb.hash(a, gid, false).xor((i0 == 1) ? TG : GCSignal.ZERO);
- WE = gb.hash(b, gid, true).xor((i1 == 1) ? (TE.xor(a)) : GCSignal.ZERO);
- res = WG.xor(WE);
- gid++;
- }
- Flag.sw.stopGC();
- return res;
- }
- @Override
- public void setEvaluate() {
- // TODO Auto-generated method stub
- }
- }
|