
    )h                        S SK Jr  S SKrS SKrS SKJrJr  S SKJrJ	r	  S SK
JrJrJr  S SKJr  \R                   \\\4   r            S
S jr " S	 S5      rg)    )annotationsN)quote	urlencode)constant_timehmac)SHA1SHA256SHA512)InvalidTokenHOTPc                x   SU R                   4S[        R                  " U R                  5      4SU R                  R
                  R                  5       4/nUb  UR                  SU45        UR                  U5        U(       a  [        U5       S[        U5       3O
[        U5      nSU SU S[        U5       3$ )	Ndigitssecret	algorithmissuer:z
otpauth:///?)_lengthbase64	b32encode_key
_algorithmnameupperappendextendr   r   )hotp	type_nameaccount_namer   extra_parameters
parameterslabels          O/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/twofactor/hotp.py_generate_urir%      s     
4<< 	6##DII./	doo**0023J 8V,-&'  =/5./0<  

 	{!E7!Ij,A+BCC    c                  t    \ rS rSr  S	           S
S jjrSS jrSS jrSS jr        SS jrSr	g)r   ,   Nc                *   [        U5      S:  a  USL a  [        S5      e[        U[        5      (       d  [	        S5      eUS:  d  US:  a  [        S5      e[        U[
        [        [        45      (       d  [	        S5      eXl        X l	        X0l
        g )	N   Tz'Key length has to be at least 128 bits.z)Length parameter must be an integer type.      z)Length of HOTP has to be between 6 and 8.z)Algorithm must be SHA1, SHA256 or SHA512.)len
ValueError
isinstanceint	TypeErrorr   r	   r
   r   r   r   )selfkeylengthr   backendenforce_key_lengths         r$   __init__HOTP.__init__-   s     s8b=/47FGG&#&&GHHA:!HII)dFF%;<<GHH	#r&   c                    U R                  U5      nUSU R                  -  -  nSR                  X0R                  5      R                  5       $ )N
   z{0:0{1}})_dynamic_truncater   formatencode)r2   countertruncated_valuer   s       r$   generateHOTP.generateE   sC    009"dll"23  ||4;;==r&   c                p    [         R                  " U R                  U5      U5      (       d  [        S5      eg )Nz#Supplied HOTP value does not match.)r   bytes_eqr@   r   )r2   r   r>   s      r$   verifyHOTP.verifyJ   s0    %%dmmG&<dCCDEE Dr&   c                   [         R                  " U R                  U R                  5      nUR	                  UR                  SSS95        UR                  5       nU[        U5      S-
     S-  nX4US-    n[        R                  USS9S-  $ )	Nr,   big)r4   	byteorder         )rH   i)
r   HMACr   r   updateto_bytesfinalizer-   r0   
from_bytes)r2   r>   ctx
hmac_valueoffsetps         r$   r;   HOTP._dynamic_truncateN   s    ii		4??3

7##1#>?\\^
C
Oa/069
+~~a5~1J>>r&   c           
     6    [        U SXS[        U5      4/5      $ )Nr   r>   )r%   r0   )r2   r    r>   r   s       r$   get_provisioning_uriHOTP.get_provisioning_uriW   s&     &,)S\1J0K
 	
r&   )r   r   r   )NT)r3   bytesr4   r0   r   HOTPHashTypesr5   z
typing.Anyr6   boolreturnNone)r>   r0   r\   rY   )r   rY   r>   r0   r\   r]   )r>   r0   r\   r0   )r    strr>   r0   r   
str | Noner\   r^   )
__name__
__module____qualname____firstlineno__r7   r@   rD   r;   rW   __static_attributes__ r&   r$   r   r   ,   s~     ##'$$ $ !	$
 $ !$ 
$0>
F?

*-
7A
	
r&   )r   r   r   r^   r    r^   r   r_   r!   zlist[tuple[str, int]]r\   r^   )
__future__r   r   typingurllib.parser   r   cryptography.hazmat.primitivesr   r   %cryptography.hazmat.primitives.hashesr   r	   r
   (cryptography.hazmat.primitives.twofactorr   UnionrZ   r%   r   re   r&   r$   <module>rm      s   
 #   ) > F F AT6612D
DD D 	D
 ,D 	D40
 0
r&   