/// <summary>
        /// Attempts authentication using the given credentials.
        /// </summary>
        /// <param name="enteredCredentials">Entered credentials.</param>
        public virtual AuthenticationResult Authenticate(TEnteredCredentials enteredCredentials)
        {
            if (enteredCredentials == null)
            {
                throw new ArgumentNullException(nameof(enteredCredentials));
            }

            var storedCredentials = CredentialsRepository.GetStoredCredentials(enteredCredentials);

            if (storedCredentials == null)
            {
                return(new AuthenticationResult(false, false));
            }

            var verified = CredentialsVerifier.Verify(enteredCredentials, storedCredentials);

            return(new AuthenticationResult(true, verified));
        }