def METHOD_NAME(self, params: dict, encrypted_layers: dict, fl_ctx: FLContext):
    n_params = len(params.keys())
    self.log_info(fl_ctx, f"Running HE Decryption algorithm {n_params} variables")
    if encrypted_layers is None:
        raise ValueError("encrypted_layers is None!")
    deserialize_nested_dict(params, context=self.tenseal_context)
    start_time = time.time()
    n_decrypted, n_total = 0, 0
    for i, param_name in enumerate(params.keys()):
        values = params[param_name]
        if encrypted_layers[param_name]:
            _n = values.size()
            n_total += _n
            if isinstance(values, CKKSVector):
                self.log_info(fl_ctx, f"Decrypting vars {i+1} of {n_params}: {param_name} with {_n} values")
                params[param_name] = values.decrypt(secret_key=self.tenseal_context.secret_key())
                n_decrypted += _n
            else:
                self.log_info(
                    fl_ctx,
                    f"{i} of {n_params}: {param_name} = {np.shape(params[param_name])} already decrypted (RAW)!",
                )
                raise ValueError("Should be encrypted at this point!")
        else:
            params[param_name] = values
    end_time = time.time()
    self.log_info(fl_ctx, f"Decryption time for {n_decrypted} of {n_total} params {end_time - start_time} seconds.")
    return params