package com.chameth.yaotp.algos import com.chameth.yaotp.toHexString import com.natpryce.hamkrest.assertion.assert import com.natpryce.hamkrest.equalTo import org.junit.Assert.assertEquals import org.junit.Test class TotpTest { private val rfcKeySha1 = TotpParams(HotpParams("12345678901234567890".toByteArray(), 8)) private val rfcKeySha256 = TotpParams(HotpParams("12345678901234567890123456789012".toByteArray(), 8, ::hmacSha256)) private val rfcKeySha512 = TotpParams(HotpParams("1234567890123456789012345678901234567890123456789012345678901234".toByteArray(), 8, ::hmacSha512)) @Test fun testCount_withDefaultStepAndStart_andPastValues() { assert.that(count(0, 30, 59), equalTo(1L)) assert.that(count(0, 30, 1111111109), equalTo(37037036L)) assert.that(count(0, 30, 1234567890), equalTo(41152263L)) } @Test fun testCount_withDefaultStepAndStart_andFutureDates() { assert.that(count(0, 30, 2000000000), equalTo(66666666L)) assert.that(count(0, 30, 20000000000), equalTo(666666666L)) } @Test fun testCount_withCustomStepAndStart() { assert.that(count(2000000000, 30, 4000000000), equalTo(66666666L)) assert.that(count(0, 60, 4000000000), equalTo(66666666L)) } @Test fun testLongToByteArray_withRfcValues() { assert.that(1L.toByteArray().toHexString(), equalTo("0000000000000001")) assert.that(37037036L.toByteArray().toHexString(), equalTo("00000000023523ec")) assert.that(41152263L.toByteArray().toHexString(), equalTo("000000000273ef07")) assert.that(666666666L.toByteArray().toHexString(), equalTo("0000000027bc86aa")) } @Test fun testTotp_withRfcValues_usingSha1() { assert.that(totp(rfcKeySha1, 59).otp, equalTo("94287082")) assert.that(totp(rfcKeySha1, 1111111109).otp, equalTo("07081804")) assert.that(totp(rfcKeySha1, 1111111111).otp, equalTo("14050471")) assert.that(totp(rfcKeySha1, 1234567890).otp, equalTo("89005924")) assert.that(totp(rfcKeySha1, 2000000000).otp, equalTo("69279037")) assert.that(totp(rfcKeySha1, 20000000000).otp, equalTo("65353130")) } @Test fun testTotp_withRfcValues_usingSha256() { assert.that(totp(rfcKeySha256, 59).otp, equalTo("46119246")) assert.that(totp(rfcKeySha256, 1111111109).otp, equalTo("68084774")) assert.that(totp(rfcKeySha256, 1111111111).otp, equalTo("67062674")) assert.that(totp(rfcKeySha256, 1234567890).otp, equalTo("91819424")) assert.that(totp(rfcKeySha256, 2000000000).otp, equalTo("90698825")) assert.that(totp(rfcKeySha256, 20000000000).otp, equalTo("77737706")) } @Test fun testTotp_withRfcValues_usingSha512() { assert.that(totp(rfcKeySha512, 59).otp, equalTo("90693936")) assert.that(totp(rfcKeySha512, 1111111109).otp, equalTo("25091201")) assert.that(totp(rfcKeySha512, 1111111111).otp, equalTo("99943326")) assert.that(totp(rfcKeySha512, 1234567890).otp, equalTo("93441116")) assert.that(totp(rfcKeySha512, 2000000000).otp, equalTo("38618901")) assert.that(totp(rfcKeySha512, 20000000000).otp, equalTo("47863826")) } @Test fun testExpirary_withPartialValues() { assertEquals(3000030L, expiry(0L, 30, 3000029L)) assertEquals(3000030L, expiry(0L, 30, 3000020L)) assertEquals(3000030L, expiry(0L, 30, 3000010L)) assertEquals(3000030L, expiry(0L, 30, 3000005L)) assertEquals(3000030L, expiry(0L, 30, 3000001L)) } @Test fun testExpirary_withStepValues() { assertEquals(3000060L, expiry(0L, 30, 3000030L)) assertEquals(3000030L, expiry(0L, 30, 3000000L)) } }