|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)lib.c 4.2 5/11/89";
3: #endif
4:
5: #include "xmail.h"
6: #include "pathnames.h"
7:
8: MINT *x, *b, *one, *c64, *t45, *z, *q, *r, *two, *t15;
9: MINT *a[42];
10: setup(s) char *s;
11: { int pf[2];
12: strncpy(buf, s, 10);
13: while(*s) *s++ = 0;
14: pipe(pf);
15: if(fork()==0)
16: {
17: close(0);
18: close(1);
19: dup(pf[0]);
20: dup(pf[1]);
21: execl(_PATH_MAKEKEY, "-", 0);
22: exit(1);
23: }
24: write(pf[1], buf, 10);
25: wait((int *)NULL);
26: if(read(pf[0], buf, 13) != 13)
27: { fprintf(stderr, "enroll: cannot generate key\n");
28: exit(1);
29: }
30: }
31: mkx()
32: { int i, j;
33: for(i=0; i<4; i++)
34: { mult(x, t15, x);
35: *z->val = (short)(rand() ^ buf[i]);
36: madd(x, z, x);
37: }
38: mdiv(x, b, q, x);
39: for(;;)
40: { gcd(b, x, q);
41: if(q->len == 1 && q->val[0] == 1)
42: return;
43: madd(x, one, x);
44: }
45: }
46: mka()
47: { int i, j;
48: for(i=0; i<42; i++)
49: a[i] = itom(1);
50: for(i=j=0; i<42; i++, j++)
51: { *z->val = (short)rand()&00;
52: mult(a[i], z, a[i]);
53: mult(a[i], t45, a[i]);
54: rpow(two, j, q);
55: if( i%14 == 6) j++;
56: madd(a[i], q, a[i]);
57: mult(a[i], t15, a[i]);
58: *z->val = (short)rand()&0777;
59: madd(a[i], z, a[i]);
60: mdiv(a[i], b, q, a[i]);
61: }
62: for(i=0; i<42; i++)
63: mult(a[i], x, a[i]);
64: for(i=0; i<42; i++)
65: { mdiv(a[i], b, q, a[i]);
66: }
67: }
68: mkb()
69: { int i, c;
70: unsigned seed;
71: seed = 123;
72: for(i=0; i<13; i++)
73: seed = seed*buf[i] + i;
74: srand(seed);
75: *b->val = 04 + (rand()&03);
76: for(i=0; i<11; i++)
77: { *z->val = (buf[i+2] + rand()) & 077;
78: mult(b, c64, b);
79: madd(b, z, b);
80: }
81: }
82: comminit()
83: { int i;
84: x = itom(0);
85: b = itom(1);
86: one = itom(1);
87: two = itom(2);
88: c64 = itom(64);
89: t45 = itom(1);
90: t15 = itom(1);
91: rpow(two, 45, t45);
92: rpow(two, 15, t15);
93: z = itom(1);
94: q = itom(1);
95: }
96: #ifndef debug
97: nout(a, fd) MINT *a; FILE *fd;
98: {
99: fwrite(&a->len, sizeof(int), 1, fd);
100: fwrite(a->val, sizeof(short), a->len, fd);
101: }
102: nin(a, fd) MINT *a; FILE *fd;
103: {
104: xfree(a);
105: fread(&a->len, sizeof(int), 1, fd);
106: a->val = xalloc(a->len, "nin");
107: fread(a->val, sizeof(short), a->len, fd);
108: }
109: #endif
110: xfatal(s) char *s;
111: {
112: fprintf(stderr, "%s\n", s);
113: exit(1);
114: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.