diff options
Diffstat (limited to 'OATH.Net.Test/TimeBasedOtpGeneratorTests.cs')
-rw-r--r-- | OATH.Net.Test/TimeBasedOtpGeneratorTests.cs | 94 |
1 files changed, 75 insertions, 19 deletions
diff --git a/OATH.Net.Test/TimeBasedOtpGeneratorTests.cs b/OATH.Net.Test/TimeBasedOtpGeneratorTests.cs index 57d5127..ae9f0ad 100644 --- a/OATH.Net.Test/TimeBasedOtpGeneratorTests.cs +++ b/OATH.Net.Test/TimeBasedOtpGeneratorTests.cs @@ -16,7 +16,7 @@ namespace OathNet.Test public class TimeBasedOtpGeneratorTests { [Test] - public void GenerateOtp_returns_reference_results_with_bytearray_key() + public void GenerateOtp_without_hmac_returns_SHA1_with_bytearray_key() { var key = new byte[] { @@ -24,25 +24,69 @@ namespace OathNet.Test 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30 }; - this.TestAndAssert(key, 8, new DateTime(1970, 1, 1, 0, 0, 59, DateTimeKind.Utc), "94287082"); - this.TestAndAssert(key, 8, new DateTime(2005, 3, 18, 1, 58, 29, DateTimeKind.Utc), "07081804"); - this.TestAndAssert(key, 8, new DateTime(2005, 3, 18, 1, 58, 31, DateTimeKind.Utc), "14050471"); - this.TestAndAssert(key, 8, new DateTime(2009, 2, 13, 23, 31, 30, DateTimeKind.Utc), "89005924"); - this.TestAndAssert(key, 8, new DateTime(2033, 5, 18, 3, 33, 20, DateTimeKind.Utc), "69279037"); - this.TestAndAssert(key, 8, new DateTime(2603, 10, 11, 11, 33, 20, DateTimeKind.Utc), "65353130"); + DateTime dt; + dt = new DateTime(1970, 1, 1, 0, 0, 59, DateTimeKind.Utc); + this.TestSHA1AndAssert(key, 8, dt, this.GetOtpWithImplicitHMAC(key, 8, dt)); + dt = new DateTime(2005, 3, 18, 1, 58, 29, DateTimeKind.Utc); + this.TestSHA1AndAssert(key, 8, dt, this.GetOtpWithImplicitHMAC(key, 8, dt)); + dt = new DateTime(2005, 3, 18, 1, 58, 31, DateTimeKind.Utc); + this.TestSHA1AndAssert(key, 8, dt, this.GetOtpWithImplicitHMAC(key, 8, dt)); + dt = new DateTime(2009, 2, 13, 23, 31, 30, DateTimeKind.Utc); + this.TestSHA1AndAssert(key, 8, dt, this.GetOtpWithImplicitHMAC(key, 8, dt)); + dt = new DateTime(2033, 5, 18, 3, 33, 20, DateTimeKind.Utc); + this.TestSHA1AndAssert(key, 8, dt, this.GetOtpWithImplicitHMAC(key, 8, dt)); + dt = new DateTime(2603, 10, 11, 11, 33, 20, DateTimeKind.Utc); + this.TestSHA1AndAssert(key, 8, dt, this.GetOtpWithImplicitHMAC(key, 8, dt)); } [Test] - public void GenerateOtp_returns_reference_results_with_string_key() + public void GenerateOtp_without_hmac_returns_SHA1_with_string_key() { var key = "3132333435363738393031323334353637383930"; - this.TestAndAssert(key, 8, new DateTime(1970, 1, 1, 0, 0, 59, DateTimeKind.Utc), "94287082"); - this.TestAndAssert(key, 8, new DateTime(2005, 3, 18, 1, 58, 29, DateTimeKind.Utc), "07081804"); - this.TestAndAssert(key, 8, new DateTime(2005, 3, 18, 1, 58, 31, DateTimeKind.Utc), "14050471"); - this.TestAndAssert(key, 8, new DateTime(2009, 2, 13, 23, 31, 30, DateTimeKind.Utc), "89005924"); - this.TestAndAssert(key, 8, new DateTime(2033, 5, 18, 3, 33, 20, DateTimeKind.Utc), "69279037"); - this.TestAndAssert(key, 8, new DateTime(2603, 10, 11, 11, 33, 20, DateTimeKind.Utc), "65353130"); + DateTime dt; + dt = new DateTime(1970, 1, 1, 0, 0, 59, DateTimeKind.Utc); + this.TestSHA1AndAssert(key, 8, dt, this.GetOtpWithImplicitHMAC(key, 8, dt)); + dt = new DateTime(2005, 3, 18, 1, 58, 29, DateTimeKind.Utc); + this.TestSHA1AndAssert(key, 8, dt, this.GetOtpWithImplicitHMAC(key, 8, dt)); + dt = new DateTime(2005, 3, 18, 1, 58, 31, DateTimeKind.Utc); + this.TestSHA1AndAssert(key, 8, dt, this.GetOtpWithImplicitHMAC(key, 8, dt)); + dt = new DateTime(2009, 2, 13, 23, 31, 30, DateTimeKind.Utc); + this.TestSHA1AndAssert(key, 8, dt, this.GetOtpWithImplicitHMAC(key, 8, dt)); + dt = new DateTime(2033, 5, 18, 3, 33, 20, DateTimeKind.Utc); + this.TestSHA1AndAssert(key, 8, dt, this.GetOtpWithImplicitHMAC(key, 8, dt)); + dt = new DateTime(2603, 10, 11, 11, 33, 20, DateTimeKind.Utc); + this.TestSHA1AndAssert(key, 8, dt, this.GetOtpWithImplicitHMAC(key, 8, dt)); + } + + [Test] + public void GenerateOtp_returns_SHA1_reference_results_with_bytearray_key() + { + var key = new byte[] + { + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30 + }; + + this.TestSHA1AndAssert(key, 8, new DateTime(1970, 1, 1, 0, 0, 59, DateTimeKind.Utc), "94287082"); + this.TestSHA1AndAssert(key, 8, new DateTime(2005, 3, 18, 1, 58, 29, DateTimeKind.Utc), "07081804"); + this.TestSHA1AndAssert(key, 8, new DateTime(2005, 3, 18, 1, 58, 31, DateTimeKind.Utc), "14050471"); + this.TestSHA1AndAssert(key, 8, new DateTime(2009, 2, 13, 23, 31, 30, DateTimeKind.Utc), "89005924"); + this.TestSHA1AndAssert(key, 8, new DateTime(2033, 5, 18, 3, 33, 20, DateTimeKind.Utc), "69279037"); + this.TestSHA1AndAssert(key, 8, new DateTime(2603, 10, 11, 11, 33, 20, DateTimeKind.Utc), "65353130"); + } + + [Test] + public void GenerateOtp_returns_SHA1_reference_results_with_string_key() + { + var key = "3132333435363738393031323334353637383930"; + + this.TestSHA1AndAssert(key, 8, new DateTime(1970, 1, 1, 0, 0, 59, DateTimeKind.Utc), "94287082"); + this.TestSHA1AndAssert(key, 8, new DateTime(2005, 3, 18, 1, 58, 29, DateTimeKind.Utc), "07081804"); + this.TestSHA1AndAssert(key, 8, new DateTime(2005, 3, 18, 1, 58, 31, DateTimeKind.Utc), "14050471"); + this.TestSHA1AndAssert(key, 8, new DateTime(2009, 2, 13, 23, 31, 30, DateTimeKind.Utc), "89005924"); + this.TestSHA1AndAssert(key, 8, new DateTime(2033, 5, 18, 3, 33, 20, DateTimeKind.Utc), "69279037"); + this.TestSHA1AndAssert(key, 8, new DateTime(2603, 10, 11, 11, 33, 20, DateTimeKind.Utc), "65353130"); } [Test] @@ -50,7 +94,7 @@ namespace OathNet.Test { var key = "48656C6C6F21DEADBEEF"; // Base-32: JBSWY3DPEHPK3PXP - this.TestAndAssert(key, 6, new DateTime(2011, 10, 17, 7, 49, 45, DateTimeKind.Utc), "010374"); + this.TestSHA1AndAssert(key, 6, new DateTime(2011, 10, 17, 7, 49, 45, DateTimeKind.Utc), "010374"); } [Test] @@ -58,19 +102,31 @@ namespace OathNet.Test { var key = "DEADBEEF48656C6C6F21"; // Base-32: 32W3532IMVWGY3ZB - this.TestAndAssert(key, 6, new DateTime(2011, 10, 17, 7, 52, 0, DateTimeKind.Utc), "139594"); + this.TestSHA1AndAssert(key, 6, new DateTime(2011, 10, 17, 7, 52, 0, DateTimeKind.Utc), "139594"); + } + + private string GetOtpWithImplicitHMAC(byte[] key, int digits, DateTime time) + { + var otp = new TimeBasedOtpGenerator(key, digits); + return otp.GenerateOtp(time); } - private void TestAndAssert(byte[] key, int digits, DateTime time, string expected) + private string GetOtpWithImplicitHMAC(string key, int digits, DateTime time) { var otp = new TimeBasedOtpGenerator(key, digits); + return otp.GenerateOtp(time); + } + + private void TestSHA1AndAssert(byte[] key, int digits, DateTime time, string expected) + { + var otp = new TimeBasedOtpGenerator(key, digits, new SHA1HMACAlgorithm()); var result = otp.GenerateOtp(time); Assert.AreEqual(expected, result); } - private void TestAndAssert(string key, int digits, DateTime time, string expected) + private void TestSHA1AndAssert(string key, int digits, DateTime time, string expected) { - var otp = new TimeBasedOtpGenerator(key, digits); + var otp = new TimeBasedOtpGenerator(key, digits, new SHA1HMACAlgorithm()); var result = otp.GenerateOtp(time); Assert.AreEqual(expected, result); } |