pyauth / pyotp

Python One-Time Password Library
https://pyauth.github.io/pyotp/
Other
3.03k stars 326 forks source link

Interval is not working #151

Closed dsifat closed 1 year ago

dsifat commented 1 year ago

Interval remains 30 seconds in TOTP if we provide more than 30 like 60, 120 or 240

kislyuk commented 1 year ago

Thanks for your report. I am unable to reproduce this issue. Can you please provide a full reproduction, including the code you used, the expected outcome, and the observed outcome?

vladimir-poghosyan commented 1 year ago

I have also encountered issues related to interval. I have written the following test, which fails, although the interval is set to 120 seconds (greater than tested waiting times):

from time import sleep

import pyotp
import pytest

@pytest.mark.parametrize('wait', (25, 55, 85, 105, 115))
def test_totp(wait: int) -> None:
    totp = pyotp.TOTP(pyotp.random_base32(), interval=120)
    code = totp.now()
    sleep(wait)
    assert totp.verify(code)

And here are the results:

============================================ short test summary info =============================================
FAILED test-totp-interval.py::test_totp[55] - AssertionError: assert False
FAILED test-totp-interval.py::test_totp[105] - AssertionError: assert False
FAILED test-totp-interval.py::test_totp[115] - AssertionError: assert False
==================================== 3 failed, 2 passed in 385.04s (0:06:25) =====================================

Testing environment:

kislyuk commented 1 year ago

@vladimir-poghosyan that is a misunderstanding of how TOTP works. The interval doesn't start when your test starts, it starts when the time since the epoch modulo the interval is zero.

I am going to close this issue now, since neither report has a valid reproduction.