a
¹a( ã @ sª d dl Z d dlZd dlZd dlmZmZ d dlmZmZ d dl m
Z
mZmZ d dl
mZ eje
eef Zdeeeje ejejeef edœdd „ZG d
d„ deƒZdS )é N)ÚquoteÚ urlencode)Ú
constant_timeÚhmac)ÚSHA1ÚSHA256ÚSHA512)ÚInvalidTokenÚHOTP)ÚhotpÚ type_nameÚaccount_nameÚissuerÚextra_parametersÚreturnc C s„ d| j fdt | j¡fd| jj ¡ fg}|d ur>| d|f¡ | |¡ ||rbdt |ƒt |ƒf nt |ƒt
|ƒdœ}djf i |¤ŽS )NÚdigitsZsecretÚ algorithmr z%s:%s)ÚtypeZlabelÚ
parametersz%otpauth://{type}/{label}?{parameters})Ú_lengthÚbase64Z b32encodeÚ_keyÚ
_algorithmÚnameÚupperÚappendÚextendr r Úformat)r r r
r r r Zuriparts© r úS/usr/lib64/python3.9/site-packages/cryptography/hazmat/primitives/twofactor/hotp.pyÚ
_generate_uri s ý
ÿù r c @ st e Zd Zdeeeejeddœdd„Z eedœdd„Z
eedd œd
d„Zeedœdd
„Ze
eeje
e
dœdd„ZdS )r
NT)ÚkeyÚlengthr ÚbackendÚenforce_key_lengthr c C st t |ƒdk r|du rtdƒ‚t|tƒs.tdƒ‚|dk s>|dkrFtdƒ‚t|tttfƒs^tdƒ‚|| _|| _ || _
d S ) 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 to 8.z)Algorithm must be SHA1, SHA256 or SHA512.)ÚlenÚ
ValueErrorÚ
isinstanceÚintÚ TypeErrorr r r r r r )Úselfr! r" r r# r$ r r r Ú__init__2 s
z
HOTP.__init__)Úcounterr c C s* | |¡}|d| j }d || j¡ ¡ S )Né
z{0:0{1}})Ú_dynamic_truncater r Úencode)r- r/ Ztruncated_valuer r r r ÚgenerateJ s
z
HOTP.generate)r r/ r c C s t | |¡|¡stdƒ‚d S )Nz#Supplied HOTP value does not match.)r Zbytes_eqr3 r )r- r r/ r r r ÚverifyO s zHOTP.verifyc C sb t | j| j¡}| t d|¡¡ | ¡ }|t|ƒd d@ }|||d … }t d|¡d d@ S )Nz>Qé é é z>Ir iÿÿÿ)
r ZHMACr r ÚupdateÚstructÚpackÚfinalizer( Úunpack)r- r/ ÚctxZ
hmac_valueÚoffsetÚpr r r r1 S s zHOTP._dynamic_truncate)r
r/ r r c C s t | d||dt|ƒfgƒS )Nr r/ )r r+ )r- r
r/ r r r r Úget_provisioning_uri\ s ÿzHOTP.get_provisioning_uri)NT)Ú__name__Ú
__module__Ú__qualname__Úbytesr+ Ú_ALLOWED_HASH_TYPESÚtypingÚAnyÚboolr. r3 r4 r1 ÚstrÚOptionalr@ r r r r r
1 s úù
þ)r r9 rF Úurllib.parser r Zcryptography.hazmat.primitivesr r Z%cryptography.hazmat.primitives.hashesr r r Z(cryptography.hazmat.primitives.twofactorr ÚUnionrE rI rJ ÚListÚTupler+ r Úobjectr
r r r r Ú