X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/catacomb-python/blobdiff_plain/bc243788edd0e564df8b67d0750a238d978c954b..848ba392a415557f73bbca53e2dc350348f96849:/pubkey.c diff --git a/pubkey.c b/pubkey.c index 311152a..50fa78c 100644 --- a/pubkey.c +++ b/pubkey.c @@ -1118,6 +1118,24 @@ end: return (rc); } +/*----- X25519 ------------------------------------------------------------*/ + +static PyObject *meth_x25519(PyObject *me, PyObject *arg) +{ + const char *k, *p; + Py_ssize_t ksz, psz; + PyObject *rc = 0; + if (!PyArg_ParseTuple(arg, "s#s#:x25519", &k, &ksz, &p, &psz)) goto end; + if (ksz != X25519_KEYSZ) VALERR("bad key length"); + if (psz != X25519_PUBSZ) VALERR("bad public length"); + rc = bytestring_pywrap(0, X25519_OUTSZ); + x25519((octet *)PyString_AS_STRING(rc), + (const octet *)k, (const octet *)p); + return (rc); +end: + return (0); +} + /*----- Global stuff ------------------------------------------------------*/ static PyMethodDef methods[] = { @@ -1132,6 +1150,8 @@ static PyMethodDef methods[] = { KWMETH(_pss_decode, 0) KWMETH(_RSAPriv_generate, "\ generate(NBITS, [event = pgen_nullev, rng = rand, nsteps = 0]) -> R") + METH (x25519, "\ +x25519(KEY, PUBLIC) -> SHARED") #undef METHNAME { 0 } };