
org.factcenter.fastgc.YaoGC.CompositeCircuit Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of inchworm Show documentation
Show all versions of inchworm Show documentation
Secure computation, one step at a time.
The newest version!
// Copyright (C) 2010 by Yan Huang
package org.factcenter.fastgc.YaoGC;
import org.factcenter.qilin.comm.SendableInput;
import org.factcenter.qilin.comm.SendableOutput;
public abstract class CompositeCircuit extends Circuit {
protected Circuit[] subCircuits;
protected int nSubCircuits;
public CompositeCircuit(CircuitGlobals globals, int inDegree, int outDegree, int nSubCircuits, String name) {
super(globals, inDegree, outDegree, name);
this.nSubCircuits = nSubCircuits;
subCircuits = new Circuit[nSubCircuits];
}
/**
* Recursively create sub-circuits and connect the wires.
*/
@Override
public void build(boolean isForGarbling) {
createInputWires();
createAllSubCircuits(isForGarbling);
for (int i = 0; i < nSubCircuits; i++) {
assert(subCircuits[i] != null);
subCircuits[i].setIOStream(ois, oos);
subCircuits[i].build(isForGarbling);
}
connectWires();
defineOutputWires();
fixInternalWires();
}
@Override
public void setIOStream (SendableInput ois, SendableOutput oos) {
super.setIOStream(ois, oos);
for (int i = 0; i < nSubCircuits; i++)
if (subCircuits[i] != null)
subCircuits[i].setIOStream(ois, oos);
}
/**
* Create instances of the subCircuit classes.
* (this method should fill the array {@link #subCircuits}).
* @param isForGarbling is this a server instance (servers create the garbled circuits, clients evaluate them).
*/
protected abstract void createAllSubCircuits(boolean isForGarbling);
/**
* Connect local wires (between the circuit and it's immediate subcircuits).
* Note that the {@link #build(boolean)} method descends recursively and
* calls this method for each of the subcircuits.
*/
abstract protected void connectWires();
abstract protected void defineOutputWires();
protected void fixInternalWires() {}
protected void compute() {}
protected void execute() {}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy