summaryrefslogtreecommitdiffstats
path: root/OATH.Net.Test/TimeBasedOtpGeneratorTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OATH.Net.Test/TimeBasedOtpGeneratorTests.cs')
-rw-r--r--OATH.Net.Test/TimeBasedOtpGeneratorTests.cs94
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);
}