async def create_link_secret(self, label: str) -> None:
        """
        Create link secret (a.k.a. master secret) used in proofs by HolderProver, if the
        current link secret does not already correspond to the input link secret label.

        Raise WalletState if wallet is closed, or any other IndyError causing failure
        to set link secret in wallet.

        :param label: label for link secret; indy-sdk uses label to generate link secret
        """

        LOGGER.debug('Wallet.create_link_secret >>> label: %s', label)

        if not self.handle:
            LOGGER.debug('Wallet.create_link_secret <!< Wallet %s is closed', self.name)
            raise WalletState('Wallet {} is closed'.format(self.name))

        try:
            await anoncreds.prover_create_master_secret(self.handle, label)
            await self._write_link_secret_label(label)
        except IndyError as x_indy:
            if x_indy.error_code == ErrorCode.AnoncredsMasterSecretDuplicateNameError:
                LOGGER.warning(
                    'Wallet %s link secret already current: abstaining from updating label record', self.name)
                await self._write_link_secret_label(label)
            else:
                LOGGER.debug(
                    'Wallet.create_link_secret <!< cannot create link secret for wallet %s, indy error code %s',
                    self.name,
                    x_indy.error_code)
                raise

        LOGGER.debug('Wallet.create_link_secret <<<')