return (rc);
}
-/*----- X25519 ------------------------------------------------------------*/
+/*----- X25519 and related algorithms -------------------------------------*/
static PyObject *meth_x25519(PyObject *me, PyObject *arg)
{
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)
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, "\