Home | History | Annotate | Download | only in etc
      1 /* Makes safe primes of a 2k nature */
      2 #include <tommath.h>
      3 #include <time.h>
      4 
      5 int sizes[] = {256, 512, 768, 1024, 1536, 2048, 3072, 4096};
      6 
      7 int main(void)
      8 {
      9    char buf[2000];
     10    int x, y;
     11    mp_int q, p;
     12    FILE *out;
     13    clock_t t1;
     14    mp_digit z;
     15 
     16    mp_init_multi(&q, &p, NULL);
     17 
     18    out = fopen("2kprime.1", "w");
     19    for (x = 0; x < (int)(sizeof(sizes) / sizeof(sizes[0])); x++) {
     20    top:
     21        mp_2expt(&q, sizes[x]);
     22        mp_add_d(&q, 3, &q);
     23        z = -3;
     24 
     25        t1 = clock();
     26        for(;;) {
     27          mp_sub_d(&q, 4, &q);
     28          z += 4;
     29 
     30          if (z > MP_MASK) {
     31             printf("No primes of size %d found\n", sizes[x]);
     32             break;
     33          }
     34 
     35          if (clock() - t1 > CLOCKS_PER_SEC) {
     36             printf("."); fflush(stdout);
     37 //            sleep((clock() - t1 + CLOCKS_PER_SEC/2)/CLOCKS_PER_SEC);
     38             t1 = clock();
     39          }
     40 
     41          /* quick test on q */
     42          mp_prime_is_prime(&q, 1, &y);
     43          if (y == 0) {
     44             continue;
     45          }
     46 
     47          /* find (q-1)/2 */
     48          mp_sub_d(&q, 1, &p);
     49          mp_div_2(&p, &p);
     50          mp_prime_is_prime(&p, 3, &y);
     51          if (y == 0) {
     52             continue;
     53          }
     54 
     55          /* test on q */
     56          mp_prime_is_prime(&q, 3, &y);
     57          if (y == 0) {
     58             continue;
     59          }
     60 
     61          break;
     62        }
     63 
     64        if (y == 0) {
     65           ++sizes[x];
     66           goto top;
     67        }
     68 
     69        mp_toradix(&q, buf, 10);
     70        printf("\n\n%d-bits (k = %lu) = %s\n", sizes[x], z, buf);
     71        fprintf(out, "%d-bits (k = %lu) = %s\n", sizes[x], z, buf); fflush(out);
     72    }
     73 
     74    return 0;
     75 }
     76 
     77 
     78 
     79 
     80 
     81 
     82 /* $Source: /cvs/libtom/libtommath/etc/2kprime.c,v $ */
     83 /* $Revision: 1.2 $ */
     84 /* $Date: 2005/05/05 14:38:47 $ */
     85