File: OpenSSL/crypto/crypto.c
Function: crypto_sign
Error: returning (PyObject*)NULL without setting an exception
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