int main() { char* refId = "rs1048659"; char* name = "HG00372"; // CI part int i,j; read_names(); read_ids(); int size_names = size_of_names(); int size_ids = size_of_ids(); int refId_id = find_ids_id(refId); int name_id = find_name_id(name); read_encs(); char encC = get_char_in_enc((size_names*refId_id)+name_id); read_skeys(); char skeyC = get_char_in_skeys((size_names*refId_id)+name_id); // SPU -> GC building part GarbledCircuit garbledCircuit; GarblingContext garblingContext; int inputsNb = 32; int wiresNb = 50000; int gatesNb = 50000; int outputsNb = 32; //Create a circuit. block labels[2 * inputsNb]; createInputLabels(labels, inputsNb); InputLabels inputLabels = labels; createEmptyGarbledCircuit(&garbledCircuit, inputsNb, outputsNb, gatesNb, wiresNb, inputLabels); startBuilding(&garbledCircuit, &garblingContext); // Transform generator's input into fixed wire int zero = fixedZeroWire(&garbledCircuit,&garblingContext); int one = fixedOneWire(&garbledCircuit,&garblingContext); int onewire = getNextWire(&garblingContext); NOTGate(&garbledCircuit,&garblingContext,zero,onewire); int zerowire = getNextWire(&garblingContext); NOTGate(&garbledCircuit,&garblingContext,one,zerowire); int outputs[outputsNb]; int *inp = (int *) malloc(sizeof(int) * inputsNb*2); countToN(inp, inputsNb); //countToN(outputs, inputsNb); int bits[inputsNb]; int_into_ints(encC,bits); for (i = 0; i < inputsNb; i++) { if (bits[i]) { inp[inputsNb+i] = onewire; } else { inp[inputsNb+i] = zerowire; } } int tempOutput[2*outputsNb]; XORCircuit(&garbledCircuit, &garblingContext, inputsNb*2, inp, outputs); block *outputbs = (block*) malloc(sizeof(block) * outputsNb); OutputMap outputMap = outputbs; finishBuilding(&garbledCircuit, &garblingContext, outputMap, outputs); garbleCircuit(&garbledCircuit, inputLabels, outputMap); // MU -> Evaluation part block extractedLabels[inputsNb]; int extractedInputs[inputsNb]; int_into_ints(skeyC,extractedInputs); extractLabels(extractedLabels, inputLabels, extractedInputs, inputsNb); block computedOutputMap[outputsNb]; evaluate(&garbledCircuit, extractedLabels, computedOutputMap); int outputVals[outputsNb]; mapOutputs(outputMap, computedOutputMap, outputVals, outputsNb); //TODO int res = ints_into_int(outputVals); printf("RESULT IS : %d\n",res); return 0; }
int AFFINE(GarbledCircuit *garbledCircuit, GarblingContext *garblingContext, int* inputs, int* outputs) { int AOutput = getNextWire(garblingContext); int BOutput = getNextWire(garblingContext); int COutput = getNextWire(garblingContext); int DOutput = getNextWire(garblingContext); int q0Output = getNextWire(garblingContext); int q1Output = getNextWire(garblingContext); int q2Output = getNextWire(garblingContext); int q3Output = getNextWire(garblingContext); int q4Output = getNextWire(garblingContext); int q5Output = getNextWire(garblingContext); int q6Output = getNextWire(garblingContext); int q7Output = getNextWire(garblingContext); int a0barOutput = getNextWire(garblingContext); int a1barOutput = getNextWire(garblingContext); int a5barOutput = getNextWire(garblingContext); int a6barOutput = getNextWire(garblingContext); XORGate(garbledCircuit, garblingContext, inputs[0], inputs[1], AOutput); XORGate(garbledCircuit, garblingContext, inputs[2], inputs[3], BOutput); XORGate(garbledCircuit, garblingContext, inputs[4], inputs[5], COutput); XORGate(garbledCircuit, garblingContext, inputs[6], inputs[7], DOutput); NOTGate(garbledCircuit, garblingContext, inputs[0], a0barOutput); NOTGate(garbledCircuit, garblingContext, inputs[1], a1barOutput); NOTGate(garbledCircuit, garblingContext, inputs[5], a5barOutput); NOTGate(garbledCircuit, garblingContext, inputs[6], a6barOutput); int tempWireq0 = getNextWire(garblingContext); XORGate(garbledCircuit, garblingContext, a0barOutput, COutput, tempWireq0); XORGate(garbledCircuit, garblingContext, tempWireq0, DOutput, q0Output); int tempWireq1 = getNextWire(garblingContext); XORGate(garbledCircuit, garblingContext, a5barOutput, AOutput, tempWireq1); XORGate(garbledCircuit, garblingContext, tempWireq1, DOutput, q1Output); int tempWireq2 = getNextWire(garblingContext); XORGate(garbledCircuit, garblingContext, inputs[2], AOutput, tempWireq2); XORGate(garbledCircuit, garblingContext, tempWireq2, DOutput, q2Output); int tempWireq3 = getNextWire(garblingContext); XORGate(garbledCircuit, garblingContext, inputs[7], AOutput, tempWireq3); XORGate(garbledCircuit, garblingContext, tempWireq3, BOutput, q3Output); int tempWireq4 = getNextWire(garblingContext); XORGate(garbledCircuit, garblingContext, inputs[4], AOutput, tempWireq4); XORGate(garbledCircuit, garblingContext, tempWireq4, BOutput, q4Output); int tempWireq5 = getNextWire(garblingContext); XORGate(garbledCircuit, garblingContext, a1barOutput, BOutput, tempWireq5); XORGate(garbledCircuit, garblingContext, tempWireq5, COutput, q5Output); int tempWireq6 = getNextWire(garblingContext); XORGate(garbledCircuit, garblingContext, a6barOutput, BOutput, tempWireq6); XORGate(garbledCircuit, garblingContext, tempWireq6, COutput, q6Output); int tempWireq7 = getNextWire(garblingContext); XORGate(garbledCircuit, garblingContext, inputs[3], COutput, tempWireq7); XORGate(garbledCircuit, garblingContext, tempWireq7, DOutput, q7Output); outputs[0] = q0Output; outputs[1] = q1Output; outputs[2] = q2Output; outputs[3] = q3Output; outputs[4] = q4Output; outputs[5] = q5Output; outputs[6] = q6Output; outputs[7] = q7Output; return 0; }