def accept_totp(key, response, format='<STR_LIT>', period=<NUM_LIT:30>, t=None,<EOL>hash=hashlib.sha1, forward_drift=<NUM_LIT:1>, backward_drift=<NUM_LIT:1>, drift=<NUM_LIT:0>):
if t is None:<EOL><INDENT>t = int(time.time())<EOL><DEDENT>for i in range(max(-divmod(t, period)[<NUM_LIT:0>],-backward_drift),forward_drift+<NUM_LIT:1>):<EOL><INDENT>d = (drift+i) * period<EOL>if _utils.compare_digest(totp(key, format=format, period=period, hash=hash, t=t+d), response):<EOL><INDENT>return True, drift+i<EOL><DEDENT><DEDENT>return False, <NUM_LIT:0><EOL>
Validate a TOTP value inside a window of 
[drift-bacward_drift:drift+forward_drift] of time steps.
Where drift is the drift obtained during the last call to accept_totp.

:param response:
    a string representing the OTP to check, its format should correspond
    to the format parameter (it's not mandatory, it is part of the
    checks),
:param key:
    the TOTP key given as an hexadecimal string
:param format:
    the output format, can be:
       - hex40, for a 40 characters hexadecimal format,
       - dec4, for a 4 characters decimal format,
       - dec6,
       - dec7, or
       - dec8
    it default to dec6.
:param period:
    a positive integer giving the period between changes of the OTP
    value, as seconds, it defaults to 30.
:param t:
    a positive integer giving the current time as seconds since EPOCH
    (1st January 1970 at 00:00 GMT), if None we use time.time(); it
    defaults to None;
:param hash:
    the hash module (usually from the hashlib package) to use,
    it defaults to hashlib.sha1.
:param forward_drift:
    how much we accept the client clock to advance, as a number of
    periods,  i.e. if the period is 30 seconds, a forward_drift of 2,
    allows at most a clock a drift of 90 seconds;

            Schema:
                   .___ Current time
                   |
            0      v       + 30s         +60s              +90s
            [ current_period |   period+1  |   period+2     [

    it defaults to 1.

:param backward_drift:
    how much we accept the client clock to backstep; it defaults to 1.
:param drift:
    an absolute drift of the local clock to the client clock; use it to
    keep track of an augmenting drift with a client without augmenting
    the size of the window given by forward_drift and backward_dript; it
    defaults to 0, you should usually give as value the last value
    returned by accept_totp for this client (read further).

:returns:
    a pair (v,d) where v is a boolean giving the result, and d the
    needed drift to validate the value. The drift value should be saved
    relative to the current client. This saved value SHOULD be used in
    later calls to accept_totp in order to accept a slowly accumulating
    drift in the client token clock; on the server side you should use
    reliable source of time like an NTP server.
:rtype: a two element tuple