def METHOD_NAME(self, skcs, proxy_key_user, ciphertext):
    policy_root_node = ciphertext['policy_str']
    k = proxy_key_user['k']
    k_prime = proxy_key_user['k_prime']
    c_prime = ciphertext['C_prime']
    c_prime_prime = ciphertext['C_prime_prime']
    c_attrs = ciphertext['c_attrs']
    k_attrs = proxy_key_user['k_attrs']
    policy = self.util.createPolicy(policy_root_node)
    attributes = proxy_key_user['k_attrs'].keys()
    pruned_list = self.util.prune(policy, attributes)
    if not pruned_list:
        return None
    z = self.util.getCoefficients(policy)
    # reconstitute the policy random secret (A) which was used to encrypt the message
    A = 1
    for i in pruned_list:
        attr_idx = i.getAttributeAndIndex()
        attr = i.getAttribute()
        A *= (pair(c_attrs[attr_idx][0], k_attrs[attr][0]) / pair(k_attrs[attr][1], c_attrs[attr_idx][1])) ** z[attr_idx]
    e_k_c_prime = pair(k, c_prime)
    denominator = (pair(k_prime, c_prime_prime) ** skcs) * A
    encrypted_element_for_user_pkenc_scheme = e_k_c_prime / denominator
    intermediate_value = {'C': ciphertext['C'],
                          'e_term': encrypted_element_for_user_pkenc_scheme}
    return intermediate_value