public static function signedUnserialize($data, $salt)
    {
        $data_exp = explode('|', (string) $data, 2);

        if (count($data_exp) != 2) {
            throw new SwatInvalidSerializedDataException(
                "Invalid signed serialized data '{$data}'.",
                0,
                $data
            );
        }

        $signature_data = $data_exp[0];
        $serialized_data = $data_exp[1];

        if (self::hash($serialized_data . (string) $salt) != $signature_data) {
            throw new SwatInvalidSerializedDataException(
                "Invalid signed serialized data '{$data}'.",
                0,
                $data
            );
        }

        return unserialize($serialized_data);
    }