diff options
Diffstat (limited to 'TwoStepsAuthenticator.UnitTests')
3 files changed, 22 insertions, 26 deletions
diff --git a/TwoStepsAuthenticator.UnitTests/CounterAuthenticatorTests.cs b/TwoStepsAuthenticator.UnitTests/CounterAuthenticatorTests.cs index 3a81a90..f834178 100644 --- a/TwoStepsAuthenticator.UnitTests/CounterAuthenticatorTests.cs +++ b/TwoStepsAuthenticator.UnitTests/CounterAuthenticatorTests.cs @@ -9,27 +9,10 @@ namespace TwoStepsAuthenticator.UnitTests { [TestFixture] public class CounterAuthenticatorTests { - private MockUsedCodesManager mockUsedCodesManager { get; set; } - - [SetUp] - public void SetUp() { - this.mockUsedCodesManager = new MockUsedCodesManager(); - } - - [Test] - public void Uses_usedCodesManager() { - var authenticator = new CounterAuthenticator(usedCodeManager: mockUsedCodesManager); - var secret = Authenticator.GenerateKey(); - var code = authenticator.GetCode(secret, 42uL); - - authenticator.CheckCode(secret, code, 42uL); - Assert.AreEqual(mockUsedCodesManager.LastChallenge, 42uL); - Assert.AreEqual(mockUsedCodesManager.LastCode, code); - } [Test] public void CreateKey() { - var authenticator = new CounterAuthenticator(usedCodeManager: mockUsedCodesManager); + var authenticator = new CounterAuthenticator(); var secret = Authenticator.GenerateKey(); var code = authenticator.GetCode(secret, 0uL); @@ -48,7 +31,7 @@ namespace TwoStepsAuthenticator.UnitTests { [TestCase("12345678901234567890", 8uL, "399871")] [TestCase("12345678901234567890", 9uL, "520489")] public void VerifyKeys(string secret, ulong counter, string code) { - var authenticator = new CounterAuthenticator(usedCodeManager: mockUsedCodesManager); + var authenticator = new CounterAuthenticator(); var base32Secret = Base32Encoding.ToString(Encoding.ASCII.GetBytes(secret)); Assert.IsTrue(authenticator.CheckCode(base32Secret, code, counter)); @@ -57,7 +40,7 @@ namespace TwoStepsAuthenticator.UnitTests { [Test] public void VerifyUsedCounter() { - var authenticator = new CounterAuthenticator(usedCodeManager: mockUsedCodesManager); + var authenticator = new CounterAuthenticator(); // Test Values from http://www.ietf.org/rfc/rfc4226.txt - Appendix D var base32Secret = Base32Encoding.ToString(Encoding.ASCII.GetBytes("12345678901234567890")); diff --git a/TwoStepsAuthenticator.UnitTests/TimeAuthenticatorTests.cs b/TwoStepsAuthenticator.UnitTests/TimeAuthenticatorTests.cs index 1a1ffc6..bc2f364 100644 --- a/TwoStepsAuthenticator.UnitTests/TimeAuthenticatorTests.cs +++ b/TwoStepsAuthenticator.UnitTests/TimeAuthenticatorTests.cs @@ -32,10 +32,23 @@ namespace TwoStepsAuthenticator.UnitTests { var code = authenticator.GetCode(secret); authenticator.CheckCode(secret, code); + Assert.AreEqual(mockUsedCodesManager.LastChallenge, 0uL); Assert.AreEqual(mockUsedCodesManager.LastCode, code); } + [Test] + public void Prevent_code_reuse() { + var date = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + var usedCodesManager = new UsedCodesManager(); + var authenticator = new TimeAuthenticator(() => date, usedCodeManager: usedCodesManager); + var secret = Authenticator.GenerateKey(); + var code = authenticator.GetCode(secret); + + Assert.IsTrue(authenticator.CheckCode(secret, code)); + Assert.IsFalse(authenticator.CheckCode(secret, code)); + } + // Test Vectors from http://tools.ietf.org/html/rfc6238#appendix-B have all length 8. We want a length of 6. // This Test Vectors are from a Ruby implementation. They work with the Google Authentificator app. [TestCase("DRMK64PPMMC7TDZF", "2013-12-04 18:33:01 +0100", "661188")] diff --git a/TwoStepsAuthenticator.UnitTests/UsedCodesManagerTests.cs b/TwoStepsAuthenticator.UnitTests/UsedCodesManagerTests.cs index 1138f54..7b39650 100644 --- a/TwoStepsAuthenticator.UnitTests/UsedCodesManagerTests.cs +++ b/TwoStepsAuthenticator.UnitTests/UsedCodesManagerTests.cs @@ -14,23 +14,23 @@ namespace TwoStepsAuthenticator.UnitTests { public void Can_add_codes() { var manager = new UsedCodesManager(); - Assert.IsFalse(manager.IsCodeUsed(42uL, "def")); - manager.AddCode(42uL, "def"); - Assert.IsTrue(manager.IsCodeUsed(42uL, "def")); + Assert.IsFalse(manager.IsCodeUsed(42L, "def")); + manager.AddCode(42L, "def"); + Assert.IsTrue(manager.IsCodeUsed(42L, "def")); } } internal class MockUsedCodesManager : IUsedCodesManager { - public ulong? LastChallenge { get; private set; } + public long? LastChallenge { get; private set; } public string LastCode { get; private set; } - public void AddCode(ulong challenge, string code) { + public void AddCode(long challenge, string code) { this.LastChallenge = challenge; this.LastCode = code; } - public bool IsCodeUsed(ulong challenge, string code) { + public bool IsCodeUsed(long challenge, string code) { return false; } } |