From: Mark Wooding Date: Thu, 26 Feb 2015 19:32:54 +0000 (+0000) Subject: algorithms.c: Add bindings for the key-strength conversion functions. X-Git-Tag: 1.1.0~2^2~16 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/catacomb-python/commitdiff_plain/89157adcd6833444063825f8d8a08a5111c63518 algorithms.c: Add bindings for the key-strength conversion functions. --- diff --git a/algorithms.c b/algorithms.c index 16d426d..b672498 100644 --- a/algorithms.c +++ b/algorithms.c @@ -422,6 +422,24 @@ few listed sizes.", 0 /* @tp_is_gc@ */ }; +#define KSZCONVOP(op) \ + static PyObject *meth__KeySZ_##op(PyObject *me, PyObject *arg) \ + { \ + double x, y; \ + if (!PyArg_ParseTuple(arg, "Od:" #op, &me, &x)) return (0); \ + y = keysz_##op(x); \ + return (PyFloat_FromDouble(y)); \ + } +KSZCONVOP(fromdl) +KSZCONVOP(fromschnorr) +KSZCONVOP(fromif) +KSZCONVOP(fromec) +KSZCONVOP(todl) +KSZCONVOP(toschnorr) +KSZCONVOP(toif) +KSZCONVOP(toec) +#undef KSZCONVOP + /*----- Symmetric encryption ----------------------------------------------*/ PyTypeObject *gccipher_pytype, *gcipher_pytype; @@ -1411,6 +1429,28 @@ static PyTypeObject gprp_pytype_skel = { /*----- Main code ---------------------------------------------------------*/ +static PyMethodDef methods[] = { +#define METHNAME(func) meth_##func + METH (_KeySZ_fromdl, "\ +fromdl(N) -> M: convert integer discrete log field size to work factor") + METH (_KeySZ_fromschnorr, "\ +fromschnorr(N) -> M: convert Schnorr group order to work factor") + METH (_KeySZ_fromif, "\ +fromif(N) -> M: convert integer factorization problem size to work factor") + METH (_KeySZ_fromec, "\ +fromec(N) -> M: convert elliptic curve group order to work factor") + METH (_KeySZ_todl, "\ +todl(N) -> M: convert work factor to integer discrete log field size") + METH (_KeySZ_toschnorr, "\ +toschnorr(N) -> M: convert work factor to Schnorr group order") + METH (_KeySZ_toif, "\ +toif(N) -> M: convert work factor to integer factorization problem size") + METH (_KeySZ_toec, "\ +toec(N) -> M: convert work factor to elliptic curve group order") +#undef METHNAME + { 0 } +}; + void algorithms_pyinit(void) { INITTYPE(keysz, root); @@ -1426,6 +1466,7 @@ void algorithms_pyinit(void) INITTYPE(gmhash, ghash); INITTYPE(gcprp, type); INITTYPE(gprp, root); + addmethods(methods); } GEN(gcciphers, cipher) diff --git a/catacomb/__init__.py b/catacomb/__init__.py index 8dac0b4..0f0aa99 100644 --- a/catacomb/__init__.py +++ b/catacomb/__init__.py @@ -47,7 +47,7 @@ def _init(): 'DHInfo', 'BinDHInfo', 'RSAPriv', 'BBSPriv', 'PrimeFilter', 'RabinMiller', 'Group', 'GE', - 'KeyData']: + 'KeySZ', 'KeyData']: c = d[i] pre = '_' + i + '_' plen = len(pre)