static int testdiv(void) { short ro; MINT *t2; mp_mdiv(c42, c5, t0, t1); testmcmp(t0, c8, "mdiv0"); testmcmp(t1, c2, "mdiv1"); mp_mdiv(c10, c8, t0, t1); testmcmp(t0, c1, "mdiv2"); testmcmp(t1, c2, "mdiv3"); mp_sdiv(c42, 5, t0, &ro); testmcmp(t0, c8, "sdiv0"); t2 = mp_itom(ro); // Simpler to use common testmcmp() testmcmp(t2, c2, "sdiv1"); mp_mfree(t2); mp_sdiv(c10, 8, t0, &ro); testmcmp(t0, c1, "sdiv2"); t2 = mp_itom(ro); // Simpler to use common testmcmp() testmcmp(t2, c2, "sdiv3"); mp_mfree(t2); }
/* * Choose middle 64 bits of the common key to use as our des key, possibly * overwriting the lower order bits by setting parity. */ static void extractdeskey(MINT *ck, DesData *deskey) { MINT *a; MINT *z; short r; int i; short base = (1 << 8); char *k; z = mp_itom(0); a = mp_itom(0); mp_madd(ck, z, a); for (i = 0; i < ((KEYSIZE - 64) / 2) / 8; i++) { mp_sdiv(a, base, a, &r); } k = (char *)deskey; for (i = 0; i < 8; i++) { mp_sdiv(a, base, a, &r); *k++ = r; } mp_mfree(z); mp_mfree(a); }
/* * Choose top 128 bits of the common key to use as our idea key. */ static void extractideakey(MINT *ck, IdeaData *ideakey) { MINT *a; MINT *z; short r; int i; short base = (1 << 8); char *k; z = mp_itom(0); a = mp_itom(0); mp_madd(ck, z, a); for (i = 0; i < ((KEYSIZE - 128) / 8); i++) { mp_sdiv(a, base, a, &r); } k = (char *)ideakey; for (i = 0; i < 16; i++) { mp_sdiv(a, base, a, &r); *k++ = r; } mp_mfree(z); mp_mfree(a); }
static void m_out(MINT *a, short b, FILE *f) { int sign, xlen, i; short r; MINT x; char *obuf; char *bp; if (a == NULL) return; sign = 1; xlen = a->len; if (xlen < 0) { xlen = -xlen; sign = -1; } if (xlen == 0) { (void) fprintf(f, "0\n"); return; } x.len = xlen; x.val = _mp_xalloc(xlen, "m_out"); for (i = 0; i < xlen; i++) x.val[i] = a->val[i]; obuf = malloc(7 * (size_t)xlen); bp = obuf + 7 * xlen - 1; *bp-- = 0; while (x.len > 0) { for (i = 0; i < 10 && x.len > 0; i++) { mp_sdiv(&x, b, &x, &r); *bp-- = (char)(r + '0'); } if (x.len > 0) *bp-- = ' '; } if (sign == -1) *bp-- = '-'; (void) fprintf(f, "%s\n", bp + 1); free(obuf); _mp_xfree(&x); }
void sdiv(MINT *a, short n, MINT *q, short *r) { mp_sdiv(a, n, q, r); }