protected override async Task <SecureValueResult> NativeSetSecureValue(SetSecureValueRequestConfiguration setSecureValueRequestConfig, CancellationToken cancellationToken)
        {
            var currentActivity     = CrossFingerprint.CurrentActivity;
            var _fingerprintManager = FingerprintManagerCompat.From(currentActivity);

            var taskCompletionSource = new TaskCompletionSource <AuthenticationCallbackResult>();

            try
            {
                var sourceValue = System.Text.Encoding.UTF8.GetBytes(setSecureValueRequestConfig.Value);

                _fingerprintManager.Authenticate(CryptoObjectHelper.Instance.BuildCryptoObject(CipherMode.EncryptMode),
                                                 (int)FingerprintAuthenticationFlags.None,
                                                 new CancellationSignal(),
                                                 new AuthenticationCallback(sourceValue, taskCompletionSource),
                                                 null);

                var fragment = CrossFingerprint.CreateSecureValueDialogFragment();
                var result   = await fragment.ShowAsync(setSecureValueRequestConfig, taskCompletionSource, cancellationToken);

                if (result.Status == FingerprintAuthenticationResultStatus.Succeeded)
                {
                    var prefs = Application.Context.GetSharedPreferences(prefsName, FileCreationMode.Private);
                    var edit  = prefs.Edit();
                    edit.PutString($"{setSecureValueRequestConfig.Key}:iv", Convert.ToBase64String(result.IV));
                    edit.PutString($"{setSecureValueRequestConfig.Key}:value", Convert.ToBase64String(result.Result));
                    edit.Commit();
                }

                return(new SecureValueResult
                {
                    Status = result.Status,
                    // Pass through error info?
                });
            }
            catch (Exception ex)
            {
                return(new SecureValueResult
                {
                    Status = FingerprintAuthenticationResultStatus.UnknownError,
                    ErrorMessage = ex.Message
                });
            }
        }
        protected override Task <SecureValueResult> NativeSetSecureValue(SetSecureValueRequestConfiguration setSecureValueRequestConfig, CancellationToken cancellationToken)
        {
#if __MAC__
            return(Task.FromResult(new SecureValueResult
            {
                Status = FingerprintAuthenticationResultStatus.NotAvailable,
                ErrorMessage = "Not implemented for the current platform."
            }));
#else
            var key       = setSecureValueRequestConfig.Key.ToLower();
            var serviceId = setSecureValueRequestConfig.ServiceId.ToLower();

            var secureAccessControl = new SecAccessControl(
                SecAccessible.WhenPasscodeSetThisDeviceOnly,
                SecAccessControlCreateFlags.UserPresence);

            if (secureAccessControl == null)
            {
                return(Task.FromResult(new SecureValueResult
                {
                    Status = FingerprintAuthenticationResultStatus.UnknownError,
                    ErrorMessage = "Unable to create secure access control object."
                }));
            }

            var statusCode = SecKeyChain.Add(new SecRecord(SecKind.GenericPassword)
            {
                Service = serviceId,
                Label   = serviceId,
                Account = key,
                Generic = NSData.FromString(setSecureValueRequestConfig.Value, NSStringEncoding.UTF8),
                UseNoAuthenticationUI = true,
                AccessControl         = secureAccessControl
            });

            return(Task.FromResult(new SecureValueResult
            {
                Status = FingerprintAuthenticationResultStatus.Succeeded,
            }));
#endif
        }