fix segfaults with X509.sign and X509Req.sign with certain PKeys
diff --git a/src/crypto/x509req.c b/src/crypto/x509req.c
index 7ad1a14..143e4aa 100644
--- a/src/crypto/x509req.c
+++ b/src/crypto/x509req.c
@@ -56,6 +56,7 @@
 {
     crypto_PKeyObj *crypto_PKey_New(EVP_PKEY *, int);
     EVP_PKEY *pkey;
+    crypto_PKeyObj *py_pkey;
 
     if (!PyArg_ParseTuple(args, ":get_pubkey"))
         return NULL;
@@ -66,7 +67,11 @@
         return NULL;
     }
 
-    return (PyObject *)crypto_PKey_New(pkey, 1);
+    py_pkey = crypto_PKey_New(pkey, 1);
+    if (py_pkey != NULL) {
+	py_pkey->only_public = 1;
+    }
+    return py_pkey;
 }
 
 static char crypto_X509Req_set_pubkey_doc[] = "\n\
@@ -117,6 +122,16 @@
 			  &digest_name))
         return NULL;
 
+    if (pkey->only_public) {
+	PyErr_SetString(PyExc_ValueError, "Key has only public part");
+	return NULL;
+    }
+
+    if (!pkey->initialized) {
+	PyErr_SetString(PyExc_ValueError, "Key is uninitialized");
+	return NULL;
+    }
+
     if ((digest = EVP_get_digestbyname(digest_name)) == NULL)
     {
         PyErr_SetString(PyExc_ValueError, "No such digest method");