unsigned steps = 0;
dsa_seed ds;
char *k;
- int ksz;
+ Py_ssize_t ksz;
pgev evt = { 0 };
char *kwlist[] =
{ "class", "pbits", "qbits", "seed", "event", "nsteps", 0 };
PyTypeObject *ge_pytype, *group_pytype;
PyTypeObject *primegroup_pytype, *bingroup_pytype, *ecgroup_pytype;
-#ifdef GROUP_GUTS_MPSTRUCT
-# define GG_GEN(gg) ((gg)->gen.x)
-#else
-# define GG_GEN(gg) ((gg)->gen)
-#endif
-
group *group_copy(group *g)
{
if (strcmp(G_NAME(g), "prime") == 0) {
static PyObject *gemeth_toec(PyObject *me, PyObject *arg, PyObject *kw)
{
char *kwlist[] = { "curve", 0 };
- PyTypeObject *cty = ecpt_pytype;
+ PyTypeObject *cty = 0;
+ PyObject *rc = 0;
+ group *g;
+ ec_curve *c;
ec p = EC_INIT;
if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O:toec", kwlist,
&cty)) goto end;
- if (!PyType_Check(cty) || !PyType_IsSubtype(cty, ecpt_pytype))
- TYERR("want subtype of catacomb.ECPt");
- if (G_TOEC(GE_G(me), &p, GE_X(me)))
+ g = GROUP_G(GE_GOBJ(me));
+ if (cty) {
+ if (!PyType_Check(cty) || !PyType_IsSubtype(cty, ecpt_pytype))
+ TYERR("want subtype of catacomb.ECPt");
+ Py_INCREF((PyObject *)cty);
+ } else if (strcmp(G_NAME(g), "ec") == 0) {
+ c = eccurve_copy(((gctx_ec *)g)->ei.c);
+ cty = (PyTypeObject *)eccurve_pywrap(0, c);
+ } else {
+ cty = ecpt_pytype;
+ Py_INCREF((PyObject *)cty);
+ }
+ if (G_TOEC(GE_G(me), &p, GE_X(me))) {
+ Py_DECREF((PyObject *)cty);
TYERR("can't convert to ec point");
- return (ecpt_pywrapout(cty, &p));
+ }
+ rc = ecpt_pywrapout(cty, &p);
+ Py_DECREF((PyObject *)cty);
end:
- return (0);
+ return (rc);
}
static PyObject *gemeth_tobuf(PyObject *me, PyObject *arg)
{
buf b;
char *p;
- int n;
+ Py_ssize_t n;
group *g;
ge *x = 0;
{
buf b;
char *p;
- int n;
+ Py_ssize_t n;
group *g;
ge *x = 0;
{
mptext_stringctx sc;
char *p;
- int n;
+ Py_ssize_t n;
group *g;
ge *x = 0;
if (G_READ(g, x, &mptext_stringops, &sc))
VALERR("bad group element string");
return (Py_BuildValue("(Ns#)", ge_pywrap(me, x),
- sc.buf, (int)(sc.lim - sc.buf)));
+ sc.buf, (Py_ssize_t)(sc.lim - sc.buf)));
end:
if (x) G_DESTROY(g, x);
return (0);
METH (check, "X.check() -> check X really belongs to its group")
METH (toint, "X.toint() -> X converted to an integer")
KWMETH(toec, "\
-X.toec(curve = ecpt) -> X converted to elliptic curve point")
+X.toec([curve = ECPt]) -> X converted to elliptic curve point")
METH (tobuf, "X.tobuf() -> X in buffer representation")
METH (toraw, "X.toraw() -> X in raw representation")
#undef METHNAME
#define METHNAME(name) gmeth_##name
METH (mexp, "\
G.mexp([(X0, N0), (X1, N1), ...]) -> X0^N0 X1^N1 ...")
- KWMETH(checkgroup, "G.checkgroup(rand = random): check group is good")
+ KWMETH(checkgroup, "G.checkgroup([rng = rand]): check group is good")
#undef METHNAME
{ 0 }
};
gctx_prime *gg = (gctx_prime *)GROUP_G(me);
dp.p = MP_COPY(gg->mm.m);
dp.q = MP_COPY(gg->g.r);
- dp.g = mpmont_reduce(&gg->mm, MP_NEW, GG_GEN(gg));
+ dp.g = mpmont_reduce(&gg->mm, MP_NEW, gg->gen.x);
return (fginfo_pywrap(&dp, dhinfo_pytype));
}
gctx_bin *gg = (gctx_bin *)GROUP_G(me);
dp.p = MP_COPY(gg->r.p);
dp.q = MP_COPY(gg->g.r);
- dp.g = MP_COPY(GG_GEN(gg));
+ dp.g = MP_COPY(gg->gen.x);
return (fginfo_pywrap(&dp, bindhinfo_pytype));
}
METH (_DHInfo__groupn, 0)
METH (_BinDHInfo__groupn, 0)
KWMETH(_DHInfo_generate, "\
-generate(PBITS, [qbits = 0, event = pgen_nullev,\n\
- rng = rand, nsteps = 0]) -> D")
+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\
- rng = rand, nsteps = 0, subgroupp = True]) -> (D, [Q, ...])")
+genlimlee(PBITS, QBITS, [event = pgen_nullev], [ievent = pgen_nullev],\n\
+ [rng = rand], [nsteps = 0], [subgroupp = True]) -> (D, [Q, ...])")
KWMETH(_DHInfo_gendsa, "\
-gendsa(PBITS, QBITS, SEED, [event = pgen_nullev, nsteps = 0])\n\
+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\
+gendsa(PBITS, QBITS, [event = pgen_nullev], [rng = rand], [nsteps = 0])\n\
-> (D, V)")
#undef METHNAME
{ 0 }