def digest(self, elimseq=False, notrunc=False):
        """
        Obtain the fuzzy hash.

        This operation does not change the state at all. It reports the hash
        for the concatenation of the data previously fed using update().

        :return: The fuzzy hash
        :rtype: String
        :raises InternalError: If lib returns an internal error

        """

        if self._state == ffi.NULL:
            raise InternalError("State object is NULL")

        flags = (binding.lib.FUZZY_FLAG_ELIMSEQ if elimseq else 0) | \
                (binding.lib.FUZZY_FLAG_NOTRUNC if notrunc else 0)

        result = ffi.new("char[]", binding.lib.FUZZY_MAX_RESULT)
        if binding.lib.fuzzy_digest(self._state, result, flags) != 0:
            raise InternalError("Function returned an unexpected error code")

        return ffi.string(result).decode("ascii")
Obtain the fuzzy hash.

        This operation does not change the state at all. It reports the hash
        for the concatenation of the data previously fed using update().

        :return: The fuzzy hash
        :rtype: String
        :raises InternalError: If lib returns an internal error