Example #1
0
        /// <summary>
        /// Validates user input against stored input.
        /// </summary>
        /// <param name="input">Input to compare.</param>
        /// <param name="reference">Reference password.</param>
        /// <returns>Whether the passwords match.</returns>
        public async Task <bool> ValidatePasswordHashAsync(string input, byte[] reference)
        {
            var salt = reference.AsSpan(0, SaltSize).ToArray();

            var utfinput = AbstractionUtilities.UTF8.GetBytes(input);
            var output   = await this.KeyDeriver.DeriveHashAsync(utfinput, salt, PasswordSize);

            return(AbstractionUtilities.ConstantTimeEquals(output, reference.AsSpan(SaltSize), PasswordSize));
        }