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;
}
예제 #2
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;
}