BSD 4_3_Reno release
[unix-history] / usr / src / usr.bin / xsend / common_source / lib.c
CommitLineData
b025a404 1#ifndef lint
1c15e888 2static char sccsid[] = "@(#)lib.c 4.2 5/11/89";
b025a404
SL
3#endif
4
5#include "xmail.h"
f5506e0f
KB
6#include "pathnames.h"
7
b025a404
SL
8MINT *x, *b, *one, *c64, *t45, *z, *q, *r, *two, *t15;
9MINT *a[42];
10setup(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]);
f5506e0f 21 execl(_PATH_MAKEKEY, "-", 0);
b025a404
SL
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}
31mkx()
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}
46mka()
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}
68mkb()
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}
82comminit()
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
97nout(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}
102nin(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
110xfatal(s) char *s;
111{
112 fprintf(stderr, "%s\n", s);
113 exit(1);
114}