ont

brute Andrey1800 (cuda)

ont
Nov 3rd, 2012
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.22 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. #define THREADX 16
  4. #define THREADY 16
  5.  
  6. #define BLOCKSX 16
  7. #define BLOCKSY 16
  8.  
  9. __global__
  10. void kern(char *skey, int *ans)
  11. {
  12.     char key[ 8 ];
  13.     key[ 0 ] = skey[ 0 ];
  14.     key[ 1 ] = skey[ 1 ];
  15.     key[ 2 ] = skey[ 2 ];
  16.     key[ 3 ] = skey[ 3 ];
  17.     key[ 4 ] = blockIdx.x;
  18.     key[ 5 ] = blockIdx.y;
  19.  
  20.     key[ 6 ] = threadIdx.x;
  21.     key[ 7 ] = threadIdx.y;
  22.  
  23.     int a = 0x86289CFB;
  24.     int b = 0x48AEEFD4;
  25.     int i;
  26.     for (i = 0; i < 8; i++) {
  27.         char code = key[i];
  28.         int xor1 = a >> 31;
  29.         int xor2 = 0;
  30.         int j = 0;
  31.         while (j < 64) {
  32.             if ((((b & 0x40BD223D) << 32) + (a & 0x61AC9F6E)) & (1 << j)) xor2++;
  33.             j++;
  34.         }
  35.         xor2 = xor2 & 1;
  36.         switch (code)
  37.         {
  38.             case 0:
  39.                 a = a * 2 ^ 0x4;
  40.                 b = b * 2;
  41.                 //printf( "a = %lld   b = %lld\n", a, b );
  42.                 break;
  43.             case 1:
  44.                 a = a * 2;
  45.                 b = (b * 2) ^ 0x2;
  46.                 //printf( "[1] a = %d   b = %d\n", a, b );
  47.                 break;
  48.             case 2:
  49.                 a = a * 2;
  50.                 b = b * 2;
  51.                 //printf( "a = %lld   b = %lld\n", a, b );
  52.                 break;
  53.             case 3:
  54.                 b = b * 2;
  55.                 a = a * 2 ^ 0x80000000;
  56.                 //printf( "a = %lld   b = %lld\n", a, b );
  57.                 break;
  58.             case 4:
  59.                 b = b * 2 ^ 0x40000000;
  60.                 a = a * 2;
  61.                 //printf( "a = %lld   b = %lld\n", a, b );
  62.                 break;
  63.             case 5:
  64.                 b = b * 2;
  65.                 a = a * 2 ^ 0x20000000;
  66.                 //printf( "a = %lld   b = %lld\n", a, b );
  67.                 break;
  68.             case 6:
  69.                 b = b * 2 ^ 0x10000000;
  70.                 a = a * 2;
  71.                 //printf( "a = %lld   b = %lld\n", a, b );
  72.                 break;
  73.             case 7:
  74.                 b = b * 2;
  75.                 a = a * 2 ^ 0x8000000;
  76.                 //printf( "a = %lld   b = %lld\n", a, b );
  77.                 break;
  78.             case 8:
  79.                 b = b * 2 ^ 0x4000000;
  80.                 a = a * 2;
  81.                 //printf( "a = %lld   b = %lld\n", a, b );
  82.                 break;
  83.             case 9:
  84.                 b = b * 2;
  85.                 a = a * 2 ^ 0x2000000;
  86.                 //printf( "a = %lld   b = %lld\n", a, b );
  87.                 break;
  88.             case 10:
  89.                 b = b * 2 ^ 0x1000000;
  90.                 a = a * 2 ^ 1;
  91.                 //printf( "a = %lld   b = %lld\n", a, b );
  92.                 break;
  93.             case 11:
  94.                 b = b * 2;
  95.                 a = a * 2 ^ 0x800000;
  96.                 //printf( "a = %lld   b = %lld\n", a, b );
  97.                 break;
  98.             case 12:
  99.                 b = b * 2 ^ 0x400000;
  100.                 a = a * 2;
  101.                 //printf( "a = %lld   b = %lld\n", a, b );
  102.                 break;
  103.             case 13:
  104.                 b = b * 2;
  105.                 a = a * 2 ^ 0x200000;
  106.                 //printf( "a = %lld   b = %lld\n", a, b );
  107.                 break;
  108.             case 14:
  109.                 b = b * 2 ^ 0x100000;
  110.                 a = a * 2;
  111.                 //printf( "a = %lld   b = %lld\n", a, b );
  112.                 break;
  113.             case 15:
  114.                 b = b * 2;
  115.                 a = a * 2 ^ 0x80000;
  116.                 //printf( "a = %lld   b = %lld\n", a, b );
  117.                 break;
  118.             default:
  119.                 break;
  120.         }
  121.         //printf( "-a- %lld\n", a );
  122.         //printf( "-b- %lld\n", b );
  123.         //printf( "-x- %d\n", xor1 );
  124.         //printf( "-x- %d\n", xor2 );
  125.         a = a ^ xor2;
  126.         b = b ^ xor1;
  127.         a = a & 0xffffffff;
  128.         b = b & 0xffffffff;
  129.     }
  130.     int n,m;
  131.     n = (b << 15) + (a >> 17);
  132.     m = b ^ n & 0x40BD223D;
  133.     //if( m == 0xF0E6D69A )
  134.     if( m == 0xff46d75e )
  135.         //*ans = threadIdx.x * 100 + threadIdx.y;
  136.         *ans = 1;
  137. }
  138.  
  139. int main()
  140. {
  141.     /////////// allocate
  142.     int *d_ans, ans, zero = 0;
  143.     cudaMalloc( (void**)&d_ans, 1 * sizeof( int ) );
  144.  
  145.     char key[ 8 ] = { 1, 2, 3, 10, 11, 12, 13, 14 };
  146.     char *d_key;
  147.     cudaMalloc( (void**)&d_key, 8 * sizeof( char ) );
  148.  
  149.     for( key[ 0 ] = 0; key[ 0 ] < 16; key[ 0 ]++ )
  150.         for( key[ 1 ] = 0; key[ 1 ] < 16; key[ 1 ]++ )
  151.             for( key[ 2 ] = 0; key[ 2 ] < 16; key[ 2 ]++ )
  152.                 for( key[ 3 ] = 0; key[ 3 ] < 16; key[ 3 ]++ )
  153.                 {
  154.                     /////////// copy
  155.                     cudaMemcpy( d_key, key , 8 * sizeof( char ), cudaMemcpyHostToDevice );
  156.                     cudaMemcpy( d_ans, &zero, 1 * sizeof( int ) , cudaMemcpyHostToDevice );
  157.  
  158.                     /////////// execute
  159.                     dim3 dimBlock( THREADX, THREADY );
  160.                     dim3 dimGrid( BLOCKSX, BLOCKSY );
  161.                     kern<<<dimGrid, dimBlock>>>(d_key, d_ans);
  162.  
  163.                     /////////// take back
  164.                     cudaMemcpy( &ans, d_ans, 1 * sizeof( int ), cudaMemcpyDeviceToHost );
  165.                     if( ans )
  166.                         printf("FOUND - %d\n", ans);
  167.                 }
  168.  
  169.     cudaFree( d_key );
  170.     cudaFree( d_ans );
  171.    
  172.     return EXIT_SUCCESS;
  173. }
Advertisement
Add Comment
Please, Sign In to add comment