+ static const char *const kwlist[] = { "key", "i", 0 };
+ struct bin k;
+
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&O&:new", KWLIST,
+ convbin, &k, convu32, &i))
+ goto end;
+ if (keysz(k.sz, info->keysz) != k.sz) VALERR("bad key length");
+ return (grand_dopywrap(ty,
+ ((gcirand_func *)info->func)(k.p, k.sz, i),
+ f_freeme));
+end:
+ return (0);
+}
+
+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 };
+ struct bin k, n;
+
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&O&:new", KWLIST,
+ convbin, &k, convbin, &n))
+ goto end;
+ 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,
+ ((gcnrand_func *)info->func)(k.p, k.sz, n.p),
+ f_freeme));
+end:
+ return (0);
+}