PyObject *fginfo_pywrap(gprime_param *dp, PyTypeObject *ty)
{
fginfo_pyobj *z = PyObject_New(fginfo_pyobj, ty);
- z->dp.p = MP_COPY(dp->p);
- z->dp.q = MP_COPY(dp->q);
- z->dp.g = MP_COPY(dp->g);
+ z->dp = *dp;
return ((PyObject *)z);
}
}
static PyObject *figet_r(PyObject *me, void *hunoz)
- { return mp_pywrap(FGINFO_DP(me)->q); }
+ { return mp_pywrap(MP_COPY(FGINFO_DP(me)->q)); }
static PyObject *diget_p(PyObject *me, void *hunoz)
- { return mp_pywrap(FGINFO_DP(me)->p); }
+ { return mp_pywrap(MP_COPY(FGINFO_DP(me)->p)); }
static PyObject *diget_g(PyObject *me, void *hunoz)
- { return mp_pywrap(FGINFO_DP(me)->g); }
+ { return mp_pywrap(MP_COPY(FGINFO_DP(me)->g)); }
static PyObject *biget_p(PyObject *me, void *hunoz)
- { return gf_pywrap(FGINFO_DP(me)->p); }
+ { return gf_pywrap(MP_COPY(FGINFO_DP(me)->p)); }
static PyObject *biget_m(PyObject *me, void *hunoz)
{ return PyInt_FromLong(mp_octets(FGINFO_DP(me)->p) - 1); }
static PyObject *biget_g(PyObject *me, void *hunoz)
- { return gf_pywrap(FGINFO_DP(me)->g); }
+ { return gf_pywrap(MP_COPY(FGINFO_DP(me)->g)); }
static void fginfo_pydealloc(PyObject *me)
{
return (rc);
}
+static PyObject *meth__DHInfo_genkcdsa(PyObject *me,
+ PyObject *arg, PyObject *kw)
+{
+ dh_param dp;
+ unsigned ql, pl;
+ unsigned steps = 0;
+ grand *r = &rand_global;
+ pgev evt = { 0 };
+ char *kwlist[] = { "class", "pbits", "qbits",
+ "event", "rng", "nsteps", 0 };
+ mp *v = MP_NEW;
+ PyObject *rc = 0;
+
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "OO&O&|O&O&O&:genkcdsa", kwlist,
+ &me, convuint, &pl, convuint, &ql,
+ convpgev, &evt, convgrand, &r,
+ convuint, &steps))
+ goto end;
+ if (dh_kcdsagen(&dp, ql, pl, 0, steps, r, evt.proc, evt.ctx))
+ PGENERR;
+ mp_div(&v, 0, dp.p, dp.q);
+ v = mp_lsr(v, v, 1);
+ rc = Py_BuildValue("(NN)", fginfo_pywrap(&dp, dhinfo_pytype),
+ mp_pywrap(v));
+end:
+ droppgev(&evt);
+ return (rc);
+}
+
static PyObject *meth__DHInfo_gendsa(PyObject *me,
PyObject *arg, PyObject *kw)
{
KWMETH(_DHInfo_gendsa, "\
gendsa(PBITS, QBITS, SEED, [event = pgen_nullev, nsteps = 0])\n\
-> (D, SEED, COUNT)")
+ KWMETH(_DHInfo_genkcdsa, "\
+gendsa(PBITS, QBITS, [event = pgen_nullev, rng = rand, nsteps = 0])\n\
+ -> (D, V)")
#undef METHNAME
{ 0 }
};