Advertisement
Guest User

Untitled

a guest
Jan 20th, 2011
360
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.48 KB | None | 0 0
  1. void benchmark(void)
  2. {
  3.     unsigned long int re = 0, wyn = 0, re2 = 0, re3 = 0;
  4.     unsigned long int an[33];
  5.     unsigned long int bn[33];
  6.     unsigned long int ds[2];
  7.  
  8.     uint64_t dist = 0, now = 0;
  9.     double temp1 = 0;
  10.    
  11.     unsigned long int wn[33];
  12.     unsigned long int aa = 0, bb = 0, cc = 0, dd = 0;
  13.     mpz_t n,start,end,remainder,currentNumber, qu, mul, res, b1, b2, wyn1, wyn2, result;
  14.     mpz_t n2;
  15.     size_t a = 0, b=0, w=0, d=0;
  16.  
  17.     mpz_init_set_str(n, "B98E7F4EE7C2FA971E4807B619133C2859ECD24FEDE69CC6C096E7701C77F07C24FAC4C39B40C159CF8C8F9981C2FFD00C862359BC43592FA9B8591967EE0EC5C9EE401F69249610EEB7DCA96644ABB8E16AABEAC64FCF0A5140529F0B220E3C68097E28B6BCC96C3F778A8DA5582CF6AE7CFEC62612E1AFCE462CF0A1396A7F", 16);
  18.     mpz_init(qu);
  19.     mpz_init(res);
  20.     mpz_init(start);
  21.     mpz_sqrt(start, n);
  22.     mpz_out_str(stderr, 16, start);
  23.     mpz_init(end);
  24.     mpz_init_set_ui(result, 0);
  25.  
  26.     mpz_init(wyn1);
  27.     mpz_init(wyn2);
  28.  
  29.     mpz_add_ui(end, start, 1000000000);
  30.  
  31.     mpz_add_ui(end, end, 1000000000);
  32.     mpz_add_ui(end, end, 1000000000);
  33.     mpz_add_ui(end, end, 1000000000);
  34.     mpz_add_ui(end, end, 1000000000);
  35.     mpz_add_ui(end, end, 1000000000);
  36.     mpz_add_ui(end, end, 1000000000);
  37.     mpz_add_ui(end, end, 1000000000);
  38.     mpz_add_ui(end, end, 1000000000);
  39.     mpz_add_ui(end, end, 1000000000);
  40.  
  41.     mpz_init2(remainder, 1024);
  42.     mpz_init2(mul, 1024);
  43.     mpz_init_set(currentNumber, start);
  44.  
  45.     mpz_init2(n2, 1024);
  46.  
  47.     mpz_init(b1);
  48.     mpz_init(b2);
  49.  
  50.     if(mpz_even_p(currentNumber))
  51.         mpz_sub_ui(currentNumber, currentNumber, 1);
  52.  
  53.     fprintf(stderr, "RSA: Starting Benchmark.\n");
  54.     counter.Start();
  55.  
  56.     mpz_cdiv_qr(qu, remainder, n, currentNumber);
  57.     mpz_set(wyn1, remainder);
  58.     if(mpz_cmp_ui(remainder, 0) == 0)
  59.     {
  60.         mpz_set(result, currentNumber);
  61.         fprintf(stderr, "RSA: ending, found a result.\n");
  62.     }
  63.  
  64.     mpz_add_ui(currentNumber, currentNumber, 2);
  65.     now += 2;
  66.     mpz_sub_ui(qu, qu, 2);
  67.  
  68.     mpz_export(wn, &w, 1, 4, 0, 0, n);
  69.     wyn = wn[w-1];
  70.     wyn = wyn & 0xFFFF;
  71.    
  72.     /*
  73.     test this optimization for correct results
  74.     simple school mul is
  75.         AB
  76.         CD
  77.     _______
  78.         BD
  79.        AD
  80.        CB
  81.   +   AC
  82.  
  83.     So last bit (D) are always same after first mul. To be sure in 110% we check only last 16 bits.
  84.     */
  85. /*
  86.     mpz_init_set(n1, start);
  87.  
  88.     mpz_mul(n2, n1, n1);
  89.     mpz_export(wn, &w, 1, 4, 0, 0, n2);
  90.     wyn = wn[w-1];
  91.     wyn = wyn & 0xFFFF;
  92.  
  93.     mpz_export(an, &a, 1, 4, 0, 0, n1);
  94.     mpz_export(bn, &b, 1, 4, 0, 0, n1);
  95.     re = (an[a-1] * bn[b-1]) & 0xFFFF;*/
  96.  
  97.     mpz_export(an, &a, 1, 4, 0, 0, qu);
  98.     mpz_export(bn, &b, 1, 4, 0, 0, currentNumber);
  99.  
  100.     aa = an[a-1];
  101.     bb = bn[b-1];
  102.  
  103.  
  104.     //dist
  105.     mpz_sub(res, end, start);
  106.     temp1 = mpz_get_d(res);
  107.     dist = (uint64_t)temp1;
  108.  
  109.     while (now < dist)
  110.     {
  111.         //mpz_export(an, &a, 1, 4, 0, 0, qu);
  112.         //mpz_export(bn, &b, 1, 4, 0, 0, currentNumber);
  113.  
  114.         //mul 32x32 bit
  115.         //check last 16 bits
  116.         //re = (an[a-1] * bn[b-1]) & 0xFFFF;
  117.         re2 = (aa * bb) & 0xFFFF;
  118.  
  119.         //if(re != re2)
  120.         //  printf("Ups...\n");
  121.  
  122.         if((re2 ^ wyn) == 0)
  123.         {
  124.             ds[1] = now & 0xFFFFFFFF;
  125.             ds[0] = now >> 32;
  126.             mpz_import (res, 2, 1, sizeof(ds[0]), 0, 0, ds);
  127.  
  128.             mpz_sub(qu, qu, res);
  129.             mpz_add(currentNumber, currentNumber, res);
  130.  
  131.             mpz_mul(mul, qu, currentNumber);
  132.             if(mpz_cmp(mul, n) == 0)
  133.             {
  134.                 fprintf(stderr, "RSA: ending, found a result.\n");
  135.                 mpz_set(result, currentNumber);
  136.             }
  137.         }
  138.        
  139.         aa -= 2;
  140.         bb += 2;
  141.         now += 2;
  142.  
  143.         //mpz_sub_ui(qu, qu, 2);
  144.         //mpz_add_ui(currentNumber, currentNumber, 2);     
  145.     }
  146.  
  147.     mpz_clear(n);
  148.     mpz_clear(start);
  149.     mpz_clear(end);
  150.     mpz_clear(remainder);
  151.     mpz_clear(currentNumber);
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement