docs: def sign(self, req, issuer_cert_key, validity_period, digest="sha256",
               extensions=None, serial=0):
          """
          Generate a certificate given a certificate request.
  
          Arguments: req         - Certificate request to use
                     issuer_cert - The certificate of the issuer
                     issuer_key  - The private key of the issuer
                     not_before  - Timestamp (relative to now) when the
                                   certificate starts being valid
                     not_after   - Timestamp (relative to now) when the
                                   certificate stops being valid
                     digest      - Digest method to use for signing,
                                   default is sha256
          Returns:   The signed certificate in an X509 object
          """
  
          issuer_cert, issuer_key = issuer_cert_key
          not_before, not_after = validity_period
          cert = crypto.X509()
          cert.set_serial_number(serial)
          cert.gmtime_adj_notBefore(not_before)
          cert.gmtime_adj_notAfter(not_after)
          cert.set_issuer(issuer_cert.get_subject())
          cert.set_subject(req.get_subject())
          cert.set_pubkey(req.get_pubkey())
  
          if extensions:
              for ext in extensions:
                  if callable(ext):
                      ext = ext(cert)
                  cert.add_extensions([ext])
  
          cert.sign(issuer_key, digest)
  
          return cert