code: def decrypt(self, token, key, cek=None):
          
          if not isinstance(token, JWEnc):
              jwe = JWEnc().unpack(token)
          else:
              jwe = token
  
          self.jwt = jwe.encrypted_key()
          jek = jwe.encrypted_key()
  
          _decrypt = RSAEncrypter(self.with_digest).decrypt
  
          _alg = jwe.headers["alg"]
          if cek:
              pass
          elif _alg == "RSA-OAEP":
              cek = _decrypt(jek, key, 'pkcs1_oaep_padding')
          elif _alg == "RSA-OAEP-256":
              cek = _decrypt(jek, key, 'pkcs1_oaep_256_padding')
          elif _alg == "RSA1_5":
              cek = _decrypt(jek, key)
          else:
              raise NotSupportedAlgorithm(_alg)
  
          self["cek"] = cek
          enc = jwe.headers["enc"]
          if enc not in SUPPORTED["enc"]:
              raise NotSupportedAlgorithm(enc)
  
          auth_data = jwe.b64_protected_header()
  
          msg = self._decrypt(enc, cek, jwe.ciphertext(),
                              auth_data=auth_data,
                              iv=jwe.initialization_vector(),
                              tag=jwe.authentication_tag())
  
          if "zip" in jwe.headers and jwe.headers["zip"] == "DEF":
              msg = zlib.decompress(msg)
  
          return msg
docs: Decrypts a JWT
  
          :param token: The JWT
          :param key: A key to use for decrypting
          :param cek: Ephemeral cipher key
          :return: The decrypted message