Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- Subtract(unsigned int result,unsigned int result1,unsigned int result2,unsigned int result3,unsigned char temp[10]) {
- unsigned int p,i,c,s,l,o;
- unsigned char parint[10] ={0x7f,0xff,0xff,0xff,0x80,0x00,0x00,0x00},parinttemp[10];
- for(i=0;i<10;i++) {
- parinttemp[i] = 0x00;
- }
- //parinttemp[8] = 0x01;
- p = result&0xff;
- parinttemp[7] = p&0xff;
- p = result&0xff00;
- parinttemp[6] = (p&0xff00)>>8;
- p = result1&0xff;
- parinttemp[5] = p&0xff;
- p = result1&0xff00;
- parinttemp[4] = (p&0xff00)>>8;
- p = result2&0xff;
- parinttemp[3] = p&0xff;
- p = result2&0xff00;
- parinttemp[2] = (p&0xff00)>>8;
- p = result3&0xff;
- parinttemp[1] = p&0xff;
- p = result3&0xff00;
- parinttemp[0] = (p&0xff00)>>8;
- for(p=0,i=1;p<8;p++) {
- s = (parint[p]<<8)&0x0000ff00;
- l = (parinttemp[p]<<8)&0x0000ff00;
- c = s-l;
- parinttemp[p] = (c>>8)&0xff;
- //if(p == 7 && ((c>>16)&0xff) > 0) parinttemp[7] = parinttemp[7] + 2;
- if(((c>>24)&0xff) == 0xff && parinttemp[p-1] > 0 && (p > 0)) parinttemp[p-1] = parinttemp[p-1] - 1;
- if(((c>>24)&0xff) == 0xff && parinttemp[p-1] == 0&& (p > 0)){
- parinttemp[p-1] = parinttemp[p-1] - 1;
- if(parinttemp[p-2] > 0 && (p > 1)) parinttemp[p-2] = parinttemp[p-2] - 1;
- if(parinttemp[p-2] == 0 && (p > 1)){
- parinttemp[p-2] = parinttemp[p-2] - 1;
- if(parinttemp[p-3] > 0 && (p > 2)) parinttemp[p-3] = parinttemp[p-3] - 1;
- if(parinttemp[p-3] == 0 && (p > 2)){
- parinttemp[p-3] = parinttemp[p-3] - 1;
- if(parinttemp[p-4] > 0 && (p > 3)) parinttemp[p-4] = parinttemp[p-4] - 1;
- if(parinttemp[p-4] == 0 && (p > 3)){
- parinttemp[p-4] = parinttemp[p-4] - 1;
- if(parinttemp[p-5] > 0 && (p > 4)) parinttemp[p-5] = parinttemp[p-5] - 1;
- if(parinttemp[p-5] == 0 && (p > 4)){
- parinttemp[p-5] = parinttemp[p-5] - 1;
- if(parinttemp[p-6] > 0 && (p > 5)) parinttemp[p-6] = parinttemp[p-6] - 1;
- if(parinttemp[p-6] == 0 && (p > 5)){
- parinttemp[p-6] = parinttemp[p-6] - 1;
- if(parinttemp[p-7] > 0 && (p > 6)) parinttemp[p-7] = parinttemp[p-7] - 1;
- if(parinttemp[p-7] == 0 && (p > 6)){
- parinttemp[p-7] = parinttemp[p-7] - 1;
- }
- }
- }
- }
- }
- }
- }
- }
- //for(i=0;i<8;i++) {
- // printf("%2X,",parinttemp[i]);
- //}
- memcpy(temp,parinttemp,sizeof(unsigned char) * 8);
- }
- Strip(unsigned char temp[10]) {
- unsigned int p,i,c,s,l;
- unsigned char parint[10] ={0x7f,0xff,0xff,0xff,0x80,0x00,0x00,0x00},parinttemp[10];
- for(i=0;i<10;i++) {
- parinttemp[i] = 0x00;
- }
- parinttemp[0] = temp[0];
- parinttemp[1] = temp[1];
- parinttemp[2] = temp[2];
- parinttemp[3] = temp[3];
- parinttemp[4] = temp[4];
- parinttemp[5] = temp[5];
- parinttemp[6] = temp[6];
- parinttemp[7] = temp[7];
- for(p=0,i=1;p<8;p++) {
- s = (parint[p]<<8)&0x0000ff00;
- l = (parinttemp[p]<<8)&0x0000ff00;
- c = s-l;
- parinttemp[p] = (c>>8)&0xff;
- //if(p == 7 && ((c>>8)&0xff) > 0) parinttemp[7] = parinttemp[7] - 1;
- if(((c>>24)&0xff) == 0xff && parinttemp[p-1] > 0 && (p > 0)) parinttemp[p-1] = parinttemp[p-1] - 1;
- if(((c>>24)&0xff) == 0xff && parinttemp[p-1] == 0&& (p > 0)){
- parinttemp[p-1] = parinttemp[p-1] - 1;
- if(parinttemp[p-2] > 0 && (p > 1)) parinttemp[p-2] = parinttemp[p-2] - 1;
- if(parinttemp[p-2] == 0 && (p > 1)){
- parinttemp[p-2] = parinttemp[p-2] - 1;
- if(parinttemp[p-3] > 0 && (p > 2)) parinttemp[p-3] = parinttemp[p-3] - 1;
- if(parinttemp[p-3] == 0 && (p > 2)){
- parinttemp[p-3] = parinttemp[p-3] - 1;
- if(parinttemp[p-4] > 0 && (p > 3)) parinttemp[p-4] = parinttemp[p-4] - 1;
- if(parinttemp[p-4] == 0 && (p > 3)){
- parinttemp[p-4] = parinttemp[p-4] - 1;
- if(parinttemp[p-5] > 0 && (p > 4)) parinttemp[p-5] = parinttemp[p-5] - 1;
- if(parinttemp[p-5] == 0 && (p > 4)){
- parinttemp[p-5] = parinttemp[p-5] - 1;
- if(parinttemp[p-6] > 0 && (p > 5)) parinttemp[p-6] = parinttemp[p-6] - 1;
- if(parinttemp[p-6] == 0 && (p > 5)){
- parinttemp[p-6] = parinttemp[p-6] - 1;
- if(parinttemp[p-7] > 0 && (p > 6)) parinttemp[p-7] = parinttemp[p-7] - 1;
- if(parinttemp[p-7] == 0 && (p > 6)){
- parinttemp[p-7] = parinttemp[p-7] - 1;
- }
- }
- }
- }
- }
- }
- }
- }
- memcpy(temp,parinttemp,sizeof(unsigned char) * 8);
- }
- int main()
- {
- unsigned int i,p,c,count,s,t,potty=0,carry,l,a,b,w;
- unsigned int di,dp,dl,ds;
- unsigned int parnum=0,rota=0,xor=0;
- unsigned char parint[10] ={0x7f,0xff,0xff,0xff,0x80,0x00,0x00,0x00};
- unsigned char parinttemp[10],parinttemp1[10],temp[10],temp1[10],temp2[10];
- unsigned int sbox[16][16],sboxblank[16][16],Rcon[]={0x01000000,0x02000000,0x04000000,0x08000000,0x10000000,0x20000000,
- 0x40000000,0x80000000,0x1b000000,0x36000000,0x6c000000,0xd8000000,
- 0xab000000,0x4d000000,0x9a000000};
- unsigned int result,key[16] ={0x41,0x41,0x41,0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41},u[16*12];
- unsigned int convert[70],convert1[70],convert2[70];
- //add input to value in box
- unsigned int store[258],storevalue[258],value1[258];
- unsigned char storepar[258][10];
- unsigned int value[258][10];
- //((result+(potty/2))
- unsigned int sstore[256],sstorevalue[256],svalue1[256];
- unsigned char sstorepar[256][10];
- unsigned int svalue[256][10];
- //((result-(potty*2))
- unsigned int tstore[258],tstorevalue[258],tvalue1[258];
- unsigned char tstorepar[258][10];
- unsigned int tvalue[258][10];
- unsigned int decode[12][10];
- unsigned int cost[258][3];
- unsigned char sboxaes[16][16] = {
- 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};
- for(i=0;i<10;i++) {
- parinttemp[i] = 0x00;
- parinttemp1[i] = 0x00;
- temp[i] = 0x00;
- temp1[i] = 0x00;
- }
- for(l=0;l<16;l++) {
- for(i=0;i<16;i++) {
- sboxblank[i][l] = 0x00;
- }
- }
- //might use this latter
- for(i=0;i<=255;i++)
- {
- parnum=parnum+i;
- }
- printf("%x\n",parnum);
- for(i=0,t=0;i<16;t++) {
- sbox[i][t] = 0x00;
- sbox[i][t] = parnum-(sboxaes[i][t]&0xff);
- // printf("%X,",sbox[i][t]);
- if(t > 16) {
- t=0;
- i++;
- }
- }
- //memset
- for(i=0;i<=256;i++) {
- store[i]= 0x00;
- storevalue[i] = 0x00;
- value1[i] = 0x00;
- cost[i][0] = 0x00;
- cost[i][1] = 0x00;
- }
- //memset
- for(i=0;i<=0xff;i++) {
- for(p=0;p<10;p++) {
- value[i][p] = 0x00;
- }}
- for(potty=0;potty<=0xff;potty++) {
- result = 0x00;
- result = ( unsigned int)sboxaes[(potty >> 4) & 0x0000000F][potty & 0x0000000F];
- //maths function one, used to find dulpicates and convert
- //if cmp statements into basic maths functions
- // add minus times divide
- s = potty+result;
- store[potty] = s;
- for(i=0;i<10;i++) {
- temp[i] = 0x00;
- }
- Subtract(s,0,0,0 ,temp);
- for(i=0;i<10;i++) {
- storepar[potty][i] = temp[i];
- }
- value1[potty] = result;
- }
- printf("\n\n");
- for(i=0;i<=0xff;i++) {
- count=0x00;
- for(p=0;p<=0xff;p++) {
- if(store[i] == store[p] && i != p) count++;
- }
- storevalue[i] = count;
- if(count == 0x00) value[i][0] = 0x00;
- if(count > 0) {
- value[i][0] = i;
- for(l=0;l<=count;l++) {
- value[i][l+1] = value1[i];
- }
- }
- }
- for(i=0;i<=256;i++) {
- sstore[i] = 0x00;
- sstorevalue[i] = 0x00;
- svalue1[i] = 0x00;
- }
- for(i=0;i<=0xff;i++) {
- for(p=0;p<10;p++) {
- svalue[i][p] = 0x00;
- }}
- for(potty=0;potty<=0xff;potty++) {
- result = 0x00;
- result = (int)sboxaes[(potty >> 4) & 0x0000000F][potty & 0x0000000F];
- s = ((result+potty)/2);
- sstore[potty] = s;
- for(i=0;i<10;i++) {
- temp[i] = 0x00;
- }
- Subtract(s,0,0,0 ,temp);
- for(i=0;i<10;i++) {
- sstorepar[potty][i] = temp[i];
- }
- svalue1[potty] = result;
- }
- printf("\n\n");
- for(i=0;i<=0xff;i++) {
- count=0x00;
- for(p=0;p<=0xff;p++) {
- if(sstore[i] == sstore[p] && i != p) count++;
- }
- sstorevalue[i] = count;
- if(count == 0x00) svalue[i][0] = 0x00;
- if(count > 0) {
- svalue[i][0] = i;
- for(l=0;l<=count;l++) {
- svalue[i][l+1] = svalue1[i];
- }
- }
- }
- for(i=0;i<=256;i++) {
- tstore[i]= 0x00;
- tstorevalue[i] = 0x00;
- tvalue1[i] = 0x00;
- }
- for(i=0;i<=0xff;i++) {
- for(p=0;p<10;p++) {
- tvalue[i][p] = 0x00;
- }}
- for(potty=0;potty<=0xff;potty++) {
- result = 0x00;
- result = (int)sboxaes[(potty >> 4) & 0x0000000F][potty & 0x0000000F];
- s = ((0xff-result)/2);
- tstore[potty] = s;
- for(i=0;i<10;i++) {
- temp[i] = 0x00;
- }
- Subtract(s,0,0,0 ,temp);
- for(i=0;i<10;i++) {
- tstorepar[potty][i] = temp[i];
- }
- tvalue1[potty] = result;
- }
- printf("\n\n");
- for(i=0;i<=0xff;i++) {
- count=0x00;
- for(p=0;p<=0xff;p++) {
- if(tstore[i] == tstore[p] && i != p) count++;
- }
- tstorevalue[i] = count;
- if(count == 0x00) tvalue[i][0] = 0x00;
- if(count > 0) {
- tvalue[i][0] = i;
- for(l=0;l<=count;l++) {
- tvalue[i][l+1] = tvalue1[i];
- }
- }
- }
- for(i=0;i<=0xff;i++) {
- if( storevalue[i] != 0) {
- cost[i][0] = store[i];
- cost[i][1] = 0x01;
- }
- if(storevalue[i] == 0) {
- if(sstorevalue[i] != 0x00) {
- cost[i][0] = sstore[i];
- cost[i][1] = 0x02;
- }
- if(sstorevalue[i] == 0x00) {
- if(tstorevalue[i] != 0x00) {
- cost[i][0] = tstore[i];
- cost[i][1] = 0x03;
- }
- }
- }
- }
- for(i=0;i<=0xff;i++) {
- printf("%X %d == %X\n",i,cost[i][1],cost[i][0]);
- }
- //////////////
- /*
- aes subword functions loop it 12 times for 128bit
- */
- potty = 0x25252727;
- a=potty;
- for(i=0;i<12;i++) {
- result = (unsigned int)sboxaes[(potty >> 4) & 0x0000000F][potty & 0x0000000F];
- result += (unsigned int)sboxaes[(potty >> 12) & 0x0000000F][(potty >> 8) & 0x0000000F] << 8;
- result += (unsigned int)sboxaes[(potty >> 20) & 0x0000000F][(potty >> 16) & 0x0000000F] << 16;
- result += (unsigned int)sboxaes[(potty>> 28) & 0x0000000F][(potty >> 24) & 0x0000000F] << 24;
- potty = result;
- }
- printf("\n%X == input\n",a);
- printf("\n%X == Hash\n",result);
- //memset
- for(i=0;i<12;i++) {
- for(s=0;s<10;s++) {
- decode[i][s] = 0x00;
- }
- }
- //unsigned int bruteforce
- for(p=0;p<=0xff;p++) {
- for(l=0;l<=0xff;l++) {
- for(s=0;s<=0xff;s++) {
- for(i=0;i<=0xff;i++) {
- di = i;
- dl = l;
- ds = s;
- dp = p;
- for(b=0;b<12;b++) {
- //patch a problem with the subtract function
- cost[di][0] = cost[di][0] -1;
- //subtract the sbox values from parnum and do it 12 times
- //latter slect what data you want to select
- Subtract(cost[di][0],cost[ds][0],cost[dl][0],cost[dp][0] ,temp);
- ///////////////////////////////*
- /*
- strip out the parrellel data to leve the result
- and applie basic maths functions
- */
- Strip(temp);
- c = temp[7]&0xff;
- c = c + ((temp[6]&0xff)<<8);
- if(cost[i][1] == 0x01) c = c - i;
- if(cost[i][1] == 0x02) c = (c + i)/2;
- if(cost[i][1] == 0x03) c = (0xff - c)/2;
- decode[0][3] = c&0xff;
- c = temp[5]&0xff;
- c = c + ((temp[4]&0xff)<<8);
- if(cost[s][1] == 0x01) c = c - s;
- if(cost[s][1] == 0x02) c = (c + s)/2;
- if(cost[s][1] == 0x03) c = (0xff - c)/2;
- decode[0][2] = c&0xff;
- c = temp[3]&0xff;
- c = c + ((temp[2]&0xff)<<8);
- if(cost[l][1] == 0x01) c = c - l;
- if(cost[l][1] == 0x02) c = (c + l)/2;
- if(cost[l][1] == 0x03) c = (0xff - c)/2;
- decode[0][1] = c&0xff;
- c = temp[1]&0xff;
- c = c + ((temp[0]&0xff)<<8);
- if(cost[p][1] == 0x01) c = c - p;
- if(cost[p][1] == 0x02) c = (c + p)/2;
- if(cost[p][1] == 0x03) c = (0xff - c)/2;
- decode[0][0] = c&0xff;
- di = decode[0][3];
- dl = decode[0][1];
- ds = decode[0][2];
- dp = decode[0][0];
- }
- //This well take awhile
- // if( decode[0][3] == (a&0xff) && decode[0][2] == ((a>>8)&0xff) && decode[0][1] == ((a>>24)&0xff) && decode[0][0] == ((a>>16)&0xff) ) {
- ////////////
- //quicker test
- if( decode[0][3] == (a&0xff) && decode[0][2] == ((a>>8)&0xff) && decode[0][1] == ((a>>24)&0xff)) {
- ////////////
- printf("\n\n found run 0\n\n");
- printf(" = %2X,%2X,%2X,%2X",decode[0][0],decode[0][1],decode[0][2],decode[0][3]);
- printf("\n");
- exit(1);
- }
- }
- }
- }
- }
- Strip(temp);
- exit(1);
- printf("Rotate\n");
- w=0;
- for(i=0;i<=0xff;i++) {
- c = ((i<<4) | (i>>12));
- w=w+c;
- //printf("%X value\n",w);
- }
- rota = 0xff800000;
- xor = 0x7f0080;
- //printf("%X value\n",w);
- printf("\n");
- for (i=0; i < 4; i++) {
- u[i] = ((key[4 * i]) << 24) | ((key[4 * i + 1]) << 16) |
- ((key[4 * i + 2]) << 8) | ((key[4 * i + 3]));
- }
- for (i = 0; i < 4; i++) {
- l = u[i];
- w = u[i];
- w = (rota-w);
- s = w+xor;
- for(p=0;p<8;p++) {
- printf("%X,",temp[p]);
- }
- printf(" == ");
- for(p=0;p<8;p++) {
- printf("%X,",temp1[p]);
- }
- printf(" == ");
- for(p=0;p<8;p++) {
- printf("%X,",temp2[p]);
- }
- printf("\n");
- }
- Strip(temp);
- for(p=0;p<8;p++) {
- printf("%X,",temp[p]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement