#include "xmail.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("/usr/lib/makekey", "-", 0); execl("/lib/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); }