Update bytes/str stuff in crypt_verify and crypto_sign
diff --git a/OpenSSL/crypto/crypto.c b/OpenSSL/crypto/crypto.c
index 87f3e75..a81773d 100644
--- a/OpenSSL/crypto/crypto.c
+++ b/OpenSSL/crypto/crypto.c
@@ -24,6 +24,18 @@
PyObject *crypto_Error;
+int crypto_byte_converter(PyObject *input, void* output) {
+ char **message = output;
+ if (input == Py_None) {
+ *message = NULL;
+ } else if (PyBytes_CheckExact(input)) {
+ *message = PyBytes_AsString(input);
+ } else {
+ return 0;
+ }
+ return 1;
+}
+
static int
global_passphrase_callback(char *buf, int len, int rwflag, void *cb_arg)
{
@@ -612,8 +624,9 @@
EVP_MD_CTX md_ctx;
unsigned char sig_buf[512];
- if (!PyArg_ParseTuple(args, "O!ss:sign", &crypto_PKey_Type,
- &pkey, &data, &digest_name)) {
+ if (!PyArg_ParseTuple(
+ args, "O!" BYTESTRING_FMT BYTESTRING_FMT ":sign", &crypto_PKey_Type,
+ &pkey, &data, &digest_name)) {
return NULL;
}
@@ -657,8 +670,11 @@
EVP_MD_CTX md_ctx;
EVP_PKEY *pkey;
- if (!PyArg_ParseTuple(args, "O!t#ss:verify", &crypto_X509_Type, &cert, &signature, &sig_len,
- &data, &digest_name)) {
+#ifdef PY3
+ if (!PyArg_ParseTuple(args, "O!y#yy:verify", &crypto_X509_Type, &cert, &signature, &sig_len, &data, &digest_name)) {
+#else
+ if (!PyArg_ParseTuple(args, "O!t#ss:verify", &crypto_X509_Type, &cert, &signature, &sig_len, &data, &digest_name)) {
+#endif
return NULL;
}