616 static PyObject *
617 crypto_sign(PyObject *spam, PyObject *args) {
618 PyObject *buffer;
619 crypto_PKeyObj *pkey;
620 char *data = NULL;
621 char *digest_name;
622 int err;
623 unsigned int sig_len;
624 const EVP_MD *digest;
625 EVP_MD_CTX md_ctx;
626 unsigned char sig_buf[512];
627
628 if (!PyArg_ParseTuple(
when PyArg_ParseTuple() succeeds
taking False path
629 args, "O!" BYTESTRING_FMT "s:sign", &crypto_PKey_Type,
630 &pkey, &data, &digest_name)) {
631 return NULL;
632 }
633
634 if ((digest = EVP_get_digestbyname(digest_name)) == NULL) {
when treating unknown const struct EVP_MD * from OpenSSL/crypto/crypto.c:634 as non-NULL
taking False path
635 PyErr_SetString(PyExc_ValueError, "No such digest method");
636 return NULL;
637 }
638
639 EVP_SignInit(&md_ctx, digest);
640 EVP_SignUpdate(&md_ctx, data, strlen(data));
641 sig_len = sizeof(sig_buf);
642 err = EVP_SignFinal(&md_ctx, sig_buf, &sig_len, pkey->pkey);
643
644 if (err != 1) {
when considering range: -0x80000000 <= value <= 0
taking True path
645 exception_from_error_queue(crypto_Error);
646 return NULL;
647 }
648
649 buffer = PyBytes_FromStringAndSize((char*)sig_buf, sig_len);
650 return buffer;
651 }
returning (PyObject*)NULL without setting an exception
found 1 similar trace(s) to this