pyke/pyke.c (newtype): Explicitly clear `ht_slots'.
[catacomb-python] / algorithms.c
index 465da45..f792087 100644 (file)
@@ -295,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@ */
@@ -343,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@ */
@@ -392,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@ */
@@ -442,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@ */
@@ -669,7 +669,7 @@ static const PyMethodDef gcipher_pymethods[] = {
   { 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@ */
@@ -717,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@ */
@@ -1552,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@ */
@@ -1600,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@ */
@@ -1648,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@ */
@@ -1696,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@ */
@@ -1744,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@ */
@@ -1792,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@ */
@@ -1840,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@ */
@@ -1888,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@ */
@@ -2086,7 +2086,7 @@ static const PyMethodDef ghash_pymethods[] = {
   { 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@ */
@@ -2134,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@ */
@@ -2300,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@ */
@@ -2348,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@ */
@@ -2396,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@ */
@@ -2646,7 +2646,7 @@ static const PyMethodDef poly1305hash_pymethods[] = {
   { 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@ */
@@ -2694,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@ */
@@ -2742,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@ */
@@ -2905,30 +2905,10 @@ static PyObject *kxvikmeth_step(PyObject *me)
   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 }
 };
 
@@ -2942,7 +2922,7 @@ static const PyMethodDef kxvik_pymethods[] = {
   { 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@ */
@@ -2976,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@ */
@@ -3145,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);
@@ -3158,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 }
@@ -3186,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@ */
@@ -3220,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@ */
@@ -3234,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@ */
@@ -3282,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@ */
@@ -3479,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@ */
@@ -3527,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@ */
@@ -3577,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,                 \
@@ -3670,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 -------------------------------------------------*/