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