コード例 #1
0
ファイル: yxyDES2.cpp プロジェクト: ndsl0827/Repairer
void yxyDES2::CompressFuncS(char* _src48, char* _dst32)
{
	char bTemp[8][6]={0};
	char dstBits[4]={0};
	for(int i=0;i<8;i++)
	{
		memcpy(bTemp[i],_src48+i*6,6);
		int iX = (bTemp[i][0])*2 + (bTemp[i][5]);
		int iY = 0;
		for(int j=1;j<5;j++)
		{
			iY += bTemp[i][j]<<(4-j);
		}
		Int2Bits(S_Box[i][iX][iY], dstBits);
		memcpy(_dst32 + i * 4, dstBits, 4);
	}

}
コード例 #2
0
ファイル: p2pcircuit.cpp プロジェクト: DBMI/CountEverything
// MUX circuit (for indexes)
// input: start gate id, if or not the vs is final, # of bits, if or not vs is left, current layer#, # of gates to skip,
//			whether or not the higher layer's vs uses MUX_value circuit,
//			vs number from the leftmost (on the current layer) of the tournament starting from 0,
//			whether vs is a pair or a single, number of parties
// output: final gate id
int CP2PCircuit::CreateMUXIndex(int id, int is_final, int num_bits, int num_vbits, int is_left, int layer_no, int gates_skip, int is_moreMUXvalue, int* vs_no, int is_alone, int nParties)
{
	int idx1=0;	// Note: actual index starts from 1
	int idx2=0;
	int* idx1_bits = new int[num_bits];
	int* idx2_bits = new int[num_bits];
	
	int tmpid = -1;
	int num_outgates = 0;
	// gets each input index's binary bits
	if (layer_no==0){
		for (int i=0;i<num_bits;i++){
			idx1_bits[i] = 0;
		}
		idx1 = vs_no[0]*2+1;
		Int2Bits(idx1, idx1_bits);
		if(!is_alone){
			for (int i=0;i<num_bits;i++){
				idx2_bits[i] = 0;
			}
			idx2 = vs_no[0]*2+2;	
			Int2Bits(idx2, idx2_bits);
		}
	}
	// another MUX circuit (for index)
	for (int k=0;k<num_bits;k++){
		(m_pGates+id)->type = G_XOR;
		m_nNumXORs++;
		(m_pGates+id)->p_num = 1;
		(m_pGates+id)->p_ids = New(1);
		tmpid = id + 1;
		(m_pGates+id)->p_ids[0] = tmpid;
		(m_pGates+tmpid)->right = id;
		
		// for provider and customer IN gates
		if (layer_no == 0){
			if(!is_alone){
				(m_pGates+id)->left = idx1_bits[k];
				(m_pGates+id)->right = idx2_bits[k];
			}
			else{
				(m_pGates+id)->right = idx1_bits[k];
			}
		}

		id++;
		(m_pGates+id)->type = G_AND;
		(m_pGates+id)->p_num = 1;
		(m_pGates+id)->p_ids = New(1);
		tmpid = id + 1;
		(m_pGates+id)->p_ids[0] = tmpid;
		(m_pGates+tmpid)->right = id;
		id++;
		(m_pGates+id)->type = G_XOR;
		m_nNumXORs++;
		// for provider and customer IN gates
		if (layer_no == 0 && !is_alone){
			(m_pGates+id)->left = idx1_bits[k];
		}
		if (!is_final){
			if (is_left){
				if(is_moreMUXvalue){
					(m_pGates+id)->p_num = 2;
					(m_pGates+id)->p_ids = New(2);
					tmpid = id + (num_bits-k-1)*MUX_GATES+1	+ num_vbits*CMP_GATES + num_vbits*MUX_GATES + MUX_GATES*k + gates_skip;
					(m_pGates+id)->p_ids[0] = tmpid;
					(m_pGates+tmpid)->left = id;
					tmpid = id + (num_bits-k-1)*MUX_GATES+1 + num_vbits*CMP_GATES + num_vbits*MUX_GATES + MUX_GATES*k +2 + gates_skip;
					(m_pGates+id)->p_ids[1] = tmpid;
					(m_pGates+tmpid)->left = id;
				}
				else{
					(m_pGates+id)->p_num = 2;
					(m_pGates+id)->p_ids = New(2);
					tmpid = id + (num_bits-k-1)*MUX_GATES+1	+ num_vbits*CMP_GATES + MUX_GATES*k + gates_skip;
					(m_pGates+id)->p_ids[0] = tmpid;
					(m_pGates+tmpid)->left = id;
					
					#ifdef _DEBUG
					cout << "last left index goes to:"<< tmpid << endl;
					#endif
					tmpid = id + (num_bits-k-1)*MUX_GATES+1 + num_vbits*CMP_GATES + MUX_GATES*k +2 + gates_skip;
					(m_pGates+id)->p_ids[1] = tmpid;
					(m_pGates+tmpid)->left = id;
				}
			}
			else{
				if(is_moreMUXvalue){
					(m_pGates+id)->p_num = 1;
					(m_pGates+id)->p_ids = New(1);
					tmpid = id + (num_bits-k-1)*MUX_GATES+1	+ num_vbits*CMP_GATES + num_vbits*MUX_GATES + MUX_GATES*k;
					(m_pGates+id)->p_ids[0] = tmpid;
					(m_pGates+tmpid)->right = id;
				}
				else{
					(m_pGates+id)->p_num = 1;
					(m_pGates+id)->p_ids = New(1);
					tmpid = id + (num_bits-k-1)*MUX_GATES+1	+ num_vbits*CMP_GATES + MUX_GATES*k;
					(m_pGates+id)->p_ids[0] = tmpid;
					(m_pGates+tmpid)->right = id;

					#ifdef _DEBUG
					cout << "last right index goes to:"<< tmpid << endl;
					#endif
				}
			}
		}
		else{
			// Final Output!!!!
			(m_pGates+id)->p_num = 1;
			(m_pGates+id)->p_ids = New(1);
			tmpid = m_vOutputStart[nParties-1]+num_outgates;
			(m_pGates+id)->p_ids[0] = tmpid;
			cout << "Output Gate id:" << id << endl;
			cout << "Final Output Gate id:" << tmpid << endl;
			(m_pGates+tmpid)->left = id;
			num_outgates++;
		}
		id++;
	} 
	return id;
}