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);
}
if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&O&O&:new", kwlist,
convmp, &dp.p,
convmp, &dp.q,
- &convmp, dp.g))
+ convmp, &dp.g))
goto end;
z = PyObject_New(fginfo_pyobj, ty);
z->dp = dp;
}
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)
{
mp_drop(FGINFO_DP(me)->p);
mp_drop(FGINFO_DP(me)->q);
mp_drop(FGINFO_DP(me)->g);
- _PyObject_Del(me);
+ FREEOBJ(me);
}
static PyObject *meth__DHInfo_generate(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)
{
{ "class", "pbits", "qbits", "seed", "event", "nsteps", 0 };
PyObject *rc = 0;
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "OO&O&s#|O&O&:generate", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "OO&O&s#|O&O&:gendsa", kwlist,
&me, convuint, &pl, convuint, &ql,
&k, &ksz, convpgev, &evt,
convuint, &steps))
};
static PyTypeObject fginfo_pytype_skel = {
- PyObject_HEAD_INIT(&PyType_Type) 0, /* Header */
+ PyObject_HEAD_INIT(0) 0, /* Header */
"catacomb.FGInfo", /* @tp_name@ */
sizeof(fginfo_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
0, /* @tp_richcompare@ */
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
- 0, /* @tp_iternexr@ */
+ 0, /* @tp_iternext@ */
0, /* @tp_methods@ */
0, /* @tp_members@ */
fginfo_pygetset, /* @tp_getset@ */
0, /* @tp_init@ */
PyType_GenericAlloc, /* @tp_alloc@ */
abstract_pynew, /* @tp_new@ */
- _PyObject_Del, /* @tp_free@ */
+ 0, /* @tp_free@ */
0 /* @tp_is_gc@ */
};
static PyTypeObject dhinfo_pytype_skel = {
- PyObject_HEAD_INIT(&PyType_Type) 0, /* Header */
+ PyObject_HEAD_INIT(0) 0, /* Header */
"catacomb.DHInfo", /* @tp_name@ */
sizeof(fginfo_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
0, /* @tp_richcompare@ */
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
- 0, /* @tp_iternexr@ */
+ 0, /* @tp_iternext@ */
0, /* @tp_methods@ */
0, /* @tp_members@ */
dhinfo_pygetset, /* @tp_getset@ */
0, /* @tp_init@ */
PyType_GenericAlloc, /* @tp_alloc@ */
fginfo_pynew, /* @tp_new@ */
- _PyObject_Del, /* @tp_free@ */
+ 0, /* @tp_free@ */
0 /* @tp_is_gc@ */
};
static PyTypeObject bindhinfo_pytype_skel = {
- PyObject_HEAD_INIT(&PyType_Type) 0, /* Header */
+ PyObject_HEAD_INIT(0) 0, /* Header */
"catacomb.BinDHInfo", /* @tp_name@ */
sizeof(fginfo_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
0, /* @tp_richcompare@ */
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
- 0, /* @tp_iternexr@ */
+ 0, /* @tp_iternext@ */
0, /* @tp_methods@ */
0, /* @tp_members@ */
bindhinfo_pygetset, /* @tp_getset@ */
0, /* @tp_init@ */
PyType_GenericAlloc, /* @tp_alloc@ */
fginfo_pynew, /* @tp_new@ */
- _PyObject_Del, /* @tp_free@ */
+ 0, /* @tp_free@ */
0 /* @tp_is_gc@ */
};
static PyObject *group_dopywrap(PyTypeObject *ty, group *g)
{
- group_pyobj *gobj = newtype(ty, 0);
+ group_pyobj *gobj = newtype(ty, 0, g->ops->name);
gobj->g = g;
- gobj->ty.tp_name = (/*unconst*/ char *)g->ops->name;
- gobj->ty.tp_basicsize = sizeof(ge_pyobj);
- gobj->ty.tp_base = ge_pytype;
+ gobj->ty.ht_type.tp_basicsize = sizeof(ge_pyobj);
+ gobj->ty.ht_type.tp_base = ge_pytype;
Py_INCREF(group_pytype);
- gobj->ty.tp_flags = (Py_TPFLAGS_DEFAULT |
- Py_TPFLAGS_BASETYPE |
- Py_TPFLAGS_CHECKTYPES |
- Py_TPFLAGS_HEAPTYPE);
- gobj->ty.tp_alloc = PyType_GenericAlloc;
- gobj->ty.tp_free =_PyObject_Del;
- gobj->ty.tp_new = ge_pynew;
- PyType_Ready(&gobj->ty);
+ gobj->ty.ht_type.tp_flags = (Py_TPFLAGS_DEFAULT |
+ Py_TPFLAGS_BASETYPE |
+ Py_TPFLAGS_CHECKTYPES |
+ Py_TPFLAGS_HEAPTYPE);
+ gobj->ty.ht_type.tp_alloc = PyType_GenericAlloc;
+ gobj->ty.ht_type.tp_free = 0;
+ gobj->ty.ht_type.tp_new = ge_pynew;
+ PyType_Ready(&gobj->ty.ht_type);
return ((PyObject *)gobj);
}
{
G_DESTROY(GE_G(me), GE_X(me));
Py_DECREF(GE_GOBJ(me));
- PyObject_DEL(me);
+ FREEOBJ(me);
}
static void group_pydealloc(PyObject *me)
if ((x = G_TOINT(GE_G(me), MP_NEW, GE_X(me))) == 0)
TYERR("can't convert to integer");
- rc = (PyObject *)mp_topylong(x);
+ rc = mp_topylong(x);
end:
mp_drop(x);
return (rc);
};
static PyTypeObject ge_pytype_skel = {
- PyObject_HEAD_INIT(&PyType_Type) 0, /* Header */
+ PyObject_HEAD_INIT(0) 0, /* Header */
"catacomb.GE", /* @tp_name@ */
sizeof(ge_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
ge_pyrichcompare, /* @tp_richcompare@ */
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
- 0, /* @tp_iternexr@ */
+ 0, /* @tp_iternext@ */
ge_pymethods, /* @tp_methods@ */
0, /* @tp_members@ */
ge_pygetset, /* @tp_getset@ */
0, /* @tp_init@ */
PyType_GenericAlloc, /* @tp_alloc@ */
abstract_pynew, /* @tp_new@ */
- _PyObject_Del, /* @tp_free@ */
+ 0, /* @tp_free@ */
0 /* @tp_is_gc@ */
};
};
static PyTypeObject group_pytype_skel = {
- PyObject_HEAD_INIT(&PyType_Type) 0, /* Header */
+ PyObject_HEAD_INIT(0) 0, /* Header */
"catacomb.Group", /* @tp_name@ */
sizeof(group_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
group_pyrichcompare, /* @tp_richcompare@ */
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
- 0, /* @tp_iternexr@ */
+ 0, /* @tp_iternext@ */
group_pymethods, /* @tp_methods@ */
0, /* @tp_members@ */
group_pygetset, /* @tp_getset@ */
0, /* @tp_init@ */
PyType_GenericAlloc, /* @tp_alloc@ */
abstract_pynew, /* @tp_new@ */
- _PyObject_Del, /* @tp_free@ */
+ 0, /* @tp_free@ */
0 /* @tp_is_gc@ */
};
}
static PyTypeObject primegroup_pytype_skel = {
- PyObject_HEAD_INIT(&PyType_Type) 0, /* Header */
+ PyObject_HEAD_INIT(0) 0, /* Header */
"catacomb.PrimeGroup", /* @tp_name@ */
sizeof(group_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
0, /* @tp_richcompare@ */
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
- 0, /* @tp_iternexr@ */
+ 0, /* @tp_iternext@ */
0, /* @tp_methods@ */
0, /* @tp_members@ */
primegroup_pygetset, /* @tp_getset@ */
0, /* @tp_init@ */
PyType_GenericAlloc, /* @tp_alloc@ */
primegroup_pynew, /* @tp_new@ */
- _PyObject_Del, /* @tp_free@ */
+ 0, /* @tp_free@ */
0 /* @tp_is_gc@ */
};
}
static PyTypeObject bingroup_pytype_skel = {
- PyObject_HEAD_INIT(&PyType_Type) 0, /* Header */
+ PyObject_HEAD_INIT(0) 0, /* Header */
"catacomb.BinGroup", /* @tp_name@ */
sizeof(group_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
0, /* @tp_richcompare@ */
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
- 0, /* @tp_iternexr@ */
+ 0, /* @tp_iternext@ */
0, /* @tp_methods@ */
0, /* @tp_members@ */
bingroup_pygetset, /* @tp_getset@ */
0, /* @tp_init@ */
PyType_GenericAlloc, /* @tp_alloc@ */
bingroup_pynew, /* @tp_new@ */
- _PyObject_Del, /* @tp_free@ */
+ 0, /* @tp_free@ */
0 /* @tp_is_gc@ */
};
}
static PyTypeObject ecgroup_pytype_skel = {
- PyObject_HEAD_INIT(&PyType_Type) 0, /* Header */
+ PyObject_HEAD_INIT(0) 0, /* Header */
"catacomb.ECGroup", /* @tp_name@ */
sizeof(group_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
0, /* @tp_richcompare@ */
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
- 0, /* @tp_iternexr@ */
+ 0, /* @tp_iternext@ */
0, /* @tp_methods@ */
0, /* @tp_members@ */
ecgroup_pygetset, /* @tp_getset@ */
0, /* @tp_init@ */
PyType_GenericAlloc, /* @tp_alloc@ */
ecgroup_pynew, /* @tp_new@ */
- _PyObject_Del, /* @tp_free@ */
+ 0, /* @tp_free@ */
0 /* @tp_is_gc@ */
};
METH (_DHInfo__groupn, 0)
METH (_BinDHInfo__groupn, 0)
KWMETH(_DHInfo_generate, "\
-generate(PBITS, [qbits = 0, event = pgen_nullev,
+generate(PBITS, [qbits = 0, event = pgen_nullev,\n\
rng = rand, nsteps = 0]) -> D")
KWMETH(_DHInfo_genlimlee, "\
genlimlee(PBITS, QBITS, [event = pgen_nullev, ievent = pgen_nullev,\n\
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 }
};