*.c: Split the constant definitions into the various submodules.
[catacomb-python] / algorithms.c
index ad9fe9c..f792087 100644 (file)
@@ -215,9 +215,7 @@ static PyObject *ksget_max(PyObject *me, void *hunoz)
 
 static const PyMemberDef keysz_pymembers[] = {
 #define MEMBERSTRUCT keysz_pyobj
-#define default dfl /* ugh! */
-  MEMBER(default, T_INT,  READONLY, "KSZ.default -> default key size")
-#undef default
+  MEMRNM(default, T_INT, dfl, READONLY, "KSZ.default -> default key size")
 #undef MEMBERSTRUCT
   { 0 }
 };
@@ -297,7 +295,7 @@ static const PyMemberDef keyszset_pymembers[] = {
   { 0 }
 };
 
-static PyTypeObject keysz_pytype_skel = {
+static const PyTypeObject keysz_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeySZ",                             /* @tp_name@ */
   sizeof(keysz_pyobj),                 /* @tp_basicsize@ */
@@ -345,7 +343,7 @@ static PyTypeObject keysz_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject keyszany_pytype_skel = {
+static const PyTypeObject keyszany_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeySZAny",                          /* @tp_name@ */
   sizeof(keysz_pyobj),                 /* @tp_basicsize@ */
@@ -394,7 +392,7 @@ static PyTypeObject keyszany_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject keyszrange_pytype_skel = {
+static const PyTypeObject keyszrange_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeySZRange",                                /* @tp_name@ */
   sizeof(keyszrange_pyobj),            /* @tp_basicsize@ */
@@ -444,7 +442,7 @@ static PyTypeObject keyszrange_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject keyszset_pytype_skel = {
+static const PyTypeObject keyszset_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeySZSet",                          /* @tp_name@ */
   sizeof(keyszset_pyobj),              /* @tp_basicsize@ */
@@ -640,9 +638,8 @@ end:
   return (0);
 }
 
-static PyObject *gcmeth_bdry(PyObject *me, PyObject *arg)
+static PyObject *gcmeth_bdry(PyObject *me)
 {
-  if (!PyArg_ParseTuple(arg, ":bdry")) goto end;
   if (!GCIPHER_C(me)->ops->bdry) VALERR("`bdry' not supported");
   if (!GC_CLASS(GCIPHER_C(me))->blksz) VALERR("not a block cipher mode");
   GC_BDRY(GCIPHER_C(me));
@@ -667,12 +664,12 @@ static const PyMethodDef gcipher_pymethods[] = {
   METH (decrypt,       "C.decrypt(CT) -> PT")
   METH (deczero,       "C.deczero(N) -> PT")
   METH (setiv,         "C.setiv(IV)")
-  METH (bdry,          "C.bdry()")
+  NAMETH(bdry,         "C.bdry()")
 #undef METHNAME
   { 0 }
 };
 
-static PyTypeObject gccipher_pytype_skel = {
+static const PyTypeObject gccipher_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCCipher",                          /* @tp_name@ */
   sizeof(gccipher_pyobj),              /* @tp_basicsize@ */
@@ -720,7 +717,7 @@ static PyTypeObject gccipher_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gcipher_pytype_skel = {
+static const PyTypeObject gcipher_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCipher",                           /* @tp_name@ */
   sizeof(gcipher_pyobj),               /* @tp_basicsize@ */
@@ -976,12 +973,11 @@ static const PyGetSetDef gcaead_pygetset[] = {
   { 0 }
 };
 
-static PyObject *gaekmeth_aad(PyObject *me, PyObject *arg)
+static PyObject *gaekmeth_aad(PyObject *me)
 {
   const gaead_key *k = GAEADKEY_K(me);
   PyObject *rc = 0;
 
-  if (!PyArg_ParseTuple(arg, ":aad")) return (0);
   if (k->ops->c->f&AEADF_AADNDEP)
     VALERR("aad must be associated with enc/dec op");
   rc = gaeadaad_pywrap((PyObject *)GCAEAD_AAD(me->ob_type),
@@ -1068,7 +1064,7 @@ end:
 
 static const PyMethodDef gaeadkey_pymethods[] = {
 #define METHNAME(name) gaekmeth_##name
-  METH (aad,           "KEY.aad() -> AAD")
+  NAMETH(aad,          "KEY.aad() -> AAD")
   KWMETH(enc,          "KEY.enc(NONCE, [hsz], [msz], [tsz]) -> ENC")
   KWMETH(dec,          "KEY.dec(NONCE, [hsz], [csz], [tsz]) -> DEC")
 #undef METHNAME
@@ -1132,11 +1128,10 @@ static const PyGetSetDef gaeadaad_pygetset[] = {
   { 0 }
 };
 
-static PyObject *gaeameth_copy(PyObject *me, PyObject *arg)
+static PyObject *gaeameth_copy(PyObject *me)
 {
   PyObject *rc = 0;
 
-  if (!PyArg_ParseTuple(arg, ":copy")) goto end;
   if (gaea_check(me)) goto end;
   if (GAEADAAD_F(me)&AEADF_AADNDEP)
     VALERR("can't duplicate nonce-dependent aad");
@@ -1207,7 +1202,7 @@ static PyObject *gaeameth_hashstrz(PyObject *me, PyObject *arg)
 
 static const PyMethodDef gaeadaad_pymethods[] = {
 #define METHNAME(name) gaeameth_##name
-  METH (copy,          "AAD.copy() -> AAD'")
+  NAMETH(copy,         "AAD.copy() -> AAD'")
   METH (hash,          "AAD.hash(H)")
 #define METHU_(n, W, w) METH(hashu##w, "AAD.hashu" #w "(WORD)")
   DOUINTCONV(METHU_)
@@ -1271,12 +1266,11 @@ static const PyGetSetDef gaeadenc_pygetset[] = {
   { 0 }
 };
 
-static PyObject *gaeemeth_aad(PyObject *me, PyObject *arg)
+static PyObject *gaeemeth_aad(PyObject *me)
 {
   gaeadenc_pyobj *ge = (gaeadenc_pyobj *)me;
   PyObject *rc = 0;
 
-  if (!PyArg_ParseTuple(arg, ":aad")) return (0);
   if (!(ge->f&AEADF_AADNDEP))
     rc = gaeadaad_pywrap((PyObject *)GCAEADENC_KEY(ge->ob_type)->aad,
                         GAEAD_AAD(ge->e), 0, 0);
@@ -1388,7 +1382,7 @@ end:
 
 static const PyMethodDef gaeadenc_pymethods[] = {
 #define METHNAME(name) gaeemeth_##name
-  METH (aad,           "ENC.aad() -> AAD")
+  NAMETH(aad,          "ENC.aad() -> AAD")
   KWMETH(reinit,       "ENC.reinit(NONCE, [hsz], [msz], [tsz])")
   METH (encrypt,       "ENC.encrypt(MSG) -> CT")
   KWMETH(done,         "ENC.done([tsz], [aad]) -> CT, TAG")
@@ -1446,11 +1440,10 @@ static const PyGetSetDef gaeaddec_pygetset[] = {
   { 0 }
 };
 
-static PyObject *gaedmeth_aad(PyObject *me, PyObject *arg)
+static PyObject *gaedmeth_aad(PyObject *me)
 {
   gaeaddec_pyobj *gd = (gaeaddec_pyobj *)me;
 
-  if (!PyArg_ParseTuple(arg, ":aad")) return (0);
   if (!(gd->f&AEADF_AADNDEP))
     return (gaeadaad_pywrap((PyObject *)GCAEADDEC_KEY(gd->ob_type)->aad,
                            GAEAD_AAD(gd->d), 0, 0));
@@ -1551,7 +1544,7 @@ end:
 
 static const PyMethodDef gaeaddec_pymethods[] = {
 #define METHNAME(name) gaedmeth_##name
-  METH (aad,           "DEC.aad() -> AAD")
+  NAMETH(aad,          "DEC.aad() -> AAD")
   KWMETH(reinit,       "DEC.reinit(NONCE, [hsz], [csz], [tsz])")
   METH (decrypt,       "DEC.decrypt(CT) -> MSG")
   KWMETH(done,         "DEC.done(TAG, [aad]) -> MSG | None")
@@ -1559,7 +1552,7 @@ static const PyMethodDef gaeaddec_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject gcaead_pytype_skel = {
+static const PyTypeObject gcaead_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCAEAD",                            /* @tp_name@ */
   sizeof(gcaead_pyobj),                        /* @tp_basicsize@ */
@@ -1607,7 +1600,7 @@ static PyTypeObject gcaead_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gaeadkey_pytype_skel = {
+static const PyTypeObject gaeadkey_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GAEKey",                            /* @tp_name@ */
   sizeof(gaeadkey_pyobj),              /* @tp_basicsize@ */
@@ -1655,7 +1648,7 @@ static PyTypeObject gaeadkey_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gcaeadaad_pytype_skel = {
+static const PyTypeObject gcaeadaad_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GAEAADClass",                       /* @tp_name@ */
   sizeof(gcaeadaad_pyobj),             /* @tp_basicsize@ */
@@ -1703,7 +1696,7 @@ static PyTypeObject gcaeadaad_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gaeadaad_pytype_skel = {
+static const PyTypeObject gaeadaad_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GAEAAD",                            /* @tp_name@ */
   sizeof(gaeadaad_pyobj),              /* @tp_basicsize@ */
@@ -1751,7 +1744,7 @@ static PyTypeObject gaeadaad_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gcaeadenc_pytype_skel = {
+static const PyTypeObject gcaeadenc_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GAEEncClass",                       /* @tp_name@ */
   sizeof(gcaeadenc_pyobj),             /* @tp_basicsize@ */
@@ -1799,7 +1792,7 @@ static PyTypeObject gcaeadenc_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gaeadenc_pytype_skel = {
+static const PyTypeObject gaeadenc_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GAEEnc",                            /* @tp_name@ */
   sizeof(gaeadenc_pyobj),              /* @tp_basicsize@ */
@@ -1847,7 +1840,7 @@ static PyTypeObject gaeadenc_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gcaeaddec_pytype_skel = {
+static const PyTypeObject gcaeaddec_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GAEDecClass",                       /* @tp_name@ */
   sizeof(gcaeaddec_pyobj),             /* @tp_basicsize@ */
@@ -1895,7 +1888,7 @@ static PyTypeObject gcaeaddec_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gaeaddec_pytype_skel = {
+static const PyTypeObject gaeaddec_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GAEDec",                            /* @tp_name@ */
   sizeof(gaeaddec_pyobj),              /* @tp_basicsize@ */
@@ -2013,11 +2006,8 @@ static PyObject *gchget_hashsz(PyObject *me, void *hunoz)
 static PyObject *gchget_bufsz(PyObject *me, void *hunoz)
   { return (PyInt_FromLong(GCHASH_CH(me)->bufsz)); }
 
-static PyObject *ghmeth_copy(PyObject *me, PyObject *arg)
-{
-  if (!PyArg_ParseTuple(arg, ":copy")) return (0);
-  return (ghash_pywrap((PyObject *)me->ob_type, GH_COPY(GHASH_H(me))));
-}
+static PyObject *ghmeth_copy(PyObject *me)
+  { return (ghash_pywrap((PyObject *)me->ob_type, GH_COPY(GHASH_H(me)))); }
 
 static PyObject *ghmeth_hash(PyObject *me, PyObject *arg)
 {
@@ -2060,11 +2050,10 @@ static PyObject *ghmeth_hashstrz(PyObject *me, PyObject *arg)
   RETURN_ME;
 }
 
-static PyObject *ghmeth_done(PyObject *me, PyObject *arg)
+static PyObject *ghmeth_done(PyObject *me)
 {
   ghash *g;
   PyObject *rc;
-  if (!PyArg_ParseTuple(arg, ":done")) return (0);
   g = GH_COPY(GHASH_H(me));
   rc = bytestring_pywrap(0, g->ops->c->hashsz);
   GH_DONE(g, PyString_AS_STRING(rc));
@@ -2083,7 +2072,7 @@ static const PyGetSetDef gchash_pygetset[] = {
 
 static const PyMethodDef ghash_pymethods[] = {
 #define METHNAME(name) ghmeth_##name
-  METH (copy,          "H.copy() -> HH")
+  NAMETH(copy,         "H.copy() -> HH")
   METH (hash,          "H.hash(M)")
 #define METHU_(n, W, w) METH(hashu##w, "H.hashu" #w "(WORD)")
   DOUINTCONV(METHU_)
@@ -2092,12 +2081,12 @@ static const PyMethodDef ghash_pymethods[] = {
   DOUINTCONV(METHBUF_)
 #undef METHBUF_
   METH (hashstrz,      "H.hashstrz(STRING)")
-  METH (done,          "H.done() -> HASH")
+  NAMETH(done,         "H.done() -> HASH")
 #undef METHNAME
   { 0 }
 };
 
-static PyTypeObject gchash_pytype_skel = {
+static const PyTypeObject gchash_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCHash",                            /* @tp_name@ */
   sizeof(gchash_pyobj),                        /* @tp_basicsize@ */
@@ -2145,7 +2134,7 @@ static PyTypeObject gchash_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject ghash_pytype_skel = {
+static const PyTypeObject ghash_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GHash",                             /* @tp_name@ */
   sizeof(ghash_pyobj),                 /* @tp_basicsize@ */
@@ -2311,7 +2300,7 @@ static const PyGetSetDef gcmac_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject gcmac_pytype_skel = {
+static const PyTypeObject gcmac_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCMAC",                             /* @tp_name@ */
   sizeof(gchash_pyobj),                        /* @tp_basicsize@ */
@@ -2359,7 +2348,7 @@ static PyTypeObject gcmac_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gmac_pytype_skel = {
+static const PyTypeObject gmac_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GMAC",                              /* @tp_name@ */
   sizeof(gmac_pyobj),                  /* @tp_basicsize@ */
@@ -2407,7 +2396,7 @@ static PyTypeObject gmac_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gmhash_pytype_skel = {
+static const PyTypeObject gmhash_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GMACHash",                          /* @tp_name@ */
   sizeof(ghash_pyobj),                 /* @tp_basicsize@ */
@@ -2542,10 +2531,9 @@ static PyObject *poly1305clsget_masksz(PyObject *me, void *hunoz)
 static PyObject *poly1305clsget_tagsz(PyObject *me, void *hunoz)
   { return (PyInt_FromLong(POLY1305_TAGSZ)); }
 
-static PyObject *polymeth_copy(PyObject *me, PyObject *arg)
+static PyObject *polymeth_copy(PyObject *me)
 {
   poly1305hash_pyobj *ph;
-  if (!PyArg_ParseTuple(arg, ":copy")) return (0);
   ph = PyObject_NEW(poly1305hash_pyobj, me->ob_type);
   poly1305_copy(&ph->ctx, P1305_CTX(me));
   Py_INCREF(me->ob_type);
@@ -2596,19 +2584,11 @@ static PyObject *polymeth_hashstrz(PyObject *me, PyObject *arg)
   RETURN_ME;
 }
 
-static PyObject *polymeth_flush(PyObject *me, PyObject *arg)
-{
-  if (!PyArg_ParseTuple(arg, ":flush")) return (0);
-  poly1305_flush(P1305_CTX(me));
-  RETURN_ME;
-}
+static PyObject *polymeth_flush(PyObject *me)
+  { poly1305_flush(P1305_CTX(me)); RETURN_ME; }
 
-static PyObject *polymeth_flushzero(PyObject *me, PyObject *arg)
-{
-  if (!PyArg_ParseTuple(arg, ":flushzero")) return (0);
-  poly1305_flushzero(P1305_CTX(me));
-  RETURN_ME;
-}
+static PyObject *polymeth_flushzero(PyObject *me)
+  { poly1305_flushzero(P1305_CTX(me)); RETURN_ME; }
 
 static PyObject *polymeth_concat(PyObject *me, PyObject *arg)
 {
@@ -2626,10 +2606,9 @@ end:
   return (0);
 }
 
-static PyObject *polymeth_done(PyObject *me, PyObject *arg)
+static PyObject *polymeth_done(PyObject *me)
 {
   PyObject *rc;
-  if (!PyArg_ParseTuple(arg, ":done")) return (0);
   if (!(P1305_F(me) & f_mask)) VALERR("no mask");
   rc = bytestring_pywrap(0, POLY1305_TAGSZ);
   poly1305_done(P1305_CTX(me), PyString_AS_STRING(rc));
@@ -2650,7 +2629,7 @@ static const PyGetSetDef poly1305cls_pygetset[] = {
 
 static const PyMethodDef poly1305hash_pymethods[] = {
 #define METHNAME(name) polymeth_##name
-  METH (copy,          "P.copy() -> PP")
+  NAMETH(copy,         "P.copy() -> PP")
   METH (hash,          "P.hash(M)")
 #define METHU_(n, W, w) METH(hashu##w, "P.hashu" #w "(WORD)")
   DOUINTCONV(METHU_)
@@ -2659,15 +2638,15 @@ static const PyMethodDef poly1305hash_pymethods[] = {
   DOUINTCONV(METHBUF_)
 #undef METHBUF_
   METH (hashstrz,      "P.hashstrz(STRING)")
-  METH (flush,         "P.flush()")
-  METH (flushzero,     "P.flushzero()")
+  NAMETH(flush,                "P.flush()")
+  NAMETH(flushzero,    "P.flushzero()")
   METH (concat,        "P.concat(PREFIX, SUFFIX)")
-  METH (done,          "P.done() -> TAG")
+  NAMETH(done,         "P.done() -> TAG")
 #undef METHNAME
   { 0 }
 };
 
-static PyTypeObject poly1305cls_pytype_skel = {
+static const PyTypeObject poly1305cls_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Poly1305Class",                     /* @tp_name@ */
   sizeof(PyHeapTypeObject),            /* @tp_basicsize@ */
@@ -2715,7 +2694,7 @@ static PyTypeObject poly1305cls_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject poly1305key_pytype_skel = {
+static const PyTypeObject poly1305key_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "poly1305",                          /* @tp_name@ */
   sizeof(poly1305key_pyobj),           /* @tp_basicsize@ */
@@ -2763,7 +2742,7 @@ static PyTypeObject poly1305key_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject poly1305hash_pytype_skel = {
+static const PyTypeObject poly1305hash_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Poly1305Hash",                      /* @tp_name@ */
   sizeof(poly1305hash_pyobj),          /* @tp_basicsize@ */
@@ -2866,13 +2845,11 @@ end:
   return ((PyObject *)rc);
 }
 
-static PyObject *kxvikmeth_copy(PyObject *me, PyObject *arg)
+static PyObject *kxvikmeth_copy(PyObject *me)
 {
   kxvik_pyobj *k = (kxvik_pyobj *)me, *rc = 0;
-  if (!PyArg_ParseTuple(arg, ":copy")) goto end;
   rc = (kxvik_pyobj *)k->ob_type->tp_alloc(k->ob_type, 0);
   rc->s = k->s; rc->n = k->n;
-end:
   return ((PyObject *)rc);
 }
 
@@ -2921,52 +2898,31 @@ end:
   return (rc);
 }
 
-static PyObject *kxvikmeth_step(PyObject *me, PyObject *arg)
+static PyObject *kxvikmeth_step(PyObject *me)
 {
   kxvik_pyobj *k = (kxvik_pyobj *)me;
-  if (!PyArg_ParseTuple(arg, ":step")) return (0);
   keccak1600_p(&k->s, &k->s, k->n);
   RETURN_ME;
 }
 
-static PyObject *kxvikget_nround(PyObject *me, void *hunoz)
-{
-  kxvik_pyobj *k = (kxvik_pyobj *)me;
-  return (PyInt_FromLong(k->n));
-}
-
-static int kxvikset_nround(PyObject *me, PyObject *val, void *hunoz)
-{
-  kxvik_pyobj *k = (kxvik_pyobj *)me;
-  unsigned n;
-  int rc = -1;
-
-  if (!val) NIERR("__del__");
-  if (!convuint(val, &n)) goto end;
-  k->n = n;
-  rc = 0;
-end:
-  return (rc);
-}
-
-static const PyGetSetDef kxvik_pygetset[] = {
-#define GETSETNAME(op, name) kxvik##op##_##name
-  GETSET(nround,       "KECCAK.nround -> number of rounds")
-#undef GETSETNAME
+static const PyMemberDef kxvik_pymembers[] = {
+#define MEMBERSTRUCT kxvik_pyobj
+  MEMRNM(nround, T_UINT, n, 0,     "KECCAC.nround -> number of rounds")
+#undef MEMBERSTRUCT
   { 0 }
 };
 
 static const PyMethodDef kxvik_pymethods[] = {
 #define METHNAME(func) kxvikmeth_##func
-  METH (copy,          "KECCAK.copy() -> KECCAK'")
+  NAMETH(copy,         "KECCAK.copy() -> KECCAK'")
   METH (mix,           "KECCAK.mix(DATA)")
   METH (extract,       "KECCAK.extract(NOCTETS)")
-  METH (step,          "KECCAK.step()")
+  NAMETH(step,         "KECCAK.step()")
 #undef METHNAME
   { 0 }
 };
 
-static PyTypeObject kxvik_pytype_skel = {
+static const PyTypeObject kxvik_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Keccak1600",                                /* @tp_name@ */
   sizeof(kxvik_pyobj),                 /* @tp_basicsize@ */
@@ -3000,8 +2956,8 @@ static PyTypeObject kxvik_pytype_skel = {
   0,                                   /* @tp_iter@ */
   0,                                   /* @tp_iternext@ */
   PYMETHODS(kxvik),                    /* @tp_methods@ */
-  0,                                   /* @tp_members@ */
-  PYGETSET(kxvik),                     /* @tp_getset@ */
+  PYMEMBERS(kxvik),                    /* @tp_members@ */
+  0,                                   /* @tp_getset@ */
   0,                                   /* @tp_base@ */
   0,                                   /* @tp_dict@ */
   0,                                   /* @tp_descr_get@ */
@@ -3110,9 +3066,8 @@ static PyObject *shakemeth_hashstrz(PyObject *me, PyObject *arg)
   RETURN_ME;
 }
 
-static PyObject *shakemeth_xof(PyObject *me, PyObject *arg)
+static PyObject *shakemeth_xof(PyObject *me)
 {
-  if (!PyArg_ParseTuple(arg, ":xof")) goto end;
   if (shake_check(me, 0)) goto end;
   shake_xof(SHAKE_H(me));
   SHAKE_ST(me) = 1;
@@ -3134,15 +3089,13 @@ end:
   return (rc);
 }
 
-static PyObject *shakemeth_copy(PyObject *me, PyObject *arg)
+static PyObject *shakemeth_copy(PyObject *me)
 {
   shake_pyobj *rc = 0;
 
-  if (!PyArg_ParseTuple(arg, ":copy")) goto end;
   rc = PyObject_NEW(shake_pyobj, me->ob_type);
   rc->h = *SHAKE_H(me);
   rc->st = SHAKE_ST(me);
-end:
   return ((PyObject *)rc);
 }
 
@@ -3172,12 +3125,6 @@ end:
   return (rc);
 }
 
-static PyObject *shakeget_rate(PyObject *me, void *hunoz)
-  { return (PyInt_FromLong(SHAKE_H(me)->h.r)); }
-
-static PyObject *shakeget_buffered(PyObject *me, void *hunoz)
-  { return (PyInt_FromLong(SHAKE_H(me)->h.n)); }
-
 static PyObject *shakeget_state(PyObject *me, void *hunoz)
 {
   int st = SHAKE_ST(me);
@@ -3185,10 +3132,17 @@ static PyObject *shakeget_state(PyObject *me, void *hunoz)
                              st == 1 ? "squeeze" : "dead"));
 }
 
+static const PyMemberDef shake_pymembers[] = {
+#define MEMBERSTRUCT shake_pyobj
+  MEMRNM(rate, T_UINT, h.h.r, READONLY, "S.rate -> rate, in bytes")
+  MEMRNM(buffered, T_UINT, h.h.n, READONLY,
+                                  "S.buffered -> amount currently buffered")
+#undef MEMBERSTRUCT
+  { 0 }
+};
+
 static const PyGetSetDef shake_pygetset[] = {
 #define GETSETNAME(op, name) shake##op##_##name
-  GET  (rate,          "S.rate -> rate, in bytes")
-  GET  (buffered,      "S.buffered -> amount currently buffered")
   GET  (state,         "S.state -> `absorb', `squeeze', `dead'")
 #undef GETSETNAME
   { 0 }
@@ -3196,7 +3150,7 @@ static const PyGetSetDef shake_pygetset[] = {
 
 static const PyMethodDef shake_pymethods[] = {
 #define METHNAME(func) shakemeth_##func
-  METH (copy,          "S.copy() -> SS")
+  NAMETH(copy,         "S.copy() -> SS")
   METH (hash,          "S.hash(M)")
 #define METHU_(n, W, w) METH(hashu##w, "S.hashu" #w "(WORD)")
   DOUINTCONV(METHU_)
@@ -3205,7 +3159,7 @@ static const PyMethodDef shake_pymethods[] = {
   DOUINTCONV(METHBUF_)
 #undef METHBUF_
   METH (hashstrz,      "S.hashstrz(STRING)")
-  METH (xof,           "S.xof()")
+  NAMETH(xof,          "S.xof()")
   METH (done,          "S.done(LEN) -> H")
   METH (get,           "S.get(LEN) -> H")
   METH (mask,          "S.mask(M) -> C")
@@ -3213,7 +3167,7 @@ static const PyMethodDef shake_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject shake_pytype_skel = {
+static const PyTypeObject shake_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Shake",                             /* @tp_name@ */
   sizeof(shake_pyobj),                 /* @tp_basicsize@ */
@@ -3247,7 +3201,7 @@ static PyTypeObject shake_pytype_skel = {
   0,                                   /* @tp_iter@ */
   0,                                   /* @tp_iternext@ */
   PYMETHODS(shake),                    /* @tp_methods@ */
-  0,                                   /* @tp_members@ */
+  PYMEMBERS(shake),                    /* @tp_members@ */
   PYGETSET(shake),                     /* @tp_getset@ */
   0,                                   /* @tp_base@ */
   0,                                   /* @tp_dict@ */
@@ -3261,7 +3215,7 @@ static PyTypeObject shake_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject shake128_pytype_skel = {
+static const PyTypeObject shake128_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Shake128",                          /* @tp_name@ */
   0,                                   /* @tp_basicsize@ */
@@ -3309,7 +3263,7 @@ static PyTypeObject shake128_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject shake256_pytype_skel = {
+static const PyTypeObject shake256_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Shake256",                          /* @tp_name@ */
   0,                                   /* @tp_basicsize@ */
@@ -3506,7 +3460,7 @@ static const PyMethodDef gprp_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject gcprp_pytype_skel = {
+static const PyTypeObject gcprp_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCPRP",                             /* @tp_name@ */
   sizeof(gcprp_pyobj),                 /* @tp_basicsize@ */
@@ -3554,7 +3508,7 @@ static PyTypeObject gcprp_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gprp_pytype_skel = {
+static const PyTypeObject gprp_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GPRP",                              /* @tp_name@ */
   sizeof(gprp_pyobj),                  /* @tp_basicsize@ */
@@ -3604,6 +3558,12 @@ static PyTypeObject gprp_pytype_skel = {
 
 /*----- Main code ---------------------------------------------------------*/
 
+static const struct nameval consts[] = {
+  CONST(AEADF_PCHSZ), CONST(AEADF_PCMSZ), CONST(AEADF_PCTSZ),
+  CONST(AEADF_AADNDEP), CONST(AEADF_AADFIRST), CONST(AEADF_NOAAD),
+  { 0 }
+};
+
 static const PyMethodDef methods[] = {
 #define METHNAME(func) meth_##func
 #define METH_HDANCE(hdance, HDance) METH(hdance##_prf,                 \
@@ -3697,6 +3657,7 @@ void algorithms_pyinsert(PyObject *mod)
   INSERT("GCPRP", gcprp_pytype);
   INSERT("GPRP", gprp_pytype);
   INSERT("gcprps", gcprps());
+  setconstants(mod, consts);
 }
 
 /*----- That's all, folks -------------------------------------------------*/