X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/blobdiff_plain/b2687a0a4b3c5e45cad7c5815a6d3805bfc8d4f1..07bcd7682d13c250ee7aebbada840f82eb15c405:/pubkey.c diff --git a/pubkey.c b/pubkey.c index 1e7e366..4c4eb1d 100644 --- a/pubkey.c +++ b/pubkey.c @@ -1,7 +1,5 @@ /* -*-c-*- * - * $Id$ - * * Public-key cryptography * * (c) 2004 Straylight/Edgeware @@ -212,7 +210,7 @@ static PyMemberDef dsapriv_pymembers[] = { static PyTypeObject dsapub_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.DSAPub", /* @tp_name@ */ + "DSAPub", /* @tp_name@ */ sizeof(dsa_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -260,7 +258,7 @@ static PyTypeObject dsapub_pytype_skel = { static PyTypeObject dsapriv_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.DSAPriv", /* @tp_name@ */ + "DSAPriv", /* @tp_name@ */ sizeof(dsa_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -425,7 +423,7 @@ static PyMethodDef kcdsapriv_pymethods[] = { static PyTypeObject kcdsapub_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.KCDSAPub", /* @tp_name@ */ + "KCDSAPub", /* @tp_name@ */ sizeof(dsa_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -473,7 +471,7 @@ static PyTypeObject kcdsapub_pytype_skel = { static PyTypeObject kcdsapriv_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.KCDSAPriv", /* @tp_name@ */ + "KCDSAPriv", /* @tp_name@ */ sizeof(dsa_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -555,6 +553,7 @@ static PyObject *rsapub_pynew(PyTypeObject *ty, 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); @@ -627,6 +626,10 @@ static PyObject *rsapriv_pynew(PyTypeObject *ty, 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"); @@ -761,7 +764,7 @@ static PyMethodDef rsapriv_pymethods[] = { static PyTypeObject rsapub_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.RSAPub", /* @tp_name@ */ + "RSAPub", /* @tp_name@ */ sizeof(rsapub_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -809,7 +812,7 @@ static PyTypeObject rsapub_pytype_skel = { static PyTypeObject rsapriv_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.RSAPriv", /* @tp_name@ */ + "RSAPriv", /* @tp_name@ */ sizeof(rsapriv_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */