Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
            }
        }