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