add X509ReqType.{set,get}_version
diff --git a/src/crypto/x509req.c b/src/crypto/x509req.c
index f367360..bb6385f 100644
--- a/src/crypto/x509req.c
+++ b/src/crypto/x509req.c
@@ -239,6 +239,56 @@
     return Py_None;
 }
 
+static char crypto_X509Req_set_version_doc[] = "\n\
+Set the version subfield (RFC 2459, section 4.1.2.1) of the certificate\n\
+request.\n\
+\n\
+Arguments: self - X509Req object\n\
+           args - The Python argument tuple, should be:\n\
+             version - The version number\n\
+Returns:   None\n\
+";
+
+static PyObject *
+crypto_X509Req_set_version(crypto_X509ReqObj *self, PyObject *args)
+{
+    long version;
+
+    if (!PyArg_ParseTuple(args, "l:set_version", &version)) {
+        return NULL;
+    }
+
+    if (!X509_REQ_set_version(self->x509_req, version)) {
+        return NULL;
+    }
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+static char crypto_X509Req_get_version_doc[] = "\n\
+Get the version subfield (RFC 2459, section 4.1.2.1) of the certificate\n\
+request.\n\
+\n\
+Arguments: self - X509Req object\n\
+           args - The Python argument tuple, should be empty.\n\
+Returns:   an integer giving the value of the version subfield\n\
+";
+
+static PyObject *
+crypto_X509Req_get_version(crypto_X509ReqObj *self, PyObject *args)
+{
+    long version;
+
+    if (!PyArg_ParseTuple(args, ":get_version")) {
+        return NULL;
+    }
+
+    version = X509_REQ_get_version(self->x509_req);
+
+    return PyLong_FromLong(version);
+}
+
 /*
  * ADD_METHOD(name) expands to a correct PyMethodDef declaration
  *   {  'name', (PyCFunction)crypto_X509Req_name, METH_VARARGS }
@@ -254,6 +304,8 @@
     ADD_METHOD(sign),
     ADD_METHOD(verify),
     ADD_METHOD(add_extensions),
+    ADD_METHOD(set_version),
+    ADD_METHOD(get_version),
     { NULL, NULL }
 };
 #undef ADD_METHOD