snipt

Ctrl+h for KB shortcuts
#23149

C++

decryption from online

/* 
****************************************************************** 
**       Advanced Encryption Standard implementation in C.      ** 
**       By Niyaz PK                                            ** 
**       E-mail: niyazpk@gmail.com                              ** 
**       Downloaded from Website: www.hoozi.com                 ** 
****************************************************************** 
This is the source code for decryption using the latest AES algorithm. 
****************************************************************** 
*/  
   
// Include stdio.h for standard input/output.  
// Used for giving output to the screen.  
#include<stdio.h>  
   
// The number of columns comprising a state in AES. This is a constant in AES. Value=4  
#define Nb 4  
   
// The number of rounds in AES Cipher. It is simply initiated to zero. The actual value is recieved in the program.  
int Nr=0;  
   
// The number of 32 bit words in the key. It is simply initiated to zero. The actual value is recieved in the program.  
int Nk=0;  
   
// in - it is the array that holds the CipherText to be decrypted.  
// out - it is the array that holds the output of the for decryption.  
// state - the array that holds the intermediate results during decryption.  
unsigned char in[16], out[16], state[4][4];  
   
// The array that stores the round keys.  
unsigned char RoundKey[240];  
   
// The Key input to the AES Program  
unsigned char Key[32];  
   
int getSBoxInvert(int num)  
{  
    int rsbox[256] = {  
    0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,  
    0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,  
    0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,  
    0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,  
    0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,  
    0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,  
    0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,  
    0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,  
    0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,  
    0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,  
    0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,  
    0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,  
    0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,  
    0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,  
    0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,  
    0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d };  
    return rsbox[num];  
}  
   
int getSBoxValue(int num)  
{  
    int sbox[256] = {  
    //0     1    2      3     4    5     6     7      8    9     A      B    C     D     E     F  
    0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,  
    0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,  
    0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,  
    0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,  
    0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,  
    0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,  
    0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,  
    0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,  
    0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,  
    0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,  
    0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,  
    0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,  
    0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,  
    0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,  
    0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,  
    0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 };  
    return sbox[num];  
}  
   
// The round constant word array, Rcon[i], contains the values given by  
// x to th e power (i-1) being powers of x (x is denoted as {02}) in the field GF(2^8)  
// Note that i starts at 1, not 0).  
int Rcon[255] = {  
    0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a,  
    0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39,  
    0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,  
    0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8,  
    0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef,  
    0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc,  
    0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b,  
    0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3,  
    0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94,  
    0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20,  
    0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35,  
    0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f,  
    0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04,  
    0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63,  
    0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,  
    0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb  };  
   
// This function produces Nb(Nr+1) round keys. The round keys are used in each round to decrypt the states.  
void KeyExpansion()  
{  
    int i,j;  
    unsigned char temp[4],k;  
     
        // The first round key is the key itself.  
    for(i=0;i<Nk;i++)  
    {  
        RoundKey[i*4]=Key[i*4];  
        RoundKey[i*4+1]=Key[i*4+1];  
        RoundKey[i*4+2]=Key[i*4+2];  
        RoundKey[i*4+3]=Key[i*4+3];  
    }  
   
    // All other round keys are found from the previous round keys.  
    while (i < (Nb * (Nr+1)))  
    {  
        for(j=0;j<4;j++)  
        {  
            temp[j]=RoundKey[(i-1) * 4 + j];  
        }  
        if (i % Nk == 0)  
        {  
            // This function rotates the 4 bytes in a word to the left once.  
            // [a0,a1,a2,a3] becomes [a1,a2,a3,a0]  
   
            // Function RotWord()  
            {  
                k = temp[0];  
                temp[0] = temp[1];  
                temp[1] = temp[2];  
                temp[2] = temp[3];  
                temp[3] = k;  
            }  
   
            // SubWord() is a function that takes a four-byte input word and  
            // applies the S-box to each of the four bytes to produce an output word.  
   
            // Function Subword()  
            {  
                temp[0]=getSBoxValue(temp[0]);  
                temp[1]=getSBoxValue(temp[1]);  
                temp[2]=getSBoxValue(temp[2]);  
                temp[3]=getSBoxValue(temp[3]);  
            }  
   
            temp[0] =  temp[0] ^ Rcon[i/Nk];  
        }  
        else if (Nk > 6 && i % Nk == 4)  
        {  
            // Function Subword()  
            {  
                temp[0]=getSBoxValue(temp[0]);  
                temp[1]=getSBoxValue(temp[1]);  
                temp[2]=getSBoxValue(temp[2]);  
                temp[3]=getSBoxValue(temp[3]);  
            }  
        }  
        RoundKey[i*4+0] = RoundKey[(i-Nk)*4+0] ^ temp[0];  
        RoundKey[i*4+1] = RoundKey[(i-Nk)*4+1] ^ temp[1];  
        RoundKey[i*4+2] = RoundKey[(i-Nk)*4+2] ^ temp[2];  
        RoundKey[i*4+3] = RoundKey[(i-Nk)*4+3] ^ temp[3];  
        i++;  
    }  
}  
   
// This function adds the round key to state.  
// The round key is added to the state by an XOR function.  
void AddRoundKey(int round)  
{  
    int i,j;  
    for(i=0;i<4;i++)  
    {  
        for(j=0;j<4;j++)  
        {  
            state[j][i] ^= RoundKey[round * Nb * 4 + i * Nb + j];  
        }  
    }  
}  
   
// The SubBytes Function Substitutes the values in the  
// state matrix with values in an S-box.  
void InvSubBytes()  
{  
    int i,j;  
    for(i=0;i<4;i++)  
    {  
        for(j=0;j<4;j++)  
        {  
            state[i][j] = getSBoxInvert(state[i][j]);  
   
        }  
    }  
}  
   
// The ShiftRows() function shifts the rows in the state to the left.  
// Each row is shifted with different offset.  
// Offset = Row number. So the first row is not shifted.  
void InvShiftRows()  
{  
    unsigned char temp;  
   
    // Rotate first row 1 columns to right     
        temp=state[1][3];  
    state[1][3]=state[1][2];  
    state[1][2]=state[1][1];  
    state[1][1]=state[1][0];  
    state[1][0]=temp;  
   
    // Rotate second row 2 columns to right     
        temp=state[2][0];  
    state[2][0]=state[2][2];  
    state[2][2]=temp;  
   
    temp=state[2][1];  
    state[2][1]=state[2][3];  
    state[2][3]=temp;  
   
    // Rotate third row 3 columns to right  
    temp=state[3][0];  
    state[3][0]=state[3][1];  
    state[3][1]=state[3][2];  
    state[3][2]=state[3][3];  
    state[3][3]=temp;  
}  
   
// xtime is a macro that finds the product of {02} and the argument to xtime modulo {1b}   
#define xtime(x)   ((x<<1) ^ (((x>>7) & 1) * 0x1b))  
   
// Multiplty is a macro used to multiply numbers in the field GF(2^8)  
#define Multiply(x,y) (((y & 1) * x) ^ ((y>>1 & 1) * xtime(x)) ^ ((y>>2 & 1) * xtime(xtime(x))) ^ ((y>>3 & 1) * xtime(xtime(xtime(x)))) ^ ((y>>4 & 1) * xtime(xtime(xtime(xtime(x))))))  
   
// MixColumns function mixes the columns of the state matrix.  
// The method used to multiply may be difficult to understand for beginners.  
// Please use the references to gain more information.  
void InvMixColumns()  
{  
    int i;  
    unsigned char a,b,c,d;  
    for(i=0;i<4;i++)  
    {     
     
        a = state[0][i];  
        b = state[1][i];  
        c = state[2][i];  
        d = state[3][i];  
   
         
        state[0][i] = Multiply(a, 0x0e) ^ Multiply(b, 0x0b) ^ Multiply(c, 0x0d) ^ Multiply(d, 0x09);  
        state[1][i] = Multiply(a, 0x09) ^ Multiply(b, 0x0e) ^ Multiply(c, 0x0b) ^ Multiply(d, 0x0d);  
        state[2][i] = Multiply(a, 0x0d) ^ Multiply(b, 0x09) ^ Multiply(c, 0x0e) ^ Multiply(d, 0x0b);  
        state[3][i] = Multiply(a, 0x0b) ^ Multiply(b, 0x0d) ^ Multiply(c, 0x09) ^ Multiply(d, 0x0e);  
    }  
}  
   
// InvCipher is the main function that decrypts the CipherText.  
void InvCipher()  
{  
    int i,j,round=0;  
   
    //Copy the input CipherText to state array.  
    for(i=0;i<4;i++)  
    {  
        for(j=0;j<4;j++)  
        {  
            state[j][i] = in[i*4 + j];  
        }  
    }  
   
    // Add the First round key to the state before starting the rounds.  
       AddRoundKey(Nr);  
   
   
   
            // There will be Nr rounds.  
    // The first Nr-1 rounds are identical.  
    // These Nr-1 rounds are executed in the loop below.  
    for(round=Nr-1;round>0;round--)  
    {  
        InvShiftRows();  
        InvSubBytes();  
        AddRoundKey(round);  
        InvMixColumns();  
    }  
     
        // The last round is given below.  
    // The MixColumns function is not here in the last round.  
    InvShiftRows();  
    InvSubBytes();  
    AddRoundKey(0);  
   
    // The decryption process is over.  
    // Copy the state array to output array.  
    for(i=0;i<4;i++)  
    {  
        for(j=0;j<4;j++)  
        {  
            out[i*4+j]=state[j][i];  
        }  
    }  
}  
void main()  
{  
    int i;  
   
    // Receive the length of key here.  
    while(Nr!=128 && Nr!=192 && Nr!=256)  
    {  
        printf("Enter the length of Key(128, 192 or 256 only): ");  
        scanf("%d",&Nr);  
    }  
    // Calculate Nk and Nr from the received value.  
    Nk = Nr / 32;  
    Nr = Nk + 6;  
   
   
   
// Part 1 is for demonstrative purpose. The key and plaintext are given in the program itself.  
//     Part 1: ********************************************************  
     
    // The array temp stores the key.  
    // The array temp2 stores the plaintext.  
    unsigned char temp[32] = {0x00  ,0x01  ,0x02  ,0x03  ,0x04  ,0x05  ,0x06  ,0x07  ,0x08  ,0x09  ,0x0a  ,0x0b  ,0x0c  ,0x0d  ,0x0e  ,0x0f};  
    unsigned char temp2[16]= {0x69  ,0xc4  ,0xe0  ,0xd8  ,0x6a  ,0x7b  ,0x04  ,0x30  ,0xd8  ,0xcd  ,0xb7  ,0x80  ,0x70  ,0xb4  ,0xc5  ,0x5a};  
     
        // Copy the Key and CipherText  
    for(i=0;i<Nk*4;i++)  
    {  
        Key[i]=temp[i];  
        in[i]=temp2[i];  
    }  
   
//           *********************************************************  
   
   
   
   
// Uncomment Part 2 if you need to read Key and CipherText from the keyboard.  
//     Part 2: ********************************************************  
/* 
    //Clear the input buffer 
    flushall(); 
  
    //Recieve the Key from the user 
    printf("Enter the Key in hexadecimal: "); 
    for(i=0;i<Nk*4;i++) 
    { 
        scanf("%x",&Key[i]); 
    } 
  
    printf("Enter the CipherText in hexadecimal: "); 
    for(i=0;i<Nb*4;i++) 
    { 
        scanf("%x",&in[i]); 
    } 
*/  
//             ********************************************************  
   
   
    //The Key-Expansion routine must be called before the decryption routine.  
       KeyExpansion();  
   
    // The next function call decrypts the CipherText with the Key using AES algorithm.  
       InvCipher();  
   
    // Output the decrypted text.  
    printf("\nText after decryption:\n");  
    for(i=0;i<Nb*4;i++)  
    {  
        printf("%02x ",out[i]);  
    }  
    printf("\n\n");  
}  
https://snipt.net/embed/f7fa7dad095ddb227f997a5b99cd2e23/
https://snipt.net/raw/f7fa7dad095ddb227f997a5b99cd2e23/
f7fa7dad095ddb227f997a5b99cd2e23
cpp
C++
375
2014-04-19T20:39:26
True
False
/api/public/snipt/23149/
decryption-from-online
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><a href="#L-1"> 1</a> <a href="#L-2"> 2</a> <a href="#L-3"> 3</a> <a href="#L-4"> 4</a> <a href="#L-5"> 5</a> <a href="#L-6"> 6</a> <a href="#L-7"> 7</a> <a href="#L-8"> 8</a> <a href="#L-9"> 9</a> <a href="#L-10"> 10</a> <a href="#L-11"> 11</a> <a href="#L-12"> 12</a> <a href="#L-13"> 13</a> <a href="#L-14"> 14</a> <a href="#L-15"> 15</a> <a href="#L-16"> 16</a> <a href="#L-17"> 17</a> <a href="#L-18"> 18</a> <a href="#L-19"> 19</a> <a href="#L-20"> 20</a> <a href="#L-21"> 21</a> <a href="#L-22"> 22</a> <a href="#L-23"> 23</a> <a href="#L-24"> 24</a> <a href="#L-25"> 25</a> <a href="#L-26"> 26</a> <a href="#L-27"> 27</a> <a href="#L-28"> 28</a> <a href="#L-29"> 29</a> <a href="#L-30"> 30</a> <a href="#L-31"> 31</a> <a href="#L-32"> 32</a> <a href="#L-33"> 33</a> <a href="#L-34"> 34</a> <a href="#L-35"> 35</a> <a href="#L-36"> 36</a> <a href="#L-37"> 37</a> <a href="#L-38"> 38</a> <a href="#L-39"> 39</a> <a href="#L-40"> 40</a> <a href="#L-41"> 41</a> <a href="#L-42"> 42</a> <a href="#L-43"> 43</a> <a href="#L-44"> 44</a> <a href="#L-45"> 45</a> <a href="#L-46"> 46</a> <a href="#L-47"> 47</a> <a href="#L-48"> 48</a> <a href="#L-49"> 49</a> <a href="#L-50"> 50</a> <a href="#L-51"> 51</a> <a href="#L-52"> 52</a> <a href="#L-53"> 53</a> <a href="#L-54"> 54</a> <a href="#L-55"> 55</a> <a href="#L-56"> 56</a> <a href="#L-57"> 57</a> <a href="#L-58"> 58</a> <a href="#L-59"> 59</a> <a href="#L-60"> 60</a> <a href="#L-61"> 61</a> <a href="#L-62"> 62</a> <a href="#L-63"> 63</a> <a href="#L-64"> 64</a> <a href="#L-65"> 65</a> <a href="#L-66"> 66</a> <a href="#L-67"> 67</a> <a href="#L-68"> 68</a> <a href="#L-69"> 69</a> <a href="#L-70"> 70</a> <a href="#L-71"> 71</a> <a href="#L-72"> 72</a> <a href="#L-73"> 73</a> <a href="#L-74"> 74</a> <a href="#L-75"> 75</a> <a href="#L-76"> 76</a> <a href="#L-77"> 77</a> <a href="#L-78"> 78</a> <a href="#L-79"> 79</a> <a href="#L-80"> 80</a> <a href="#L-81"> 81</a> <a href="#L-82"> 82</a> <a href="#L-83"> 83</a> <a href="#L-84"> 84</a> <a href="#L-85"> 85</a> <a href="#L-86"> 86</a> <a href="#L-87"> 87</a> <a href="#L-88"> 88</a> <a href="#L-89"> 89</a> <a href="#L-90"> 90</a> <a href="#L-91"> 91</a> <a href="#L-92"> 92</a> <a href="#L-93"> 93</a> <a href="#L-94"> 94</a> <a href="#L-95"> 95</a> <a href="#L-96"> 96</a> <a href="#L-97"> 97</a> <a href="#L-98"> 98</a> <a href="#L-99"> 99</a> <a href="#L-100">100</a> <a href="#L-101">101</a> <a href="#L-102">102</a> <a href="#L-103">103</a> <a href="#L-104">104</a> <a href="#L-105">105</a> <a href="#L-106">106</a> <a href="#L-107">107</a> <a href="#L-108">108</a> <a href="#L-109">109</a> <a href="#L-110">110</a> <a href="#L-111">111</a> <a href="#L-112">112</a> <a href="#L-113">113</a> <a href="#L-114">114</a> <a href="#L-115">115</a> <a href="#L-116">116</a> <a href="#L-117">117</a> <a href="#L-118">118</a> <a href="#L-119">119</a> <a href="#L-120">120</a> <a href="#L-121">121</a> <a href="#L-122">122</a> <a href="#L-123">123</a> <a href="#L-124">124</a> <a href="#L-125">125</a> <a href="#L-126">126</a> <a href="#L-127">127</a> <a href="#L-128">128</a> <a href="#L-129">129</a> <a href="#L-130">130</a> <a href="#L-131">131</a> <a href="#L-132">132</a> <a href="#L-133">133</a> <a href="#L-134">134</a> <a href="#L-135">135</a> <a href="#L-136">136</a> <a href="#L-137">137</a> <a href="#L-138">138</a> <a href="#L-139">139</a> <a href="#L-140">140</a> <a href="#L-141">141</a> <a href="#L-142">142</a> <a href="#L-143">143</a> <a href="#L-144">144</a> <a href="#L-145">145</a> <a href="#L-146">146</a> <a href="#L-147">147</a> <a href="#L-148">148</a> <a href="#L-149">149</a> <a href="#L-150">150</a> <a href="#L-151">151</a> <a href="#L-152">152</a> <a href="#L-153">153</a> <a href="#L-154">154</a> <a href="#L-155">155</a> <a href="#L-156">156</a> <a href="#L-157">157</a> <a href="#L-158">158</a> <a href="#L-159">159</a> <a href="#L-160">160</a> <a href="#L-161">161</a> <a href="#L-162">162</a> <a href="#L-163">163</a> <a href="#L-164">164</a> <a href="#L-165">165</a> <a href="#L-166">166</a> <a href="#L-167">167</a> <a href="#L-168">168</a> <a href="#L-169">169</a> <a href="#L-170">170</a> <a href="#L-171">171</a> <a href="#L-172">172</a> <a href="#L-173">173</a> <a href="#L-174">174</a> <a href="#L-175">175</a> <a href="#L-176">176</a> <a href="#L-177">177</a> <a href="#L-178">178</a> <a href="#L-179">179</a> <a href="#L-180">180</a> <a href="#L-181">181</a> <a href="#L-182">182</a> <a href="#L-183">183</a> <a href="#L-184">184</a> <a href="#L-185">185</a> <a href="#L-186">186</a> <a href="#L-187">187</a> <a href="#L-188">188</a> <a href="#L-189">189</a> <a href="#L-190">190</a> <a href="#L-191">191</a> <a href="#L-192">192</a> <a href="#L-193">193</a> <a href="#L-194">194</a> <a href="#L-195">195</a> <a href="#L-196">196</a> <a href="#L-197">197</a> <a href="#L-198">198</a> <a href="#L-199">199</a> <a href="#L-200">200</a> <a href="#L-201">201</a> <a href="#L-202">202</a> <a href="#L-203">203</a> <a href="#L-204">204</a> <a href="#L-205">205</a> <a href="#L-206">206</a> <a href="#L-207">207</a> <a href="#L-208">208</a> <a href="#L-209">209</a> <a href="#L-210">210</a> <a href="#L-211">211</a> <a href="#L-212">212</a> <a href="#L-213">213</a> <a href="#L-214">214</a> <a href="#L-215">215</a> <a href="#L-216">216</a> <a href="#L-217">217</a> <a href="#L-218">218</a> <a href="#L-219">219</a> <a href="#L-220">220</a> <a href="#L-221">221</a> <a href="#L-222">222</a> <a href="#L-223">223</a> <a href="#L-224">224</a> <a href="#L-225">225</a> <a href="#L-226">226</a> <a href="#L-227">227</a> <a href="#L-228">228</a> <a href="#L-229">229</a> <a href="#L-230">230</a> <a href="#L-231">231</a> <a href="#L-232">232</a> <a href="#L-233">233</a> <a href="#L-234">234</a> <a href="#L-235">235</a> <a href="#L-236">236</a> <a href="#L-237">237</a> <a href="#L-238">238</a> <a href="#L-239">239</a> <a href="#L-240">240</a> <a href="#L-241">241</a> <a href="#L-242">242</a> <a href="#L-243">243</a> <a href="#L-244">244</a> <a href="#L-245">245</a> <a href="#L-246">246</a> <a href="#L-247">247</a> <a href="#L-248">248</a> <a href="#L-249">249</a> <a href="#L-250">250</a> <a href="#L-251">251</a> <a href="#L-252">252</a> <a href="#L-253">253</a> <a href="#L-254">254</a> <a href="#L-255">255</a> <a href="#L-256">256</a> <a href="#L-257">257</a> <a href="#L-258">258</a> <a href="#L-259">259</a> <a href="#L-260">260</a> <a href="#L-261">261</a> <a href="#L-262">262</a> <a href="#L-263">263</a> <a href="#L-264">264</a> <a href="#L-265">265</a> <a href="#L-266">266</a> <a href="#L-267">267</a> <a href="#L-268">268</a> <a href="#L-269">269</a> <a href="#L-270">270</a> <a href="#L-271">271</a> <a href="#L-272">272</a> <a href="#L-273">273</a> <a href="#L-274">274</a> <a href="#L-275">275</a> <a href="#L-276">276</a> <a href="#L-277">277</a> <a href="#L-278">278</a> <a href="#L-279">279</a> <a href="#L-280">280</a> <a href="#L-281">281</a> <a href="#L-282">282</a> <a href="#L-283">283</a> <a href="#L-284">284</a> <a href="#L-285">285</a> <a href="#L-286">286</a> <a href="#L-287">287</a> <a href="#L-288">288</a> <a href="#L-289">289</a> <a href="#L-290">290</a> <a href="#L-291">291</a> <a href="#L-292">292</a> <a href="#L-293">293</a> <a href="#L-294">294</a> <a href="#L-295">295</a> <a href="#L-296">296</a> <a href="#L-297">297</a> <a href="#L-298">298</a> <a href="#L-299">299</a> <a href="#L-300">300</a> <a href="#L-301">301</a> <a href="#L-302">302</a> <a href="#L-303">303</a> <a href="#L-304">304</a> <a href="#L-305">305</a> <a href="#L-306">306</a> <a href="#L-307">307</a> <a href="#L-308">308</a> <a href="#L-309">309</a> <a href="#L-310">310</a> <a href="#L-311">311</a> <a href="#L-312">312</a> <a href="#L-313">313</a> <a href="#L-314">314</a> <a href="#L-315">315</a> <a href="#L-316">316</a> <a href="#L-317">317</a> <a href="#L-318">318</a> <a href="#L-319">319</a> <a href="#L-320">320</a> <a href="#L-321">321</a> <a href="#L-322">322</a> <a href="#L-323">323</a> <a href="#L-324">324</a> <a href="#L-325">325</a> <a href="#L-326">326</a> <a href="#L-327">327</a> <a href="#L-328">328</a> <a href="#L-329">329</a> <a href="#L-330">330</a> <a href="#L-331">331</a> <a href="#L-332">332</a> <a href="#L-333">333</a> <a href="#L-334">334</a> <a href="#L-335">335</a> <a href="#L-336">336</a> <a href="#L-337">337</a> <a href="#L-338">338</a> <a href="#L-339">339</a> <a href="#L-340">340</a> <a href="#L-341">341</a> <a href="#L-342">342</a> <a href="#L-343">343</a> <a href="#L-344">344</a> <a href="#L-345">345</a> <a href="#L-346">346</a> <a href="#L-347">347</a> <a href="#L-348">348</a> <a href="#L-349">349</a> <a href="#L-350">350</a> <a href="#L-351">351</a> <a href="#L-352">352</a> <a href="#L-353">353</a> <a href="#L-354">354</a> <a href="#L-355">355</a> <a href="#L-356">356</a> <a href="#L-357">357</a> <a href="#L-358">358</a> <a href="#L-359">359</a> <a href="#L-360">360</a> <a href="#L-361">361</a> <a href="#L-362">362</a> <a href="#L-363">363</a> <a href="#L-364">364</a> <a href="#L-365">365</a> <a href="#L-366">366</a> <a href="#L-367">367</a> <a href="#L-368">368</a> <a href="#L-369">369</a> <a href="#L-370">370</a> <a href="#L-371">371</a> <a href="#L-372">372</a> <a href="#L-373">373</a> <a href="#L-374">374</a> <a href="#L-375">375</a></pre></div></td><td class="code"><div class="highlight"><pre><span id="L-1"><a name="L-1"></a><span class="cm">/* </span> </span><span id="L-2"><a name="L-2"></a><span class="cm">****************************************************************** </span> </span><span id="L-3"><a name="L-3"></a><span class="cm">** Advanced Encryption Standard implementation in C. ** </span> </span><span id="L-4"><a name="L-4"></a><span class="cm">** By Niyaz PK ** </span> </span><span id="L-5"><a name="L-5"></a><span class="cm">** E-mail: niyazpk@gmail.com ** </span> </span><span id="L-6"><a name="L-6"></a><span class="cm">** Downloaded from Website: www.hoozi.com ** </span> </span><span id="L-7"><a name="L-7"></a><span class="cm">****************************************************************** </span> </span><span id="L-8"><a name="L-8"></a><span class="cm">This is the source code for decryption using the latest AES algorithm. </span> </span><span id="L-9"><a name="L-9"></a><span class="cm">****************************************************************** </span> </span><span id="L-10"><a name="L-10"></a><span class="cm">*/</span> </span><span id="L-11"><a name="L-11"></a> </span><span id="L-12"><a name="L-12"></a><span class="c1">// Include stdio.h for standard input/output. </span> </span><span id="L-13"><a name="L-13"></a><span class="c1">// Used for giving output to the screen. </span> </span><span id="L-14"><a name="L-14"></a><span class="cp">#include&lt;stdio.h&gt; </span> </span><span id="L-15"><a name="L-15"></a> </span><span id="L-16"><a name="L-16"></a><span class="c1">// The number of columns comprising a state in AES. This is a constant in AES. Value=4 </span> </span><span id="L-17"><a name="L-17"></a><span class="cp">#define Nb 4 </span> </span><span id="L-18"><a name="L-18"></a> </span><span id="L-19"><a name="L-19"></a><span class="c1">// The number of rounds in AES Cipher. It is simply initiated to zero. The actual value is recieved in the program. </span> </span><span id="L-20"><a name="L-20"></a><span class="kt">int</span> <span class="n">Nr</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span> </span><span id="L-21"><a name="L-21"></a> </span><span id="L-22"><a name="L-22"></a><span class="c1">// The number of 32 bit words in the key. It is simply initiated to zero. The actual value is recieved in the program. </span> </span><span id="L-23"><a name="L-23"></a><span class="kt">int</span> <span class="n">Nk</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span> </span><span id="L-24"><a name="L-24"></a> </span><span id="L-25"><a name="L-25"></a><span class="c1">// in - it is the array that holds the CipherText to be decrypted. </span> </span><span id="L-26"><a name="L-26"></a><span class="c1">// out - it is the array that holds the output of the for decryption. </span> </span><span id="L-27"><a name="L-27"></a><span class="c1">// state - the array that holds the intermediate results during decryption. </span> </span><span id="L-28"><a name="L-28"></a><span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">in</span><span class="p">[</span><span class="mi">16</span><span class="p">],</span> <span class="n">out</span><span class="p">[</span><span class="mi">16</span><span class="p">],</span> <span class="n">state</span><span class="p">[</span><span class="mi">4</span><span class="p">][</span><span class="mi">4</span><span class="p">];</span> </span><span id="L-29"><a name="L-29"></a> </span><span id="L-30"><a name="L-30"></a><span class="c1">// The array that stores the round keys. </span> </span><span id="L-31"><a name="L-31"></a><span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">RoundKey</span><span class="p">[</span><span class="mi">240</span><span class="p">];</span> </span><span id="L-32"><a name="L-32"></a> </span><span id="L-33"><a name="L-33"></a><span class="c1">// The Key input to the AES Program </span> </span><span id="L-34"><a name="L-34"></a><span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">Key</span><span class="p">[</span><span class="mi">32</span><span class="p">];</span> </span><span id="L-35"><a name="L-35"></a> </span><span id="L-36"><a name="L-36"></a><span class="kt">int</span> <span class="nf">getSBoxInvert</span><span class="p">(</span><span class="kt">int</span> <span class="n">num</span><span class="p">)</span> </span><span id="L-37"><a name="L-37"></a><span class="p">{</span> </span><span id="L-38"><a name="L-38"></a> <span class="kt">int</span> <span class="n">rsbox</span><span class="p">[</span><span class="mi">256</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-39"><a name="L-39"></a> <span class="mh">0x52</span><span class="p">,</span> <span class="mh">0x09</span><span class="p">,</span> <span class="mh">0x6a</span><span class="p">,</span> <span class="mh">0xd5</span><span class="p">,</span> <span class="mh">0x30</span><span class="p">,</span> <span class="mh">0x36</span><span class="p">,</span> <span class="mh">0xa5</span><span class="p">,</span> <span class="mh">0x38</span><span class="p">,</span> <span class="mh">0xbf</span><span class="p">,</span> <span class="mh">0x40</span><span class="p">,</span> <span class="mh">0xa3</span><span class="p">,</span> <span class="mh">0x9e</span><span class="p">,</span> <span class="mh">0x81</span><span class="p">,</span> <span class="mh">0xf3</span><span class="p">,</span> <span class="mh">0xd7</span><span class="p">,</span> <span class="mh">0xfb</span><span class="p">,</span> </span><span id="L-40"><a name="L-40"></a> <span class="mh">0x7c</span><span class="p">,</span> <span class="mh">0xe3</span><span class="p">,</span> <span class="mh">0x39</span><span class="p">,</span> <span class="mh">0x82</span><span class="p">,</span> <span class="mh">0x9b</span><span class="p">,</span> <span class="mh">0x2f</span><span class="p">,</span> <span class="mh">0xff</span><span class="p">,</span> <span class="mh">0x87</span><span class="p">,</span> <span class="mh">0x34</span><span class="p">,</span> <span class="mh">0x8e</span><span class="p">,</span> <span class="mh">0x43</span><span class="p">,</span> <span class="mh">0x44</span><span class="p">,</span> <span class="mh">0xc4</span><span class="p">,</span> <span class="mh">0xde</span><span class="p">,</span> <span class="mh">0xe9</span><span class="p">,</span> <span class="mh">0xcb</span><span class="p">,</span> </span><span id="L-41"><a name="L-41"></a> <span class="mh">0x54</span><span class="p">,</span> <span class="mh">0x7b</span><span class="p">,</span> <span class="mh">0x94</span><span class="p">,</span> <span class="mh">0x32</span><span class="p">,</span> <span class="mh">0xa6</span><span class="p">,</span> <span class="mh">0xc2</span><span class="p">,</span> <span class="mh">0x23</span><span class="p">,</span> <span class="mh">0x3d</span><span class="p">,</span> <span class="mh">0xee</span><span class="p">,</span> <span class="mh">0x4c</span><span class="p">,</span> <span class="mh">0x95</span><span class="p">,</span> <span class="mh">0x0b</span><span class="p">,</span> <span class="mh">0x42</span><span class="p">,</span> <span class="mh">0xfa</span><span class="p">,</span> <span class="mh">0xc3</span><span class="p">,</span> <span class="mh">0x4e</span><span class="p">,</span> </span><span id="L-42"><a name="L-42"></a> <span class="mh">0x08</span><span class="p">,</span> <span class="mh">0x2e</span><span class="p">,</span> <span class="mh">0xa1</span><span class="p">,</span> <span class="mh">0x66</span><span class="p">,</span> <span class="mh">0x28</span><span class="p">,</span> <span class="mh">0xd9</span><span class="p">,</span> <span class="mh">0x24</span><span class="p">,</span> <span class="mh">0xb2</span><span class="p">,</span> <span class="mh">0x76</span><span class="p">,</span> <span class="mh">0x5b</span><span class="p">,</span> <span class="mh">0xa2</span><span class="p">,</span> <span class="mh">0x49</span><span class="p">,</span> <span class="mh">0x6d</span><span class="p">,</span> <span class="mh">0x8b</span><span class="p">,</span> <span class="mh">0xd1</span><span class="p">,</span> <span class="mh">0x25</span><span class="p">,</span> </span><span id="L-43"><a name="L-43"></a> <span class="mh">0x72</span><span class="p">,</span> <span class="mh">0xf8</span><span class="p">,</span> <span class="mh">0xf6</span><span class="p">,</span> <span class="mh">0x64</span><span class="p">,</span> <span class="mh">0x86</span><span class="p">,</span> <span class="mh">0x68</span><span class="p">,</span> <span class="mh">0x98</span><span class="p">,</span> <span class="mh">0x16</span><span class="p">,</span> <span class="mh">0xd4</span><span class="p">,</span> <span class="mh">0xa4</span><span class="p">,</span> <span class="mh">0x5c</span><span class="p">,</span> <span class="mh">0xcc</span><span class="p">,</span> <span class="mh">0x5d</span><span class="p">,</span> <span class="mh">0x65</span><span class="p">,</span> <span class="mh">0xb6</span><span class="p">,</span> <span class="mh">0x92</span><span class="p">,</span> </span><span id="L-44"><a name="L-44"></a> <span class="mh">0x6c</span><span class="p">,</span> <span class="mh">0x70</span><span class="p">,</span> <span class="mh">0x48</span><span class="p">,</span> <span class="mh">0x50</span><span class="p">,</span> <span class="mh">0xfd</span><span class="p">,</span> <span class="mh">0xed</span><span class="p">,</span> <span class="mh">0xb9</span><span class="p">,</span> <span class="mh">0xda</span><span class="p">,</span> <span class="mh">0x5e</span><span class="p">,</span> <span class="mh">0x15</span><span class="p">,</span> <span class="mh">0x46</span><span class="p">,</span> <span class="mh">0x57</span><span class="p">,</span> <span class="mh">0xa7</span><span class="p">,</span> <span class="mh">0x8d</span><span class="p">,</span> <span class="mh">0x9d</span><span class="p">,</span> <span class="mh">0x84</span><span class="p">,</span> </span><span id="L-45"><a name="L-45"></a> <span class="mh">0x90</span><span class="p">,</span> <span class="mh">0xd8</span><span class="p">,</span> <span class="mh">0xab</span><span class="p">,</span> <span class="mh">0x00</span><span class="p">,</span> <span class="mh">0x8c</span><span class="p">,</span> <span class="mh">0xbc</span><span class="p">,</span> <span class="mh">0xd3</span><span class="p">,</span> <span class="mh">0x0a</span><span class="p">,</span> <span class="mh">0xf7</span><span class="p">,</span> <span class="mh">0xe4</span><span class="p">,</span> <span class="mh">0x58</span><span class="p">,</span> <span class="mh">0x05</span><span class="p">,</span> <span class="mh">0xb8</span><span class="p">,</span> <span class="mh">0xb3</span><span class="p">,</span> <span class="mh">0x45</span><span class="p">,</span> <span class="mh">0x06</span><span class="p">,</span> </span><span id="L-46"><a name="L-46"></a> <span class="mh">0xd0</span><span class="p">,</span> <span class="mh">0x2c</span><span class="p">,</span> <span class="mh">0x1e</span><span class="p">,</span> <span class="mh">0x8f</span><span class="p">,</span> <span class="mh">0xca</span><span class="p">,</span> <span class="mh">0x3f</span><span class="p">,</span> <span class="mh">0x0f</span><span class="p">,</span> <span class="mh">0x02</span><span class="p">,</span> <span class="mh">0xc1</span><span class="p">,</span> <span class="mh">0xaf</span><span class="p">,</span> <span class="mh">0xbd</span><span class="p">,</span> <span class="mh">0x03</span><span class="p">,</span> <span class="mh">0x01</span><span class="p">,</span> <span class="mh">0x13</span><span class="p">,</span> <span class="mh">0x8a</span><span class="p">,</span> <span class="mh">0x6b</span><span class="p">,</span> </span><span id="L-47"><a name="L-47"></a> <span class="mh">0x3a</span><span class="p">,</span> <span class="mh">0x91</span><span class="p">,</span> <span class="mh">0x11</span><span class="p">,</span> <span class="mh">0x41</span><span class="p">,</span> <span class="mh">0x4f</span><span class="p">,</span> <span class="mh">0x67</span><span class="p">,</span> <span class="mh">0xdc</span><span class="p">,</span> <span class="mh">0xea</span><span class="p">,</span> <span class="mh">0x97</span><span class="p">,</span> <span class="mh">0xf2</span><span class="p">,</span> <span class="mh">0xcf</span><span class="p">,</span> <span class="mh">0xce</span><span class="p">,</span> <span class="mh">0xf0</span><span class="p">,</span> <span class="mh">0xb4</span><span class="p">,</span> <span class="mh">0xe6</span><span class="p">,</span> <span class="mh">0x73</span><span class="p">,</span> </span><span id="L-48"><a name="L-48"></a> <span class="mh">0x96</span><span class="p">,</span> <span class="mh">0xac</span><span class="p">,</span> <span class="mh">0x74</span><span class="p">,</span> <span class="mh">0x22</span><span class="p">,</span> <span class="mh">0xe7</span><span class="p">,</span> <span class="mh">0xad</span><span class="p">,</span> <span class="mh">0x35</span><span class="p">,</span> <span class="mh">0x85</span><span class="p">,</span> <span class="mh">0xe2</span><span class="p">,</span> <span class="mh">0xf9</span><span class="p">,</span> <span class="mh">0x37</span><span class="p">,</span> <span class="mh">0xe8</span><span class="p">,</span> <span class="mh">0x1c</span><span class="p">,</span> <span class="mh">0x75</span><span class="p">,</span> <span class="mh">0xdf</span><span class="p">,</span> <span class="mh">0x6e</span><span class="p">,</span> </span><span id="L-49"><a name="L-49"></a> <span class="mh">0x47</span><span class="p">,</span> <span class="mh">0xf1</span><span class="p">,</span> <span class="mh">0x1a</span><span class="p">,</span> <span class="mh">0x71</span><span class="p">,</span> <span class="mh">0x1d</span><span class="p">,</span> <span class="mh">0x29</span><span class="p">,</span> <span class="mh">0xc5</span><span class="p">,</span> <span class="mh">0x89</span><span class="p">,</span> <span class="mh">0x6f</span><span class="p">,</span> <span class="mh">0xb7</span><span class="p">,</span> <span class="mh">0x62</span><span class="p">,</span> <span class="mh">0x0e</span><span class="p">,</span> <span class="mh">0xaa</span><span class="p">,</span> <span class="mh">0x18</span><span class="p">,</span> <span class="mh">0xbe</span><span class="p">,</span> <span class="mh">0x1b</span><span class="p">,</span> </span><span id="L-50"><a name="L-50"></a> <span class="mh">0xfc</span><span class="p">,</span> <span class="mh">0x56</span><span class="p">,</span> <span class="mh">0x3e</span><span class="p">,</span> <span class="mh">0x4b</span><span class="p">,</span> <span class="mh">0xc6</span><span class="p">,</span> <span class="mh">0xd2</span><span class="p">,</span> <span class="mh">0x79</span><span class="p">,</span> <span class="mh">0x20</span><span class="p">,</span> <span class="mh">0x9a</span><span class="p">,</span> <span class="mh">0xdb</span><span class="p">,</span> <span class="mh">0xc0</span><span class="p">,</span> <span class="mh">0xfe</span><span class="p">,</span> <span class="mh">0x78</span><span class="p">,</span> <span class="mh">0xcd</span><span class="p">,</span> <span class="mh">0x5a</span><span class="p">,</span> <span class="mh">0xf4</span><span class="p">,</span> </span><span id="L-51"><a name="L-51"></a> <span class="mh">0x1f</span><span class="p">,</span> <span class="mh">0xdd</span><span class="p">,</span> <span class="mh">0xa8</span><span class="p">,</span> <span class="mh">0x33</span><span class="p">,</span> <span class="mh">0x88</span><span class="p">,</span> <span class="mh">0x07</span><span class="p">,</span> <span class="mh">0xc7</span><span class="p">,</span> <span class="mh">0x31</span><span class="p">,</span> <span class="mh">0xb1</span><span class="p">,</span> <span class="mh">0x12</span><span class="p">,</span> <span class="mh">0x10</span><span class="p">,</span> <span class="mh">0x59</span><span class="p">,</span> <span class="mh">0x27</span><span class="p">,</span> <span class="mh">0x80</span><span class="p">,</span> <span class="mh">0xec</span><span class="p">,</span> <span class="mh">0x5f</span><span class="p">,</span> </span><span id="L-52"><a name="L-52"></a> <span class="mh">0x60</span><span class="p">,</span> <span class="mh">0x51</span><span class="p">,</span> <span class="mh">0x7f</span><span class="p">,</span> <span class="mh">0xa9</span><span class="p">,</span> <span class="mh">0x19</span><span class="p">,</span> <span class="mh">0xb5</span><span class="p">,</span> <span class="mh">0x4a</span><span class="p">,</span> <span class="mh">0x0d</span><span class="p">,</span> <span class="mh">0x2d</span><span class="p">,</span> <span class="mh">0xe5</span><span class="p">,</span> <span class="mh">0x7a</span><span class="p">,</span> <span class="mh">0x9f</span><span class="p">,</span> <span class="mh">0x93</span><span class="p">,</span> <span class="mh">0xc9</span><span class="p">,</span> <span class="mh">0x9c</span><span class="p">,</span> <span class="mh">0xef</span><span class="p">,</span> </span><span id="L-53"><a name="L-53"></a> <span class="mh">0xa0</span><span class="p">,</span> <span class="mh">0xe0</span><span class="p">,</span> <span class="mh">0x3b</span><span class="p">,</span> <span class="mh">0x4d</span><span class="p">,</span> <span class="mh">0xae</span><span class="p">,</span> <span class="mh">0x2a</span><span class="p">,</span> <span class="mh">0xf5</span><span class="p">,</span> <span class="mh">0xb0</span><span class="p">,</span> <span class="mh">0xc8</span><span class="p">,</span> <span class="mh">0xeb</span><span class="p">,</span> <span class="mh">0xbb</span><span class="p">,</span> <span class="mh">0x3c</span><span class="p">,</span> <span class="mh">0x83</span><span class="p">,</span> <span class="mh">0x53</span><span class="p">,</span> <span class="mh">0x99</span><span class="p">,</span> <span class="mh">0x61</span><span class="p">,</span> </span><span id="L-54"><a name="L-54"></a> <span class="mh">0x17</span><span class="p">,</span> <span class="mh">0x2b</span><span class="p">,</span> <span class="mh">0x04</span><span class="p">,</span> <span class="mh">0x7e</span><span class="p">,</span> <span class="mh">0xba</span><span class="p">,</span> <span class="mh">0x77</span><span class="p">,</span> <span class="mh">0xd6</span><span class="p">,</span> <span class="mh">0x26</span><span class="p">,</span> <span class="mh">0xe1</span><span class="p">,</span> <span class="mh">0x69</span><span class="p">,</span> <span class="mh">0x14</span><span class="p">,</span> <span class="mh">0x63</span><span class="p">,</span> <span class="mh">0x55</span><span class="p">,</span> <span class="mh">0x21</span><span class="p">,</span> <span class="mh">0x0c</span><span class="p">,</span> <span class="mh">0x7d</span> <span class="p">};</span> </span><span id="L-55"><a name="L-55"></a> <span class="k">return</span> <span class="n">rsbox</span><span class="p">[</span><span class="n">num</span><span class="p">];</span> </span><span id="L-56"><a name="L-56"></a><span class="p">}</span> </span><span id="L-57"><a name="L-57"></a> </span><span id="L-58"><a name="L-58"></a><span class="kt">int</span> <span class="nf">getSBoxValue</span><span class="p">(</span><span class="kt">int</span> <span class="n">num</span><span class="p">)</span> </span><span id="L-59"><a name="L-59"></a><span class="p">{</span> </span><span id="L-60"><a name="L-60"></a> <span class="kt">int</span> <span class="n">sbox</span><span class="p">[</span><span class="mi">256</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-61"><a name="L-61"></a> <span class="c1">//0 1 2 3 4 5 6 7 8 9 A B C D E F </span> </span><span id="L-62"><a name="L-62"></a> <span class="mh">0x63</span><span class="p">,</span> <span class="mh">0x7c</span><span class="p">,</span> <span class="mh">0x77</span><span class="p">,</span> <span class="mh">0x7b</span><span class="p">,</span> <span class="mh">0xf2</span><span class="p">,</span> <span class="mh">0x6b</span><span class="p">,</span> <span class="mh">0x6f</span><span class="p">,</span> <span class="mh">0xc5</span><span class="p">,</span> <span class="mh">0x30</span><span class="p">,</span> <span class="mh">0x01</span><span class="p">,</span> <span class="mh">0x67</span><span class="p">,</span> <span class="mh">0x2b</span><span class="p">,</span> <span class="mh">0xfe</span><span class="p">,</span> <span class="mh">0xd7</span><span class="p">,</span> <span class="mh">0xab</span><span class="p">,</span> <span class="mh">0x76</span><span class="p">,</span> </span><span id="L-63"><a name="L-63"></a> <span class="mh">0xca</span><span class="p">,</span> <span class="mh">0x82</span><span class="p">,</span> <span class="mh">0xc9</span><span class="p">,</span> <span class="mh">0x7d</span><span class="p">,</span> <span class="mh">0xfa</span><span class="p">,</span> <span class="mh">0x59</span><span class="p">,</span> <span class="mh">0x47</span><span class="p">,</span> <span class="mh">0xf0</span><span class="p">,</span> <span class="mh">0xad</span><span class="p">,</span> <span class="mh">0xd4</span><span class="p">,</span> <span class="mh">0xa2</span><span class="p">,</span> <span class="mh">0xaf</span><span class="p">,</span> <span class="mh">0x9c</span><span class="p">,</span> <span class="mh">0xa4</span><span class="p">,</span> <span class="mh">0x72</span><span class="p">,</span> <span class="mh">0xc0</span><span class="p">,</span> </span><span id="L-64"><a name="L-64"></a> <span class="mh">0xb7</span><span class="p">,</span> <span class="mh">0xfd</span><span class="p">,</span> <span class="mh">0x93</span><span class="p">,</span> <span class="mh">0x26</span><span class="p">,</span> <span class="mh">0x36</span><span class="p">,</span> <span class="mh">0x3f</span><span class="p">,</span> <span class="mh">0xf7</span><span class="p">,</span> <span class="mh">0xcc</span><span class="p">,</span> <span class="mh">0x34</span><span class="p">,</span> <span class="mh">0xa5</span><span class="p">,</span> <span class="mh">0xe5</span><span class="p">,</span> <span class="mh">0xf1</span><span class="p">,</span> <span class="mh">0x71</span><span class="p">,</span> <span class="mh">0xd8</span><span class="p">,</span> <span class="mh">0x31</span><span class="p">,</span> <span class="mh">0x15</span><span class="p">,</span> </span><span id="L-65"><a name="L-65"></a> <span class="mh">0x04</span><span class="p">,</span> <span class="mh">0xc7</span><span class="p">,</span> <span class="mh">0x23</span><span class="p">,</span> <span class="mh">0xc3</span><span class="p">,</span> <span class="mh">0x18</span><span class="p">,</span> <span class="mh">0x96</span><span class="p">,</span> <span class="mh">0x05</span><span class="p">,</span> <span class="mh">0x9a</span><span class="p">,</span> <span class="mh">0x07</span><span class="p">,</span> <span class="mh">0x12</span><span class="p">,</span> <span class="mh">0x80</span><span class="p">,</span> <span class="mh">0xe2</span><span class="p">,</span> <span class="mh">0xeb</span><span class="p">,</span> <span class="mh">0x27</span><span class="p">,</span> <span class="mh">0xb2</span><span class="p">,</span> <span class="mh">0x75</span><span class="p">,</span> </span><span id="L-66"><a name="L-66"></a> <span class="mh">0x09</span><span class="p">,</span> <span class="mh">0x83</span><span class="p">,</span> <span class="mh">0x2c</span><span class="p">,</span> <span class="mh">0x1a</span><span class="p">,</span> <span class="mh">0x1b</span><span class="p">,</span> <span class="mh">0x6e</span><span class="p">,</span> <span class="mh">0x5a</span><span class="p">,</span> <span class="mh">0xa0</span><span class="p">,</span> <span class="mh">0x52</span><span class="p">,</span> <span class="mh">0x3b</span><span class="p">,</span> <span class="mh">0xd6</span><span class="p">,</span> <span class="mh">0xb3</span><span class="p">,</span> <span class="mh">0x29</span><span class="p">,</span> <span class="mh">0xe3</span><span class="p">,</span> <span class="mh">0x2f</span><span class="p">,</span> <span class="mh">0x84</span><span class="p">,</span> </span><span id="L-67"><a name="L-67"></a> <span class="mh">0x53</span><span class="p">,</span> <span class="mh">0xd1</span><span class="p">,</span> <span class="mh">0x00</span><span class="p">,</span> <span class="mh">0xed</span><span class="p">,</span> <span class="mh">0x20</span><span class="p">,</span> <span class="mh">0xfc</span><span class="p">,</span> <span class="mh">0xb1</span><span class="p">,</span> <span class="mh">0x5b</span><span class="p">,</span> <span class="mh">0x6a</span><span class="p">,</span> <span class="mh">0xcb</span><span class="p">,</span> <span class="mh">0xbe</span><span class="p">,</span> <span class="mh">0x39</span><span class="p">,</span> <span class="mh">0x4a</span><span class="p">,</span> <span class="mh">0x4c</span><span class="p">,</span> <span class="mh">0x58</span><span class="p">,</span> <span class="mh">0xcf</span><span class="p">,</span> </span><span id="L-68"><a name="L-68"></a> <span class="mh">0xd0</span><span class="p">,</span> <span class="mh">0xef</span><span class="p">,</span> <span class="mh">0xaa</span><span class="p">,</span> <span class="mh">0xfb</span><span class="p">,</span> <span class="mh">0x43</span><span class="p">,</span> <span class="mh">0x4d</span><span class="p">,</span> <span class="mh">0x33</span><span class="p">,</span> <span class="mh">0x85</span><span class="p">,</span> <span class="mh">0x45</span><span class="p">,</span> <span class="mh">0xf9</span><span class="p">,</span> <span class="mh">0x02</span><span class="p">,</span> <span class="mh">0x7f</span><span class="p">,</span> <span class="mh">0x50</span><span class="p">,</span> <span class="mh">0x3c</span><span class="p">,</span> <span class="mh">0x9f</span><span class="p">,</span> <span class="mh">0xa8</span><span class="p">,</span> </span><span id="L-69"><a name="L-69"></a> <span class="mh">0x51</span><span class="p">,</span> <span class="mh">0xa3</span><span class="p">,</span> <span class="mh">0x40</span><span class="p">,</span> <span class="mh">0x8f</span><span class="p">,</span> <span class="mh">0x92</span><span class="p">,</span> <span class="mh">0x9d</span><span class="p">,</span> <span class="mh">0x38</span><span class="p">,</span> <span class="mh">0xf5</span><span class="p">,</span> <span class="mh">0xbc</span><span class="p">,</span> <span class="mh">0xb6</span><span class="p">,</span> <span class="mh">0xda</span><span class="p">,</span> <span class="mh">0x21</span><span class="p">,</span> <span class="mh">0x10</span><span class="p">,</span> <span class="mh">0xff</span><span class="p">,</span> <span class="mh">0xf3</span><span class="p">,</span> <span class="mh">0xd2</span><span class="p">,</span> </span><span id="L-70"><a name="L-70"></a> <span class="mh">0xcd</span><span class="p">,</span> <span class="mh">0x0c</span><span class="p">,</span> <span class="mh">0x13</span><span class="p">,</span> <span class="mh">0xec</span><span class="p">,</span> <span class="mh">0x5f</span><span class="p">,</span> <span class="mh">0x97</span><span class="p">,</span> <span class="mh">0x44</span><span class="p">,</span> <span class="mh">0x17</span><span class="p">,</span> <span class="mh">0xc4</span><span class="p">,</span> <span class="mh">0xa7</span><span class="p">,</span> <span class="mh">0x7e</span><span class="p">,</span> <span class="mh">0x3d</span><span class="p">,</span> <span class="mh">0x64</span><span class="p">,</span> <span class="mh">0x5d</span><span class="p">,</span> <span class="mh">0x19</span><span class="p">,</span> <span class="mh">0x73</span><span class="p">,</span> </span><span id="L-71"><a name="L-71"></a> <span class="mh">0x60</span><span class="p">,</span> <span class="mh">0x81</span><span class="p">,</span> <span class="mh">0x4f</span><span class="p">,</span> <span class="mh">0xdc</span><span class="p">,</span> <span class="mh">0x22</span><span class="p">,</span> <span class="mh">0x2a</span><span class="p">,</span> <span class="mh">0x90</span><span class="p">,</span> <span class="mh">0x88</span><span class="p">,</span> <span class="mh">0x46</span><span class="p">,</span> <span class="mh">0xee</span><span class="p">,</span> <span class="mh">0xb8</span><span class="p">,</span> <span class="mh">0x14</span><span class="p">,</span> <span class="mh">0xde</span><span class="p">,</span> <span class="mh">0x5e</span><span class="p">,</span> <span class="mh">0x0b</span><span class="p">,</span> <span class="mh">0xdb</span><span class="p">,</span> </span><span id="L-72"><a name="L-72"></a> <span class="mh">0xe0</span><span class="p">,</span> <span class="mh">0x32</span><span class="p">,</span> <span class="mh">0x3a</span><span class="p">,</span> <span class="mh">0x0a</span><span class="p">,</span> <span class="mh">0x49</span><span class="p">,</span> <span class="mh">0x06</span><span class="p">,</span> <span class="mh">0x24</span><span class="p">,</span> <span class="mh">0x5c</span><span class="p">,</span> <span class="mh">0xc2</span><span class="p">,</span> <span class="mh">0xd3</span><span class="p">,</span> <span class="mh">0xac</span><span class="p">,</span> <span class="mh">0x62</span><span class="p">,</span> <span class="mh">0x91</span><span class="p">,</span> <span class="mh">0x95</span><span class="p">,</span> <span class="mh">0xe4</span><span class="p">,</span> <span class="mh">0x79</span><span class="p">,</span> </span><span id="L-73"><a name="L-73"></a> <span class="mh">0xe7</span><span class="p">,</span> <span class="mh">0xc8</span><span class="p">,</span> <span class="mh">0x37</span><span class="p">,</span> <span class="mh">0x6d</span><span class="p">,</span> <span class="mh">0x8d</span><span class="p">,</span> <span class="mh">0xd5</span><span class="p">,</span> <span class="mh">0x4e</span><span class="p">,</span> <span class="mh">0xa9</span><span class="p">,</span> <span class="mh">0x6c</span><span class="p">,</span> <span class="mh">0x56</span><span class="p">,</span> <span class="mh">0xf4</span><span class="p">,</span> <span class="mh">0xea</span><span class="p">,</span> <span class="mh">0x65</span><span class="p">,</span> <span class="mh">0x7a</span><span class="p">,</span> <span class="mh">0xae</span><span class="p">,</span> <span class="mh">0x08</span><span class="p">,</span> </span><span id="L-74"><a name="L-74"></a> <span class="mh">0xba</span><span class="p">,</span> <span class="mh">0x78</span><span class="p">,</span> <span class="mh">0x25</span><span class="p">,</span> <span class="mh">0x2e</span><span class="p">,</span> <span class="mh">0x1c</span><span class="p">,</span> <span class="mh">0xa6</span><span class="p">,</span> <span class="mh">0xb4</span><span class="p">,</span> <span class="mh">0xc6</span><span class="p">,</span> <span class="mh">0xe8</span><span class="p">,</span> <span class="mh">0xdd</span><span class="p">,</span> <span class="mh">0x74</span><span class="p">,</span> <span class="mh">0x1f</span><span class="p">,</span> <span class="mh">0x4b</span><span class="p">,</span> <span class="mh">0xbd</span><span class="p">,</span> <span class="mh">0x8b</span><span class="p">,</span> <span class="mh">0x8a</span><span class="p">,</span> </span><span id="L-75"><a name="L-75"></a> <span class="mh">0x70</span><span class="p">,</span> <span class="mh">0x3e</span><span class="p">,</span> <span class="mh">0xb5</span><span class="p">,</span> <span class="mh">0x66</span><span class="p">,</span> <span class="mh">0x48</span><span class="p">,</span> <span class="mh">0x03</span><span class="p">,</span> <span class="mh">0xf6</span><span class="p">,</span> <span class="mh">0x0e</span><span class="p">,</span> <span class="mh">0x61</span><span class="p">,</span> <span class="mh">0x35</span><span class="p">,</span> <span class="mh">0x57</span><span class="p">,</span> <span class="mh">0xb9</span><span class="p">,</span> <span class="mh">0x86</span><span class="p">,</span> <span class="mh">0xc1</span><span class="p">,</span> <span class="mh">0x1d</span><span class="p">,</span> <span class="mh">0x9e</span><span class="p">,</span> </span><span id="L-76"><a name="L-76"></a> <span class="mh">0xe1</span><span class="p">,</span> <span class="mh">0xf8</span><span class="p">,</span> <span class="mh">0x98</span><span class="p">,</span> <span class="mh">0x11</span><span class="p">,</span> <span class="mh">0x69</span><span class="p">,</span> <span class="mh">0xd9</span><span class="p">,</span> <span class="mh">0x8e</span><span class="p">,</span> <span class="mh">0x94</span><span class="p">,</span> <span class="mh">0x9b</span><span class="p">,</span> <span class="mh">0x1e</span><span class="p">,</span> <span class="mh">0x87</span><span class="p">,</span> <span class="mh">0xe9</span><span class="p">,</span> <span class="mh">0xce</span><span class="p">,</span> <span class="mh">0x55</span><span class="p">,</span> <span class="mh">0x28</span><span class="p">,</span> <span class="mh">0xdf</span><span class="p">,</span> </span><span id="L-77"><a name="L-77"></a> <span class="mh">0x8c</span><span class="p">,</span> <span class="mh">0xa1</span><span class="p">,</span> <span class="mh">0x89</span><span class="p">,</span> <span class="mh">0x0d</span><span class="p">,</span> <span class="mh">0xbf</span><span class="p">,</span> <span class="mh">0xe6</span><span class="p">,</span> <span class="mh">0x42</span><span class="p">,</span> <span class="mh">0x68</span><span class="p">,</span> <span class="mh">0x41</span><span class="p">,</span> <span class="mh">0x99</span><span class="p">,</span> <span class="mh">0x2d</span><span class="p">,</span> <span class="mh">0x0f</span><span class="p">,</span> <span class="mh">0xb0</span><span class="p">,</span> <span class="mh">0x54</span><span class="p">,</span> <span class="mh">0xbb</span><span class="p">,</span> <span class="mh">0x16</span> <span class="p">};</span> </span><span id="L-78"><a name="L-78"></a> <span class="k">return</span> <span class="n">sbox</span><span class="p">[</span><span class="n">num</span><span class="p">];</span> </span><span id="L-79"><a name="L-79"></a><span class="p">}</span> </span><span id="L-80"><a name="L-80"></a> </span><span id="L-81"><a name="L-81"></a><span class="c1">// The round constant word array, Rcon[i], contains the values given by </span> </span><span id="L-82"><a name="L-82"></a><span class="c1">// x to th e power (i-1) being powers of x (x is denoted as {02}) in the field GF(2^8) </span> </span><span id="L-83"><a name="L-83"></a><span class="c1">// Note that i starts at 1, not 0). </span> </span><span id="L-84"><a name="L-84"></a><span class="kt">int</span> <span class="n">Rcon</span><span class="p">[</span><span class="mi">255</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-85"><a name="L-85"></a> <span class="mh">0x8d</span><span class="p">,</span> <span class="mh">0x01</span><span class="p">,</span> <span class="mh">0x02</span><span class="p">,</span> <span class="mh">0x04</span><span class="p">,</span> <span class="mh">0x08</span><span class="p">,</span> <span class="mh">0x10</span><span class="p">,</span> <span class="mh">0x20</span><span class="p">,</span> <span class="mh">0x40</span><span class="p">,</span> <span class="mh">0x80</span><span class="p">,</span> <span class="mh">0x1b</span><span class="p">,</span> <span class="mh">0x36</span><span class="p">,</span> <span class="mh">0x6c</span><span class="p">,</span> <span class="mh">0xd8</span><span class="p">,</span> <span class="mh">0xab</span><span class="p">,</span> <span class="mh">0x4d</span><span class="p">,</span> <span class="mh">0x9a</span><span class="p">,</span> </span><span id="L-86"><a name="L-86"></a> <span class="mh">0x2f</span><span class="p">,</span> <span class="mh">0x5e</span><span class="p">,</span> <span class="mh">0xbc</span><span class="p">,</span> <span class="mh">0x63</span><span class="p">,</span> <span class="mh">0xc6</span><span class="p">,</span> <span class="mh">0x97</span><span class="p">,</span> <span class="mh">0x35</span><span class="p">,</span> <span class="mh">0x6a</span><span class="p">,</span> <span class="mh">0xd4</span><span class="p">,</span> <span class="mh">0xb3</span><span class="p">,</span> <span class="mh">0x7d</span><span class="p">,</span> <span class="mh">0xfa</span><span class="p">,</span> <span class="mh">0xef</span><span class="p">,</span> <span class="mh">0xc5</span><span class="p">,</span> <span class="mh">0x91</span><span class="p">,</span> <span class="mh">0x39</span><span class="p">,</span> </span><span id="L-87"><a name="L-87"></a> <span class="mh">0x72</span><span class="p">,</span> <span class="mh">0xe4</span><span class="p">,</span> <span class="mh">0xd3</span><span class="p">,</span> <span class="mh">0xbd</span><span class="p">,</span> <span class="mh">0x61</span><span class="p">,</span> <span class="mh">0xc2</span><span class="p">,</span> <span class="mh">0x9f</span><span class="p">,</span> <span class="mh">0x25</span><span class="p">,</span> <span class="mh">0x4a</span><span class="p">,</span> <span class="mh">0x94</span><span class="p">,</span> <span class="mh">0x33</span><span class="p">,</span> <span class="mh">0x66</span><span class="p">,</span> <span class="mh">0xcc</span><span class="p">,</span> <span class="mh">0x83</span><span class="p">,</span> <span class="mh">0x1d</span><span class="p">,</span> <span class="mh">0x3a</span><span class="p">,</span> </span><span id="L-88"><a name="L-88"></a> <span class="mh">0x74</span><span class="p">,</span> <span class="mh">0xe8</span><span class="p">,</span> <span class="mh">0xcb</span><span class="p">,</span> <span class="mh">0x8d</span><span class="p">,</span> <span class="mh">0x01</span><span class="p">,</span> <span class="mh">0x02</span><span class="p">,</span> <span class="mh">0x04</span><span class="p">,</span> <span class="mh">0x08</span><span class="p">,</span> <span class="mh">0x10</span><span class="p">,</span> <span class="mh">0x20</span><span class="p">,</span> <span class="mh">0x40</span><span class="p">,</span> <span class="mh">0x80</span><span class="p">,</span> <span class="mh">0x1b</span><span class="p">,</span> <span class="mh">0x36</span><span class="p">,</span> <span class="mh">0x6c</span><span class="p">,</span> <span class="mh">0xd8</span><span class="p">,</span> </span><span id="L-89"><a name="L-89"></a> <span class="mh">0xab</span><span class="p">,</span> <span class="mh">0x4d</span><span class="p">,</span> <span class="mh">0x9a</span><span class="p">,</span> <span class="mh">0x2f</span><span class="p">,</span> <span class="mh">0x5e</span><span class="p">,</span> <span class="mh">0xbc</span><span class="p">,</span> <span class="mh">0x63</span><span class="p">,</span> <span class="mh">0xc6</span><span class="p">,</span> <span class="mh">0x97</span><span class="p">,</span> <span class="mh">0x35</span><span class="p">,</span> <span class="mh">0x6a</span><span class="p">,</span> <span class="mh">0xd4</span><span class="p">,</span> <span class="mh">0xb3</span><span class="p">,</span> <span class="mh">0x7d</span><span class="p">,</span> <span class="mh">0xfa</span><span class="p">,</span> <span class="mh">0xef</span><span class="p">,</span> </span><span id="L-90"><a name="L-90"></a> <span class="mh">0xc5</span><span class="p">,</span> <span class="mh">0x91</span><span class="p">,</span> <span class="mh">0x39</span><span class="p">,</span> <span class="mh">0x72</span><span class="p">,</span> <span class="mh">0xe4</span><span class="p">,</span> <span class="mh">0xd3</span><span class="p">,</span> <span class="mh">0xbd</span><span class="p">,</span> <span class="mh">0x61</span><span class="p">,</span> <span class="mh">0xc2</span><span class="p">,</span> <span class="mh">0x9f</span><span class="p">,</span> <span class="mh">0x25</span><span class="p">,</span> <span class="mh">0x4a</span><span class="p">,</span> <span class="mh">0x94</span><span class="p">,</span> <span class="mh">0x33</span><span class="p">,</span> <span class="mh">0x66</span><span class="p">,</span> <span class="mh">0xcc</span><span class="p">,</span> </span><span id="L-91"><a name="L-91"></a> <span class="mh">0x83</span><span class="p">,</span> <span class="mh">0x1d</span><span class="p">,</span> <span class="mh">0x3a</span><span class="p">,</span> <span class="mh">0x74</span><span class="p">,</span> <span class="mh">0xe8</span><span class="p">,</span> <span class="mh">0xcb</span><span class="p">,</span> <span class="mh">0x8d</span><span class="p">,</span> <span class="mh">0x01</span><span class="p">,</span> <span class="mh">0x02</span><span class="p">,</span> <span class="mh">0x04</span><span class="p">,</span> <span class="mh">0x08</span><span class="p">,</span> <span class="mh">0x10</span><span class="p">,</span> <span class="mh">0x20</span><span class="p">,</span> <span class="mh">0x40</span><span class="p">,</span> <span class="mh">0x80</span><span class="p">,</span> <span class="mh">0x1b</span><span class="p">,</span> </span><span id="L-92"><a name="L-92"></a> <span class="mh">0x36</span><span class="p">,</span> <span class="mh">0x6c</span><span class="p">,</span> <span class="mh">0xd8</span><span class="p">,</span> <span class="mh">0xab</span><span class="p">,</span> <span class="mh">0x4d</span><span class="p">,</span> <span class="mh">0x9a</span><span class="p">,</span> <span class="mh">0x2f</span><span class="p">,</span> <span class="mh">0x5e</span><span class="p">,</span> <span class="mh">0xbc</span><span class="p">,</span> <span class="mh">0x63</span><span class="p">,</span> <span class="mh">0xc6</span><span class="p">,</span> <span class="mh">0x97</span><span class="p">,</span> <span class="mh">0x35</span><span class="p">,</span> <span class="mh">0x6a</span><span class="p">,</span> <span class="mh">0xd4</span><span class="p">,</span> <span class="mh">0xb3</span><span class="p">,</span> </span><span id="L-93"><a name="L-93"></a> <span class="mh">0x7d</span><span class="p">,</span> <span class="mh">0xfa</span><span class="p">,</span> <span class="mh">0xef</span><span class="p">,</span> <span class="mh">0xc5</span><span class="p">,</span> <span class="mh">0x91</span><span class="p">,</span> <span class="mh">0x39</span><span class="p">,</span> <span class="mh">0x72</span><span class="p">,</span> <span class="mh">0xe4</span><span class="p">,</span> <span class="mh">0xd3</span><span class="p">,</span> <span class="mh">0xbd</span><span class="p">,</span> <span class="mh">0x61</span><span class="p">,</span> <span class="mh">0xc2</span><span class="p">,</span> <span class="mh">0x9f</span><span class="p">,</span> <span class="mh">0x25</span><span class="p">,</span> <span class="mh">0x4a</span><span class="p">,</span> <span class="mh">0x94</span><span class="p">,</span> </span><span id="L-94"><a name="L-94"></a> <span class="mh">0x33</span><span class="p">,</span> <span class="mh">0x66</span><span class="p">,</span> <span class="mh">0xcc</span><span class="p">,</span> <span class="mh">0x83</span><span class="p">,</span> <span class="mh">0x1d</span><span class="p">,</span> <span class="mh">0x3a</span><span class="p">,</span> <span class="mh">0x74</span><span class="p">,</span> <span class="mh">0xe8</span><span class="p">,</span> <span class="mh">0xcb</span><span class="p">,</span> <span class="mh">0x8d</span><span class="p">,</span> <span class="mh">0x01</span><span class="p">,</span> <span class="mh">0x02</span><span class="p">,</span> <span class="mh">0x04</span><span class="p">,</span> <span class="mh">0x08</span><span class="p">,</span> <span class="mh">0x10</span><span class="p">,</span> <span class="mh">0x20</span><span class="p">,</span> </span><span id="L-95"><a name="L-95"></a> <span class="mh">0x40</span><span class="p">,</span> <span class="mh">0x80</span><span class="p">,</span> <span class="mh">0x1b</span><span class="p">,</span> <span class="mh">0x36</span><span class="p">,</span> <span class="mh">0x6c</span><span class="p">,</span> <span class="mh">0xd8</span><span class="p">,</span> <span class="mh">0xab</span><span class="p">,</span> <span class="mh">0x4d</span><span class="p">,</span> <span class="mh">0x9a</span><span class="p">,</span> <span class="mh">0x2f</span><span class="p">,</span> <span class="mh">0x5e</span><span class="p">,</span> <span class="mh">0xbc</span><span class="p">,</span> <span class="mh">0x63</span><span class="p">,</span> <span class="mh">0xc6</span><span class="p">,</span> <span class="mh">0x97</span><span class="p">,</span> <span class="mh">0x35</span><span class="p">,</span> </span><span id="L-96"><a name="L-96"></a> <span class="mh">0x6a</span><span class="p">,</span> <span class="mh">0xd4</span><span class="p">,</span> <span class="mh">0xb3</span><span class="p">,</span> <span class="mh">0x7d</span><span class="p">,</span> <span class="mh">0xfa</span><span class="p">,</span> <span class="mh">0xef</span><span class="p">,</span> <span class="mh">0xc5</span><span class="p">,</span> <span class="mh">0x91</span><span class="p">,</span> <span class="mh">0x39</span><span class="p">,</span> <span class="mh">0x72</span><span class="p">,</span> <span class="mh">0xe4</span><span class="p">,</span> <span class="mh">0xd3</span><span class="p">,</span> <span class="mh">0xbd</span><span class="p">,</span> <span class="mh">0x61</span><span class="p">,</span> <span class="mh">0xc2</span><span class="p">,</span> <span class="mh">0x9f</span><span class="p">,</span> </span><span id="L-97"><a name="L-97"></a> <span class="mh">0x25</span><span class="p">,</span> <span class="mh">0x4a</span><span class="p">,</span> <span class="mh">0x94</span><span class="p">,</span> <span class="mh">0x33</span><span class="p">,</span> <span class="mh">0x66</span><span class="p">,</span> <span class="mh">0xcc</span><span class="p">,</span> <span class="mh">0x83</span><span class="p">,</span> <span class="mh">0x1d</span><span class="p">,</span> <span class="mh">0x3a</span><span class="p">,</span> <span class="mh">0x74</span><span class="p">,</span> <span class="mh">0xe8</span><span class="p">,</span> <span class="mh">0xcb</span><span class="p">,</span> <span class="mh">0x8d</span><span class="p">,</span> <span class="mh">0x01</span><span class="p">,</span> <span class="mh">0x02</span><span class="p">,</span> <span class="mh">0x04</span><span class="p">,</span> </span><span id="L-98"><a name="L-98"></a> <span class="mh">0x08</span><span class="p">,</span> <span class="mh">0x10</span><span class="p">,</span> <span class="mh">0x20</span><span class="p">,</span> <span class="mh">0x40</span><span class="p">,</span> <span class="mh">0x80</span><span class="p">,</span> <span class="mh">0x1b</span><span class="p">,</span> <span class="mh">0x36</span><span class="p">,</span> <span class="mh">0x6c</span><span class="p">,</span> <span class="mh">0xd8</span><span class="p">,</span> <span class="mh">0xab</span><span class="p">,</span> <span class="mh">0x4d</span><span class="p">,</span> <span class="mh">0x9a</span><span class="p">,</span> <span class="mh">0x2f</span><span class="p">,</span> <span class="mh">0x5e</span><span class="p">,</span> <span class="mh">0xbc</span><span class="p">,</span> <span class="mh">0x63</span><span class="p">,</span> </span><span id="L-99"><a name="L-99"></a> <span class="mh">0xc6</span><span class="p">,</span> <span class="mh">0x97</span><span class="p">,</span> <span class="mh">0x35</span><span class="p">,</span> <span class="mh">0x6a</span><span class="p">,</span> <span class="mh">0xd4</span><span class="p">,</span> <span class="mh">0xb3</span><span class="p">,</span> <span class="mh">0x7d</span><span class="p">,</span> <span class="mh">0xfa</span><span class="p">,</span> <span class="mh">0xef</span><span class="p">,</span> <span class="mh">0xc5</span><span class="p">,</span> <span class="mh">0x91</span><span class="p">,</span> <span class="mh">0x39</span><span class="p">,</span> <span class="mh">0x72</span><span class="p">,</span> <span class="mh">0xe4</span><span class="p">,</span> <span class="mh">0xd3</span><span class="p">,</span> <span class="mh">0xbd</span><span class="p">,</span> </span><span id="L-100"><a name="L-100"></a> <span class="mh">0x61</span><span class="p">,</span> <span class="mh">0xc2</span><span class="p">,</span> <span class="mh">0x9f</span><span class="p">,</span> <span class="mh">0x25</span><span class="p">,</span> <span class="mh">0x4a</span><span class="p">,</span> <span class="mh">0x94</span><span class="p">,</span> <span class="mh">0x33</span><span class="p">,</span> <span class="mh">0x66</span><span class="p">,</span> <span class="mh">0xcc</span><span class="p">,</span> <span class="mh">0x83</span><span class="p">,</span> <span class="mh">0x1d</span><span class="p">,</span> <span class="mh">0x3a</span><span class="p">,</span> <span class="mh">0x74</span><span class="p">,</span> <span class="mh">0xe8</span><span class="p">,</span> <span class="mh">0xcb</span> <span class="p">};</span> </span><span id="L-101"><a name="L-101"></a> </span><span id="L-102"><a name="L-102"></a><span class="c1">// This function produces Nb(Nr+1) round keys. The round keys are used in each round to decrypt the states. </span> </span><span id="L-103"><a name="L-103"></a><span class="kt">void</span> <span class="nf">KeyExpansion</span><span class="p">()</span> </span><span id="L-104"><a name="L-104"></a><span class="p">{</span> </span><span id="L-105"><a name="L-105"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">;</span> </span><span id="L-106"><a name="L-106"></a> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">temp</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span><span class="n">k</span><span class="p">;</span> </span><span id="L-107"><a name="L-107"></a> </span><span id="L-108"><a name="L-108"></a> <span class="c1">// The first round key is the key itself. </span> </span><span id="L-109"><a name="L-109"></a> <span class="k">for</span><span class="p">(</span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;</span><span class="n">Nk</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span> </span><span id="L-110"><a name="L-110"></a> <span class="p">{</span> </span><span id="L-111"><a name="L-111"></a> <span class="n">RoundKey</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">4</span><span class="p">]</span><span class="o">=</span><span class="n">Key</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">4</span><span class="p">];</span> </span><span id="L-112"><a name="L-112"></a> <span class="n">RoundKey</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">=</span><span class="n">Key</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">1</span><span class="p">];</span> </span><span id="L-113"><a name="L-113"></a> <span class="n">RoundKey</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">2</span><span class="p">]</span><span class="o">=</span><span class="n">Key</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">2</span><span class="p">];</span> </span><span id="L-114"><a name="L-114"></a> <span class="n">RoundKey</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">3</span><span class="p">]</span><span class="o">=</span><span class="n">Key</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">3</span><span class="p">];</span> </span><span id="L-115"><a name="L-115"></a> <span class="p">}</span> </span><span id="L-116"><a name="L-116"></a> </span><span id="L-117"><a name="L-117"></a> <span class="c1">// All other round keys are found from the previous round keys. </span> </span><span id="L-118"><a name="L-118"></a> <span class="k">while</span> <span class="p">(</span><span class="n">i</span> <span class="o">&lt;</span> <span class="p">(</span><span class="n">Nb</span> <span class="o">*</span> <span class="p">(</span><span class="n">Nr</span><span class="o">+</span><span class="mi">1</span><span class="p">)))</span> </span><span id="L-119"><a name="L-119"></a> <span class="p">{</span> </span><span id="L-120"><a name="L-120"></a> <span class="k">for</span><span class="p">(</span><span class="n">j</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">j</span><span class="o">&lt;</span><span class="mi">4</span><span class="p">;</span><span class="n">j</span><span class="o">++</span><span class="p">)</span> </span><span id="L-121"><a name="L-121"></a> <span class="p">{</span> </span><span id="L-122"><a name="L-122"></a> <span class="n">temp</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="o">=</span><span class="n">RoundKey</span><span class="p">[(</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="mi">4</span> <span class="o">+</span> <span class="n">j</span><span class="p">];</span> </span><span id="L-123"><a name="L-123"></a> <span class="p">}</span> </span><span id="L-124"><a name="L-124"></a> <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">%</span> <span class="n">Nk</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> </span><span id="L-125"><a name="L-125"></a> <span class="p">{</span> </span><span id="L-126"><a name="L-126"></a> <span class="c1">// This function rotates the 4 bytes in a word to the left once. </span> </span><span id="L-127"><a name="L-127"></a> <span class="c1">// [a0,a1,a2,a3] becomes [a1,a2,a3,a0] </span> </span><span id="L-128"><a name="L-128"></a> </span><span id="L-129"><a name="L-129"></a> <span class="c1">// Function RotWord() </span> </span><span id="L-130"><a name="L-130"></a> <span class="p">{</span> </span><span id="L-131"><a name="L-131"></a> <span class="n">k</span> <span class="o">=</span> <span class="n">temp</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> </span><span id="L-132"><a name="L-132"></a> <span class="n">temp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">temp</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> </span><span id="L-133"><a name="L-133"></a> <span class="n">temp</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">temp</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> </span><span id="L-134"><a name="L-134"></a> <span class="n">temp</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">temp</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span> </span><span id="L-135"><a name="L-135"></a> <span class="n">temp</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">k</span><span class="p">;</span> </span><span id="L-136"><a name="L-136"></a> <span class="p">}</span> </span><span id="L-137"><a name="L-137"></a> </span><span id="L-138"><a name="L-138"></a> <span class="c1">// SubWord() is a function that takes a four-byte input word and </span> </span><span id="L-139"><a name="L-139"></a> <span class="c1">// applies the S-box to each of the four bytes to produce an output word. </span> </span><span id="L-140"><a name="L-140"></a> </span><span id="L-141"><a name="L-141"></a> <span class="c1">// Function Subword() </span> </span><span id="L-142"><a name="L-142"></a> <span class="p">{</span> </span><span id="L-143"><a name="L-143"></a> <span class="n">temp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">=</span><span class="n">getSBoxValue</span><span class="p">(</span><span class="n">temp</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span> </span><span id="L-144"><a name="L-144"></a> <span class="n">temp</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">=</span><span class="n">getSBoxValue</span><span class="p">(</span><span class="n">temp</span><span class="p">[</span><span class="mi">1</span><span class="p">]);</span> </span><span id="L-145"><a name="L-145"></a> <span class="n">temp</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">=</span><span class="n">getSBoxValue</span><span class="p">(</span><span class="n">temp</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span> </span><span id="L-146"><a name="L-146"></a> <span class="n">temp</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">=</span><span class="n">getSBoxValue</span><span class="p">(</span><span class="n">temp</span><span class="p">[</span><span class="mi">3</span><span class="p">]);</span> </span><span id="L-147"><a name="L-147"></a> <span class="p">}</span> </span><span id="L-148"><a name="L-148"></a> </span><span id="L-149"><a name="L-149"></a> <span class="n">temp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">temp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">^</span> <span class="n">Rcon</span><span class="p">[</span><span class="n">i</span><span class="o">/</span><span class="n">Nk</span><span class="p">];</span> </span><span id="L-150"><a name="L-150"></a> <span class="p">}</span> </span><span id="L-151"><a name="L-151"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">Nk</span> <span class="o">&gt;</span> <span class="mi">6</span> <span class="o">&amp;&amp;</span> <span class="n">i</span> <span class="o">%</span> <span class="n">Nk</span> <span class="o">==</span> <span class="mi">4</span><span class="p">)</span> </span><span id="L-152"><a name="L-152"></a> <span class="p">{</span> </span><span id="L-153"><a name="L-153"></a> <span class="c1">// Function Subword() </span> </span><span id="L-154"><a name="L-154"></a> <span class="p">{</span> </span><span id="L-155"><a name="L-155"></a> <span class="n">temp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">=</span><span class="n">getSBoxValue</span><span class="p">(</span><span class="n">temp</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span> </span><span id="L-156"><a name="L-156"></a> <span class="n">temp</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">=</span><span class="n">getSBoxValue</span><span class="p">(</span><span class="n">temp</span><span class="p">[</span><span class="mi">1</span><span class="p">]);</span> </span><span id="L-157"><a name="L-157"></a> <span class="n">temp</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">=</span><span class="n">getSBoxValue</span><span class="p">(</span><span class="n">temp</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span> </span><span id="L-158"><a name="L-158"></a> <span class="n">temp</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">=</span><span class="n">getSBoxValue</span><span class="p">(</span><span class="n">temp</span><span class="p">[</span><span class="mi">3</span><span class="p">]);</span> </span><span id="L-159"><a name="L-159"></a> <span class="p">}</span> </span><span id="L-160"><a name="L-160"></a> <span class="p">}</span> </span><span id="L-161"><a name="L-161"></a> <span class="n">RoundKey</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">RoundKey</span><span class="p">[(</span><span class="n">i</span><span class="o">-</span><span class="n">Nk</span><span class="p">)</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">0</span><span class="p">]</span> <span class="o">^</span> <span class="n">temp</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> </span><span id="L-162"><a name="L-162"></a> <span class="n">RoundKey</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">RoundKey</span><span class="p">[(</span><span class="n">i</span><span class="o">-</span><span class="n">Nk</span><span class="p">)</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">^</span> <span class="n">temp</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> </span><span id="L-163"><a name="L-163"></a> <span class="n">RoundKey</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">RoundKey</span><span class="p">[(</span><span class="n">i</span><span class="o">-</span><span class="n">Nk</span><span class="p">)</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">2</span><span class="p">]</span> <span class="o">^</span> <span class="n">temp</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> </span><span id="L-164"><a name="L-164"></a> <span class="n">RoundKey</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">RoundKey</span><span class="p">[(</span><span class="n">i</span><span class="o">-</span><span class="n">Nk</span><span class="p">)</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">3</span><span class="p">]</span> <span class="o">^</span> <span class="n">temp</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span> </span><span id="L-165"><a name="L-165"></a> <span class="n">i</span><span class="o">++</span><span class="p">;</span> </span><span id="L-166"><a name="L-166"></a> <span class="p">}</span> </span><span id="L-167"><a name="L-167"></a><span class="p">}</span> </span><span id="L-168"><a name="L-168"></a> </span><span id="L-169"><a name="L-169"></a><span class="c1">// This function adds the round key to state. </span> </span><span id="L-170"><a name="L-170"></a><span class="c1">// The round key is added to the state by an XOR function. </span> </span><span id="L-171"><a name="L-171"></a><span class="kt">void</span> <span class="nf">AddRoundKey</span><span class="p">(</span><span class="kt">int</span> <span class="n">round</span><span class="p">)</span> </span><span id="L-172"><a name="L-172"></a><span class="p">{</span> </span><span id="L-173"><a name="L-173"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">;</span> </span><span id="L-174"><a name="L-174"></a> <span class="k">for</span><span class="p">(</span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;</span><span class="mi">4</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span> </span><span id="L-175"><a name="L-175"></a> <span class="p">{</span> </span><span id="L-176"><a name="L-176"></a> <span class="k">for</span><span class="p">(</span><span class="n">j</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">j</span><span class="o">&lt;</span><span class="mi">4</span><span class="p">;</span><span class="n">j</span><span class="o">++</span><span class="p">)</span> </span><span id="L-177"><a name="L-177"></a> <span class="p">{</span> </span><span id="L-178"><a name="L-178"></a> <span class="n">state</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="n">i</span><span class="p">]</span> <span class="o">^=</span> <span class="n">RoundKey</span><span class="p">[</span><span class="n">round</span> <span class="o">*</span> <span class="n">Nb</span> <span class="o">*</span> <span class="mi">4</span> <span class="o">+</span> <span class="n">i</span> <span class="o">*</span> <span class="n">Nb</span> <span class="o">+</span> <span class="n">j</span><span class="p">];</span> </span><span id="L-179"><a name="L-179"></a> <span class="p">}</span> </span><span id="L-180"><a name="L-180"></a> <span class="p">}</span> </span><span id="L-181"><a name="L-181"></a><span class="p">}</span> </span><span id="L-182"><a name="L-182"></a> </span><span id="L-183"><a name="L-183"></a><span class="c1">// The SubBytes Function Substitutes the values in the </span> </span><span id="L-184"><a name="L-184"></a><span class="c1">// state matrix with values in an S-box. </span> </span><span id="L-185"><a name="L-185"></a><span class="kt">void</span> <span class="nf">InvSubBytes</span><span class="p">()</span> </span><span id="L-186"><a name="L-186"></a><span class="p">{</span> </span><span id="L-187"><a name="L-187"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">;</span> </span><span id="L-188"><a name="L-188"></a> <span class="k">for</span><span class="p">(</span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;</span><span class="mi">4</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span> </span><span id="L-189"><a name="L-189"></a> <span class="p">{</span> </span><span id="L-190"><a name="L-190"></a> <span class="k">for</span><span class="p">(</span><span class="n">j</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">j</span><span class="o">&lt;</span><span class="mi">4</span><span class="p">;</span><span class="n">j</span><span class="o">++</span><span class="p">)</span> </span><span id="L-191"><a name="L-191"></a> <span class="p">{</span> </span><span id="L-192"><a name="L-192"></a> <span class="n">state</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">getSBoxInvert</span><span class="p">(</span><span class="n">state</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]);</span> </span><span id="L-193"><a name="L-193"></a> </span><span id="L-194"><a name="L-194"></a> <span class="p">}</span> </span><span id="L-195"><a name="L-195"></a> <span class="p">}</span> </span><span id="L-196"><a name="L-196"></a><span class="p">}</span> </span><span id="L-197"><a name="L-197"></a> </span><span id="L-198"><a name="L-198"></a><span class="c1">// The ShiftRows() function shifts the rows in the state to the left. </span> </span><span id="L-199"><a name="L-199"></a><span class="c1">// Each row is shifted with different offset. </span> </span><span id="L-200"><a name="L-200"></a><span class="c1">// Offset = Row number. So the first row is not shifted. </span> </span><span id="L-201"><a name="L-201"></a><span class="kt">void</span> <span class="nf">InvShiftRows</span><span class="p">()</span> </span><span id="L-202"><a name="L-202"></a><span class="p">{</span> </span><span id="L-203"><a name="L-203"></a> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">temp</span><span class="p">;</span> </span><span id="L-204"><a name="L-204"></a> </span><span id="L-205"><a name="L-205"></a> <span class="c1">// Rotate first row 1 columns to right </span> </span><span id="L-206"><a name="L-206"></a> <span class="n">temp</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">3</span><span class="p">];</span> </span><span id="L-207"><a name="L-207"></a> <span class="n">state</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">];</span> </span><span id="L-208"><a name="L-208"></a> <span class="n">state</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">];</span> </span><span id="L-209"><a name="L-209"></a> <span class="n">state</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">];</span> </span><span id="L-210"><a name="L-210"></a> <span class="n">state</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">=</span><span class="n">temp</span><span class="p">;</span> </span><span id="L-211"><a name="L-211"></a> </span><span id="L-212"><a name="L-212"></a> <span class="c1">// Rotate second row 2 columns to right </span> </span><span id="L-213"><a name="L-213"></a> <span class="n">temp</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">];</span> </span><span id="L-214"><a name="L-214"></a> <span class="n">state</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="mi">2</span><span class="p">];</span> </span><span id="L-215"><a name="L-215"></a> <span class="n">state</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span><span class="o">=</span><span class="n">temp</span><span class="p">;</span> </span><span id="L-216"><a name="L-216"></a> </span><span id="L-217"><a name="L-217"></a> <span class="n">temp</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="mi">1</span><span class="p">];</span> </span><span id="L-218"><a name="L-218"></a> <span class="n">state</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="mi">3</span><span class="p">];</span> </span><span id="L-219"><a name="L-219"></a> <span class="n">state</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span><span class="o">=</span><span class="n">temp</span><span class="p">;</span> </span><span id="L-220"><a name="L-220"></a> </span><span id="L-221"><a name="L-221"></a> <span class="c1">// Rotate third row 3 columns to right </span> </span><span id="L-222"><a name="L-222"></a> <span class="n">temp</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="mi">3</span><span class="p">][</span><span class="mi">0</span><span class="p">];</span> </span><span id="L-223"><a name="L-223"></a> <span class="n">state</span><span class="p">[</span><span class="mi">3</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="mi">3</span><span class="p">][</span><span class="mi">1</span><span class="p">];</span> </span><span id="L-224"><a name="L-224"></a> <span class="n">state</span><span class="p">[</span><span class="mi">3</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="mi">3</span><span class="p">][</span><span class="mi">2</span><span class="p">];</span> </span><span id="L-225"><a name="L-225"></a> <span class="n">state</span><span class="p">[</span><span class="mi">3</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="mi">3</span><span class="p">][</span><span class="mi">3</span><span class="p">];</span> </span><span id="L-226"><a name="L-226"></a> <span class="n">state</span><span class="p">[</span><span class="mi">3</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span><span class="o">=</span><span class="n">temp</span><span class="p">;</span> </span><span id="L-227"><a name="L-227"></a><span class="p">}</span> </span><span id="L-228"><a name="L-228"></a> </span><span id="L-229"><a name="L-229"></a><span class="c1">// xtime is a macro that finds the product of {02} and the argument to xtime modulo {1b} </span> </span><span id="L-230"><a name="L-230"></a><span class="cp">#define xtime(x) ((x&lt;&lt;1) ^ (((x&gt;&gt;7) &amp; 1) * 0x1b)) </span> </span><span id="L-231"><a name="L-231"></a> </span><span id="L-232"><a name="L-232"></a><span class="c1">// Multiplty is a macro used to multiply numbers in the field GF(2^8) </span> </span><span id="L-233"><a name="L-233"></a><span class="cp">#define Multiply(x,y) (((y &amp; 1) * x) ^ ((y&gt;&gt;1 &amp; 1) * xtime(x)) ^ ((y&gt;&gt;2 &amp; 1) * xtime(xtime(x))) ^ ((y&gt;&gt;3 &amp; 1) * xtime(xtime(xtime(x)))) ^ ((y&gt;&gt;4 &amp; 1) * xtime(xtime(xtime(xtime(x)))))) </span> </span><span id="L-234"><a name="L-234"></a> </span><span id="L-235"><a name="L-235"></a><span class="c1">// MixColumns function mixes the columns of the state matrix. </span> </span><span id="L-236"><a name="L-236"></a><span class="c1">// The method used to multiply may be difficult to understand for beginners. </span> </span><span id="L-237"><a name="L-237"></a><span class="c1">// Please use the references to gain more information. </span> </span><span id="L-238"><a name="L-238"></a><span class="kt">void</span> <span class="nf">InvMixColumns</span><span class="p">()</span> </span><span id="L-239"><a name="L-239"></a><span class="p">{</span> </span><span id="L-240"><a name="L-240"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span> </span><span id="L-241"><a name="L-241"></a> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">d</span><span class="p">;</span> </span><span id="L-242"><a name="L-242"></a> <span class="k">for</span><span class="p">(</span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;</span><span class="mi">4</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span> </span><span id="L-243"><a name="L-243"></a> <span class="p">{</span> </span><span id="L-244"><a name="L-244"></a> </span><span id="L-245"><a name="L-245"></a> <span class="n">a</span> <span class="o">=</span> <span class="n">state</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">i</span><span class="p">];</span> </span><span id="L-246"><a name="L-246"></a> <span class="n">b</span> <span class="o">=</span> <span class="n">state</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="n">i</span><span class="p">];</span> </span><span id="L-247"><a name="L-247"></a> <span class="n">c</span> <span class="o">=</span> <span class="n">state</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="n">i</span><span class="p">];</span> </span><span id="L-248"><a name="L-248"></a> <span class="n">d</span> <span class="o">=</span> <span class="n">state</span><span class="p">[</span><span class="mi">3</span><span class="p">][</span><span class="n">i</span><span class="p">];</span> </span><span id="L-249"><a name="L-249"></a> </span><span id="L-250"><a name="L-250"></a> </span><span id="L-251"><a name="L-251"></a> <span class="n">state</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="mh">0x0e</span><span class="p">)</span> <span class="o">^</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="mh">0x0b</span><span class="p">)</span> <span class="o">^</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="mh">0x0d</span><span class="p">)</span> <span class="o">^</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="mh">0x09</span><span class="p">);</span> </span><span id="L-252"><a name="L-252"></a> <span class="n">state</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="mh">0x09</span><span class="p">)</span> <span class="o">^</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="mh">0x0e</span><span class="p">)</span> <span class="o">^</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="mh">0x0b</span><span class="p">)</span> <span class="o">^</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="mh">0x0d</span><span class="p">);</span> </span><span id="L-253"><a name="L-253"></a> <span class="n">state</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="mh">0x0d</span><span class="p">)</span> <span class="o">^</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="mh">0x09</span><span class="p">)</span> <span class="o">^</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="mh">0x0e</span><span class="p">)</span> <span class="o">^</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="mh">0x0b</span><span class="p">);</span> </span><span id="L-254"><a name="L-254"></a> <span class="n">state</span><span class="p">[</span><span class="mi">3</span><span class="p">][</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="mh">0x0b</span><span class="p">)</span> <span class="o">^</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="mh">0x0d</span><span class="p">)</span> <span class="o">^</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="mh">0x09</span><span class="p">)</span> <span class="o">^</span> <span class="n">Multiply</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="mh">0x0e</span><span class="p">);</span> </span><span id="L-255"><a name="L-255"></a> <span class="p">}</span> </span><span id="L-256"><a name="L-256"></a><span class="p">}</span> </span><span id="L-257"><a name="L-257"></a> </span><span id="L-258"><a name="L-258"></a><span class="c1">// InvCipher is the main function that decrypts the CipherText. </span> </span><span id="L-259"><a name="L-259"></a><span class="kt">void</span> <span class="nf">InvCipher</span><span class="p">()</span> </span><span id="L-260"><a name="L-260"></a><span class="p">{</span> </span><span id="L-261"><a name="L-261"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">,</span><span class="n">round</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span> </span><span id="L-262"><a name="L-262"></a> </span><span id="L-263"><a name="L-263"></a> <span class="c1">//Copy the input CipherText to state array. </span> </span><span id="L-264"><a name="L-264"></a> <span class="k">for</span><span class="p">(</span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;</span><span class="mi">4</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span> </span><span id="L-265"><a name="L-265"></a> <span class="p">{</span> </span><span id="L-266"><a name="L-266"></a> <span class="k">for</span><span class="p">(</span><span class="n">j</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">j</span><span class="o">&lt;</span><span class="mi">4</span><span class="p">;</span><span class="n">j</span><span class="o">++</span><span class="p">)</span> </span><span id="L-267"><a name="L-267"></a> <span class="p">{</span> </span><span id="L-268"><a name="L-268"></a> <span class="n">state</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">in</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">4</span> <span class="o">+</span> <span class="n">j</span><span class="p">];</span> </span><span id="L-269"><a name="L-269"></a> <span class="p">}</span> </span><span id="L-270"><a name="L-270"></a> <span class="p">}</span> </span><span id="L-271"><a name="L-271"></a> </span><span id="L-272"><a name="L-272"></a> <span class="c1">// Add the First round key to the state before starting the rounds. </span> </span><span id="L-273"><a name="L-273"></a> <span class="n">AddRoundKey</span><span class="p">(</span><span class="n">Nr</span><span class="p">);</span> </span><span id="L-274"><a name="L-274"></a> </span><span id="L-275"><a name="L-275"></a> </span><span id="L-276"><a name="L-276"></a> </span><span id="L-277"><a name="L-277"></a> <span class="c1">// There will be Nr rounds. </span> </span><span id="L-278"><a name="L-278"></a> <span class="c1">// The first Nr-1 rounds are identical. </span> </span><span id="L-279"><a name="L-279"></a> <span class="c1">// These Nr-1 rounds are executed in the loop below. </span> </span><span id="L-280"><a name="L-280"></a> <span class="k">for</span><span class="p">(</span><span class="n">round</span><span class="o">=</span><span class="n">Nr</span><span class="o">-</span><span class="mi">1</span><span class="p">;</span><span class="n">round</span><span class="o">&gt;</span><span class="mi">0</span><span class="p">;</span><span class="n">round</span><span class="o">--</span><span class="p">)</span> </span><span id="L-281"><a name="L-281"></a> <span class="p">{</span> </span><span id="L-282"><a name="L-282"></a> <span class="n">InvShiftRows</span><span class="p">();</span> </span><span id="L-283"><a name="L-283"></a> <span class="n">InvSubBytes</span><span class="p">();</span> </span><span id="L-284"><a name="L-284"></a> <span class="n">AddRoundKey</span><span class="p">(</span><span class="n">round</span><span class="p">);</span> </span><span id="L-285"><a name="L-285"></a> <span class="n">InvMixColumns</span><span class="p">();</span> </span><span id="L-286"><a name="L-286"></a> <span class="p">}</span> </span><span id="L-287"><a name="L-287"></a> </span><span id="L-288"><a name="L-288"></a> <span class="c1">// The last round is given below. </span> </span><span id="L-289"><a name="L-289"></a> <span class="c1">// The MixColumns function is not here in the last round. </span> </span><span id="L-290"><a name="L-290"></a> <span class="n">InvShiftRows</span><span class="p">();</span> </span><span id="L-291"><a name="L-291"></a> <span class="n">InvSubBytes</span><span class="p">();</span> </span><span id="L-292"><a name="L-292"></a> <span class="n">AddRoundKey</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span> </span><span id="L-293"><a name="L-293"></a> </span><span id="L-294"><a name="L-294"></a> <span class="c1">// The decryption process is over. </span> </span><span id="L-295"><a name="L-295"></a> <span class="c1">// Copy the state array to output array. </span> </span><span id="L-296"><a name="L-296"></a> <span class="k">for</span><span class="p">(</span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;</span><span class="mi">4</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span> </span><span id="L-297"><a name="L-297"></a> <span class="p">{</span> </span><span id="L-298"><a name="L-298"></a> <span class="k">for</span><span class="p">(</span><span class="n">j</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">j</span><span class="o">&lt;</span><span class="mi">4</span><span class="p">;</span><span class="n">j</span><span class="o">++</span><span class="p">)</span> </span><span id="L-299"><a name="L-299"></a> <span class="p">{</span> </span><span id="L-300"><a name="L-300"></a> <span class="n">out</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="n">j</span><span class="p">]</span><span class="o">=</span><span class="n">state</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="n">i</span><span class="p">];</span> </span><span id="L-301"><a name="L-301"></a> <span class="p">}</span> </span><span id="L-302"><a name="L-302"></a> <span class="p">}</span> </span><span id="L-303"><a name="L-303"></a><span class="p">}</span> </span><span id="L-304"><a name="L-304"></a><span class="kt">void</span> <span class="nf">main</span><span class="p">()</span> </span><span id="L-305"><a name="L-305"></a><span class="p">{</span> </span><span id="L-306"><a name="L-306"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span> </span><span id="L-307"><a name="L-307"></a> </span><span id="L-308"><a name="L-308"></a> <span class="c1">// Receive the length of key here. </span> </span><span id="L-309"><a name="L-309"></a> <span class="k">while</span><span class="p">(</span><span class="n">Nr</span><span class="o">!=</span><span class="mi">128</span> <span class="o">&amp;&amp;</span> <span class="n">Nr</span><span class="o">!=</span><span class="mi">192</span> <span class="o">&amp;&amp;</span> <span class="n">Nr</span><span class="o">!=</span><span class="mi">256</span><span class="p">)</span> </span><span id="L-310"><a name="L-310"></a> <span class="p">{</span> </span><span id="L-311"><a name="L-311"></a> <span class="n">printf</span><span class="p">(</span><span class="s">&quot;Enter the length of Key(128, 192 or 256 only): &quot;</span><span class="p">);</span> </span><span id="L-312"><a name="L-312"></a> <span class="n">scanf</span><span class="p">(</span><span class="s">&quot;%d&quot;</span><span class="p">,</span><span class="o">&amp;</span><span class="n">Nr</span><span class="p">);</span> </span><span id="L-313"><a name="L-313"></a> <span class="p">}</span> </span><span id="L-314"><a name="L-314"></a> <span class="c1">// Calculate Nk and Nr from the received value. </span> </span><span id="L-315"><a name="L-315"></a> <span class="n">Nk</span> <span class="o">=</span> <span class="n">Nr</span> <span class="o">/</span> <span class="mi">32</span><span class="p">;</span> </span><span id="L-316"><a name="L-316"></a> <span class="n">Nr</span> <span class="o">=</span> <span class="n">Nk</span> <span class="o">+</span> <span class="mi">6</span><span class="p">;</span> </span><span id="L-317"><a name="L-317"></a> </span><span id="L-318"><a name="L-318"></a> </span><span id="L-319"><a name="L-319"></a> </span><span id="L-320"><a name="L-320"></a><span class="c1">// Part 1 is for demonstrative purpose. The key and plaintext are given in the program itself. </span> </span><span id="L-321"><a name="L-321"></a><span class="c1">// Part 1: ******************************************************** </span> </span><span id="L-322"><a name="L-322"></a> </span><span id="L-323"><a name="L-323"></a> <span class="c1">// The array temp stores the key. </span> </span><span id="L-324"><a name="L-324"></a> <span class="c1">// The array temp2 stores the plaintext. </span> </span><span id="L-325"><a name="L-325"></a> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">temp</span><span class="p">[</span><span class="mi">32</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="mh">0x00</span> <span class="p">,</span><span class="mh">0x01</span> <span class="p">,</span><span class="mh">0x02</span> <span class="p">,</span><span class="mh">0x03</span> <span class="p">,</span><span class="mh">0x04</span> <span class="p">,</span><span class="mh">0x05</span> <span class="p">,</span><span class="mh">0x06</span> <span class="p">,</span><span class="mh">0x07</span> <span class="p">,</span><span class="mh">0x08</span> <span class="p">,</span><span class="mh">0x09</span> <span class="p">,</span><span class="mh">0x0a</span> <span class="p">,</span><span class="mh">0x0b</span> <span class="p">,</span><span class="mh">0x0c</span> <span class="p">,</span><span class="mh">0x0d</span> <span class="p">,</span><span class="mh">0x0e</span> <span class="p">,</span><span class="mh">0x0f</span><span class="p">};</span> </span><span id="L-326"><a name="L-326"></a> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">temp2</span><span class="p">[</span><span class="mi">16</span><span class="p">]</span><span class="o">=</span> <span class="p">{</span><span class="mh">0x69</span> <span class="p">,</span><span class="mh">0xc4</span> <span class="p">,</span><span class="mh">0xe0</span> <span class="p">,</span><span class="mh">0xd8</span> <span class="p">,</span><span class="mh">0x6a</span> <span class="p">,</span><span class="mh">0x7b</span> <span class="p">,</span><span class="mh">0x04</span> <span class="p">,</span><span class="mh">0x30</span> <span class="p">,</span><span class="mh">0xd8</span> <span class="p">,</span><span class="mh">0xcd</span> <span class="p">,</span><span class="mh">0xb7</span> <span class="p">,</span><span class="mh">0x80</span> <span class="p">,</span><span class="mh">0x70</span> <span class="p">,</span><span class="mh">0xb4</span> <span class="p">,</span><span class="mh">0xc5</span> <span class="p">,</span><span class="mh">0x5a</span><span class="p">};</span> </span><span id="L-327"><a name="L-327"></a> </span><span id="L-328"><a name="L-328"></a> <span class="c1">// Copy the Key and CipherText </span> </span><span id="L-329"><a name="L-329"></a> <span class="k">for</span><span class="p">(</span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;</span><span class="n">Nk</span><span class="o">*</span><span class="mi">4</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span> </span><span id="L-330"><a name="L-330"></a> <span class="p">{</span> </span><span id="L-331"><a name="L-331"></a> <span class="n">Key</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">=</span><span class="n">temp</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> </span><span id="L-332"><a name="L-332"></a> <span class="n">in</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">=</span><span class="n">temp2</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> </span><span id="L-333"><a name="L-333"></a> <span class="p">}</span> </span><span id="L-334"><a name="L-334"></a> </span><span id="L-335"><a name="L-335"></a><span class="c1">// ********************************************************* </span> </span><span id="L-336"><a name="L-336"></a> </span><span id="L-337"><a name="L-337"></a> </span><span id="L-338"><a name="L-338"></a> </span><span id="L-339"><a name="L-339"></a> </span><span id="L-340"><a name="L-340"></a><span class="c1">// Uncomment Part 2 if you need to read Key and CipherText from the keyboard. </span> </span><span id="L-341"><a name="L-341"></a><span class="c1">// Part 2: ******************************************************** </span> </span><span id="L-342"><a name="L-342"></a><span class="cm">/* </span> </span><span id="L-343"><a name="L-343"></a><span class="cm"> //Clear the input buffer </span> </span><span id="L-344"><a name="L-344"></a><span class="cm"> flushall(); </span> </span><span id="L-345"><a name="L-345"></a><span class="cm"> </span> </span><span id="L-346"><a name="L-346"></a><span class="cm"> //Recieve the Key from the user </span> </span><span id="L-347"><a name="L-347"></a><span class="cm"> printf(&quot;Enter the Key in hexadecimal: &quot;); </span> </span><span id="L-348"><a name="L-348"></a><span class="cm"> for(i=0;i&lt;Nk*4;i++) </span> </span><span id="L-349"><a name="L-349"></a><span class="cm"> { </span> </span><span id="L-350"><a name="L-350"></a><span class="cm"> scanf(&quot;%x&quot;,&amp;Key[i]); </span> </span><span id="L-351"><a name="L-351"></a><span class="cm"> } </span> </span><span id="L-352"><a name="L-352"></a><span class="cm"> </span> </span><span id="L-353"><a name="L-353"></a><span class="cm"> printf(&quot;Enter the CipherText in hexadecimal: &quot;); </span> </span><span id="L-354"><a name="L-354"></a><span class="cm"> for(i=0;i&lt;Nb*4;i++) </span> </span><span id="L-355"><a name="L-355"></a><span class="cm"> { </span> </span><span id="L-356"><a name="L-356"></a><span class="cm"> scanf(&quot;%x&quot;,&amp;in[i]); </span> </span><span id="L-357"><a name="L-357"></a><span class="cm"> } </span> </span><span id="L-358"><a name="L-358"></a><span class="cm">*/</span> </span><span id="L-359"><a name="L-359"></a><span class="c1">// ******************************************************** </span> </span><span id="L-360"><a name="L-360"></a> </span><span id="L-361"><a name="L-361"></a> </span><span id="L-362"><a name="L-362"></a> <span class="c1">//The Key-Expansion routine must be called before the decryption routine. </span> </span><span id="L-363"><a name="L-363"></a> <span class="n">KeyExpansion</span><span class="p">();</span> </span><span id="L-364"><a name="L-364"></a> </span><span id="L-365"><a name="L-365"></a> <span class="c1">// The next function call decrypts the CipherText with the Key using AES algorithm. </span> </span><span id="L-366"><a name="L-366"></a> <span class="n">InvCipher</span><span class="p">();</span> </span><span id="L-367"><a name="L-367"></a> </span><span id="L-368"><a name="L-368"></a> <span class="c1">// Output the decrypted text. </span> </span><span id="L-369"><a name="L-369"></a> <span class="n">printf</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">Text after decryption:</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span> </span><span id="L-370"><a name="L-370"></a> <span class="k">for</span><span class="p">(</span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;</span><span class="n">Nb</span><span class="o">*</span><span class="mi">4</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span> </span><span id="L-371"><a name="L-371"></a> <span class="p">{</span> </span><span id="L-372"><a name="L-372"></a> <span class="n">printf</span><span class="p">(</span><span class="s">&quot;%02x &quot;</span><span class="p">,</span><span class="n">out</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> </span><span id="L-373"><a name="L-373"></a> <span class="p">}</span> </span><span id="L-374"><a name="L-374"></a> <span class="n">printf</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n\n</span><span class="s">&quot;</span><span class="p">);</span> </span><span id="L-375"><a name="L-375"></a><span class="p">}</span> </span></pre></div> </td></tr></table>
decryption