X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/blobdiff_plain/d96c882ed6f1852a266fd1a2b61bbc906cc805bb..810542b01716cfd7017315c25a165ebfbe45afe5:/pubkey.c diff --git a/pubkey.c b/pubkey.c index 3fc42af..b1d32a5 100644 --- a/pubkey.c +++ b/pubkey.c @@ -86,8 +86,7 @@ static PyObject *dsa_setup(PyTypeObject *ty, PyObject *G, PyObject *u, g->rng = rng; Py_INCREF(rng); g->hash = hash; Py_INCREF(hash); return ((PyObject *)g); end: - if (p) Py_DECREF(p); - FREEOBJ(g); + Py_XDECREF(p); FREEOBJ(g); return (0); } @@ -109,11 +108,8 @@ end: return (rc); } -static PyObject *dsameth_beginhash(PyObject *me, PyObject *arg) -{ - if (!PyArg_ParseTuple(arg, ":beginhash")) return (0); - return (ghash_pywrap(DSA_HASH(me), gdsa_beginhash(DSA_D(me)))); -} +static PyObject *dsameth_beginhash(PyObject *me) + { return (ghash_pywrap(DSA_HASH(me), gdsa_beginhash(DSA_D(me)))); } static PyObject *dsameth_endhash(PyObject *me, PyObject *arg) { @@ -189,23 +185,23 @@ end: return (rc); } -static PyMethodDef dsapub_pymethods[] = { +static const PyMethodDef dsapub_pymethods[] = { #define METHNAME(name) dsameth_##name - METH (beginhash, "D.beginhash() -> hash object") + NAMETH(beginhash, "D.beginhash() -> hash object") METH (endhash, "D.endhash(H) -> BYTES") METH (verify, "D.verify(MSG, (R, S)) -> true/false") #undef METHNAME { 0 } }; -static PyMethodDef dsapriv_pymethods[] = { +static const PyMethodDef dsapriv_pymethods[] = { #define METHNAME(name) dsameth_##name KWMETH(sign, "D.sign(MSG, [k = K]) -> R, S") #undef METHNAME { 0 } }; -static PyMemberDef dsapub_pymembers[] = { +static const PyMemberDef dsapub_pymembers[] = { #define MEMBERSTRUCT dsa_pyobj MEMBER(G, T_OBJECT, READONLY, "D.G -> group to work in") MEMBER(p, T_OBJECT, READONLY, "D.p -> public key (group element") @@ -215,14 +211,14 @@ static PyMemberDef dsapub_pymembers[] = { { 0 } }; -static PyMemberDef dsapriv_pymembers[] = { +static const PyMemberDef dsapriv_pymembers[] = { #define MEMBERSTRUCT dsa_pyobj MEMBER(u, T_OBJECT, READONLY, "D.u -> private key (exponent)") #undef MEMBERSTRUCT { 0 } }; -static PyTypeObject dsapub_pytype_skel = { +static const PyTypeObject dsapub_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ "DSAPub", /* @tp_name@ */ sizeof(dsa_pyobj), /* @tp_basicsize@ */ @@ -255,8 +251,8 @@ static PyTypeObject dsapub_pytype_skel = { 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ 0, /* @tp_iternext@ */ - dsapub_pymethods, /* @tp_methods@ */ - dsapub_pymembers, /* @tp_members@ */ + PYMETHODS(dsapub), /* @tp_methods@ */ + PYMEMBERS(dsapub), /* @tp_members@ */ 0, /* @tp_getset@ */ 0, /* @tp_base@ */ 0, /* @tp_dict@ */ @@ -270,7 +266,7 @@ static PyTypeObject dsapub_pytype_skel = { 0 /* @tp_is_gc@ */ }; -static PyTypeObject dsapriv_pytype_skel = { +static const PyTypeObject dsapriv_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ "DSAPriv", /* @tp_name@ */ sizeof(dsa_pyobj), /* @tp_basicsize@ */ @@ -304,8 +300,8 @@ static PyTypeObject dsapriv_pytype_skel = { 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ 0, /* @tp_iternext@ */ - dsapriv_pymethods, /* @tp_methods@ */ - dsapriv_pymembers, /* @tp_members@ */ + PYMETHODS(dsapriv), /* @tp_methods@ */ + PYMEMBERS(dsapriv), /* @tp_members@ */ 0, /* @tp_getset@ */ 0, /* @tp_base@ */ 0, /* @tp_dict@ */ @@ -364,11 +360,8 @@ end: return (rc); } -static PyObject *kcdsameth_beginhash(PyObject *me, PyObject *arg) -{ - if (!PyArg_ParseTuple(arg, ":beginhash")) return (0); - return (ghash_pywrap(DSA_HASH(me), gkcdsa_beginhash(DSA_D(me)))); -} +static PyObject *kcdsameth_beginhash(PyObject *me) + { return (ghash_pywrap(DSA_HASH(me), gkcdsa_beginhash(DSA_D(me)))); } static PyObject *kcdsameth_endhash(PyObject *me, PyObject *arg) { @@ -427,23 +420,23 @@ end: return (rc); } -static PyMethodDef kcdsapub_pymethods[] = { +static const PyMethodDef kcdsapub_pymethods[] = { #define METHNAME(name) kcdsameth_##name - METH (beginhash, "D.beginhash() -> hash object") + NAMETH(beginhash, "D.beginhash() -> hash object") METH (endhash, "D.endhash(H) -> BYTES") METH (verify, "D.verify(MSG, (R, S)) -> true/false") #undef METHNAME { 0 } }; -static PyMethodDef kcdsapriv_pymethods[] = { +static const PyMethodDef kcdsapriv_pymethods[] = { #define METHNAME(name) kcdsameth_##name KWMETH(sign, "D.sign(MSG, [k = K]) -> R, S") #undef METHNAME { 0 } }; -static PyTypeObject kcdsapub_pytype_skel = { +static const PyTypeObject kcdsapub_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ "KCDSAPub", /* @tp_name@ */ sizeof(dsa_pyobj), /* @tp_basicsize@ */ @@ -476,8 +469,8 @@ static PyTypeObject kcdsapub_pytype_skel = { 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ 0, /* @tp_iternext@ */ - kcdsapub_pymethods, /* @tp_methods@ */ - dsapub_pymembers, /* @tp_members@ */ + PYMETHODS(kcdsapub), /* @tp_methods@ */ + PYMEMBERS(dsapub), /* @tp_members@ */ 0, /* @tp_getset@ */ 0, /* @tp_base@ */ 0, /* @tp_dict@ */ @@ -491,7 +484,7 @@ static PyTypeObject kcdsapub_pytype_skel = { 0 /* @tp_is_gc@ */ }; -static PyTypeObject kcdsapriv_pytype_skel = { +static const PyTypeObject kcdsapriv_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ "KCDSAPriv", /* @tp_name@ */ sizeof(dsa_pyobj), /* @tp_basicsize@ */ @@ -525,8 +518,8 @@ static PyTypeObject kcdsapriv_pytype_skel = { 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ 0, /* @tp_iternext@ */ - kcdsapriv_pymethods, /* @tp_methods@ */ - dsapriv_pymembers, /* @tp_members@ */ + PYMETHODS(kcdsapriv), /* @tp_methods@ */ + PYMEMBERS(dsapriv), /* @tp_members@ */ 0, /* @tp_getset@ */ 0, /* @tp_base@ */ 0, /* @tp_dict@ */ @@ -727,8 +720,7 @@ end: return (rc); } -static PyObject *meth__RSAPriv_generate(PyObject *me, - PyObject *arg, PyObject *kw) +static PyObject *rsameth_generate(PyObject *me, PyObject *arg, PyObject *kw) { grand *r = &rand_global; unsigned nbits; @@ -738,12 +730,12 @@ static PyObject *meth__RSAPriv_generate(PyObject *me, struct excinfo exc = EXCINFO_INIT; pypgev evt = { { 0 } }; static const char *const kwlist[] = - { "class", "nbits", "event", "rng", "nsteps", "e", 0 }; + { "nbits", "event", "rng", "nsteps", "e", 0 }; PyObject *rc = 0; evt.exc = &exc; - if (!PyArg_ParseTupleAndKeywords(arg, kw, "OO&|O&O&O&O&:generate", KWLIST, - &me, convuint, &nbits, convpgev, &evt, + if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&|O&O&O&O&:generate", KWLIST, + convuint, &nbits, convpgev, &evt, convgrand, &r, convuint, &n, convmp, &e)) goto end; @@ -758,7 +750,7 @@ end: return (rc); } -static PyGetSetDef rsapub_pygetset[] = { +static const PyGetSetDef rsapub_pygetset[] = { #define GETSETNAME(op, name) rsa##op##_##name GET (n, "R.n -> N") GET (e, "R.e -> E") @@ -766,14 +758,14 @@ static PyGetSetDef rsapub_pygetset[] = { { 0 } }; -static PyMethodDef rsapub_pymethods[] = { +static const PyMethodDef rsapub_pymethods[] = { #define METHNAME(name) rsameth_##name METH (pubop, "R.pubop(X) -> X^E (mod N)") #undef METHNAME { 0 } }; -static PyGetSetDef rsapriv_pygetset[] = { +static const PyGetSetDef rsapriv_pygetset[] = { #define GETSETNAME(op, name) rsa##op##_##name GET (d, "R.d -> D") GET (p, "R.p -> P") @@ -786,14 +778,16 @@ static PyGetSetDef rsapriv_pygetset[] = { { 0 } }; -static PyMethodDef rsapriv_pymethods[] = { +static const PyMethodDef rsapriv_pymethods[] = { #define METHNAME(name) rsameth_##name KWMETH(privop, "R.privop(X, [rng = None]) -> X^D (mod N)") + KWSMTH(generate, "generate(NBITS, [event = pgen_nullev], [rng = rand], " + "[nsteps = 0]) -> R") #undef METHNAME { 0 } }; -static PyTypeObject rsapub_pytype_skel = { +static const PyTypeObject rsapub_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ "RSAPub", /* @tp_name@ */ sizeof(rsapub_pyobj), /* @tp_basicsize@ */ @@ -826,9 +820,9 @@ static PyTypeObject rsapub_pytype_skel = { 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ 0, /* @tp_iternext@ */ - rsapub_pymethods, /* @tp_methods@ */ + PYMETHODS(rsapub), /* @tp_methods@ */ 0, /* @tp_members@ */ - rsapub_pygetset, /* @tp_getset@ */ + PYGETSET(rsapub), /* @tp_getset@ */ 0, /* @tp_base@ */ 0, /* @tp_dict@ */ 0, /* @tp_descr_get@ */ @@ -841,7 +835,7 @@ static PyTypeObject rsapub_pytype_skel = { 0 /* @tp_is_gc@ */ }; -static PyTypeObject rsapriv_pytype_skel = { +static const PyTypeObject rsapriv_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ "RSAPriv", /* @tp_name@ */ sizeof(rsapriv_pyobj), /* @tp_basicsize@ */ @@ -875,9 +869,9 @@ static PyTypeObject rsapriv_pytype_skel = { 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ 0, /* @tp_iternext@ */ - rsapriv_pymethods, /* @tp_methods@ */ + PYMETHODS(rsapriv), /* @tp_methods@ */ 0, /* @tp_members@ */ - rsapriv_pygetset, /* @tp_getset@ */ + PYGETSET(rsapriv), /* @tp_getset@ */ 0, /* @tp_base@ */ 0, /* @tp_dict@ */ 0, /* @tp_descr_get@ */ @@ -1262,7 +1256,17 @@ EDDSAS(DEFEDDSA) /*----- Global stuff ------------------------------------------------------*/ -static PyMethodDef methods[] = { +static const struct nameval consts[] = { + CONST(X25519_KEYSZ), CONST(X25519_PUBSZ), CONST(X25519_OUTSZ), + CONST(X448_KEYSZ), CONST(X448_PUBSZ), CONST(X448_OUTSZ), + CONST(ED25519_KEYSZ), CONST(ED25519_PUBSZ), CONST(ED25519_SIGSZ), + CONST(ED25519_MAXPERSOSZ), + CONST(ED448_KEYSZ), CONST(ED448_PUBSZ), CONST(ED448_SIGSZ), + CONST(ED448_MAXPERSOSZ), + { 0 } +}; + +static const PyMethodDef methods[] = { #define METHNAME(name) meth_##name KWMETH(_p1crypt_encode, 0) KWMETH(_p1crypt_decode, 0) @@ -1272,8 +1276,6 @@ static PyMethodDef methods[] = { KWMETH(_oaep_decode, 0) KWMETH(_pss_encode, 0) KWMETH(_pss_decode, 0) - KWMETH(_RSAPriv_generate, "generate(NBITS, [event = pgen_nullev], " - "[rng = rand], [nsteps = 0]) -> R") #define DEFMETH(X, x) \ METH (x, "" #x "(KEY, PUBLIC) -> SHARED") XDHS(DEFMETH) @@ -1309,6 +1311,7 @@ void pubkey_pyinsert(PyObject *mod) INSERT("KCDSAPriv", kcdsapriv_pytype); INSERT("RSAPub", rsapub_pytype); INSERT("RSAPriv", rsapriv_pytype); + setconstants(mod, consts); } /*----- That's all, folks -------------------------------------------------*/