diff --git a/OpenSSL/crypto/revoked.c b/OpenSSL/crypto/revoked.c
index 08c1542..fd9a545 100644
--- a/OpenSSL/crypto/revoked.c
+++ b/OpenSSL/crypto/revoked.c
@@ -228,10 +228,16 @@
 @return: None\n\
 ";
 
+#ifdef PY3
+#define FMT(name) ("y" name)
+#else
+#define FMT(name) ("s" name)
+#endif
+
 static PyObject*
 crypto_Revoked_set_rev_date(crypto_RevokedObj *self, PyObject *args) {
     return _set_asn1_time(
-        "s:set_rev_date", self->revoked->revocationDate, args);
+        FMT(":set_rev_date"), self->revoked->revocationDate, args);
 }
 
 /* The integer is converted to an upper-case hex string
@@ -307,7 +313,7 @@
     BIGNUM *serial = NULL;
     ASN1_INTEGER *tmpser = NULL;
 
-    if (!PyArg_ParseTupleAndKeywords(args, keywds, "s:set_serial",
+    if (!PyArg_ParseTupleAndKeywords(args, keywds, FMT(":set_serial"),
                                      kwlist, &hex_str)) {
         return NULL;
     }
diff --git a/OpenSSL/test/test_crypto.py b/OpenSSL/test/test_crypto.py
index 7c54d03..8386d2c 100644
--- a/OpenSSL/test/test_crypto.py
+++ b/OpenSSL/test/test_crypto.py
@@ -2070,11 +2070,11 @@
         that it is empty.
         """
         revoked = Revoked()
-        self.assertTrue( isinstance(revoked, Revoked) )
-        self.assertEqual( type(revoked), Revoked )
-        self.assertEqual( revoked.get_serial(), '00' )
-        self.assertEqual( revoked.get_rev_date(), None )
-        self.assertEqual( revoked.get_reason(), None )
+        self.assertTrue(isinstance(revoked, Revoked))
+        self.assertEquals(type(revoked), Revoked)
+        self.assertEquals(revoked.get_serial(), b('00'))
+        self.assertEquals(revoked.get_rev_date(), None)
+        self.assertEquals(revoked.get_reason(), None)
 
 
     def test_construction_wrong_args(self):
@@ -2094,16 +2094,16 @@
         with grace.
         """
         revoked = Revoked()
-        ret = revoked.set_serial('10b')
-        self.assertEqual( ret, None )
+        ret = revoked.set_serial(b('10b'))
+        self.assertEquals(ret, None)
         ser = revoked.get_serial()
-        self.assertEqual( ser, '010B' )
+        self.assertEquals(ser, b('010B'))
 
-        revoked.set_serial('31ppp')  # a type error would be nice
+        revoked.set_serial(b('31ppp'))  # a type error would be nice
         ser = revoked.get_serial()
-        self.assertEqual( ser, '31' )
+        self.assertEquals(ser, b('31'))
 
-        self.assertRaises(ValueError, revoked.set_serial, 'pqrst')
+        self.assertRaises(ValueError, revoked.set_serial, b('pqrst'))
         self.assertRaises(TypeError, revoked.set_serial, 100)
         self.assertRaises(TypeError, revoked.get_serial, 1)
         self.assertRaises(TypeError, revoked.get_serial, None)
@@ -2118,13 +2118,13 @@
         """
         revoked = Revoked()
         date = revoked.get_rev_date()
-        self.assertEqual( date, None )
+        self.assertEquals(date, None)
 
-        now = datetime.now().strftime("%Y%m%d%H%M%SZ")
+        now = b(datetime.now().strftime("%Y%m%d%H%M%SZ"))
         ret = revoked.set_rev_date(now)
-        self.assertEqual( ret, None )
+        self.assertEqual(ret, None)
         date = revoked.get_rev_date()
-        self.assertEqual( date, now )
+        self.assertEqual(date, now)
 
 
     def test_reason(self):
@@ -2135,12 +2135,13 @@
         """
         revoked = Revoked()
         for r in revoked.all_reasons():
-            for x in xrange(2):
+            for x in range(2):
                 ret = revoked.set_reason(r)
-                self.assertEqual( ret, None )
+                self.assertEquals(ret, None)
                 reason = revoked.get_reason()
-                self.assertEqual( reason.lower().replace(' ',''),
-                                       r.lower().replace(' ','') )
+                self.assertEquals(
+                    reason.lower().replace(b(' '), b('')),
+                    r.lower().replace(b(' '), b('')))
                 r = reason # again with the resp of get
 
         revoked.set_reason(None)
