|
|
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.