Beispiel #1
0
byte * AES128::decrypt(byte *message) {
	int i;
		
	memcpy((void*)state, (const void*)message, 16);
	
	initKey();
	/*Generate Round Keys*/
	/*
	for(i = 0; i < 10; i++) {
		computeKey(rcon[i], i+1);
	}
	*/
	
	inv_addRoundKey(10);
	inv_shiftRows();
	inv_subBytes();
	
	for(i = 0; i < 9; i++)
	{
		inv_addRoundKey(9-i);
		inv_mixColumns();
		inv_shiftRows();
		inv_subBytes();
	}
	
	inv_addRoundKey(0);
	memcpy((void*)message,(const void*)state,16);
	
	return message;
}
Beispiel #2
0
//Decrypts one 16-byte array of data
void AES::decryptBlock(int keySize, uint8_t* state, uint8_t* key) {
    int rounds=6+keySize/32;

    addRoundKey(state,key+rounds*16);

    for(int i=rounds-1;i>=0;i--) {

        inv_shiftRows(state);
        inv_subBytes(state);
        addRoundKey(state,key+16*i);
        if(i!=0) //don't mix columns on last round
            inv_mixColumns(state);
    }
}