chiark
/
gitweb
/
~mdw
/
catacomb-python
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
963e181
)
algorithms.c: Support the new 16-bit key-size descriptors.
author
Mark Wooding
<mdw@distorted.org.uk>
Thu, 11 May 2017 09:42:15 +0000
(10:42 +0100)
committer
Mark Wooding
<mdw@distorted.org.uk>
Sat, 13 May 2017 15:50:39 +0000
(16:50 +0100)
algorithms.c
patch
|
blob
|
blame
|
history
diff --git
a/algorithms.c
b/algorithms.c
index 4753cf0c3060e623314bc45d7244a0342b208ca3..3a618d02a49308eea449b95e6708f83cd6006962 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,