if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&O&:new", kwlist,
convmp, &rp.n, convmp, &rp.e))
goto end;
+ if (!MP_ODDP(rp.n)) VALERR("RSA modulus must be even");
o = (rsapub_pyobj *)ty->tp_alloc(ty, 0);
o->pub = rp;
rsa_pubcreate(&o->pubctx, &o->pub);
convmp, &rp.q_inv,
&rng))
goto end;
+ if ((rp.n && !MP_ODDP(rp.n)) ||
+ (rp.p && !MP_ODDP(rp.p)) ||
+ (rp.p && !MP_ODDP(rp.q)))
+ VALERR("RSA modulus and factors must be odd");
if (rsa_recover(&rp)) VALERR("couldn't construct private key");
if (rng != Py_None && !GRAND_PYCHECK(rng))
TYERR("not a random number source");