コード例 #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 decryption_round_function(uint8_t *data,uint8_t *rkey, uint8_t *temp){
	uint8_t i;

	for(i=0;i<8;i++) data[i] ^= READ_ROUND_KEY_BYTE(rkey[i]);

	L_layerInv(data, temp);
	S_layer(data);
}
コード例 #3
0
void Decrypt(uint8_t *block, uint8_t *roundKeys)
{
	uint8_t i;
	uint8_t temp[4];

	for(i=0;i<8;i++) block[i] ^= READ_ROUND_KEY_BYTE(roundKeys[i]);
	S_layer(block);
	for(i=1;i<NUMBER_OF_ROUNDS;i++) decryption_round_function(block,roundKeys+BLOCK_SIZE*i, temp);
	for(i=0;i<BLOCK_SIZE;i++) block[i] ^= READ_ROUND_KEY_BYTE(roundKeys[i])^READ_ROUND_KEY_BYTE(roundKeys[160+i]);
}
コード例 #4
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);
		}
	}
}
コード例 #5
0
void decryption_round_function(uint8_t *data,uint8_t *rkey,uint8_t round,uint8_t *temp){
	uint8_t i;

	for(i=0;i<4;i++){
		data[2*i] ^= READ_ROUND_KEY_BYTE(rkey[2*i]);
		data[2*i+1] ^= (READ_ROUND_KEY_BYTE(rkey[2*i+1])+READ_ROUND_CONSTANT_BYTE(round_constants[76-round*4+i]));
	}
		
	L_layerInv(data, temp);
	S_layer(data, temp);
}
コード例 #6
0
void Decrypt(uint8_t *block, uint8_t *roundKeys)
{
	uint8_t i;
	for(i=0;i<BLOCK_SIZE;i++) block[i] ^= READ_ROUND_KEY_BYTE(roundKeys[i]);
	S_layer(block);
	for(i=0;i<(NUMBER_OF_ROUNDS-1);i++) decryption_round_function(block,roundKeys+BLOCK_SIZE,i);
	for(i=0;i<4;i++){
		block[2*i] ^= READ_ROUND_KEY_BYTE(roundKeys[2*i])^READ_ROUND_KEY_BYTE(roundKeys[8+2*i]);
		block[2*i+1] ^= READ_ROUND_KEY_BYTE(roundKeys[2*i+1])^(READ_ROUND_KEY_BYTE(roundKeys[8+2*i+1])+READ_ROUND_CONSTANT_BYTE(round_constants[i]));
	}
}