code: def encrypt(self, key, iv="", cek="", **kwargs):
          
          _msg = as_bytes(self.msg)
  
          _args = self._dict
          try:
              _args["kid"] = kwargs["kid"]
          except KeyError:
              pass
  
          jwe = JWEnc(**_args)
  
          # If no iv and cek are given generate them
          iv = self._generate_iv(self["enc"], iv)
          cek = self._generate_key(self["enc"], cek)
          if isinstance(key, SYMKey):
              try:
                  kek = key.key.encode('utf8')
              except AttributeError:
                  kek = key.key
          elif isinstance(key, bytes):
              kek = key
          else:
              kek = intarr2str(key)
  
          # The iv for this function must be 64 bit
          # Which is certainly different from the one above
          jek = aes_key_wrap(kek, cek, default_backend())
  
          _enc = self["enc"]
          _auth_data = jwe.b64_encode_header()
          ctxt, tag, cek = self.enc_setup(_enc, _msg, auth_data=_auth_data,
                                          key=cek, iv=iv)
          return jwe.pack(parts=[jek, iv, ctxt, tag])
docs: Produces a JWE as defined in RFC7516 using symmetric keys
  
          :param key: Shared symmetric key
          :param iv: Initialization vector
          :param cek: Content master key
          :param kwargs: Extra keyword arguments, just ignore for now.
          :return: