catacomb-python.h, *.c: Move definitions back into implementation files.
authorMark Wooding <mdw@distorted.org.uk>
Sun, 20 Oct 2019 14:56:54 +0000 (15:56 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Fri, 10 Apr 2020 21:42:39 +0000 (22:42 +0100)
The header was chock full of implementation details which weren't
needed by anything.  Move things which aren't needed further afield back
into their home files, and delete things like conversion functions which
aren't actually being used.

Also, some light reordering of the things that are left.

(This patch turns out to be remarkably commutative through the enormous
pile of changes coming up.)

catacomb-python.h

index bf3d426..b0f933a 100644 (file)
@@ -348,7 +348,6 @@ extern PyMethodDef gmap_pymethods[];
 
 /*----- Bytestrings -------------------------------------------------------*/
 
-PyTypeObject *bytestring_pyobj;
 PyObject *bytestring_pywrap(const void *, size_t);
 PyObject *bytestring_pywrapbuf(buf *);
 
@@ -387,19 +386,6 @@ typedef struct field_pyobj {
   field *f;
 } field_pyobj;
 
-extern PyTypeObject *fe_pytype;
-#define FE_PYCHECK(o) PyObject_TypeCheck((o), fe_pytype)
-#define FE_F(o) (((fe_pyobj *)(o))->f)
-#define FE_FOBJ(o) ((PyObject *)(o)->ob_type)
-#define FE_X(o) (((fe_pyobj *)(o))->x)
-extern PyObject *fe_pywrap(PyObject *, mp *);
-
-typedef struct fe_pyobj {
-  PyObject_HEAD
-  field *f;
-  mp *x;
-} fe_pyobj;
-
 extern PyTypeObject *field_pytype;
 extern PyTypeObject *primefield_pytype;
 extern PyTypeObject *niceprimefield_pytype;
@@ -411,8 +397,38 @@ extern PyTypeObject *binnormfield_pytype;
 extern PyObject *field_pywrap(field *);
 extern field *field_copy(field *);
 
+typedef struct fe_pyobj {
+  PyObject_HEAD
+  field *f;
+  mp *x;
+} fe_pyobj;
+
+extern PyTypeObject *fe_pytype;
+#define FE_PYCHECK(o) PyObject_TypeCheck((o), fe_pytype)
+#define FE_F(o) (((fe_pyobj *)(o))->f)
+#define FE_FOBJ(o) ((PyObject *)(o)->ob_type)
+#define FE_X(o) (((fe_pyobj *)(o))->x)
+extern PyObject *fe_pywrap(PyObject *, mp *);
+
 /*----- Elliptic curves ---------------------------------------------------*/
 
+typedef struct eccurve_pyobj {
+  PyHeapTypeObject ty;
+  ec_curve *c;
+  PyObject *fobj;
+} eccurve_pyobj;
+
+extern PyTypeObject *eccurve_pytype;
+extern PyTypeObject *ecprimecurve_pytype;
+extern PyTypeObject *ecprimeprojcurve_pytype;
+extern PyTypeObject *ecbincurve_pytype;
+extern PyTypeObject *ecbinprojcurve_pytype;
+#define ECCURVE_PYCHECK(o) PyObject_TypeCheck((o), eccurve_pytype)
+#define ECCURVE_C(o) (((eccurve_pyobj *)(o))->c)
+#define ECCURVE_FOBJ(o) (((eccurve_pyobj *)(o))->fobj)
+extern PyObject *eccurve_pywrap(PyObject *, ec_curve *);
+extern ec_curve *eccurve_copy(ec_curve *);
+
 typedef struct ecpt_pyobj {
   PyObject_HEAD
   ec_curve *c;
@@ -433,23 +449,6 @@ extern int getecpt(ec_curve *, ec *, PyObject *);
 extern void getecptout(ec *, PyObject *);
 extern int convecpt(PyObject *, void *);
 
-typedef struct eccurve_pyobj {
-  PyHeapTypeObject ty;
-  ec_curve *c;
-  PyObject *fobj;
-} eccurve_pyobj;
-
-extern PyTypeObject *eccurve_pytype;
-extern PyTypeObject *ecprimecurve_pytype;
-extern PyTypeObject *ecprimeprojcurve_pytype;
-extern PyTypeObject *ecbincurve_pytype;
-extern PyTypeObject *ecbinprojcurve_pytype;
-#define ECCURVE_PYCHECK(o) PyObject_TypeCheck((o), eccurve_pytype)
-#define ECCURVE_C(o) (((eccurve_pyobj *)(o))->c)
-#define ECCURVE_FOBJ(o) (((eccurve_pyobj *)(o))->fobj)
-extern PyObject *eccurve_pywrap(PyObject *, ec_curve *);
-extern ec_curve *eccurve_copy(ec_curve *);
-
 typedef struct ecinfo_pyobj {
   PyObject_HEAD
   ec_info ei;
@@ -465,15 +464,6 @@ extern PyObject *ecinfo_pywrap(ec_info *);
 
 /*----- Cyclic groups -----------------------------------------------------*/
 
-typedef struct fginfo_pyobj {
-  PyObject_HEAD
-  gprime_param dp;
-} fginfo_pyobj;
-
-PyTypeObject *fginfo_pytype, *dhinfo_pytype, *bindhinfo_pytype;
-#define FGINFO_DP(fg) (&((fginfo_pyobj *)(fg))->dp)
-PyObject *fginfo_pywrap(gprime_param *, PyTypeObject *);
-
 typedef struct ge_pyobj {
   PyObject_HEAD
   ge *x;
@@ -493,7 +483,6 @@ typedef struct group_pyobj {
 } group_pyobj;
 
 extern PyTypeObject *group_pytype;
-extern PyTypeObject *primegroup_pytype, *bingroup_pytype, *ecgroup_pytype;
 #define GROUP_G(o) (((group_pyobj *)(o))->g)
 extern PyObject *group_pywrap(group *);
 extern group *group_copy(group *);
@@ -508,9 +497,7 @@ typedef struct grand_pyobj {
   grand *r;
 } grand_pyobj;
 
-extern PyTypeObject *grand_pytype, *truerand_pytype;
-extern PyTypeObject *lcrand_pytype,* fibrand_pytype;
-extern PyTypeObject *dsarand_pytype, *bbs_pytype;
+extern PyTypeObject *grand_pytype;
 extern PyObject *rand_pyobj;
 #define GRAND_PYCHECK(o) PyObject_TypeCheck((o), grand_pytype)
 #define GRAND_F(o) (((grand_pyobj *)(o))->f)
@@ -518,161 +505,12 @@ extern PyObject *rand_pyobj;
 extern PyObject *grand_pywrap(grand *, unsigned);
 extern int convgrand(PyObject *, void *);
 
-/*----- Key sizes ---------------------------------------------------------*/
-
-typedef struct keysz_pyobj {
-  PyObject_HEAD
-  int dfl;
-} keysz_pyobj;
-
-typedef struct keyszrange_pyobj {
-  PyObject_HEAD
-  int dfl;
-  int min, max, mod;
-} keyszrange_pyobj;
-
-typedef struct keyszset_pyobj {
-  PyObject_HEAD
-  int dfl;
-  PyObject *set;
-} keyszset_pyobj;
-
-#define KEYSZ_PYCHECK(o) PyObject_TypeCheck((o), keysz_pytype)
-extern PyObject *keysz_pywrap(const octet *);
-
 /*----- Symmetric cryptography --------------------------------------------*/
 
-typedef struct gccipher_pyobj {
-  PyHeapTypeObject ty;
-  gccipher *cc;
-} gccipher_pyobj;
+extern PyObject *keysz_pywrap(const octet *);
 
-extern PyTypeObject *gccipher_pytype;
-#define GCCIPHER_PYCHECK(o) PyObject_TypeCheck((o), gccipher_pytype)
-#define GCCIPHER_CC(o) (((gccipher_pyobj *)(o))->cc)
-extern PyObject *gccipher_pywrap(gccipher *);
 extern int convgccipher(PyObject *, void *);
-
-typedef struct gcipher_pyobj {
-  PyObject_HEAD
-  gcipher *c;
-} gcipher_pyobj;
-
-extern PyTypeObject *gcipher_pytype;
-#define GCIPHER_PYCHECK(o) PyObject_TypeCheck((o), gcipher_pytype)
-#define GCIPHER_C(o) (((gcipher_pyobj *)(o))->c)
-extern PyObject *gcipher_pywrap(PyObject *, gcipher *);
-extern int convgcipher(PyObject *, void *);
-
-typedef struct gcaead_pyobj {
-  PyHeapTypeObject ty;
-  gcaead *aec;
-  struct gcaeadaad_pyobj *aad;
-  struct gcaeadenc_pyobj *enc;
-  struct gcaeaddec_pyobj *dec;
-} gcaead_pyobj;
-
-extern PyTypeObject *gcaead_pytype;
-#define GCAEAD_PYCHECK(o) PyObject_TypeCheck((o), gcaead_pytype)
-#define GCAEAD_AEC(o) (((gcaead_pyobj *)(o))->aec)
-#define GCAEAD_AAD(o) (((gcaead_pyobj *)(o))->aad)
-#define GCAEAD_ENC(o) (((gcaead_pyobj *)(o))->enc)
-#define GCAEAD_DEC(o) (((gcaead_pyobj *)(o))->dec)
-extern PyObject *gcaead_pywrap(gcaead *);
-extern int convgcaead(PyObject *, void *);
-
-typedef struct gaeadkey_pyobj {
-  PyObject_HEAD
-  gaead_key *k;
-} gaeadkey_pyobj;
-
-extern PyTypeObject *gaeadkey_pytype;
-#define GAEADKEY_PYCHECK(o) PyObject_TypeCheck((o), gaeadkey_pytype)
-#define GAEADKEY_K(o) (((gaeadkey_pyobj *)(o))->k)
-extern PyObject *gaeadkey_pywrap(PyObject *, gaead_key *);
-extern int convgaeadkey(PyObject *, void *);
-
-typedef struct gcaeadaad_pyobj {
-  PyHeapTypeObject ty;
-  gcaead_pyobj *key;
-} gcaeadaad_pyobj;
-#define GCAEADAAD_KEY(o) (((gcaeadaad_pyobj *)(o))->key)
-extern PyTypeObject *gcaeadaad_pytype;
-
-typedef struct gaeadaad_pyobj {
-  PyObject_HEAD
-  gaead_aad *a;
-  unsigned f;
-#define AEADF_DEAD 32768u
-  size_t hsz, hlen;
-} gaeadaad_pyobj;
-
-extern PyTypeObject *gaeadaad_pytype;
-#define GAEADAAD_PYCHECK(o) PyObject_TypeCheck((o), gaeadaad_pytype)
-#define GAEADAAD_A(o) (((gaeadaad_pyobj *)(o))->a)
-#define GAEADAAD_F(o) (((gaeadaad_pyobj *)(o))->f)
-#define GAEADAAD_HSZ(o) (((gaeadaad_pyobj *)(o))->hsz)
-#define GAEADAAD_HLEN(o) (((gaeadaad_pyobj *)(o))->hlen)
-extern PyObject *gaeadaad_pywrap(PyObject *, gaead_aad *, unsigned, size_t);
-extern int convgaeadaad(PyObject *, void *);
-
-typedef struct gcaeadenc_pyobj {
-  PyHeapTypeObject ty;
-  gcaead_pyobj *key;
-} gcaeadenc_pyobj;
-#define GCAEADENC_KEY(o) (((gcaeadenc_pyobj *)(o))->key)
-extern PyTypeObject *gcaeadenc_pytype;
-
-typedef struct gaeadenc_pyobj {
-  PyObject_HEAD
-  gaead_enc *e;
-  gaeadaad_pyobj *aad;
-  unsigned f;
-  size_t hsz, msz, tsz;
-  size_t mlen;
-} gaeadenc_pyobj;
-
-extern PyTypeObject *gaeadenc_pytype;
-#define GAEADENC_PYCHECK(o) PyObject_TypeCheck((o), gaeadenc_pytype)
-#define GAEADENC_AAD(o) (((gaeadenc_pyobj *)(o))->aad)
-#define GAEADENC_E(o) (((gaeadenc_pyobj *)(o))->e)
-#define GAEADENC_F(o) (((gaeadenc_pyobj *)(o))->f)
-#define GAEADENC_HSZ(o) (((gaeadenc_pyobj *)(o))->hsz)
-#define GAEADENC_MSZ(o) (((gaeadenc_pyobj *)(o))->msz)
-#define GAEADENC_TSZ(o) (((gaeadenc_pyobj *)(o))->tsz)
-#define GAEADENC_MLEN(o) (((gaeadenc_pyobj *)(o))->mlen)
-extern PyObject *gaeadenc_pywrap(PyObject *, gaead_enc *, unsigned,
-                                size_t, size_t, size_t);
-extern int convgaeadenc(PyObject *, void *);
-
-typedef struct gcaeaddec_pyobj {
-  PyHeapTypeObject ty;
-  gcaead_pyobj *key;
-} gcaeaddec_pyobj;
-#define GCAEADDEC_KEY(o) (((gcaeaddec_pyobj *)(o))->key)
-extern PyTypeObject *gcaeaddec_pytype;
-
-typedef struct gaeaddec_pyobj {
-  PyObject_HEAD
-  gaead_dec *d;
-  gaeadaad_pyobj *aad;
-  unsigned f;
-  size_t hsz, csz, tsz;
-  size_t clen;
-} gaeaddec_pyobj;
-
-extern PyTypeObject *gaeaddec_pytype;
-#define GAEADDEC_PYCHECK(o) PyObject_TypeCheck((o), gaeaddec_pytype)
-#define GAEADDEC_AAD(o) (((gaeaddec_pyobj *)(o))->aad)
-#define GAEADDEC_D(o) (((gaeaddec_pyobj *)(o))->d)
-#define GAEADDEC_F(o) (((gaeaddec_pyobj *)(o))->f)
-#define GAEADDEC_HSZ(o) (((gaeaddec_pyobj *)(o))->hsz)
-#define GAEADDEC_CSZ(o) (((gaeaddec_pyobj *)(o))->csz)
-#define GAEADDEC_TSZ(o) (((gaeaddec_pyobj *)(o))->tsz)
-#define GAEADDEC_CLEN(o) (((gaeaddec_pyobj *)(o))->clen)
-extern PyObject *gaeaddec_pywrap(PyObject *, gaead_dec *, unsigned,
-                                size_t, size_t, size_t);
-extern int convgaeaddec(PyObject *, void *);
+extern PyObject *gccipher_pywrap(gccipher *);
 
 typedef struct gchash_pyobj {
   PyHeapTypeObject ty;
@@ -680,48 +518,15 @@ typedef struct gchash_pyobj {
 } gchash_pyobj;
 
 extern PyTypeObject *gchash_pytype;
+extern PyObject *sha_pyobj, *has160_pyobj;
 #define GCHASH_PYCHECK(o) PyObject_TypeCheck((o), gchash_pytype)
 #define GCHASH_CH(o) (((gchash_pyobj *)(o))->ch)
-extern PyObject *gchash_pywrap(gchash *);
-extern int convgchash(PyObject *, void *);
-
-typedef struct ghash_pyobj {
-  PyObject_HEAD
-  ghash *h;
-} ghash_pyobj;
-
-extern PyTypeObject *ghash_pytype, *gmhash_pytype;
-extern PyObject *sha_pyobj, *has160_pyobj;
-#define GHASH_PYCHECK(o) PyObject_TypeCheck((o), ghash_pytype)
-#define GHASH_H(o) (((ghash_pyobj *)(o))->h)
 extern PyObject *ghash_pywrap(PyObject *, ghash *);
+extern int convgchash(PyObject *, void *);
 extern int convghash(PyObject *, void *);
-extern int convgmhash(PyObject *, void *);
 
-typedef struct gcmac_pyobj {
-  PyHeapTypeObject ty;
-  gcmac *cm;
-} gcmac_pyobj;
-
-extern PyTypeObject *gcmac_pytype;
-#define GCMAC_PYCHECK(o) PyObject_TypeCheck((o), gcmac_pytype)
-#define GCMAC_CM(o) (((gcmac_pyobj *)(o))->cm)
-#define GCMAC_F(o) (((gcmac_pyobj *)(o))->f)
-extern PyObject *gcmac_pywrap(gcmac *);
 extern int convgcmac(PyObject *, void *);
 
-typedef struct gmac_pyobj {
-  PyHeapTypeObject ty;
-  gmac *m;
-} gmac_pyobj;
-
-extern PyTypeObject *gmac_pytype;
-#define GMAC_PYCHECK(o) PyObject_TypeCheck((o), gmac_pytype)
-#define GMAC_M(o) (((gmac_pyobj *)(o))->m)
-#define GMAC_F(o) (((gmac_pyobj *)(o))->f)
-extern PyObject *gmac_pywrap(PyObject *, gmac *);
-extern int convgmac(PyObject *, void *);
-
 /*----- Key generation ----------------------------------------------------*/
 
 typedef struct pfilt_pyobj {