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.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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.Test
  6. class TotpTest {
  7. private val rfcKeySha1 = TotpParams(HotpParams("12345678901234567890".toByteArray(), 8))
  8. private val rfcKeySha256 = TotpParams(HotpParams("12345678901234567890123456789012".toByteArray(), 8, ::hmacSha256))
  9. private val rfcKeySha512 = TotpParams(HotpParams("1234567890123456789012345678901234567890123456789012345678901234".toByteArray(), 8, ::hmacSha512))
  10. @Test
  11. fun testCount_withDefaultStepAndStart_andPastValues() {
  12. assert.that(count(0, 30, 59), equalTo(1L))
  13. assert.that(count(0, 30, 1111111109), equalTo(37037036L))
  14. assert.that(count(0, 30, 1234567890), equalTo(41152263L))
  15. }
  16. @Test
  17. fun testCount_withDefaultStepAndStart_andFutureDates() {
  18. assert.that(count(0, 30, 2000000000), equalTo(66666666L))
  19. assert.that(count(0, 30, 20000000000), equalTo(666666666L))
  20. }
  21. @Test
  22. fun testCount_withCustomStepAndStart() {
  23. assert.that(count(2000000000, 30, 4000000000), equalTo(66666666L))
  24. assert.that(count(0, 60, 4000000000), equalTo(66666666L))
  25. }
  26. @Test
  27. fun testLongToByteArray_withRfcValues() {
  28. assert.that(1L.toByteArray().toHexString(), equalTo("0000000000000001"))
  29. assert.that(37037036L.toByteArray().toHexString(), equalTo("00000000023523ec"))
  30. assert.that(41152263L.toByteArray().toHexString(), equalTo("000000000273ef07"))
  31. assert.that(666666666L.toByteArray().toHexString(), equalTo("0000000027bc86aa"))
  32. }
  33. @Test
  34. fun testTotp_withRfcValues_usingSha1() {
  35. assert.that(totp(rfcKeySha1, 59), equalTo(94287082))
  36. assert.that(totp(rfcKeySha1, 1111111109), equalTo(7081804))
  37. assert.that(totp(rfcKeySha1, 1111111111), equalTo(14050471))
  38. assert.that(totp(rfcKeySha1, 1234567890), equalTo(89005924))
  39. assert.that(totp(rfcKeySha1, 2000000000), equalTo(69279037))
  40. assert.that(totp(rfcKeySha1, 20000000000), equalTo(65353130))
  41. }
  42. @Test
  43. fun testTotp_withRfcValues_usingSha256() {
  44. assert.that(totp(rfcKeySha256, 59), equalTo(46119246))
  45. assert.that(totp(rfcKeySha256, 1111111109), equalTo(68084774))
  46. assert.that(totp(rfcKeySha256, 1111111111), equalTo(67062674))
  47. assert.that(totp(rfcKeySha256, 1234567890), equalTo(91819424))
  48. assert.that(totp(rfcKeySha256, 2000000000), equalTo(90698825))
  49. assert.that(totp(rfcKeySha256, 20000000000), equalTo(77737706))
  50. }
  51. @Test
  52. fun testTotp_withRfcValues_usingSha512() {
  53. assert.that(totp(rfcKeySha512, 59), equalTo(90693936))
  54. assert.that(totp(rfcKeySha512, 1111111109), equalTo(25091201))
  55. assert.that(totp(rfcKeySha512, 1111111111), equalTo(99943326))
  56. assert.that(totp(rfcKeySha512, 1234567890), equalTo(93441116))
  57. assert.that(totp(rfcKeySha512, 2000000000), equalTo(38618901))
  58. assert.that(totp(rfcKeySha512, 20000000000), equalTo(47863826))
  59. }
  60. }