From: Mark Wooding Date: Thu, 11 May 2017 09:42:15 +0000 (+0100) Subject: mp.c: Add binding for `leastcongruent' function. X-Git-Tag: 1.2.0~2 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/catacomb-python/commitdiff_plain/d0d9458708e431e88d60a9073da384a9d4baa3dd mp.c: Add binding for `leastcongruent' function. --- diff --git a/mp.c b/mp.c index 79c6cf2..88ee738 100644 --- a/mp.c +++ b/mp.c @@ -682,6 +682,19 @@ end: return (z); } +static PyObject *mpmeth_leastcongruent(PyObject *me, PyObject *arg) +{ + mp *z, *b, *m; + PyObject *rc = 0; + + if (!PyArg_ParseTuple(arg, "O&O&:leastcongruent", convmp, &b, convmp, &m)) + goto end; + z = mp_leastcongruent(MP_NEW, b, MP_X(me), m); + rc = mp_pywrap(z); +end: + return (rc); +} + #define STOREOP(name, c) \ static PyObject *mpmeth_##name(PyObject *me, \ PyObject *arg, PyObject *kw) \ @@ -792,6 +805,8 @@ static PyMethodDef mp_pymethods[] = { "X.gcdx(Y) -> (gcd(X, Y), U, V) with X U + Y V = gcd(X, Y)") METH (modinv, "X.modinv(Y) -> multiplicative inverse of Y mod X") METH (modsqrt, "X.modsqrt(Y) -> square root of Y mod X, if X prime") + METH (leastcongruent, + "X.leastcongruent(B, M) -> smallest Z >= B with Z == X (mod M)") KWMETH(primep, "X.primep(rng = rand) -> true/false if X is prime") KWMETH(tostring, "X.tostring(radix = 10) -> STR") KWMETH(storel, "X.storel(len = -1) -> little-endian bytes")