示例#1
0
void round_function(uint8_t *data,uint8_t *rkey,uint8_t mode){
	uint8_t i, temp[4];
	for(i=0;i<8;i++) data[i] ^= READ_ROUND_KEY_BYTE(rkey[i]);
	if(mode==ENC){
		S_layer(data)
		L_layer(data)
	}
	else if(mode==DEC){
		L_layerInv(data)
		S_layer(data)
	}
	else{//last-enc or first-dec round
	   S_layer(data)
	}
}
示例#2
0
void round_functionNoKS(uint8_t *data,uint8_t *rkey,uint8_t mode,uint8_t round){
	uint8_t i;
	if(mode==LST) S_layer(data);//last-enc or first-dec round
	else{
		for(i=0;i<4;i++){
			data[2*i] ^= READ_ROUND_KEY_BYTE(rkey[2*i]);
			if(mode==ENC) data[2*i+1] ^= (READ_ROUND_KEY_BYTE(rkey[2*i+1])+READ_ROUND_CONSTANT_BYTE(round_constants[round*4+i]));
			else data[2*i+1] ^= (READ_ROUND_KEY_BYTE(rkey[2*i+1])+READ_ROUND_CONSTANT_BYTE(round_constants[76-round*4+i]));
		}
		if(mode==ENC){
			S_layer(data);
			L_layer(data);
		}
		else if(mode==DEC){
			L_layerInv(data);
			S_layer(data);
		}
	}
}