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()); } } }