static PyObject *gchget_bufsz(PyObject *me, void *hunoz)
{ return (PyInt_FromLong(GCHASH_CH(me)->bufsz)); }
+static PyObject *ghmeth_copy(PyObject *me, PyObject *arg)
+{
+ if (!PyArg_ParseTuple(arg, ":copy")) return (0);
+ return (ghash_pywrap((PyObject *)me->ob_type, GH_COPY(GHASH_H(me))));
+}
+
static PyObject *ghmeth_hash(PyObject *me, PyObject *arg)
{
char *p;
static PyMethodDef ghash_pymethods[] = {
#define METHNAME(name) ghmeth_##name
+ METH (copy, "H.copy() -> HH")
METH (hash, "H.hash(M)")
#define METHU_(n, W, w) METH(hashu##w, "H.hashu" #w "(WORD)")
DOUINTCONV(METHU_)
return ((PyObject *)rc);
}
+static PyObject *kxvikmeth_copy(PyObject *me, PyObject *arg)
+{
+ kxvik_pyobj *k = (kxvik_pyobj *)me, *rc = 0;
+ if (!PyArg_ParseTuple(arg, ":copy")) goto end;
+ rc = (kxvik_pyobj *)k->ob_type->tp_alloc(k->ob_type, 0);
+ rc->s = k->s; rc->n = k->n;
+end:
+ return ((PyObject *)rc);
+}
+
static PyObject *kxvikmeth_mix(PyObject *me, PyObject *arg)
{
kxvik_pyobj *k = (kxvik_pyobj *)me;
static PyMethodDef kxvik_pymethods[] = {
#define METHNAME(func) kxvikmeth_##func
+ METH (copy, "KECCAK.copy() -> KECCAK'")
METH (mix, "KECCAK.mix(DATA)")
METH (extract, "KECCAK.extract(NOCTETS)")
METH (step, "KECCAK.step()")