- qr = mp_mul(MP_NEW, a, b);
- mp_div(0, &qr, qr, m);
-
- if (MP_CMP(qr, !=, r)) {
- fputs("\n*** classical modmul failed", stderr);
- fputs("\n m = ", stderr); mp_writefile(m, stderr, 10);
- fputs("\n a = ", stderr); mp_writefile(a, stderr, 10);
- fputs("\n b = ", stderr); mp_writefile(b, stderr, 10);
- fputs("\n r = ", stderr); mp_writefile(r, stderr, 10);
- fputs("\nqr = ", stderr); mp_writefile(qr, stderr, 10);
- fputc('\n', stderr);
- ok = 0;
- }
-
- if (MP_CMP(mr, !=, r)) {
- fputs("\n*** montgomery modmul failed", stderr);
- fputs("\n m = ", stderr); mp_writefile(m, stderr, 10);
- fputs("\n a = ", stderr); mp_writefile(a, stderr, 10);
- fputs("\n b = ", stderr); mp_writefile(b, stderr, 10);
- fputs("\n r = ", stderr); mp_writefile(r, stderr, 10);
- fputs("\nmr = ", stderr); mp_writefile(mr, stderr, 10);
- fputc('\n', stderr);
- ok = 0;
- }
-
- MP_DROP(m);
- MP_DROP(a);
- MP_DROP(b);
- MP_DROP(r);
- MP_DROP(mr);
- MP_DROP(qr);
- mpmont_destroy(&mm);
- return ok;
-}
-
-static int texp(dstr *v)
-{
- mp *m = *(mp **)v[0].buf;
- mp *a = *(mp **)v[1].buf;
- mp *b = *(mp **)v[2].buf;
- mp *r = *(mp **)v[3].buf;
- mp *mr;
- int ok = 1;
-
- mpmont mm;
- mpmont_create(&mm, m);
-
- mr = mpmont_exp(&mm, a, b);
-
- if (MP_CMP(mr, !=, r)) {
- fputs("\n*** montgomery modexp failed", stderr);
- fputs("\n m = ", stderr); mp_writefile(m, stderr, 10);
- fputs("\n a = ", stderr); mp_writefile(a, stderr, 10);
- fputs("\n e = ", stderr); mp_writefile(b, stderr, 10);
- fputs("\n r = ", stderr); mp_writefile(r, stderr, 10);
- fputs("\nmr = ", stderr); mp_writefile(mr, stderr, 10);
- fputc('\n', stderr);
- ok = 0;
- }