fix: Use vectorized search for username-password validation. (#2152)
### Summary Optimizes account validation: ```cs | Method | Mean | Error | StdDev | |-------------------- |-----------:|----------:|----------:| | ForLoopUsernameSafe | 158.536 ns | 1.6247 ns | 1.5198 ns | | SVUsernameSafe | 2.859 ns | 0.0581 ns | 0.0796 ns | ```
This commit is contained in:
parent
fdf8c5cf23
commit
0ce2a62a76
3 changed files with 105 additions and 87 deletions
|
|
@ -17,30 +17,30 @@ public class PasswordProtectionTest
|
|||
[InlineData(typeof(HashAlgorithmPasswordProtection), "SHA2")]
|
||||
public void TestValidates(Type protectionType, string algorithmType)
|
||||
{
|
||||
IPasswordProtection passwordProtection;
|
||||
if (protectionType == typeof(HashAlgorithmPasswordProtection))
|
||||
IPasswordProtection passwordProtection;
|
||||
if (protectionType == typeof(HashAlgorithmPasswordProtection))
|
||||
{
|
||||
passwordProtection = algorithmType switch
|
||||
{
|
||||
passwordProtection = algorithmType switch
|
||||
{
|
||||
"SHA1" => HashAlgorithmPasswordProtection.SHA1Instance,
|
||||
"SHA2" => HashAlgorithmPasswordProtection.SHA2Instance,
|
||||
_ => HashAlgorithmPasswordProtection.MD5Instance,
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
passwordProtection = Activator.CreateInstance(protectionType) as IPasswordProtection;
|
||||
}
|
||||
|
||||
if (passwordProtection == null)
|
||||
{
|
||||
Assert.Fail($"{protectionType.Name} is not an IPasswordProtection.");
|
||||
}
|
||||
|
||||
var encryptedPassword = passwordProtection.EncryptPassword(plainPassword);
|
||||
|
||||
Assert.True(passwordProtection.ValidatePassword(encryptedPassword, plainPassword));
|
||||
"SHA1" => HashAlgorithmPasswordProtection.SHA1Instance,
|
||||
"SHA2" => HashAlgorithmPasswordProtection.SHA2Instance,
|
||||
_ => HashAlgorithmPasswordProtection.MD5Instance,
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
passwordProtection = Activator.CreateInstance(protectionType) as IPasswordProtection;
|
||||
}
|
||||
|
||||
if (passwordProtection == null)
|
||||
{
|
||||
Assert.Fail($"{protectionType.Name} is not an IPasswordProtection.");
|
||||
}
|
||||
|
||||
var encryptedPassword = passwordProtection.EncryptPassword(plainPassword);
|
||||
|
||||
Assert.True(passwordProtection.ValidatePassword(encryptedPassword, plainPassword));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(typeof(Argon2PasswordProtection), null)]
|
||||
|
|
@ -50,28 +50,28 @@ public class PasswordProtectionTest
|
|||
[InlineData(typeof(HashAlgorithmPasswordProtection), "SHA2")]
|
||||
public void TestPasswordDoesNotValidate(Type protectionType, string algorithmType)
|
||||
{
|
||||
IPasswordProtection passwordProtection;
|
||||
if (protectionType == typeof(HashAlgorithmPasswordProtection))
|
||||
IPasswordProtection passwordProtection;
|
||||
if (protectionType == typeof(HashAlgorithmPasswordProtection))
|
||||
{
|
||||
passwordProtection = algorithmType switch
|
||||
{
|
||||
passwordProtection = algorithmType switch
|
||||
{
|
||||
"SHA1" => HashAlgorithmPasswordProtection.SHA1Instance,
|
||||
"SHA2" => HashAlgorithmPasswordProtection.SHA2Instance,
|
||||
_ => HashAlgorithmPasswordProtection.MD5Instance,
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
passwordProtection = Activator.CreateInstance(protectionType) as IPasswordProtection;
|
||||
}
|
||||
|
||||
if (passwordProtection == null)
|
||||
{
|
||||
Assert.Fail($"{protectionType.Name} is not an IPasswordProtection.");
|
||||
}
|
||||
|
||||
var encryptedPassword = passwordProtection.EncryptPassword(plainPassword);
|
||||
|
||||
Assert.False(passwordProtection.ValidatePassword(encryptedPassword, "Not the same password"));
|
||||
"SHA1" => HashAlgorithmPasswordProtection.SHA1Instance,
|
||||
"SHA2" => HashAlgorithmPasswordProtection.SHA2Instance,
|
||||
_ => HashAlgorithmPasswordProtection.MD5Instance,
|
||||
};
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
passwordProtection = Activator.CreateInstance(protectionType) as IPasswordProtection;
|
||||
}
|
||||
|
||||
if (passwordProtection == null)
|
||||
{
|
||||
Assert.Fail($"{protectionType.Name} is not an IPasswordProtection.");
|
||||
}
|
||||
|
||||
var encryptedPassword = passwordProtection.EncryptPassword(plainPassword);
|
||||
|
||||
Assert.False(passwordProtection.ValidatePassword(encryptedPassword, "Not the same password"));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue