public async Task <byte[]> Sign(CancellationToken ct, string pairName, byte[] data)
        {
            if (this.Log().IsEnabled(LogLevel.Debug))
            {
                this.Log().Debug($"Signing a key pair (pair name: '{pairName}').");
            }

            pairName.Validation().NotNullOrEmpty(nameof(pairName));
            data.Validation().NotNull(nameof(data));

            await AssertIsEnabled(ct);

            using (await _asyncLock.LockAsync(ct))
            {
                var algorithm = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.EcdsaP256Sha256);

                var rawKeyPair = RetrieveKey(pairName).AsBuffer();

                var keyPair = algorithm.ImportKeyPair(rawKeyPair);

                using (var sha256 = SHA256.Create())
                {
                    var hash = sha256.ComputeHash(data);

                    var signature = await CryptographicEngine.SignHashedDataAsync(keyPair, hash.AsBuffer());

                    if (this.Log().IsEnabled(LogLevel.Information))
                    {
                        this.Log().Info($"Successfully signed a key pair (pair name: '{pairName}').");
                    }

                    return(signature.ToArray());
                }
            }
        }