X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/catacomb-python/blobdiff_plain/dafb2da44bb35c7057744ca820833cde6d43c534..eb8aa4ec8ea84c76dcf06d1647fce1b237cec313:/pubkey.c diff --git a/pubkey.c b/pubkey.c index 391db31..5292717 100644 --- a/pubkey.c +++ b/pubkey.c @@ -1118,7 +1118,7 @@ end: return (rc); } -/*----- X25519 ------------------------------------------------------------*/ +/*----- X25519 and related algorithms -------------------------------------*/ static PyObject *meth_x25519(PyObject *me, PyObject *arg) { @@ -1136,6 +1136,22 @@ end: return (0); } +static PyObject *meth_x448(PyObject *me, PyObject *arg) +{ + const char *k, *p; + Py_ssize_t ksz, psz; + PyObject *rc = 0; + if (!PyArg_ParseTuple(arg, "s#s#:x448", &k, &ksz, &p, &psz)) goto end; + if (ksz != X448_KEYSZ) VALERR("bad key length"); + if (psz != X448_PUBSZ) VALERR("bad public length"); + rc = bytestring_pywrap(0, X448_OUTSZ); + x448((octet *)PyString_AS_STRING(rc), + (const octet *)k, (const octet *)p); + return (rc); +end: + return (0); +} + /*----- Ed25519 -----------------------------------------------------------*/ static PyObject *meth_ed25519_pubkey(PyObject *me, PyObject *arg) @@ -1203,6 +1219,8 @@ static PyMethodDef methods[] = { generate(NBITS, [event = pgen_nullev, rng = rand, nsteps = 0]) -> R") METH (x25519, "\ x25519(KEY, PUBLIC) -> SHARED") + METH (x448, "\ +x448(KEY, PUBLIC) -> SHARED") METH (ed25519_pubkey, "\ ed25519_pubkey(KEY) -> PUBLIC") KWMETH(ed25519_sign, "\