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; }
//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); } }