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