diff --git a/OpenSSL/crypto.py b/OpenSSL/crypto.py
index 2720095..8a0e6d7 100644
--- a/OpenSSL/crypto.py
+++ b/OpenSSL/crypto.py
@@ -1297,7 +1297,8 @@
             pyrev = Revoked.__new__(Revoked)
             pyrev._revoked = revoked_copy
             results.append(pyrev)
-        return tuple(results)
+        if results:
+            return tuple(results)
 
 
     def add_revoked(self, revoked):
@@ -1334,7 +1335,48 @@
 
         :return: :py:data:`str`
         """
+        if not isinstance(cert, X509):
+            raise TypeError("cert must be an X509 instance")
+        if not isinstance(key, PKey):
+            raise TypeError("key must be a PKey instance")
+        if not isinstance(type, int):
+            raise TypeError("type must be an integer")
 
+        bio = _api.BIO_new(_api.BIO_s_mem())
+        if bio == _api.NULL:
+            1/0
+
+        # A scratch time object to give different values to different CRL fields
+        sometime = _api.ASN1_TIME_new()
+        if sometime == _api.NULL:
+            1/0
+
+        _api.X509_gmtime_adj(sometime, 0)
+        _api.X509_CRL_set_lastUpdate(self._crl, sometime)
+
+        _api.X509_gmtime_adj(sometime, days * 24 * 60 * 60)
+        _api.X509_CRL_set_nextUpdate(self._crl, sometime)
+
+        _api.X509_CRL_set_issuer_name(self._crl, _api.X509_get_subject_name(cert._x509))
+
+        sign_result = _api.X509_CRL_sign(self._crl, key._pkey, _api.EVP_md5())
+        if not sign_result:
+            _raise_current_error()
+
+        if type == FILETYPE_PEM:
+            ret = _api.PEM_write_bio_X509_CRL(bio, self._crl)
+        elif type == FILETYPE_ASN1:
+            ret = _api.i2d_X509_CRL_bio(bio, self._crl)
+        elif type == FILETYPE_TEXT:
+            ret = _api.X509_CRL_print(bio, self._crl)
+        else:
+            raise ValueError(
+                "type argument must be FILETYPE_PEM, FILETYPE_ASN1, or FILETYPE_TEXT")
+
+        if not ret:
+            1/0
+
+        return _bio_to_string(bio)
 CRLType = CRL
 
 
@@ -1564,7 +1606,6 @@
     elif type == FILETYPE_ASN1:
         crl = _api.d2i_X509_CRL_bio(bio, _api.NULL)
     else:
-        1/0
         raise ValueError("type argument must be FILETYPE_PEM or FILETYPE_ASN1")
 
     if crl == _api.NULL:
