BSD 4_3_Reno release
[unix-history] / usr / src / domestic / src / xsend / common_source / lib.c
#ifndef lint
static char sccsid[] = "@(#)lib.c 4.2 5/11/89";
#endif
#include "xmail.h"
#include "pathnames.h"
MINT *x, *b, *one, *c64, *t45, *z, *q, *r, *two, *t15;
MINT *a[42];
setup(s) char *s;
{ int pf[2];
strncpy(buf, s, 10);
while(*s) *s++ = 0;
pipe(pf);
if(fork()==0)
{
close(0);
close(1);
dup(pf[0]);
dup(pf[1]);
execl(_PATH_MAKEKEY, "-", 0);
exit(1);
}
write(pf[1], buf, 10);
wait((int *)NULL);
if(read(pf[0], buf, 13) != 13)
{ fprintf(stderr, "enroll: cannot generate key\n");
exit(1);
}
}
mkx()
{ int i, j;
for(i=0; i<4; i++)
{ mult(x, t15, x);
*z->val = (short)(rand() ^ buf[i]);
madd(x, z, x);
}
mdiv(x, b, q, x);
for(;;)
{ gcd(b, x, q);
if(q->len == 1 && q->val[0] == 1)
return;
madd(x, one, x);
}
}
mka()
{ int i, j;
for(i=0; i<42; i++)
a[i] = itom(1);
for(i=j=0; i<42; i++, j++)
{ *z->val = (short)rand()&00;
mult(a[i], z, a[i]);
mult(a[i], t45, a[i]);
rpow(two, j, q);
if( i%14 == 6) j++;
madd(a[i], q, a[i]);
mult(a[i], t15, a[i]);
*z->val = (short)rand()&0777;
madd(a[i], z, a[i]);
mdiv(a[i], b, q, a[i]);
}
for(i=0; i<42; i++)
mult(a[i], x, a[i]);
for(i=0; i<42; i++)
{ mdiv(a[i], b, q, a[i]);
}
}
mkb()
{ int i, c;
unsigned seed;
seed = 123;
for(i=0; i<13; i++)
seed = seed*buf[i] + i;
srand(seed);
*b->val = 04 + (rand()&03);
for(i=0; i<11; i++)
{ *z->val = (buf[i+2] + rand()) & 077;
mult(b, c64, b);
madd(b, z, b);
}
}
comminit()
{ int i;
x = itom(0);
b = itom(1);
one = itom(1);
two = itom(2);
c64 = itom(64);
t45 = itom(1);
t15 = itom(1);
rpow(two, 45, t45);
rpow(two, 15, t15);
z = itom(1);
q = itom(1);
}
#ifndef debug
nout(a, fd) MINT *a; FILE *fd;
{
fwrite(&a->len, sizeof(int), 1, fd);
fwrite(a->val, sizeof(short), a->len, fd);
}
nin(a, fd) MINT *a; FILE *fd;
{
xfree(a);
fread(&a->len, sizeof(int), 1, fd);
a->val = xalloc(a->len, "nin");
fread(a->val, sizeof(short), a->len, fd);
}
#endif
xfatal(s) char *s;
{
fprintf(stderr, "%s\n", s);
exit(1);
}