X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/blobdiff_plain/c461c9b380b56a41399e5f540e4bb97cfd9ceffe..848ba392a415557f73bbca53e2dc350348f96849:/pubkey.c diff --git a/pubkey.c b/pubkey.c index 4c4eb1d..50fa78c 100644 --- a/pubkey.c +++ b/pubkey.c @@ -120,7 +120,7 @@ static PyObject *dsameth_sign(PyObject *me, PyObject *arg, PyObject *kw) { gdsa_sig s = GDSA_SIG_INIT; char *p; - int n; + Py_ssize_t n; mp *k = 0; PyObject *rc = 0; char *kwlist[] = { "msg", "k", 0 }; @@ -140,7 +140,7 @@ end: static PyObject *dsameth_verify(PyObject *me, PyObject *arg) { char *p; - int n; + Py_ssize_t n; gdsa_sig s = GDSA_SIG_INIT; PyObject *rc = 0; @@ -365,7 +365,7 @@ static PyObject *kcdsameth_sign(PyObject *me, PyObject *arg, PyObject *kw) { gkcdsa_sig s = GKCDSA_SIG_INIT; char *p; - int n; + Py_ssize_t n; mp *k = 0; PyObject *r = 0, *rc = 0; char *kwlist[] = { "msg", "k", 0 }; @@ -388,7 +388,7 @@ end: static PyObject *kcdsameth_verify(PyObject *me, PyObject *arg) { char *p; - int n, rn; + Py_ssize_t n, rn; gkcdsa_sig s = GKCDSA_SIG_INIT; PyObject *rc = 0; @@ -865,7 +865,7 @@ static PyObject *meth__p1crypt_encode(PyObject *me, { pkcs1 p1; char *m, *ep; - int msz, epsz; + Py_ssize_t msz, epsz; unsigned long nbits; PyObject *rc = 0; octet *b = 0; @@ -894,7 +894,7 @@ static PyObject *meth__p1crypt_decode(PyObject *me, { pkcs1 p1; char *ep; - int epsz; + Py_ssize_t epsz; unsigned long nbits; int n; PyObject *rc = 0; @@ -926,7 +926,7 @@ static PyObject *meth__p1sig_encode(PyObject *me, { pkcs1 p1; char *m, *ep; - int msz, epsz; + Py_ssize_t msz, epsz; unsigned long nbits; PyObject *rc = 0; octet *b = 0; @@ -955,7 +955,7 @@ static PyObject *meth__p1sig_decode(PyObject *me, { pkcs1 p1; char *ep; - int epsz; + Py_ssize_t epsz; unsigned long nbits; int n; PyObject *hukairz; @@ -988,7 +988,7 @@ static PyObject *meth__oaep_encode(PyObject *me, { oaep o; char *m, *ep; - int msz, epsz; + Py_ssize_t msz, epsz; unsigned long nbits; PyObject *rc = 0; octet *b = 0; @@ -1020,7 +1020,7 @@ static PyObject *meth__oaep_decode(PyObject *me, { oaep o; char *ep; - int epsz; + Py_ssize_t epsz; unsigned long nbits; int n; PyObject *rc = 0; @@ -1055,7 +1055,7 @@ static PyObject *meth__pss_encode(PyObject *me, { pss p; char *m; - int msz; + Py_ssize_t msz; unsigned long nbits; PyObject *rc = 0; octet *b = 0; @@ -1087,7 +1087,7 @@ static PyObject *meth__pss_decode(PyObject *me, { pss p; char *m; - int msz; + Py_ssize_t msz; unsigned long nbits; PyObject *rc = 0; octet *b = 0; @@ -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 } };