chiark
/
gitweb
/
~mdw
/
catacomb-python
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
catacomb/__init__.py: Rename stupidly named arguments.
[catacomb-python]
/
algorithms.c
diff --git
a/algorithms.c
b/algorithms.c
index 2dc2dda0673f757af5361f7621962fd78f3b32ae..5703901fae129b68ea01e366884c6cbe94ff8e63 100644
(file)
--- a/
algorithms.c
+++ b/
algorithms.c
@@
-35,21
+35,31
@@
PyTypeObject *keysz_pytype;
PyTypeObject *keyszany_pytype, *keyszrange_pytype, *keyszset_pytype;
PyObject *sha_pyobj, *has160_pyobj;
PyTypeObject *keyszany_pytype, *keyszrange_pytype, *keyszset_pytype;
PyObject *sha_pyobj, *has160_pyobj;
+#ifndef KSZ_OPMASK
+# define KSZ_OPMASK 0x1f
+#endif
+
+#ifndef KSZ_16BIT
+# define KSZ_16BIT 0x20
+#endif
+
PyObject *keysz_pywrap(const octet *k)
{
PyObject *keysz_pywrap(const octet *k)
{
- switch (k[0]) {
+ unsigned op = *k++;
+#define ARG(i) (op&KSZ_16BIT ? LOAD16(k + 2*(i)) : k[i])
+ switch (op&KSZ_OPMASK) {
case KSZ_ANY: {
keysz_pyobj *o = PyObject_New(keysz_pyobj, keyszany_pytype);
case KSZ_ANY: {
keysz_pyobj *o = PyObject_New(keysz_pyobj, keyszany_pytype);
- o->dfl =
k[1]
;
+ o->dfl =
ARG(0)
;
return ((PyObject *)o);
} break;
case KSZ_RANGE: {
keyszrange_pyobj *o =
PyObject_New(keyszrange_pyobj, keyszrange_pytype);
return ((PyObject *)o);
} break;
case KSZ_RANGE: {
keyszrange_pyobj *o =
PyObject_New(keyszrange_pyobj, keyszrange_pytype);
- o->dfl =
k[1]
;
- o->min =
k[2]
;
- o->max =
k[3]
;
- o->mod =
k[4]
;
+ o->dfl =
ARG(0)
;
+ o->min =
ARG(1)
;
+ o->max =
ARG(2)
;
+ o->mod =
ARG(3)
;
if (!o->mod) o->mod = 1;
return ((PyObject *)o);
} break;
if (!o->mod) o->mod = 1;
return ((PyObject *)o);
} break;
@@
-57,16
+67,17
@@
PyObject *keysz_pywrap(const octet *k)
keyszset_pyobj *o =
PyObject_New(keyszset_pyobj, keyszset_pytype);
int i, n;
keyszset_pyobj *o =
PyObject_New(keyszset_pyobj, keyszset_pytype);
int i, n;
- o->dfl =
k[1]
;
- for (i = 0;
k[i + 1]
; i++) ;
+ o->dfl =
ARG(0)
;
+ for (i = 0;
ARG(i)
; i++) ;
n = i; o->set = PyTuple_New(n);
for (i = 0; i < n; i++)
n = i; o->set = PyTuple_New(n);
for (i = 0; i < n; i++)
- PyTuple_SET_ITEM(o->set, i, PyInt_FromLong(
k[i + 1]
));
+ PyTuple_SET_ITEM(o->set, i, PyInt_FromLong(
ARG(i)
));
return ((PyObject *)o);
} break;
default:
abort();
}
return ((PyObject *)o);
} break;
default:
abort();
}
+#undef ARG
}
static PyObject *keyszany_pynew(PyTypeObject *ty,
}
static PyObject *keyszany_pynew(PyTypeObject *ty,
@@
-566,6
+577,7
@@
static PyObject *gcmeth_setiv(PyObject *me, PyObject *arg)
Py_ssize_t sz;
if (!PyArg_ParseTuple(arg, "s#:setiv", &p, &sz)) goto end;
Py_ssize_t sz;
if (!PyArg_ParseTuple(arg, "s#:setiv", &p, &sz)) goto end;
+ if (!GCIPHER_C(me)->ops->setiv) VALERR("`setiv' not supported");
if (!GC_CLASS(GCIPHER_C(me))->blksz) VALERR("not a block cipher mode");
if (sz != GC_CLASS(GCIPHER_C(me))->blksz) VALERR("bad IV length");
GC_SETIV(GCIPHER_C(me), p);
if (!GC_CLASS(GCIPHER_C(me))->blksz) VALERR("not a block cipher mode");
if (sz != GC_CLASS(GCIPHER_C(me))->blksz) VALERR("bad IV length");
GC_SETIV(GCIPHER_C(me), p);
@@
-577,6
+589,7
@@
end:
static PyObject *gcmeth_bdry(PyObject *me, PyObject *arg)
{
if (!PyArg_ParseTuple(arg, ":bdry")) goto end;
static PyObject *gcmeth_bdry(PyObject *me, PyObject *arg)
{
if (!PyArg_ParseTuple(arg, ":bdry")) goto end;
+ if (!GCIPHER_C(me)->ops->bdry) VALERR("`bdry' not supported");
if (!GC_CLASS(GCIPHER_C(me))->blksz) VALERR("not a block cipher mode");
GC_BDRY(GCIPHER_C(me));
RETURN_ME;
if (!GC_CLASS(GCIPHER_C(me))->blksz) VALERR("not a block cipher mode");
GC_BDRY(GCIPHER_C(me));
RETURN_ME;
@@
-1335,6
+1348,13
@@
static PyObject *polymeth_flush(PyObject *me, PyObject *arg)
RETURN_ME;
}
RETURN_ME;
}
+static PyObject *polymeth_flushzero(PyObject *me, PyObject *arg)
+{
+ if (!PyArg_ParseTuple(arg, ":flushzero")) return (0);
+ poly1305_flushzero(P1305_CTX(me));
+ RETURN_ME;
+}
+
static PyObject *polymeth_concat(PyObject *me, PyObject *arg)
{
PyObject *pre, *suff;
static PyObject *polymeth_concat(PyObject *me, PyObject *arg)
{
PyObject *pre, *suff;
@@
-1385,6
+1405,7
@@
static PyMethodDef poly1305hash_pymethods[] = {
#undef METHBUF_
METH (hashstrz, "P.hashstrz(STRING)")
METH (flush, "P.flush()")
#undef METHBUF_
METH (hashstrz, "P.hashstrz(STRING)")
METH (flush, "P.flush()")
+ METH (flushzero, "P.flushzero()")
METH (concat, "P.concat(PREFIX, SUFFIX)")
METH (done, "P.done() -> TAG")
#undef METHNAME
METH (concat, "P.concat(PREFIX, SUFFIX)")
METH (done, "P.done() -> TAG")
#undef METHNAME