public void Compare_DoesNotUseConstantTimeComparer() { var retv = default(bool); var xstr = default(string); var ystr = default(string); var func = new Func <string, string, bool>((x, y) => { xstr = x; ystr = y; return(retv); }); var mock = new MockConstantTimeComparer { EqualsProxy = func }; var algo = new PasswordAlgorithm { ConstantTimeComparer = mock, CompareInConstantTime = false }; var password = "******"; var computed = algo.Compute(password); retv = false; Assert.IsTrue(algo.Compare(password, computed)); Assert.IsNull(xstr); Assert.IsNull(ystr); }
public void Compare_UsesConstantTimeComparer() { var retv = default(bool); var xstr = default(string); var ystr = default(string); var func = new Func <string, string, bool>((x, y) => { xstr = x; ystr = y; return(retv); }); var mock = new MockConstantTimeComparer { EqualsProxy = func }; var algo = new PasswordAlgorithm { ConstantTimeComparer = mock, CompareInConstantTime = true }; foreach (var v in new[] { true, false }) { retv = v; var password = "******" + retv; var computed = algo.Compute(password); Assert.AreEqual(retv, algo.Compare(password, computed)); Assert.AreEqual(computed, xstr); Assert.AreEqual(computed, ystr); } }