X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/blobdiff_plain/0040152918b6695e73807fd479024db8a27a83fb..eb0f76ed2e02a0cfef9b837b96dfbbeb1193f4b8:/ec.c diff --git a/ec.c b/ec.c index 2b2dba0..a294f09 100644 --- a/ec.c +++ b/ec.c @@ -193,16 +193,20 @@ static PyObject *ecpt_pymul(PyObject *x, PyObject *y) static long ecpt_pyhash(PyObject *me) { - long i; + uint32 h; + buf b; ec p = EC_INIT; + size_t sz = 2*ECPT_C(me)->f->noctets + 1; + octet *q = xmalloc(sz); + h = 0xe0fdd039 + ECPT_C(me)->f->ops->ty; + buf_init(&b, q, sz); EC_OUT(ECPT_C(me), &p, ECPT_P(me)); - i = 0xe0fdd039; /* random perturbance */ - if (p.x) i ^= mp_tolong(p.x); - if (p.y) i ^= mp_tolong(p.y); - if (i == -1) i = -2; + ec_putraw(ECPT_C(me), &b, &p); EC_DESTROY(&p); - return (i); + xfree(q); + h = unihash_hash(&unihash_global, h, BBASE(&b), BLEN(&b)); + return (h % LONG_MAX); } static PyObject *ecpt_pyrichcompare(PyObject *x, PyObject *y, int op) @@ -589,7 +593,7 @@ static PyNumberMethods ecpt_pynumber = { static PyTypeObject ecpt_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.ECPt", /* @tp_name@ */ + "ECPt", /* @tp_name@ */ sizeof(ecpt_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -703,7 +707,7 @@ static PyNumberMethods ecptcurve_pynumber = { static PyTypeObject ecptcurve_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.ECPtCurve", /* @tp_name@ */ + "ECPtCurve", /* @tp_name@ */ sizeof(ecpt_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -1015,7 +1019,7 @@ E.mmul([(P0, N0), (P1, N1), ...]) = N0 P0 + N1 P1 + ...") static PyTypeObject eccurve_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.ECCurve", /* @tp_name@ */ + "ECCurve", /* @tp_name@ */ sizeof(eccurve_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -1069,7 +1073,7 @@ static PyObject *ecprimecurve_pynew(PyTypeObject *ty, static PyTypeObject ecprimecurve_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.ECPrimeCurve", /* @tp_name@ */ + "ECPrimeCurve", /* @tp_name@ */ sizeof(eccurve_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -1123,7 +1127,7 @@ static PyObject *ecprimeprojcurve_pynew(PyTypeObject *ty, static PyTypeObject ecprimeprojcurve_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.ECPrimeProjCurve", /* @tp_name@ */ + "ECPrimeProjCurve", /* @tp_name@ */ sizeof(eccurve_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -1177,7 +1181,7 @@ static PyObject *ecbincurve_pynew(PyTypeObject *ty, static PyTypeObject ecbincurve_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.ECBinCurve", /* @tp_name@ */ + "ECBinCurve", /* @tp_name@ */ sizeof(eccurve_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -1231,7 +1235,7 @@ static PyObject *ecbinprojcurve_pynew(PyTypeObject *ty, static PyTypeObject ecbinprojcurve_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.ECBinProjCurve", /* @tp_name@ */ + "ECBinProjCurve", /* @tp_name@ */ sizeof(eccurve_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -1436,7 +1440,7 @@ static PyMethodDef ecinfo_pymethods[] = { static PyTypeObject ecinfo_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.ECInfo", /* @tp_name@ */ + "ECInfo", /* @tp_name@ */ sizeof(ecinfo_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -1527,7 +1531,7 @@ static PyObject *namedcurves(void) } c = PyInt_FromLong(i); found: - PyDict_SetItemString(d, (/*unconst*/ char *)ectab[i].name, c); + PyDict_SetItemString(d, (/*unconst*/ char *)p, c); Py_DECREF(c); } ncurves = i;