docs: 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")