chiark / gitweb /
*.py: Use `str.replace' rather than `str.translate'.
[catacomb-python] / algorithms.c
index b672498ae9db4f31402660b1bc50641f1ab719a0..3a618d02a49308eea449b95e6708f83cd6006962 100644 (file)
@@ -35,21 +35,31 @@ PyTypeObject *keysz_pytype;
 PyTypeObject *keyszany_pytype, *keyszrange_pytype, *keyszset_pytype;
 PyObject *sha_pyobj, *has160_pyobj;
 
+#ifndef KSZ_OPMASK
+#  define KSZ_OPMASK 0x1f
+#endif
+
+#ifndef KSZ_16BIT
+#  define KSZ_16BIT 0x20
+#endif
+
 PyObject *keysz_pywrap(const octet *k)
 {
-  switch (k[0]) {
+  unsigned op = *k++;
+#define ARG(i) (op&KSZ_16BIT ? LOAD16(k + 2*(i)) : k[i])
+  switch (op&KSZ_OPMASK) {
     case KSZ_ANY: {
       keysz_pyobj *o = PyObject_New(keysz_pyobj, keyszany_pytype);
-      o->dfl = k[1];
+      o->dfl = ARG(0);
       return ((PyObject *)o);
     } break;
     case KSZ_RANGE: {
       keyszrange_pyobj *o =
        PyObject_New(keyszrange_pyobj, keyszrange_pytype);
-      o->dfl = k[1];
-      o->min = k[2];
-      o->max = k[3];
-      o->mod = k[4];
+      o->dfl = ARG(0);
+      o->min = ARG(1);
+      o->max = ARG(2);
+      o->mod = ARG(3);
       if (!o->mod) o->mod = 1;
       return ((PyObject *)o);
     } break;
@@ -57,16 +67,17 @@ PyObject *keysz_pywrap(const octet *k)
       keyszset_pyobj *o =
        PyObject_New(keyszset_pyobj, keyszset_pytype);
       int i, n;
-      o->dfl = k[1];
-      for (i = 0; k[i + 1]; i++) ;
+      o->dfl = ARG(0);
+      for (i = 0; ARG(i); i++) ;
       n = i; o->set = PyTuple_New(n);
       for (i = 0; i < n; i++)
-       PyTuple_SET_ITEM(o->set, i, PyInt_FromLong(k[i + 1]));
+       PyTuple_SET_ITEM(o->set, i, PyInt_FromLong(ARG(i)));
       return ((PyObject *)o);
     } break;
     default:
       abort();
   }
+#undef ARG
 }
 
 static PyObject *keyszany_pynew(PyTypeObject *ty,
@@ -230,7 +241,7 @@ static PyMemberDef keyszset_pymembers[] = {
 
 static PyTypeObject keysz_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.KeySZ",                    /* @tp_name@ */
+  "KeySZ",                             /* @tp_name@ */
   sizeof(keysz_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -278,7 +289,7 @@ static PyTypeObject keysz_pytype_skel = {
 
 static PyTypeObject keyszany_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.KeySZAny",                 /* @tp_name@ */
+  "KeySZAny",                          /* @tp_name@ */
   sizeof(keysz_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -326,7 +337,7 @@ static PyTypeObject keyszany_pytype_skel = {
 
 static PyTypeObject keyszrange_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.KeySZRange",               /* @tp_name@ */
+  "KeySZRange",                                /* @tp_name@ */
   sizeof(keyszrange_pyobj),            /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -375,7 +386,7 @@ sizes, and requires the key length to be a multiple of some value.",
 
 static PyTypeObject keyszset_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.KeySZSet",                 /* @tp_name@ */
+  "KeySZSet",                          /* @tp_name@ */
   sizeof(keyszset_pyobj),              /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -487,7 +498,7 @@ PyObject *gccipher_pywrap(gccipher *cc)
   g->ty.ht_type.tp_alloc = PyType_GenericAlloc;
   g->ty.ht_type.tp_free = 0;
   g->ty.ht_type.tp_new = gcipher_pynew;
-  PyType_Ready(&g->ty.ht_type);
+  typeready(&g->ty.ht_type);
   return ((PyObject *)g);
 }
 
@@ -607,7 +618,7 @@ static PyMethodDef gcipher_pymethods[] = {
 
 static PyTypeObject gccipher_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.GCCipher",                 /* @tp_name@ */
+  "GCCipher",                          /* @tp_name@ */
   sizeof(gccipher_pyobj),              /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -655,7 +666,7 @@ static PyTypeObject gccipher_pytype_skel = {
 
 static PyTypeObject gcipher_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.GCipher",                  /* @tp_name@ */
+  "GCipher",                           /* @tp_name@ */
   sizeof(gcipher_pyobj),               /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -731,7 +742,7 @@ PyObject *gchash_pywrap(gchash *ch)
   g->ty.ht_type.tp_alloc = PyType_GenericAlloc;
   g->ty.ht_type.tp_free = 0;
   g->ty.ht_type.tp_new = ghash_pynew;
-  PyType_Ready(&g->ty.ht_type);
+  typeready(&g->ty.ht_type);
   return ((PyObject *)g);
 }
 
@@ -842,7 +853,7 @@ static PyMethodDef ghash_pymethods[] = {
 
 static PyTypeObject gchash_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.GCHash",                   /* @tp_name@ */
+  "GCHash",                            /* @tp_name@ */
   sizeof(gchash_pyobj),                        /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -890,7 +901,7 @@ static PyTypeObject gchash_pytype_skel = {
 
 static PyTypeObject ghash_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.GHash",                    /* @tp_name@ */
+  "GHash",                             /* @tp_name@ */
   sizeof(ghash_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -986,7 +997,7 @@ PyObject *gcmac_pywrap(gcmac *cm)
   g->ty.ht_type.tp_alloc = PyType_GenericAlloc;
   g->ty.ht_type.tp_free = 0;
   g->ty.ht_type.tp_new = gmac_pynew;
-  PyType_Ready(&g->ty.ht_type);
+  typeready(&g->ty.ht_type);
   return ((PyObject *)g);
 }
 
@@ -1006,7 +1017,7 @@ PyObject *gmac_pywrap(PyObject *cobj, gmac *m, unsigned f)
   g->ty.ht_type.tp_alloc = PyType_GenericAlloc;
   g->ty.ht_type.tp_free = 0;
   g->ty.ht_type.tp_new = gmhash_pynew;
-  PyType_Ready(&g->ty.ht_type);
+  typeready(&g->ty.ht_type);
   g->m = m;
   g->f = f;
   return ((PyObject *)g);
@@ -1040,7 +1051,7 @@ static PyGetSetDef gcmac_pygetset[] = {
 
 static PyTypeObject gcmac_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.GCMAC",                    /* @tp_name@ */
+  "GCMAC",                             /* @tp_name@ */
   sizeof(gchash_pyobj),                        /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -1088,7 +1099,7 @@ static PyTypeObject gcmac_pytype_skel = {
 
 static PyTypeObject gmac_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.GMAC",                     /* @tp_name@ */
+  "GMAC",                              /* @tp_name@ */
   sizeof(gmac_pyobj),                  /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -1136,7 +1147,7 @@ static PyTypeObject gmac_pytype_skel = {
 
 static PyTypeObject gmhash_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.GMACHash",                 /* @tp_name@ */
+  "GMACHash",                          /* @tp_name@ */
   sizeof(ghash_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -1275,7 +1286,7 @@ static PyObject *gcprp_pywrap(const prpinfo *prp)
   g->ty.ht_type.tp_alloc = PyType_GenericAlloc;
   g->ty.ht_type.tp_free = 0;
   g->ty.ht_type.tp_new = gprp_pynew;
-  PyType_Ready(&g->ty.ht_type);
+  typeready(&g->ty.ht_type);
   return ((PyObject *)g);
 }
 
@@ -1333,7 +1344,7 @@ static PyMethodDef gprp_pymethods[] = {
 
 static PyTypeObject gcprp_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.GCPRP",                    /* @tp_name@ */
+  "GCPRP",                             /* @tp_name@ */
   sizeof(gcprp_pyobj),                 /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */
 
@@ -1381,7 +1392,7 @@ static PyTypeObject gcprp_pytype_skel = {
 
 static PyTypeObject gprp_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
-  "catacomb.GPRP",                     /* @tp_name@ */
+  "GPRP",                              /* @tp_name@ */
   sizeof(gprp_pyobj),                  /* @tp_basicsize@ */
   0,                                   /* @tp_itemsize@ */