Yet Another OTP generator
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TotpTest.kt 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package com.chameth.yaotp.algos
  2. import com.chameth.yaotp.toHexString
  3. import com.natpryce.hamkrest.assertion.assert
  4. import com.natpryce.hamkrest.equalTo
  5. import org.junit.Assert.assertEquals
  6. import org.junit.Test
  7. class TotpTest {
  8. private val rfcKeySha1 = TotpParams(HotpParams("12345678901234567890".toByteArray(), 8))
  9. private val rfcKeySha256 = TotpParams(HotpParams("12345678901234567890123456789012".toByteArray(), 8, ::hmacSha256))
  10. private val rfcKeySha512 = TotpParams(HotpParams("1234567890123456789012345678901234567890123456789012345678901234".toByteArray(), 8, ::hmacSha512))
  11. @Test
  12. fun testCount_withDefaultStepAndStart_andPastValues() {
  13. assert.that(count(0, 30, 59), equalTo(1L))
  14. assert.that(count(0, 30, 1111111109), equalTo(37037036L))
  15. assert.that(count(0, 30, 1234567890), equalTo(41152263L))
  16. }
  17. @Test
  18. fun testCount_withDefaultStepAndStart_andFutureDates() {
  19. assert.that(count(0, 30, 2000000000), equalTo(66666666L))
  20. assert.that(count(0, 30, 20000000000), equalTo(666666666L))
  21. }
  22. @Test
  23. fun testCount_withCustomStepAndStart() {
  24. assert.that(count(2000000000, 30, 4000000000), equalTo(66666666L))
  25. assert.that(count(0, 60, 4000000000), equalTo(66666666L))
  26. }
  27. @Test
  28. fun testLongToByteArray_withRfcValues() {
  29. assert.that(1L.toByteArray().toHexString(), equalTo("0000000000000001"))
  30. assert.that(37037036L.toByteArray().toHexString(), equalTo("00000000023523ec"))
  31. assert.that(41152263L.toByteArray().toHexString(), equalTo("000000000273ef07"))
  32. assert.that(666666666L.toByteArray().toHexString(), equalTo("0000000027bc86aa"))
  33. }
  34. @Test
  35. fun testTotp_withRfcValues_usingSha1() {
  36. assert.that(totp(rfcKeySha1, 59).otp, equalTo("94287082"))
  37. assert.that(totp(rfcKeySha1, 1111111109).otp, equalTo("07081804"))
  38. assert.that(totp(rfcKeySha1, 1111111111).otp, equalTo("14050471"))
  39. assert.that(totp(rfcKeySha1, 1234567890).otp, equalTo("89005924"))
  40. assert.that(totp(rfcKeySha1, 2000000000).otp, equalTo("69279037"))
  41. assert.that(totp(rfcKeySha1, 20000000000).otp, equalTo("65353130"))
  42. }
  43. @Test
  44. fun testTotp_withRfcValues_usingSha256() {
  45. assert.that(totp(rfcKeySha256, 59).otp, equalTo("46119246"))
  46. assert.that(totp(rfcKeySha256, 1111111109).otp, equalTo("68084774"))
  47. assert.that(totp(rfcKeySha256, 1111111111).otp, equalTo("67062674"))
  48. assert.that(totp(rfcKeySha256, 1234567890).otp, equalTo("91819424"))
  49. assert.that(totp(rfcKeySha256, 2000000000).otp, equalTo("90698825"))
  50. assert.that(totp(rfcKeySha256, 20000000000).otp, equalTo("77737706"))
  51. }
  52. @Test
  53. fun testTotp_withRfcValues_usingSha512() {
  54. assert.that(totp(rfcKeySha512, 59).otp, equalTo("90693936"))
  55. assert.that(totp(rfcKeySha512, 1111111109).otp, equalTo("25091201"))
  56. assert.that(totp(rfcKeySha512, 1111111111).otp, equalTo("99943326"))
  57. assert.that(totp(rfcKeySha512, 1234567890).otp, equalTo("93441116"))
  58. assert.that(totp(rfcKeySha512, 2000000000).otp, equalTo("38618901"))
  59. assert.that(totp(rfcKeySha512, 20000000000).otp, equalTo("47863826"))
  60. }
  61. @Test
  62. fun testExpirary_withPartialValues() {
  63. assertEquals(3000030L, expiry(0L, 30, 3000029L))
  64. assertEquals(3000030L, expiry(0L, 30, 3000020L))
  65. assertEquals(3000030L, expiry(0L, 30, 3000010L))
  66. assertEquals(3000030L, expiry(0L, 30, 3000005L))
  67. assertEquals(3000030L, expiry(0L, 30, 3000001L))
  68. }
  69. @Test
  70. fun testExpirary_withStepValues() {
  71. assertEquals(3000060L, expiry(0L, 30, 3000030L))
  72. assertEquals(3000030L, expiry(0L, 30, 3000000L))
  73. }
  74. }