| 12345678910111213141516171819202122232425262728293031323334 |
- package totp
- import (
- "testing"
- "time"
- "github.com/xlzd/gotp"
- )
- func TestVerifyWithSkew(t *testing.T) {
- secret := "JBSWY3DPEHPK3PXP"
- totp := gotp.NewDefaultTOTP(secret)
- // Anchor mid-window so a step boundary can't fall between sampling and verify.
- now := time.Unix((time.Now().Unix()/30)*30+15, 0).UTC()
- if !VerifyWithSkew(secret, totp.AtTime(now), now) {
- t.Fatal("current window code should verify")
- }
- if !VerifyWithSkew(secret, totp.AtTime(now.Add(-30*time.Second)), now) {
- t.Fatal("previous window code should verify (clock skew)")
- }
- if !VerifyWithSkew(secret, totp.AtTime(now.Add(30*time.Second)), now) {
- t.Fatal("next window code should verify (clock skew)")
- }
- if VerifyWithSkew(secret, totp.AtTime(now.Add(-60*time.Second)), now) {
- t.Fatal("code two windows old should not verify")
- }
- if VerifyWithSkew(secret, totp.AtTime(now.Add(60*time.Second)), now) {
- t.Fatal("code two windows ahead should not verify")
- }
- if VerifyWithSkew(secret, "000000", now) {
- t.Fatal("wrong code should not verify")
- }
- }
|