chiark / gitweb /
rand.c: Careful range checking on `block' and `mp'.
[catacomb-python] / pubkey.c
index c47f1b514cda3403b5b885b86cd927d76b2c21e4..4c4eb1dfbc40743ea7c342eea9dafde4a22c0a52 100644 (file)
--- a/pubkey.c
+++ b/pubkey.c
@@ -210,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@ */
 
@@ -258,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@ */
 
@@ -423,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@ */
 
@@ -471,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@ */
 
@@ -553,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);
@@ -625,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");
@@ -759,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@ */
 
@@ -807,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@ */