algorithms.py: Fiddling with whitespace.
[catacomb-python] / ec.c
diff --git a/ec.c b/ec.c
index 9946205..a294f09 100644 (file)
--- a/ec.c
+++ b/ec.c
@@ -1,7 +1,5 @@
 /* -*-c-*-
  *
- * $Id$
- *
  * Elliptic curves
  *
  * (c) 2004 Straylight/Edgeware
@@ -195,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)
@@ -591,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@ */
 
@@ -705,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@ */
 
@@ -1017,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@ */
 
@@ -1071,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@ */
 
@@ -1125,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@ */
 
@@ -1179,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@ */
 
@@ -1233,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@ */
 
@@ -1438,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@ */
 
@@ -1529,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;