Authenticate a tag with a *password*.

        A tag that was once protected with a password requires
        authentication before write, potentially also read, operations
        may be performed. The *password* must be the same as the
        password provided to :meth:`protect`. The return value
        indicates authentication success with :const:`True` or
        :const:`False`. For a tag that does not support authentication
        the return value is :const:`None`.

def authenticate(self, password):
        """Authenticate a tag with a *password*.

        A tag that was once protected with a password requires
        authentication before write, potentially also read, operations
        may be performed. The *password* must be the same as the
        password provided to :meth:`protect`. The return value
        indicates authentication success with :const:`True` or
        :const:`False`. For a tag that does not support authentication
        the return value is :const:`None`.

        """
        if hasattr(self, "_authenticate"):
            args = "password={0!r}".format(password)
            log.debug("authenticate({0})".format(args))
            self._authenticated = self._authenticate(password)
            if self._authenticated is True:
                self._ndef = None
            return self._authenticated
        else:
            log.error("this tag can not be authenticated with nfcpy")
            return None