chiark / gitweb /
passim: fix typo
[catacomb-python] / algorithms.c
index a740a714db0008db4cddaa2e14cfebf2bae1d43f..cd7a04d5ad8482a8dd05b60fc60b3e90d999aaf3 100644 (file)
@@ -231,7 +231,7 @@ static PyMemberDef keyszset_pymembers[] = {
 };
 
 static PyTypeObject keysz_pytype_skel = {
-  PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
+  PyObject_HEAD_INIT(0) 0,             /* Header */
   "catacomb.KeySZ",                    /* @tp_name@ */
   sizeof(keysz_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -262,7 +262,7 @@ static PyTypeObject keysz_pytype_skel = {
   0,                                   /* @tp_richcompare@ */
   0,                                   /* @tp_weaklistoffset@ */
   0,                                   /* @tp_iter@ */
-  0,                                   /* @tp_iternexr@ */
+  0,                                   /* @tp_iternext@ */
   0,                                   /* @tp_methods@ */
   keysz_pymembers,                     /* @tp_members@ */
   0,                                   /* @tp_getset@ */
@@ -279,7 +279,7 @@ static PyTypeObject keysz_pytype_skel = {
 };
 
 static PyTypeObject keyszany_pytype_skel = {
-  PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
+  PyObject_HEAD_INIT(0) 0,             /* Header */
   "catacomb.KeySZAny",                 /* @tp_name@ */
   sizeof(keysz_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -310,7 +310,7 @@ static PyTypeObject keyszany_pytype_skel = {
   0,                                   /* @tp_richcompare@ */
   0,                                   /* @tp_weaklistoffset@ */
   0,                                   /* @tp_iter@ */
-  0,                                   /* @tp_iternexr@ */
+  0,                                   /* @tp_iternext@ */
   0,                                   /* @tp_methods@ */
   0,                                   /* @tp_members@ */
   keyszany_pygetset,                   /* @tp_getset@ */
@@ -327,7 +327,7 @@ static PyTypeObject keyszany_pytype_skel = {
 };
 
 static PyTypeObject keyszrange_pytype_skel = {
-  PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
+  PyObject_HEAD_INIT(0) 0,             /* Header */
   "catacomb.KeySZRange",               /* @tp_name@ */
   sizeof(keyszrange_pyobj),            /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -359,7 +359,7 @@ sizes, and requires the key length to be a multiple of some value.",
   0,                                   /* @tp_richcompare@ */
   0,                                   /* @tp_weaklistoffset@ */
   0,                                   /* @tp_iter@ */
-  0,                                   /* @tp_iternexr@ */
+  0,                                   /* @tp_iternext@ */
   0,                                   /* @tp_methods@ */
   keyszrange_pymembers,                        /* @tp_members@ */
   0,                                   /* @tp_getset@ */
@@ -376,7 +376,7 @@ sizes, and requires the key length to be a multiple of some value.",
 };
 
 static PyTypeObject keyszset_pytype_skel = {
-  PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
+  PyObject_HEAD_INIT(0) 0,             /* Header */
   "catacomb.KeySZSet",                 /* @tp_name@ */
   sizeof(keyszset_pyobj),              /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -408,7 +408,7 @@ few listed sizes.",
   0,                                   /* @tp_richcompare@ */
   0,                                   /* @tp_weaklistoffset@ */
   0,                                   /* @tp_iter@ */
-  0,                                   /* @tp_iternexr@ */
+  0,                                   /* @tp_iternext@ */
   0,                                   /* @tp_methods@ */
   keyszset_pymembers,                  /* @tp_members@ */
   keyszset_pygetset,                   /* @tp_getset@ */
@@ -460,19 +460,18 @@ end:
 
 PyObject *gccipher_pywrap(gccipher *cc)
 {
-  gccipher_pyobj *g = newtype(gccipher_pytype, 0);
+  gccipher_pyobj *g = newtype(gccipher_pytype, 0, cc->name);
   g->cc = cc;
-  g->ty.tp_name = (/*unconst*/ char *)cc->name;
-  g->ty.tp_basicsize = sizeof(gcipher_pyobj);
-  g->ty.tp_base = gcipher_pytype;
+  g->ty.type.tp_basicsize = sizeof(gcipher_pyobj);
+  g->ty.type.tp_base = gcipher_pytype;
   Py_INCREF(gcipher_pytype);
-  g->ty.tp_flags = (Py_TPFLAGS_DEFAULT |
-                   Py_TPFLAGS_BASETYPE |
-                   Py_TPFLAGS_HEAPTYPE);
-  g->ty.tp_alloc = PyType_GenericAlloc;
-  g->ty.tp_free = 0;
-  g->ty.tp_new = gcipher_pynew;
-  PyType_Ready(&g->ty);
+  g->ty.type.tp_flags = (Py_TPFLAGS_DEFAULT |
+                        Py_TPFLAGS_BASETYPE |
+                        Py_TPFLAGS_HEAPTYPE);
+  g->ty.type.tp_alloc = PyType_GenericAlloc;
+  g->ty.type.tp_free = 0;
+  g->ty.type.tp_new = gcipher_pynew;
+  PyType_Ready(&g->ty.type);
   return ((PyObject *)g);
 }
 
@@ -591,7 +590,7 @@ static PyMethodDef gcipher_pymethods[] = {
 };
 
 static PyTypeObject gccipher_pytype_skel = {
-  PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
+  PyObject_HEAD_INIT(0) 0,             /* Header */
   "catacomb.GCCipher",                 /* @tp_name@ */
   sizeof(gccipher_pyobj),              /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -622,7 +621,7 @@ static PyTypeObject gccipher_pytype_skel = {
   0,                                   /* @tp_richcompare@ */
   0,                                   /* @tp_weaklistoffset@ */
   0,                                   /* @tp_iter@ */
-  0,                                   /* @tp_iternexr@ */
+  0,                                   /* @tp_iternext@ */
   0,                                   /* @tp_methods@ */
   0,                                   /* @tp_members@ */
   gccipher_pygetset,                   /* @tp_getset@ */
@@ -639,7 +638,7 @@ static PyTypeObject gccipher_pytype_skel = {
 };
 
 static PyTypeObject gcipher_pytype_skel = {
-  PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
+  PyObject_HEAD_INIT(0) 0,             /* Header */
   "catacomb.GCipher",                  /* @tp_name@ */
   sizeof(gcipher_pyobj),               /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -670,7 +669,7 @@ static PyTypeObject gcipher_pytype_skel = {
   0,                                   /* @tp_richcompare@ */
   0,                                   /* @tp_weaklistoffset@ */
   0,                                   /* @tp_iter@ */
-  0,                                   /* @tp_iternexr@ */
+  0,                                   /* @tp_iternext@ */
   gcipher_pymethods,                   /* @tp_methods@ */
   0,                                   /* @tp_members@ */
   0,                                   /* @tp_getset@ */
@@ -705,19 +704,18 @@ end:
 
 PyObject *gchash_pywrap(gchash *ch)
 {
-  gchash_pyobj *g = newtype(gchash_pytype, 0);
+  gchash_pyobj *g = newtype(gchash_pytype, 0, ch->name);
   g->ch = ch;
-  g->ty.tp_name = (/*unconst*/ char *)ch->name;
-  g->ty.tp_basicsize = sizeof(ghash_pyobj);
-  g->ty.tp_base = ghash_pytype;
+  g->ty.type.tp_basicsize = sizeof(ghash_pyobj);
+  g->ty.type.tp_base = ghash_pytype;
   Py_INCREF(ghash_pytype);
-  g->ty.tp_flags = (Py_TPFLAGS_DEFAULT |
-                   Py_TPFLAGS_BASETYPE |
-                   Py_TPFLAGS_HEAPTYPE);
-  g->ty.tp_alloc = PyType_GenericAlloc;
-  g->ty.tp_free = 0;
-  g->ty.tp_new = ghash_pynew;
-  PyType_Ready(&g->ty);
+  g->ty.type.tp_flags = (Py_TPFLAGS_DEFAULT |
+                        Py_TPFLAGS_BASETYPE |
+                        Py_TPFLAGS_HEAPTYPE);
+  g->ty.type.tp_alloc = PyType_GenericAlloc;
+  g->ty.type.tp_free = 0;
+  g->ty.type.tp_new = ghash_pynew;
+  PyType_Ready(&g->ty.type);
   return ((PyObject *)g);
 }
 
@@ -779,16 +777,55 @@ static PyGetSetDef gchash_pygetset[] = {
   { 0 }
 };
 
+#define GHMETH_HASHU_(n, W, w)                                         \
+  static PyObject *ghmeth_hashu##w(PyObject *me, PyObject *arg)                \
+  {                                                                    \
+    uint##n x;                                                         \
+    if (!PyArg_ParseTuple(arg, "O&:hashu" #w, convu##n, &x)) goto end; \
+    GH_HASHU##W(GHASH_H(me), x);                                       \
+    RETURN_ME;                                                         \
+  end:                                                                 \
+    return (0);                                                                \
+  }
+DOUINTCONV(GHMETH_HASHU_)
+
+#define GHMETH_HASHBUF_(n, W, w)                                       \
+  static PyObject *ghmeth_hashbuf##w(PyObject *me, PyObject *arg)      \
+  {                                                                    \
+    char *p;                                                           \
+    int sz;                                                            \
+    if (!PyArg_ParseTuple(arg, "s#:hashbuf" #w, &p, &sz)) goto end;    \
+    if (sz > MASK##n) TYERR("string too long");                                \
+    GH_HASHBUF##W(GHASH_H(me), p, sz);                                 \
+    RETURN_ME;                                                         \
+  end:                                                                 \
+    return (0);                                                                \
+  }
+DOUINTCONV(GHMETH_HASHBUF_)
+
+static PyObject *ghmeth_hashstrz(PyObject *me, PyObject *arg)
+{
+  char *p;
+  if (!PyArg_ParseTuple(arg, "s:hashstrz", &p)) return (0);
+  GH_HASHSTRZ(GHASH_H(me), p);
+  RETURN_ME;
+}
+
 static PyMethodDef ghash_pymethods[] = {
 #define METHNAME(name) ghmeth_##name
   METH (hash,                  "H.hash(M)")
+#define METHU_(n, W, w) METH(hashu##w, "H.hashu" #w "(WORD)")
+  DOUINTCONV(METHU_)
+#define METHBUF_(n, W, w) METH(hashbuf##w, "H.hashbuf" #w "(BYTES)")
+  DOUINTCONV(METHBUF_)
+  METH (hashstrz,              "H.hashstrz(STRING)")
   METH (done,                  "H.done() -> HASH")
 #undef METHNAME
   { 0 }
 };
 
 static PyTypeObject gchash_pytype_skel = {
-  PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
+  PyObject_HEAD_INIT(0) 0,             /* Header */
   "catacomb.GCHash",                   /* @tp_name@ */
   sizeof(gchash_pyobj),                        /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -819,7 +856,7 @@ static PyTypeObject gchash_pytype_skel = {
   0,                                   /* @tp_richcompare@ */
   0,                                   /* @tp_weaklistoffset@ */
   0,                                   /* @tp_iter@ */
-  0,                                   /* @tp_iternexr@ */
+  0,                                   /* @tp_iternext@ */
   0,                                   /* @tp_methods@ */
   0,                                   /* @tp_members@ */
   gchash_pygetset,                     /* @tp_getset@ */
@@ -836,7 +873,7 @@ static PyTypeObject gchash_pytype_skel = {
 };
 
 static PyTypeObject ghash_pytype_skel = {
-  PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
+  PyObject_HEAD_INIT(0) 0,             /* Header */
   "catacomb.GHash",                    /* @tp_name@ */
   sizeof(ghash_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -867,7 +904,7 @@ static PyTypeObject ghash_pytype_skel = {
   0,                                   /* @tp_richcompare@ */
   0,                                   /* @tp_weaklistoffset@ */
   0,                                   /* @tp_iter@ */
-  0,                                   /* @tp_iternexr@ */
+  0,                                   /* @tp_iternext@ */
   ghash_pymethods,                     /* @tp_methods@ */
   0,                                   /* @tp_members@ */
   0,                                   /* @tp_getset@ */
@@ -922,19 +959,18 @@ static PyObject *gmhash_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
 
 PyObject *gcmac_pywrap(gcmac *cm)
 {
-  gcmac_pyobj *g = newtype(gcmac_pytype, 0);
+  gcmac_pyobj *g = newtype(gcmac_pytype, 0, cm->name);
   g->cm = cm;
-  g->ty.tp_name = (/*unconst*/ char *)cm->name;
-  g->ty.tp_basicsize = sizeof(gmac_pyobj);
-  g->ty.tp_base = gmac_pytype;
+  g->ty.type.tp_basicsize = sizeof(gmac_pyobj);
+  g->ty.type.tp_base = gmac_pytype;
   Py_INCREF(gmac_pytype);
-  g->ty.tp_flags = (Py_TPFLAGS_DEFAULT |
+  g->ty.type.tp_flags = (Py_TPFLAGS_DEFAULT |
                    Py_TPFLAGS_BASETYPE |
                    Py_TPFLAGS_HEAPTYPE);
-  g->ty.tp_alloc = PyType_GenericAlloc;
-  g->ty.tp_free = 0;
-  g->ty.tp_new = gmac_pynew;
-  PyType_Ready(&g->ty);
+  g->ty.type.tp_alloc = PyType_GenericAlloc;
+  g->ty.type.tp_free = 0;
+  g->ty.type.tp_new = gmac_pynew;
+  PyType_Ready(&g->ty.type);
   return ((PyObject *)g);
 }
 
@@ -943,18 +979,18 @@ PyObject *gmac_pywrap(PyObject *cobj, gmac *m, unsigned f)
   gmac_pyobj *g;
   if (!cobj) cobj = gcmac_pywrap((/*unconst*/ gcmac *)GM_CLASS(m));
   else Py_INCREF(cobj);
-  g = newtype((PyTypeObject *)cobj, 0);
-  g->nameobj = PyString_FromFormat("%s(keyed)", m->ops->c->name);
-  g->ty.tp_name = PyString_AS_STRING(g->nameobj);
-  g->ty.tp_base = gmhash_pytype;
+  g = newtype((PyTypeObject *)cobj, 0, 0);
+  g->ty.name = PyString_FromFormat("%s(keyed)", m->ops->c->name);
+  g->ty.type.tp_name = PyString_AS_STRING(g->ty.name);
+  g->ty.type.tp_base = gmhash_pytype;
   Py_INCREF(gmac_pytype);
-  g->ty.tp_flags = (Py_TPFLAGS_DEFAULT |
-                   Py_TPFLAGS_BASETYPE |
-                   Py_TPFLAGS_HEAPTYPE);
-  g->ty.tp_alloc = PyType_GenericAlloc;
-  g->ty.tp_free = 0;
-  g->ty.tp_new = gmhash_pynew;
-  PyType_Ready(&g->ty);
+  g->ty.type.tp_flags = (Py_TPFLAGS_DEFAULT |
+                        Py_TPFLAGS_BASETYPE |
+                        Py_TPFLAGS_HEAPTYPE);
+  g->ty.type.tp_alloc = PyType_GenericAlloc;
+  g->ty.type.tp_free = 0;
+  g->ty.type.tp_new = gmhash_pynew;
+  PyType_Ready(&g->ty.type);
   g->m = m;
   g->f = f;
   return ((PyObject *)g);  
@@ -965,7 +1001,6 @@ static void gmac_pydealloc(PyObject *me)
   if (GMAC_F(me) & f_freeme)
     GM_DESTROY(GMAC_M(me));
   Py_DECREF(me->ob_type);
-  Py_DECREF(GMAC_NAMEOBJ(me));
   PyType_Type.tp_dealloc(me);
 }
 
@@ -988,7 +1023,7 @@ static PyGetSetDef gcmac_pygetset[] = {
 };
 
 static PyTypeObject gcmac_pytype_skel = {
-  PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
+  PyObject_HEAD_INIT(0) 0,             /* Header */
   "catacomb.GCMAC",                    /* @tp_name@ */
   sizeof(gchash_pyobj),                        /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -1019,7 +1054,7 @@ static PyTypeObject gcmac_pytype_skel = {
   0,                                   /* @tp_richcompare@ */
   0,                                   /* @tp_weaklistoffset@ */
   0,                                   /* @tp_iter@ */
-  0,                                   /* @tp_iternexr@ */
+  0,                                   /* @tp_iternext@ */
   0,                                   /* @tp_methods@ */
   0,                                   /* @tp_members@ */
   gcmac_pygetset,                      /* @tp_getset@ */
@@ -1036,7 +1071,7 @@ static PyTypeObject gcmac_pytype_skel = {
 };
 
 static PyTypeObject gmac_pytype_skel = {
-  PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
+  PyObject_HEAD_INIT(0) 0,             /* Header */
   "catacomb.GMAC",                     /* @tp_name@ */
   sizeof(gmac_pyobj),                  /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -1067,7 +1102,7 @@ static PyTypeObject gmac_pytype_skel = {
   0,                                   /* @tp_richcompare@ */
   0,                                   /* @tp_weaklistoffset@ */
   0,                                   /* @tp_iter@ */
-  0,                                   /* @tp_iternexr@ */
+  0,                                   /* @tp_iternext@ */
   0,                                   /* @tp_methods@ */
   0,                                   /* @tp_members@ */
   0,                                   /* @tp_getset@ */
@@ -1084,7 +1119,7 @@ static PyTypeObject gmac_pytype_skel = {
 };
 
 static PyTypeObject gmhash_pytype_skel = {
-  PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
+  PyObject_HEAD_INIT(0) 0,             /* Header */
   "catacomb.GMACHash",                 /* @tp_name@ */
   sizeof(ghash_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
@@ -1115,7 +1150,7 @@ static PyTypeObject gmhash_pytype_skel = {
   0,                                   /* @tp_richcompare@ */
   0,                                   /* @tp_weaklistoffset@ */
   0,                                   /* @tp_iter@ */
-  0,                                   /* @tp_iternexr@ */
+  0,                                   /* @tp_iternext@ */
   0,                                   /* @tp_methods@ */
   0,                                   /* @tp_members@ */
   0,                                   /* @tp_getset@ */