pg ddlZddlZddlmZmZddlmZmZddlm Z m Z m Z ddl m Z eje e e fZddded ed ejed ejejeefd ef d ZGddZdS)N)quote urlencode) constant_timehmac)SHA1SHA256SHA512) InvalidTokenhotpHOTP type_name account_nameissuerextra_parametersreturncxd|jfdtj|jfd|jjfg}||d|f|||r!t|dt|nt|}d|d|dt|S) Ndigitssecret algorithmr:z otpauth:///?) _lengthbase64 b32encode_key _algorithmnameupperappendextendrr)r r rrr parameterslabels O/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/twofactor/hotp.py _generate_urir%s 4< 6#DI../ do*00223J 8V,---&'''  !5==005..000 <  D C CE C CIj,A,A C CCc eZdZ ddedededejdeddf d Z d edefd Z d ed eddfd Z d edefdZ de d edeje de fdZdS)r NTkeylengthrbackendenforce_key_lengthrc\t|dkr|durtdt|tst d|dks|dkrtdt|t t tfst d||_||_ ||_ dS) NTz'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 isinstanceint TypeErrorrrr rrr)selfr(r)rr*r+s r$__init__z HOTP.__init__-s s88b==/477FGG G&#&& IGHH H A::!GHH H)dFF%;<< IGHH H  #r&counterc||}|d|jzz}d||jS)N z{0:0{1}})_dynamic_truncaterformatencode)r5r7truncated_valuer s r$generatez HOTP.generateEsJ0099"dl"23  t|44;;===r&r cttj|||stddS)Nz#Supplied HOTP value does not match.)rbytes_eqr>r )r5r r7s r$verifyz HOTP.verifyJs?%dmmG&<&>???\\^^ C OOa/069 v * +~~a5~11J>>r&rrc Ht|d||dt|fgS)Nr r7)r%r3)r5rr7rs r$get_provisioning_urizHOTP.get_provisioning_uriWs/ &,)S\\1J0K   r&)NT)__name__ __module__ __qualname__bytesr3_ALLOWED_HASH_TYPEStypingAnyboolr6r>rAr:strOptionalrRr&r$r r ,s  ##' $$ $$' $  $ ! $ $$$$0>>>>>> F5F3F4FFFF??????  *- 7=s7K       r&)rrX urllib.parserrcryptography.hazmat.primitivesrr%cryptography.hazmat.primitives.hashesrrr (cryptography.hazmat.primitives.twofactorr UnionrWr[r\ListTupler3r%r r]r&r$res0  ))))))))>>>>>>>>FFFFFFFFFFAAAAAAl4#78D DDD OC D k&,sCx"89 D  DDDD40 0 0 0 0 0 0 0 0 0 r&