using System; using StellaOps.Cryptography; using Xunit; namespace StellaOps.Cryptography.Tests; public class Argon2idPasswordHasherTests { private readonly Argon2idPasswordHasher hasher = new(); [Fact] public void Hash_ProducesPhcEncodedString() { var options = new PasswordHashOptions(); var encoded = hasher.Hash("s3cret", options); Assert.StartsWith("$argon2id$", encoded, StringComparison.Ordinal); } [Fact] public void Verify_ReturnsTrue_ForCorrectPassword() { var options = new PasswordHashOptions(); var encoded = hasher.Hash("s3cret", options); Assert.True(hasher.Verify("s3cret", encoded)); Assert.False(hasher.Verify("wrong", encoded)); } [Fact] public void NeedsRehash_ReturnsTrue_WhenParametersChange() { var options = new PasswordHashOptions(); var encoded = hasher.Hash("s3cret", options); var updated = options with { Iterations = options.Iterations + 1 }; Assert.True(hasher.NeedsRehash(encoded, updated)); Assert.False(hasher.NeedsRehash(encoded, options)); } }