comparison libtommath/etc/2kprime.c @ 389:5ff8218bcee9

propagate from branch 'au.asn.ucc.matt.ltm.dropbear' (head 2af95f00ebd5bb7a28b3817db1218442c935388e) to branch 'au.asn.ucc.matt.dropbear' (head ecd779509ef23a8cdf64888904fc9b31d78aa933)
author Matt Johnston <matt@ucc.asn.au>
date Thu, 11 Jan 2007 03:14:55 +0000
parents eed26cff980b
children 60fc6476e044
comparison
equal deleted inserted replaced
388:fb54020f78e1 389:5ff8218bcee9
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 $ */