~mdw
/
catacomb-python
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
key.c: Complain about duplicate subkeys passed to `KeyDataStructured'.
[catacomb-python]
/
rand.c
diff --git
a/rand.c
b/rand.c
index
5286472
..
22a0b3c
100644
(file)
--- a/
rand.c
+++ b/
rand.c
@@
-65,7
+65,8
@@
PyObject *grand_pywrap(grand *r, unsigned f)
else if (STRCMP(r->ops->name, ==, "sslprf")) ty = sslprf_pytype;
else if (STRCMP(r->ops->name, ==, "tlsdx")) ty = tlsdx_pytype;
else if (STRCMP(r->ops->name, ==, "tlsprf")) ty = tlsprf_pytype;
else if (STRCMP(r->ops->name, ==, "sslprf")) ty = sslprf_pytype;
else if (STRCMP(r->ops->name, ==, "tlsdx")) ty = tlsdx_pytype;
else if (STRCMP(r->ops->name, ==, "tlsprf")) ty = tlsprf_pytype;
- else if ((ob = PyDict_GetItemString(gccrands_dict, r->ops->name)) != 0)
+ else if ((ob = PyMapping_GetItemString
+ (gccrands_dict, (/*unconst*/ char *)r->ops->name)) != 0)
ty = (PyTypeObject *)ob;
return (grand_dopywrap(ty, r, f));
}
ty = (PyTypeObject *)ob;
return (grand_dopywrap(ty, r, f));
}
@@
-80,16
+81,14
@@
end:
return (-1);
}
return (-1);
}
-static PyObject *grmeth_byte(PyObject *me
, PyObject *arg
)
+static PyObject *grmeth_byte(PyObject *me)
{
{
- if (!PyArg_ParseTuple(arg, ":byte")) return (0);
if (grand_check(me)) return (0);
return (PyInt_FromLong(grand_byte(GRAND_R(me))));
}
if (grand_check(me)) return (0);
return (PyInt_FromLong(grand_byte(GRAND_R(me))));
}
-static PyObject *grmeth_word(PyObject *me
, PyObject *arg
)
+static PyObject *grmeth_word(PyObject *me)
{
{
- if (!PyArg_ParseTuple(arg, ":word")) return (0);
if (grand_check(me)) return (0);
return (getulong(grand_word(GRAND_R(me))));
}
if (grand_check(me)) return (0);
return (getulong(grand_word(GRAND_R(me))));
}
@@
-103,16
+102,14
@@
static PyObject *grmeth_range(PyObject *me, PyObject *arg)
if (!PyArg_ParseTuple(arg, "O:range", &m)) return (0);
if (grand_check(me)) return (0);
if (PyInt_Check(m)) {
if (!PyArg_ParseTuple(arg, "O:range", &m)) return (0);
if (grand_check(me)) return (0);
if (PyInt_Check(m)) {
- long mm = PyInt_A
S_LONG
(m);
- if (mm
<= 0)
-
goto notpos;
- if (mm <= 0xffffffff)
+ long mm = PyInt_A
sLong
(m);
+ if (mm
== -1 && PyErr_Occurred()) PyErr_Clear();
+
else if (mm <= 0)
goto notpos;
+
else
if (mm <= 0xffffffff)
return (PyInt_FromLong(grand_range(GRAND_R(me), mm)));
}
return (PyInt_FromLong(grand_range(GRAND_R(me), mm)));
}
- if ((x = getmp(m)) == 0)
- goto end;
- if (!MP_POSP(x))
- goto notpos;
+ if ((x = getmp(m)) == 0) goto end;
+ if (!MP_POSP(x)) goto notpos;
y = mprand_range(MP_NEW, x, GRAND_R(me), 0);
MP_DROP(x);
return (mp_pywrap(y));
y = mprand_range(MP_NEW, x, GRAND_R(me), 0);
MP_DROP(x);
return (mp_pywrap(y));
@@
-147,7
+144,7
@@
static PyObject *grmeth_block(PyObject *me, PyObject *arg)
if (!PyArg_ParseTuple(arg, "O&:block", convulong, &n)) goto end;
if (grand_check(me)) return (0);
rc = bytestring_pywrap(0, n);
if (!PyArg_ParseTuple(arg, "O&:block", convulong, &n)) goto end;
if (grand_check(me)) return (0);
rc = bytestring_pywrap(0, n);
- grand_fill(GRAND_R(me),
PyString_AS_STRING
(rc), n);
+ grand_fill(GRAND_R(me),
BIN_PTR
(rc), n);
end:
return (rc);
}
end:
return (rc);
}
@@
-187,13
+184,12
@@
end:
static PyObject *grmeth_seedblock(PyObject *me, PyObject *arg)
{
static PyObject *grmeth_seedblock(PyObject *me, PyObject *arg)
{
- char *p;
- Py_ssize_t n;
+ struct bin in;
grand *r = GRAND_R(me);
grand *r = GRAND_R(me);
- if (!PyArg_ParseTuple(arg, "
s#:seedblock", &p, &
n) ||
+ if (!PyArg_ParseTuple(arg, "
O&:seedblock", convbin, &i
n) ||
grand_check(me) || checkop(r, GRAND_SEEDBLOCK, "seedblock"))
goto end;
grand_check(me) || checkop(r, GRAND_SEEDBLOCK, "seedblock"))
goto end;
- r->ops->misc(r, GRAND_SEEDBLOCK,
p, (size_t)n
);
+ r->ops->misc(r, GRAND_SEEDBLOCK,
in.p, (size_t)in.sz
);
RETURN_ME;
end:
return (0);
RETURN_ME;
end:
return (0);
@@
-233,16
+229,17
@@
end:
static PyObject *grmeth_mask(PyObject *me, PyObject *arg)
{
grand *r = GRAND_R(me);
static PyObject *grmeth_mask(PyObject *me, PyObject *arg)
{
grand *r = GRAND_R(me);
- char *p, *q;
- Py_ssize_t sz;
+ struct bin in;
+ const octet *p; size_t n;
+ octet *q;
PyObject *rc;
PyObject *rc;
- if (!PyArg_ParseTuple(arg, "
s#:mask", &p, &sz
)) return (0);
+ if (!PyArg_ParseTuple(arg, "
O&:mask", convbin, &in
)) return (0);
if (grand_check(me)) return (0);
if (grand_check(me)) return (0);
- rc = bytestring_pywrap(0, sz);
- q =
PyString_AS_STRING
(rc);
- GR_FILL(r, q, sz);
-
while (sz
--) *q++ ^= *p++;
+ rc = bytestring_pywrap(0,
in.
sz);
+ q =
(octet *)BIN_PTR
(rc);
+ GR_FILL(r, q,
in.
sz);
+
p = in.p; n = in.sz; while (n
--) *q++ ^= *p++;
return (rc);
}
return (rc);
}
@@
-254,12
+251,12
@@
static void grand_pydealloc(PyObject *me)
}
static PyObject *grget_name(PyObject *me, void *hunoz)
}
static PyObject *grget_name(PyObject *me, void *hunoz)
- { return (grand_check(me) ? 0 :
PyString_FromString
(GRAND_R(me)->ops->name)); }
+ { return (grand_check(me) ? 0 :
TEXT_FROMSTR
(GRAND_R(me)->ops->name)); }
static PyObject *grget_cryptop(PyObject *me, void *hunoz)
{ return (grand_check(me) ? 0 : getbool(GRAND_R(me)->ops->f & GRAND_CRYPTO)); }
static PyObject *grget_cryptop(PyObject *me, void *hunoz)
{ return (grand_check(me) ? 0 : getbool(GRAND_R(me)->ops->f & GRAND_CRYPTO)); }
-static PyGetSetDef grand_pygetset[] = {
+static
const
PyGetSetDef grand_pygetset[] = {
#define GETSETNAME(op, name) gr##op##_##name
GET (name, "R.name -> name of this kind of generator")
GET (cryptop, "R.cryptop -> flag: cryptographically strong?")
#define GETSETNAME(op, name) gr##op##_##name
GET (name, "R.name -> name of this kind of generator")
GET (cryptop, "R.cryptop -> flag: cryptographically strong?")
@@
-267,10
+264,10
@@
static PyGetSetDef grand_pygetset[] = {
{ 0 }
};
{ 0 }
};
-static PyMethodDef grand_pymethods[] = {
+static
const
PyMethodDef grand_pymethods[] = {
#define METHNAME(name) grmeth_##name
#define METHNAME(name) grmeth_##name
-
METH (byte,
"R.byte() -> BYTE")
-
METH (word,
"R.word() -> WORD")
+
NAMETH(byte,
"R.byte() -> BYTE")
+
NAMETH(word,
"R.word() -> WORD")
METH (block, "R.block(N) -> STRING")
KWMETH(mp, "R.mp(bits, [or = 0]) -> MP")
METH (range, "R.range(MAX) -> INT")
METH (block, "R.block(N) -> STRING")
KWMETH(mp, "R.mp(bits, [or = 0]) -> MP")
METH (range, "R.range(MAX) -> INT")
@@
-284,8
+281,8
@@
static PyMethodDef grand_pymethods[] = {
{ 0 }
};
{ 0 }
};
-static PyTypeObject grand_pytype_skel = {
- Py
Object_HEAD_INIT(0) 0,
/* Header */
+static
const
PyTypeObject grand_pytype_skel = {
+ Py
VarObject_HEAD_INIT(0, 0)
/* Header */
"GRand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
"GRand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
@@
-317,9
+314,9
@@
static PyTypeObject grand_pytype_skel = {
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
0, /* @tp_iternext@ */
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
0, /* @tp_iternext@ */
-
grand_pymethods,
/* @tp_methods@ */
+
PYMETHODS(grand),
/* @tp_methods@ */
0, /* @tp_members@ */
0, /* @tp_members@ */
-
grand_pygetset,
/* @tp_getset@ */
+
PYGETSET(grand),
/* @tp_getset@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
0, /* @tp_descr_get@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
0, /* @tp_descr_get@ */
@@
-341,8
+338,8
@@
static PyObject *lcrand_pynew(PyTypeObject *me, PyObject *arg, PyObject *kw)
return (grand_dopywrap(lcrand_pytype, lcrand_create(n), f_freeme));
}
return (grand_dopywrap(lcrand_pytype, lcrand_create(n), f_freeme));
}
-static PyTypeObject lcrand_pytype_skel = {
- Py
Object_HEAD_INIT(0) 0,
/* Header */
+static
const
PyTypeObject lcrand_pytype_skel = {
+ Py
VarObject_HEAD_INIT(0, 0)
/* Header */
"LCRand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
"LCRand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
@@
-398,8
+395,8
@@
static PyObject *fibrand_pynew(PyTypeObject *me, PyObject *arg, PyObject *kw)
return (grand_dopywrap(fibrand_pytype, fibrand_create(n), f_freeme));
}
return (grand_dopywrap(fibrand_pytype, fibrand_create(n), f_freeme));
}
-static PyTypeObject fibrand_pytype_skel = {
- Py
Object_HEAD_INIT(0) 0,
/* Header */
+static
const
PyTypeObject fibrand_pytype_skel = {
+ Py
VarObject_HEAD_INIT(0, 0)
/* Header */
"FibRand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
"FibRand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
@@
-448,38
+445,28
@@
static PyTypeObject fibrand_pytype_skel = {
/*----- True random generator ---------------------------------------------*/
/*----- True random generator ---------------------------------------------*/
-static PyObject *trmeth_gate(PyObject *me, PyObject *arg)
-{
- grand *r = GRAND_R(me);
- if (!PyArg_ParseTuple(arg, ":gate")) return (0);
- r->ops->misc(r, RAND_GATE);
- RETURN_ME;
-}
+static PyObject *trmeth_gate(PyObject *me)
+ { grand *r = GRAND_R(me); r->ops->misc(GRAND_R(me), RAND_GATE); RETURN_ME; }
-static PyObject *trmeth_stretch(PyObject *me, PyObject *arg)
-{
- grand *r = GRAND_R(me);
- if (!PyArg_ParseTuple(arg, ":stretch")) return (0);
- r->ops->misc(r, RAND_STRETCH);
- RETURN_ME;
-}
+static PyObject *trmeth_stretch(PyObject *me)
+ { grand *r = GRAND_R(me); r->ops->misc(r, RAND_STRETCH); RETURN_ME; }
static PyObject *trmeth_add(PyObject *me, PyObject *arg)
{
grand *r = GRAND_R(me);
static PyObject *trmeth_add(PyObject *me, PyObject *arg)
{
grand *r = GRAND_R(me);
-
char *p; Py_ssize_t
n; unsigned goodbits;
- if (!PyArg_ParseTuple(arg, "
s#O&:add", &p, &
n, convuint, &goodbits))
+
struct bin i
n; unsigned goodbits;
+ if (!PyArg_ParseTuple(arg, "
O&O&:add", convbin, &i
n, convuint, &goodbits))
return (0);
return (0);
- r->ops->misc(r, RAND_ADD,
p, (size_t)n
, goodbits);
+ r->ops->misc(r, RAND_ADD,
in.p, (size_t)in.sz
, goodbits);
RETURN_ME;
}
static PyObject *trmeth_key(PyObject *me, PyObject *arg)
{
grand *r = GRAND_R(me);
RETURN_ME;
}
static PyObject *trmeth_key(PyObject *me, PyObject *arg)
{
grand *r = GRAND_R(me);
-
char *p; Py_ssize_t n
;
- if (!PyArg_ParseTuple(arg, "
s#:key", &p, &n
)) return (0);
- r->ops->misc(r, RAND_KEY,
p, (size_t)n
);
+
struct bin k
;
+ if (!PyArg_ParseTuple(arg, "
O&:key", convbin, &k
)) return (0);
+ r->ops->misc(r, RAND_KEY,
k.p, (size_t)k.sz
);
RETURN_ME;
}
RETURN_ME;
}
@@
-495,13
+482,8
@@
end:
return (0);
}
return (0);
}
-static PyObject *trmeth_timer(PyObject *me, PyObject *arg)
-{
- grand *r = GRAND_R(me);
- if (!PyArg_ParseTuple(arg, ":timer")) return (0);
- r->ops->misc(r, RAND_TIMER);
- RETURN_ME;
-}
+static PyObject *trmeth_timer(PyObject *me)
+ { grand *r = GRAND_R(me); r->ops->misc(r, RAND_TIMER); RETURN_ME; }
static PyObject *truerand_pynew(PyTypeObject *ty,
PyObject *arg, PyObject *kw)
static PyObject *truerand_pynew(PyTypeObject *ty,
PyObject *arg, PyObject *kw)
@@
-518,14
+500,14
@@
end:
return (rc);
}
return (rc);
}
-static PyMethodDef truerand_pymethods[] = {
+static
const
PyMethodDef truerand_pymethods[] = {
#define METHNAME(name) trmeth_##name
#define METHNAME(name) trmeth_##name
-
METH (gate,
"R.gate()")
-
METH (stretch,
"R.stretch()")
+
NAMETH(gate,
"R.gate()")
+
NAMETH(stretch,
"R.stretch()")
METH (key, "R.key(BYTES)")
METH (seed, "R.seed(NBITS)")
METH (add, "R.add(BYTES, GOODBITS")
METH (key, "R.key(BYTES)")
METH (seed, "R.seed(NBITS)")
METH (add, "R.add(BYTES, GOODBITS")
-
METH (timer,
"R.timer()")
+
NAMETH(timer,
"R.timer()")
#undef METHNAME
{ 0 }
};
#undef METHNAME
{ 0 }
};
@@
-536,15
+518,15
@@
static PyObject *trget_goodbits(PyObject *me, void *hunoz)
return (PyInt_FromLong(r->ops->misc(r, RAND_GOODBITS)));
}
return (PyInt_FromLong(r->ops->misc(r, RAND_GOODBITS)));
}
-static PyGetSetDef truerand_pygetset[] = {
+static
const
PyGetSetDef truerand_pygetset[] = {
#define GETSETNAME(op, name) tr##op##_##name
GET (goodbits, "R.goodbits -> good bits of entropy remaining")
#undef GETSETNAME
{ 0 }
};
#define GETSETNAME(op, name) tr##op##_##name
GET (goodbits, "R.goodbits -> good bits of entropy remaining")
#undef GETSETNAME
{ 0 }
};
-static PyTypeObject truerand_pytype_skel = {
- Py
Object_HEAD_INIT(0) 0,
/* Header */
+static
const
PyTypeObject truerand_pytype_skel = {
+ Py
VarObject_HEAD_INIT(0, 0)
/* Header */
"TrueRand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
"TrueRand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
@@
-576,9
+558,9
@@
static PyTypeObject truerand_pytype_skel = {
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
0, /* @tp_iternext@ */
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
0, /* @tp_iternext@ */
-
truerand_pymethods,
/* @tp_methods@ */
+
PYMETHODS(truerand),
/* @tp_methods@ */
0, /* @tp_members@ */
0, /* @tp_members@ */
-
truerand_pygetset,
/* @tp_getset@ */
+
PYGETSET(truerand),
/* @tp_getset@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
0, /* @tp_descr_get@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
0, /* @tp_descr_get@ */
@@
-643,13
+625,12
@@
static PyObject *gcrand_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
{
const gccrand_info *info = GCCRAND_INFO(ty);
static const char *const kwlist[] = { "key", 0 };
{
const gccrand_info *info = GCCRAND_INFO(ty);
static const char *const kwlist[] = { "key", 0 };
- char *k;
- Py_ssize_t n;
+ struct bin k;
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "
s#:new", KWLIST, &k, &n
))
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "
O&:new", KWLIST, convbin, &k
))
goto end;
goto end;
- if (keysz(
n, info->keysz) != n
) VALERR("bad key length");
- return (grand_dopywrap(ty, info->func(k
, n
), f_freeme));
+ if (keysz(
k.sz, info->keysz) != k.sz
) VALERR("bad key length");
+ return (grand_dopywrap(ty, info->func(k
.p, k.sz
), f_freeme));
end:
return (0);
}
end:
return (0);
}
@@
-659,15
+640,14
@@
static PyObject *gcirand_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
const gccrand_info *info = GCCRAND_INFO(ty);
uint32 i = 0;
static const char *const kwlist[] = { "key", "i", 0 };
const gccrand_info *info = GCCRAND_INFO(ty);
uint32 i = 0;
static const char *const kwlist[] = { "key", "i", 0 };
- char *k;
- Py_ssize_t n;
+ struct bin k;
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "
s#
O&:new", KWLIST,
-
&k, &n
, convu32, &i))
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "
O&
O&:new", KWLIST,
+
convbin, &k
, convu32, &i))
goto end;
goto end;
- if (keysz(
n, info->keysz) != n
) VALERR("bad key length");
+ if (keysz(
k.sz, info->keysz) != k.sz
) VALERR("bad key length");
return (grand_dopywrap(ty,
return (grand_dopywrap(ty,
- ((gcirand_func *)info->func)(k
, n
, i),
+ ((gcirand_func *)info->func)(k
.p, k.sz
, i),
f_freeme));
end:
return (0);
f_freeme));
end:
return (0);
@@
-677,16
+657,15
@@
static PyObject *gcnrand_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
{
const gccrand_info *info = GCCRAND_INFO(ty);
static const char *const kwlist[] = { "key", "nonce", 0 };
{
const gccrand_info *info = GCCRAND_INFO(ty);
static const char *const kwlist[] = { "key", "nonce", 0 };
- char *k, *n;
- Py_ssize_t ksz, nsz;
+ struct bin k, n;
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "
s#s#
:new", KWLIST,
-
&k, &ksz, &n, &nsz
))
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "
O&O&
:new", KWLIST,
+
convbin, &k, convbin, &n
))
goto end;
goto end;
- if (keysz(k
sz, info->keysz) != k
sz) VALERR("bad key length");
- if (nsz != info->noncesz) VALERR("bad nonce length");
+ if (keysz(k
.sz, info->keysz) != k.
sz) VALERR("bad key length");
+ if (n
.
sz != info->noncesz) VALERR("bad nonce length");
return (grand_dopywrap(ty,
return (grand_dopywrap(ty,
- ((gcnrand_func *)info->func)(k
, ksz, n
),
+ ((gcnrand_func *)info->func)(k
.p, k.sz, n.p
),
f_freeme));
end:
return (0);
f_freeme));
end:
return (0);
@@
-699,25
+678,25
@@
static PyObject *gcshakyrand_pynew(PyTypeObject *ty,
static const char
*const kwlist_shake[] = { "key", "func", "perso", 0 },
*const kwlist_func[] = { "key", "perso", 0 };
static const char
*const kwlist_shake[] = { "key", "func", "perso", 0 },
*const kwlist_func[] = { "key", "perso", 0 };
- char *k, *f = 0, *p = 0;
- Py_ssize_t ksz, fsz = 0, psz = 0;
+ struct bin k, f = { 0, 0 }, p = { 0, 0 };
if ((info->f&RNGF_MASK) == RNG_SHAKE
if ((info->f&RNGF_MASK) == RNG_SHAKE
- ? !PyArg_ParseTupleAndKeywords(arg, kw, "
s#|s#s#
:new",
+ ? !PyArg_ParseTupleAndKeywords(arg, kw, "
O&|O&O&
:new",
(/*unconst*/ char **)kwlist_shake,
(/*unconst*/ char **)kwlist_shake,
- &k, &ksz, &f, &fsz, &p, &psz)
- : !PyArg_ParseTupleAndKeywords(arg, kw, "s#|s#:new",
+ convbin, &k,
+ convbin, &f, convbin, &p)
+ : !PyArg_ParseTupleAndKeywords(arg, kw, "O&|O&:new",
(/*unconst*/ char **)kwlist_func,
(/*unconst*/ char **)kwlist_func,
-
&k, &ksz, &p, &psz
))
+
convbin, &k, convbin, &p
))
goto end;
goto end;
- if (keysz(k
sz, info->keysz) != k
sz) VALERR("bad key length");
+ if (keysz(k
.sz, info->keysz) != k.
sz) VALERR("bad key length");
return (grand_dopywrap(ty,
(info->f&RNGF_MASK) == RNG_SHAKE
return (grand_dopywrap(ty,
(info->f&RNGF_MASK) == RNG_SHAKE
- ? ((gcshakerand_func *)info->func)(f
, f
sz,
- p
, p
sz,
- k
, k
sz)
- : ((gcshafuncrand_func *)info->func)(p
, p
sz,
- k
, k
sz),
+ ? ((gcshakerand_func *)info->func)(f
.p, f.
sz,
+ p
.p, p.
sz,
+ k
.p, k.
sz)
+ : ((gcshafuncrand_func *)info->func)(p
.p, p.
sz,
+ k
.p, k.
sz),
f_freeme));
end:
return (0);
f_freeme));
end:
return (0);
@@
-750,17
+729,16
@@
static PyObject *gccrand_pywrap(const gccrand_info *info)
}
static PyObject *gccrget_name(PyObject *me, void *hunoz)
}
static PyObject *gccrget_name(PyObject *me, void *hunoz)
- { return (
PyString_FromString
(GCCRAND_INFO(me)->name)); }
+ { return (
TEXT_FROMSTR
(GCCRAND_INFO(me)->name)); }
static PyObject *gccrget_keysz(PyObject *me, void *hunoz)
{ return (keysz_pywrap(GCCRAND_INFO(me)->keysz)); }
static PyObject *gccrget_keysz(PyObject *me, void *hunoz)
{ return (keysz_pywrap(GCCRAND_INFO(me)->keysz)); }
-static PyObject *gclrmeth_tell(PyObject *me
, PyObject *arg
)
+static PyObject *gclrmeth_tell(PyObject *me)
{
grand *r = GRAND_R(me);
PyObject *rc = 0;
kludge64 off;
{
grand *r = GRAND_R(me);
PyObject *rc = 0;
kludge64 off;
- if (!PyArg_ParseTuple(arg, ":tell")) return (0);
r->ops->misc(r, SALSA20_TELLU64, &off);
rc = getk64(off);
return (rc);
r->ops->misc(r, SALSA20_TELLU64, &off);
rc = getk64(off);
return (rc);
@@
-776,7
+754,7
@@
static PyObject *gclrmeth_seek(PyObject *me, PyObject *arg)
RETURN_ME;
}
RETURN_ME;
}
-static PyGetSetDef gccrand_pygetset[] = {
+static
const
PyGetSetDef gccrand_pygetset[] = {
#define GETSETNAME(op, name) gccr##op##_##name
GET (keysz, "CR.keysz -> acceptable key sizes")
GET (name, "CR.name -> name of this kind of generator")
#define GETSETNAME(op, name) gccr##op##_##name
GET (keysz, "CR.keysz -> acceptable key sizes")
GET (name, "CR.name -> name of this kind of generator")
@@
-784,16
+762,16
@@
static PyGetSetDef gccrand_pygetset[] = {
{ 0 }
};
{ 0 }
};
-static PyMethodDef gclatinrand_pymethods[] = {
+static
const
PyMethodDef gclatinrand_pymethods[] = {
#define METHNAME(name) gclrmeth_##name
#define METHNAME(name) gclrmeth_##name
-
METH (tell,
"R.tell() -> OFF")
+
NAMETH(tell,
"R.tell() -> OFF")
METH (seek, "R.seek(OFF)")
#undef METHNAME
{ 0 }
};
METH (seek, "R.seek(OFF)")
#undef METHNAME
{ 0 }
};
-static PyTypeObject gccrand_pytype_skel = {
- Py
Object_HEAD_INIT(0) 0,
/* Header */
+static
const
PyTypeObject gccrand_pytype_skel = {
+ Py
VarObject_HEAD_INIT(0, 0)
/* Header */
"GCCRand", /* @tp_name@ */
sizeof(gccrand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
"GCCRand", /* @tp_name@ */
sizeof(gccrand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
@@
-827,7
+805,7
@@
static PyTypeObject gccrand_pytype_skel = {
0, /* @tp_iternext@ */
0, /* @tp_methods@ */
0, /* @tp_members@ */
0, /* @tp_iternext@ */
0, /* @tp_methods@ */
0, /* @tp_members@ */
-
gccrand_pygetset,
/* @tp_getset@ */
+
PYGETSET(gccrand),
/* @tp_getset@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
0, /* @tp_descr_get@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
0, /* @tp_descr_get@ */
@@
-840,8
+818,8
@@
static PyTypeObject gccrand_pytype_skel = {
0 /* @tp_is_gc@ */
};
0 /* @tp_is_gc@ */
};
-static PyTypeObject gcrand_pytype_skel = {
- Py
Object_HEAD_INIT(0) 0,
/* Header */
+static
const
PyTypeObject gcrand_pytype_skel = {
+ Py
VarObject_HEAD_INIT(0, 0)
/* Header */
"GCRand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
"GCRand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
@@
-888,8
+866,8
@@
static PyTypeObject gcrand_pytype_skel = {
0 /* @tp_is_gc@ */
};
0 /* @tp_is_gc@ */
};
-static PyTypeObject gclatinrand_pytype_skel = {
- Py
Object_HEAD_INIT(0) 0,
/* Header */
+static
const
PyTypeObject gclatinrand_pytype_skel = {
+ Py
VarObject_HEAD_INIT(0, 0)
/* Header */
"GCLatinRand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
"GCLatinRand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
@@
-921,7
+899,7
@@
static PyTypeObject gclatinrand_pytype_skel = {
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
0, /* @tp_iternext@ */
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
0, /* @tp_iternext@ */
-
gclatinrand_pymethods,
/* @tp_methods@ */
+
PYMETHODS(gclatinrand),
/* @tp_methods@ */
0, /* @tp_members@ */
0, /* @tp_getset@ */
0, /* @tp_base@ */
0, /* @tp_members@ */
0, /* @tp_getset@ */
0, /* @tp_base@ */
@@
-940,57
+918,56
@@
static PyTypeObject gclatinrand_pytype_skel = {
static PyObject *sslprf_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
{
static PyObject *sslprf_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
{
- char *k, *s;
- Py_ssize_t ksz, ssz;
+ struct bin k, s;
const gchash *hco = &md5, *hci = &sha;
PyObject *rc = 0;
static const char *const kwlist[] = { "key", "seed", "ohash", "ihash", 0 };
const gchash *hco = &md5, *hci = &sha;
PyObject *rc = 0;
static const char *const kwlist[] = { "key", "seed", "ohash", "ihash", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "
s#s#
|O&O&:new", KWLIST,
-
&k, &ksz, &s, &ssz
,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "
O&O&
|O&O&:new", KWLIST,
+
convbin, &k, convbin, &s
,
convgchash, &hco, convgchash, &hci))
goto end;
convgchash, &hco, convgchash, &hci))
goto end;
- rc = grand_dopywrap(ty, sslprf_rand(hco, hci, k, ksz, s, ssz), f_freeme);
+ rc = grand_dopywrap(ty, sslprf_rand(hco, hci, k.p, k.sz, s.p, s.sz),
+ f_freeme);
end:
return (rc);
}
static PyObject *tlsdx_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
{
end:
return (rc);
}
static PyObject *tlsdx_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
{
- char *k, *s;
- Py_ssize_t ksz, ssz;
+ struct bin k, s;
const gcmac *mc = &sha_hmac;
PyObject *rc = 0;
static const char *const kwlist[] = { "key", "seed", "mac", 0 };
const gcmac *mc = &sha_hmac;
PyObject *rc = 0;
static const char *const kwlist[] = { "key", "seed", "mac", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "
s#s#
|O&:new", KWLIST,
-
&k, &ksz, &s, &ssz
,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "
O&O&
|O&:new", KWLIST,
+
convbin, &k, convbin, &s
,
convgcmac, &mc))
goto end;
convgcmac, &mc))
goto end;
- rc = grand_dopywrap(ty, tlsdx_rand(mc, k
, ksz, s, s
sz), f_freeme);
+ rc = grand_dopywrap(ty, tlsdx_rand(mc, k
.p, k.sz, s.p, s.
sz), f_freeme);
end:
return (rc);
}
static PyObject *tlsprf_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
{
end:
return (rc);
}
static PyObject *tlsprf_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
{
- char *k, *s;
- Py_ssize_t ksz, ssz;
+ struct bin k, s;
const gcmac *mcl = &md5_hmac, *mcr = &sha_hmac;
PyObject *rc = 0;
static const char *const kwlist[] = { "key", "seed", "lmac", "rmac", 0 };
const gcmac *mcl = &md5_hmac, *mcr = &sha_hmac;
PyObject *rc = 0;
static const char *const kwlist[] = { "key", "seed", "lmac", "rmac", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "
s#s#
|O&O&:new", KWLIST,
-
&k, &ksz, &s, &ssz
,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "
O&O&
|O&O&:new", KWLIST,
+
convbin, &k, convbin, &s
,
convgcmac, &mcl, convgcmac, &mcr))
goto end;
convgcmac, &mcl, convgcmac, &mcr))
goto end;
- rc = grand_dopywrap(ty, tlsprf_rand(mcl, mcr, k, ksz, s, ssz), f_freeme);
+ rc = grand_dopywrap(ty, tlsprf_rand(mcl, mcr, k.p, k.sz, s.p, s.sz),
+ f_freeme);
end:
return (rc);
}
end:
return (rc);
}
-static PyTypeObject sslprf_pytype_skel = {
- Py
Object_HEAD_INIT(0) 0,
/* Header */
+static
const
PyTypeObject sslprf_pytype_skel = {
+ Py
VarObject_HEAD_INIT(0, 0)
/* Header */
"SSLRand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
"SSLRand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
@@
-1038,8
+1015,8
@@
static PyTypeObject sslprf_pytype_skel = {
0 /* @tp_is_gc@ */
};
0 /* @tp_is_gc@ */
};
-static PyTypeObject tlsdx_pytype_skel = {
- Py
Object_HEAD_INIT(0) 0,
/* Header */
+static
const
PyTypeObject tlsdx_pytype_skel = {
+ Py
VarObject_HEAD_INIT(0, 0)
/* Header */
"TLSDataExpansion", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
"TLSDataExpansion", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
@@
-1087,8
+1064,8
@@
static PyTypeObject tlsdx_pytype_skel = {
0 /* @tp_is_gc@ */
};
0 /* @tp_is_gc@ */
};
-static PyTypeObject tlsprf_pytype_skel = {
- Py
Object_HEAD_INIT(0) 0,
/* Header */
+static
const
PyTypeObject tlsprf_pytype_skel = {
+ Py
VarObject_HEAD_INIT(0, 0)
/* Header */
"TLSPRF", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
"TLSPRF", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
@@
-1140,14
+1117,13
@@
static PyTypeObject tlsprf_pytype_skel = {
static PyObject *dsarand_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
{
static PyObject *dsarand_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
{
- char *p;
- Py_ssize_t sz;
+ struct bin in;
PyObject *rc = 0;
static const char *const kwlist[] = { "seed", 0 };
PyObject *rc = 0;
static const char *const kwlist[] = { "seed", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "
s#:new", KWLIST, &p, &sz
))
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "
O&:new", KWLIST, convbin, &in
))
goto end;
goto end;
- rc = grand_dopywrap(ty, dsarand_create(
p,
sz), f_freeme);
+ rc = grand_dopywrap(ty, dsarand_create(
in.p, in.
sz), f_freeme);
end:
return (rc);
}
end:
return (rc);
}
@@
-1157,19
+1133,19
@@
static PyObject *drget_seed(PyObject *me, void *hunoz)
grand *r = GRAND_R(me);
int n = r->ops->misc(r, DSARAND_SEEDSZ);
PyObject *rc = bytestring_pywrap(0, n);
grand *r = GRAND_R(me);
int n = r->ops->misc(r, DSARAND_SEEDSZ);
PyObject *rc = bytestring_pywrap(0, n);
- r->ops->misc(r, DSARAND_GETSEED,
PyString_AS_STRING
(rc));
+ r->ops->misc(r, DSARAND_GETSEED,
BIN_PTR
(rc));
return (rc);
}
return (rc);
}
-static PyGetSetDef dsarand_pygetset[] = {
+static
const
PyGetSetDef dsarand_pygetset[] = {
#define GETSETNAME(op, name) dr##op##_##name
GET (seed, "R.seed -> current generator seed")
#undef GETSETNAME
{ 0 }
};
#define GETSETNAME(op, name) dr##op##_##name
GET (seed, "R.seed -> current generator seed")
#undef GETSETNAME
{ 0 }
};
-static PyTypeObject dsarand_pytype_skel = {
- Py
Object_HEAD_INIT(0) 0,
/* Header */
+static
const
PyTypeObject dsarand_pytype_skel = {
+ Py
VarObject_HEAD_INIT(0, 0)
/* Header */
"DSARand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
"DSARand", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
@@
-1203,7
+1179,7
@@
static PyTypeObject dsarand_pytype_skel = {
0, /* @tp_iternext@ */
0, /* @tp_methods@ */
0, /* @tp_members@ */
0, /* @tp_iternext@ */
0, /* @tp_methods@ */
0, /* @tp_members@ */
-
dsarand_pygetset,
/* @tp_getset@ */
+
PYGETSET(dsarand),
/* @tp_getset@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
0, /* @tp_descr_get@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
0, /* @tp_descr_get@ */
@@
-1234,11
+1210,8
@@
end:
return (rc);
}
return (rc);
}
-static PyObject *bbsmeth_step(PyObject *me, PyObject *arg)
-{
- grand *r = GRAND_R(me); if (!PyArg_ParseTuple(arg, ":step")) return (0);
- r->ops->misc(r, BBS_STEP); RETURN_ME;
-}
+static PyObject *bbsmeth_step(PyObject *me)
+ { grand *r = GRAND_R(me); r->ops->misc(r, BBS_STEP); RETURN_ME; }
static PyObject *bbsmeth_bits(PyObject *me, PyObject *arg)
{
static PyObject *bbsmeth_bits(PyObject *me, PyObject *arg)
{
@@
-1250,11
+1223,8
@@
end:
return (0);
}
return (0);
}
-static PyObject *bbsmeth_wrap(PyObject *me, PyObject *arg)
-{
- grand *r = GRAND_R(me); if (!PyArg_ParseTuple(arg, ":wrap")) return (0);
- r->ops->misc(r, BBS_WRAP); RETURN_ME;
-}
+static PyObject *bbsmeth_wrap(PyObject *me)
+ { grand *r = GRAND_R(me); r->ops->misc(r, BBS_WRAP); RETURN_ME; }
static PyObject *bbsget_n(PyObject *me, void *hunoz)
{
static PyObject *bbsget_n(PyObject *me, void *hunoz)
{
@@
-1282,16
+1252,16
@@
static PyObject *bbsget_stepsz(PyObject *me, void *hunoz)
return (PyInt_FromLong(r->ops->misc(r, BBS_STEPSZ)));
}
return (PyInt_FromLong(r->ops->misc(r, BBS_STEPSZ)));
}
-static PyMethodDef bbs_pymethods[] = {
+static
const
PyMethodDef bbs_pymethods[] = {
#define METHNAME(name) bbsmeth_##name
#define METHNAME(name) bbsmeth_##name
-
METH (step,
"R.step(): steps the generator (not useful)")
+
NAMETH(step,
"R.step(): steps the generator (not useful)")
METH (bits, "R.bits(N) -> W: returns N bits (<= 32) from the generator")
METH (bits, "R.bits(N) -> W: returns N bits (<= 32) from the generator")
-
METH (wrap,
"R.wrap(): flushes unused bits in internal buffer")
+
NAMETH(wrap,
"R.wrap(): flushes unused bits in internal buffer")
#undef METHNAME
{ 0 }
};
#undef METHNAME
{ 0 }
};
-static PyGetSetDef bbs_pygetset[] = {
+static
const
PyGetSetDef bbs_pygetset[] = {
#define GETSETNAME(op, name) bbs##op##_##name
GET (n, "R.n -> Blum modulus")
GETSET(x, "R.x -> current seed value")
#define GETSETNAME(op, name) bbs##op##_##name
GET (n, "R.n -> Blum modulus")
GETSET(x, "R.x -> current seed value")
@@
-1300,8
+1270,8
@@
static PyGetSetDef bbs_pygetset[] = {
{ 0 }
};
{ 0 }
};
-static PyTypeObject bbs_pytype_skel = {
- Py
Object_HEAD_INIT(0) 0,
/* Header */
+static
const
PyTypeObject bbs_pytype_skel = {
+ Py
VarObject_HEAD_INIT(0, 0)
/* Header */
"BlumBlumShub", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
"BlumBlumShub", /* @tp_name@ */
sizeof(grand_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
@@
-1333,9
+1303,9
@@
static PyTypeObject bbs_pytype_skel = {
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
0, /* @tp_iternext@ */
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
0, /* @tp_iternext@ */
-
bbs_pymethods,
/* @tp_methods@ */
+
PYMETHODS(bbs),
/* @tp_methods@ */
0, /* @tp_members@ */
0, /* @tp_members@ */
-
bbs_pygetset,
/* @tp_getset@ */
+
PYGETSET(bbs),
/* @tp_getset@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
0, /* @tp_descr_get@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
0, /* @tp_descr_get@ */
@@
-1381,8
+1351,7
@@
end:
return ((PyObject *)rc);
}
return ((PyObject *)rc);
}
-static PyObject *meth__BBSPriv_generate(PyObject *me,
- PyObject *arg, PyObject *kw)
+static PyObject *bpmeth_generate(PyObject *me, PyObject *arg, PyObject *kw)
{
bbs_priv bp = { 0 };
mp *x = MP_TWO;
{
bbs_priv bp = { 0 };
mp *x = MP_TWO;
@@
-1391,12
+1360,12
@@
static PyObject *meth__BBSPriv_generate(PyObject *me,
unsigned nbits, n = 0;
grand *r = &rand_global;
static const char *const kwlist[] =
unsigned nbits, n = 0;
grand *r = &rand_global;
static const char *const kwlist[] =
- { "
class", "
nbits", "event", "rng", "nsteps", "seed", 0 };
+ { "nbits", "event", "rng", "nsteps", "seed", 0 };
bbspriv_pyobj *rc = 0;
evt.exc = &exc;
bbspriv_pyobj *rc = 0;
evt.exc = &exc;
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "O
O
&|O&O&O&O&:generate", KWLIST,
-
&me,
convuint, &nbits, convpgev, &evt,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&|O&O&O&O&:generate", KWLIST,
+ convuint, &nbits, convpgev, &evt,
convgrand, &r, convuint, &n, convmp, &x))
goto end;
if (bbs_gen(&bp, nbits, r, n, evt.ev.proc, evt.ev.ctx))
convgrand, &r, convuint, &n, convmp, &x))
goto end;
if (bbs_gen(&bp, nbits, r, n, evt.ev.proc, evt.ev.ctx))
@@
-1444,15
+1413,17
@@
static PyObject *bpget_p(PyObject *me, void *hunoz)
static PyObject *bpget_q(PyObject *me, void *hunoz)
{ return (mp_pywrap(MP_COPY(BBSPRIV_BP(me)->q))); }
static PyObject *bpget_q(PyObject *me, void *hunoz)
{ return (mp_pywrap(MP_COPY(BBSPRIV_BP(me)->q))); }
-static PyMethodDef bbspriv_pymethods[] = {
+static
const
PyMethodDef bbspriv_pymethods[] = {
#define METHNAME(name) bpmeth_##name
METH (ff, "R.ff(N): fast-forward N places")
METH (rew, "R.rew(N): rewind N places")
#define METHNAME(name) bpmeth_##name
METH (ff, "R.ff(N): fast-forward N places")
METH (rew, "R.rew(N): rewind N places")
+ KWSMTH(generate, "generate(NBITS, [event = pgen_nullev], "
+ "[rng = rand], [nsteps = 0], [seed = 2]) -> R")
#undef METHNAME
{ 0 }
};
#undef METHNAME
{ 0 }
};
-static PyGetSetDef bbspriv_pygetset[] = {
+static
const
PyGetSetDef bbspriv_pygetset[] = {
#define GETSETNAME(op, name) bp##op##_##name
GET (n, "R.n -> Blum modulus")
GET (p, "R.p -> one of the factors of the modulus")
#define GETSETNAME(op, name) bp##op##_##name
GET (n, "R.n -> Blum modulus")
GET (p, "R.p -> one of the factors of the modulus")
@@
-1461,8
+1432,8
@@
static PyGetSetDef bbspriv_pygetset[] = {
{ 0 }
};
{ 0 }
};
-static PyTypeObject bbspriv_pytype_skel = {
- Py
Object_HEAD_INIT(0) 0,
/* Header */
+static
const
PyTypeObject bbspriv_pytype_skel = {
+ Py
VarObject_HEAD_INIT(0, 0)
/* Header */
"BBSPriv", /* @tp_name@ */
sizeof(bbspriv_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
"BBSPriv", /* @tp_name@ */
sizeof(bbspriv_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
@@
-1495,9
+1466,9
@@
static PyTypeObject bbspriv_pytype_skel = {
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
0, /* @tp_iternext@ */
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
0, /* @tp_iternext@ */
-
bbspriv_pymethods,
/* @tp_methods@ */
+
PYMETHODS(bbspriv),
/* @tp_methods@ */
0, /* @tp_members@ */
0, /* @tp_members@ */
-
bbspriv_pygetset,
/* @tp_getset@ */
+
PYGETSET(bbspriv),
/* @tp_getset@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
0, /* @tp_descr_get@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
0, /* @tp_descr_get@ */
@@
-1512,11
+1483,8
@@
static PyTypeObject bbspriv_pytype_skel = {
/*----- Global stuff ------------------------------------------------------*/
/*----- Global stuff ------------------------------------------------------*/
-static PyMethodDef methods[] = {
-#define METHNAME(name) meth_##name
- KWMETH(_BBSPriv_generate, "generate(NBITS, [event = pgen_nullev], "
- "[rng = rand], [nsteps = 0], [seed = 2]) -> R")
-#undef METHNAME
+static const struct nameval consts[] = {
+ CONST(RAND_IBITS),
{ 0 }
};
{ 0 }
};
@@
-1537,11
+1505,12
@@
void rand_pyinit(void)
INITTYPE(gclatinrand, gcrand);
rand_noisesrc(RAND_GLOBAL, &noise_source);
rand_seed(RAND_GLOBAL, 160);
INITTYPE(gclatinrand, gcrand);
rand_noisesrc(RAND_GLOBAL, &noise_source);
rand_seed(RAND_GLOBAL, 160);
- addmethods(methods);
}
}
-#define gccrand gccrand_info
-GEN(gccrands, crand)
+static const char *crand_namefn(const void *p)
+ { const gccrand_info *const *cls = p; return (*cls ? (*cls)->name : 0); }
+static PyObject *crand_valfn(const void *p)
+ { const gccrand_info *const *cls = p; return (gccrand_pywrap(*cls)); }
void rand_pyinsert(PyObject *mod)
{
void rand_pyinsert(PyObject *mod)
{
@@
-1559,9
+1528,11
@@
void rand_pyinsert(PyObject *mod)
INSERT("GCRand", gcrand_pytype);
INSERT("GCLatinRand", gclatinrand_pytype);
rand_pyobj = grand_pywrap(&rand_global, 0); Py_INCREF(rand_pyobj);
INSERT("GCRand", gcrand_pytype);
INSERT("GCLatinRand", gclatinrand_pytype);
rand_pyobj = grand_pywrap(&rand_global, 0); Py_INCREF(rand_pyobj);
- gccrands_dict = gccrands(); Py_INCREF(gccrands_dict);
- INSERT("gccrands", gccrands_dict);
+ gccrands_dict = make_algtab(gcrandtab, sizeof(gccrand_info *),
+ crand_namefn, crand_valfn);
+ INSERT("gccrands", gccrands_dict); Py_INCREF(gccrands_dict);
INSERT("rand", rand_pyobj);
INSERT("rand", rand_pyobj);
+ setconstants(mod, consts);
}
/*----- That's all, folks -------------------------------------------------*/
}
/*----- That's all, folks -------------------------------------------------*/