chiark / gitweb /
Merge remote-tracking branch 'origin/HEAD'
authorMark Wooding <mdw@distorted.org.uk>
Fri, 7 Jul 2017 20:18:42 +0000 (21:18 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Fri, 7 Jul 2017 20:18:42 +0000 (21:18 +0100)
* origin/HEAD:
  catacomb/pwsafe.py: Fix stupid error which breaks `delete'.

debian/changelog
ec.c
pubkey.c

index 5da18600ec94a92272f0c29b9c075c3266de4e29..aaee0c3d0719136faab5bdf3eb87b4becc471092 100644 (file)
@@ -1,3 +1,11 @@
+catacomb-python (1.2.1) experimental; urgency=low
+
+  * Fix use-after-free bug in ECPt hashing causing hash instability.
+  * Fix keywrd argument mismatch in ECDSAPriv.
+  * Coerce DSA private key values to `MP'.
+
+ -- Mark Wooding <mdw@distorted.org.uk>  Fri, 16 Jun 2017 01:01:05 +0100
+
 catacomb-python (1.2.0) experimental; urgency=low
 
   * Bindings for HSalsa20 and HChaCha PRFs.
diff --git a/ec.c b/ec.c
index 0489bc0f33e3b00d4a882b2be9772fdbaf8c0d17..c6034891ef71215c92d497ed2b1d8275c99f7cd7 100644 (file)
--- a/ec.c
+++ b/ec.c
@@ -204,8 +204,8 @@ static long ecpt_pyhash(PyObject *me)
   EC_OUT(ECPT_C(me), &p, ECPT_P(me));
   ec_putraw(ECPT_C(me), &b, &p);
   EC_DESTROY(&p);
-  xfree(q);
   h = unihash_hash(&unihash_global, h, BBASE(&b), BLEN(&b));
+  xfree(q);
   return (h % LONG_MAX);
 }
 
index e0e8dc95b72577b832890fb1a92baa722e680d6e..5167a973791f1930f18b4b7831a6ce6d4aa240ea 100644 (file)
--- a/pubkey.c
+++ b/pubkey.c
@@ -65,8 +65,12 @@ static PyObject *dsa_setup(PyTypeObject *ty, PyObject *G, PyObject *u,
   if (!u) {
     g->d.u = 0;
     u = Py_None;
-  } else if ((g->d.u = getmp(u)) == 0)
-    goto end;
+  } else {
+    if ((g->d.u = getmp(u)) == 0)
+      goto end;
+    if (MP_PYCHECK(u)) Py_INCREF(u);
+    else u = mp_pywrap(g->d.u);
+  }
   if (!p) {
     assert(g->d.u); assert(calcpub);
     pp = G_CREATE(GROUP_G(G));
@@ -78,7 +82,7 @@ static PyObject *dsa_setup(PyTypeObject *ty, PyObject *G, PyObject *u,
   g->d.p = GE_X(p);
   g->d.r = GRAND_R(rng);
   g->d.h = GCHASH_CH(hash);
-  g->G = G; Py_INCREF(G); g->u = u; Py_INCREF(u); g->p = p;
+  g->G = G; Py_INCREF(G); g->u = u; g->p = p;
   g->rng = rng; Py_INCREF(rng); g->hash = hash; Py_INCREF(hash);
   return ((PyObject *)g);
 end:
@@ -344,7 +348,7 @@ static PyObject *kcdsapriv_pynew(PyTypeObject *ty,
 {
   PyObject *G, *u, *p = 0, *rng = rand_pyobj, *hash = has160_pyobj;
   PyObject *rc = 0;
-  char *kwlist[] = { "G", "p", "u", "hash", "rng", 0 };
+  char *kwlist[] = { "G", "u", "p", "hash", "rng", 0 };
 
   if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!O|O!O!O!:new", kwlist,
                                   group_pytype, &G,