void aes(byte in[16],byte out[16],byte w[176]) { int i,j; int round=0; byte state[16]; for(i=0;i<16;i++) state[i]=in[i]; addroundkey(state,w,0); for(round=1;round<10;round++) { subbytestate(state); shiftrows(state); mixcolumns(state); addroundkey(state,w,round); } subbytestate(state); shiftrows(state); addroundkey(state,w,10); for(i=0;i<16;i++) out[i]=state[i]; }
void aes_enc(uint8_t state[16],uint8_t cipher[16],uint8_t ekey[240]) { uint8_t iteration = 0; uint8_t x,y; uint8_t sub[4][4]; uint8_t shift[4][4]; uint8_t mix[4][4]; uint8_t round[4][4]; uint8_t state_grid[4][4]; uint8_t result[4][4]; state_grid[0][0] = state[0]; state_grid[0][1] = state[1]; state_grid[0][2] = state[2]; state_grid[0][3] = state[3]; state_grid[1][0] = state[4]; state_grid[1][1] = state[5]; state_grid[1][2] = state[6]; state_grid[1][3] = state[7]; state_grid[2][0] = state[8]; state_grid[2][1] = state[9]; state_grid[2][2] = state[10]; state_grid[2][3] = state[11]; state_grid[3][0] = state[12]; state_grid[3][1] = state[13]; state_grid[3][2] = state[14]; state_grid[3][3] = state[15]; addroundkey(state_grid,0,sub,ekey); loop_main : for(iteration = 1; iteration < nr; iteration++) { subbytes(sub,shift); shift_row_enc(shift,mix); mixcolumn(mix,round); addroundkey(round,iteration,sub,ekey); } subbytes(sub,shift); shift_row_enc(shift,round); addroundkey(round,nr,result,ekey); cipher[0] = result[0][0]; cipher[1] = result[0][1]; cipher[2] = result[0][2]; cipher[3] = result[0][3]; cipher[4] = result[1][0]; cipher[5] = result[1][1]; cipher[6] = result[1][2]; cipher[7] = result[1][3]; cipher[8] = result[2][0]; cipher[9] = result[2][1]; cipher[10] = result[2][2]; cipher[11] = result[2][3]; cipher[12] = result[3][0]; cipher[13] = result[3][1]; cipher[14] = result[3][2]; cipher[15] = result[3][3]; }
int main(){ int rounds, i, j, count, numberround, answer, rconround = 0, subbyteround = 0;; char plaintext[17] = {'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'}; char key[17] = {'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'}; char index[16][3]; char indexkey[16][3]; char b[3], a[3]; printf("Input Text: "); gets(plaintext); printf("Input Key: "); scanf(" %[^\n]s\n", key); rounds = ceil(strlen(plaintext)/16); for(i=0; i<16; i++){ sprintf(a, "%x", plaintext[i]); /* keep char ascii to hex base */ sprintf(b, "%x", key[i]); strcpy(index[i], a); strcpy(indexkey[i], b); //printf("%x\n", index[i]); //printf("%s\n", indexkey[i]); } for(i=0; i<16; i++){//we do add round key first before do 10 loop //printf("%d\n", (((tonum(index[i][0]))*10)+(tonum(index[i][1])))); answer = (((tonum(index[i][0]))*10)+(tonum(index[i][1])))^(((tonum(indexkey[i][0]))*10)+(tonum(indexkey[i][1]))); printf("%d\n", answer); sprintf(a, "%x", answer); printf("%s\n", a); strcpy(index[i], a); //printf("%s\n", index[i]); } for(numberround=1; numberround<=10; numberround++){ printf("%d %d\n", rconround,subbyteround); if(numberround==1){ sub_byte_key(indexkey); roundkey(matrixkey, rconround); } else{ roundkey(matrixkey, rconround); } sub_byte(index, subbyteround); printf("roundkey:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrixkey[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); printf("Subbyte:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); shiftrow(); printf("shiftrow value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); if(numberround<10){ mixcolumn(); printf("mixcolumn value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } } printf("-------------------------------------------\n"); addroundkey(); printf("Addroundkey value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%c", matrix[j][i]); } //printf("\n"); } printf("\n"); subbyteround++; rconround++; } }
int main(){ int rounds, i, j, count, numberround; char plaintext[17] = {'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'}; char key[17] = {'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'}; char index[16][3]; char indexkey[16][3]; char b[3], a[3]; printf("Input Text: "); gets(plaintext); printf("Input Key: "); scanf(" %[^\n]s\n", key); rounds = ceil(strlen(plaintext)/16); for(i=0; i<16; i++){ sprintf(a, "%x", plaintext[i]); /* keep char ascii to hex base */ sprintf(b, "%x", key[i]); strcpy(index[i], a); strcpy(indexkey[i], b); } for(numberround=1; numberround<=10; numberround++){ if(numberround==1){ sub_byte_key(indexkey); roundkey(matrixkey); } else{ roundkey(matrixkey); } sub_byte(index); printf("roundkey:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrixkey[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); printf("Subbyte:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); shiftrow(); printf("shiftrow value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); if(numberround<10){ mixcolumn(); printf("mixcolumn value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } } printf("-------------------------------------------\n"); addroundkey(); printf("Addroundkey value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%c", cipher[i][j]); } } printf("\n"); } /* for(i=0; i<16; i++){ sprintf(a, "%x", plaintext[i]); //keep char ascii to hex base sprintf(b, "%x", key[i]); strcpy(index[i], a); strcpy(indexkey[i], b); } roundkey(indexkey); sub_byte(index); printf("matrixkey:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrixkey[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); printf("matrix:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); shiftrow(); printf("shiftrow value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); mixcolumn(); printf("mixcolumn value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } printf("-------------------------------------------\n"); addroundkey(); printf("Addroundkey value:\n"); for(i=0; i<4; i++){ for(j=0; j<4; j++){ printf("%x ", matrix[i][j]); } printf("\n"); } */ }