663 static PyObject *
664 crypto_verify(PyObject *spam, PyObject *args) {
665 crypto_X509Obj *cert;
666 unsigned char *signature;
667 int sig_len;
668 char *data, *digest_name;
669 int err;
670 const EVP_MD *digest;
671 EVP_MD_CTX md_ctx;
672 EVP_PKEY *pkey;
673
674 #ifdef PY3
675 if (!PyArg_ParseTuple(args, "O!" BYTESTRING_FMT "#" BYTESTRING_FMT "s:verify", &crypto_X509_Type, &cert, &signature, &sig_len, &data, &digest_name)) {
676 #else
677 if (!PyArg_ParseTuple(args, "O!t#ss:verify", &crypto_X509_Type, &cert, &signature, &sig_len, &data, &digest_name)) {
when PyArg_ParseTuple() succeeds
taking False path
678 #endif
679 return NULL;
680 }
681
682 if ((digest = EVP_get_digestbyname(digest_name)) == NULL){
when treating unknown const struct EVP_MD * from OpenSSL/crypto/crypto.c:682 as non-NULL
taking False path
683 PyErr_SetString(PyExc_ValueError, "No such digest method");
684 return NULL;
685 }
686
687 pkey = X509_get_pubkey(cert->x509);
688 if (pkey == NULL) {
when treating unknown struct EVP_PKEY * from OpenSSL/crypto/crypto.c:687 as non-NULL
taking False path
689 PyErr_SetString(PyExc_ValueError, "No public key");
690 return NULL;
691 }
692
693 EVP_VerifyInit(&md_ctx, digest);
694 EVP_VerifyUpdate(&md_ctx, data, strlen((char*)data));
695 err = EVP_VerifyFinal(&md_ctx, signature, sig_len, pkey);
696 EVP_PKEY_free(pkey);
697
698 if (err != 1) {
when considering range: -0x80000000 <= value <= 0
taking True path
699 exception_from_error_queue(crypto_Error);
700 return NULL;
701 }
702
703 Py_INCREF(Py_None);
704 return Py_None;
705 }
returning (PyObject*)NULL without setting an exception
found 1 similar trace(s) to this