3Tf ddlmZddlZddlZddlmZmZddlmZm Z ddl m Z m Z m Z ddlmZej e e e fZ d dZGd dZy) ) annotationsN)quote urlencode) constant_timehmac)SHA1SHA256SHA512) InvalidTokenHOTPcjd|jfdtj|jfd|jj j fg}||jd|f|j||rt|dt|n t|}d|d|dt|S) Ndigitssecret algorithmissuer:z otpauth:///?) _lengthbase64 b32encode_key _algorithmnameupperappendextendrr)hotp type_name account_namerextra_parameters parameterslabels O/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/twofactor/hotp.py _generate_urir%s 4<< 6##DII./ doo**0023J 8V,-&'  =/5./0 <   {!E7!Ij,A+B CCc`eZdZ d ddZd dZd dZd dZ d dZy) r Nct|dkr|dur tdt|ts t d|dks|dkDr tdt|t t tfs t d||_||_ ||_ y) 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 and 8.z)Algorithm must be SHA1, SHA256 or SHA512.) len ValueError isinstanceint TypeErrorrr r rrr)selfkeylengthrbackendenforce_key_lengths r$__init__z HOTP.__init__-s s8b=/47FG G&#&GH H A:!HI I)dFF%;<GH H  #r&c|j|}|d|jzz}dj||jjS)N z{0:0{1}})_dynamic_truncaterformatencode)r1countertruncated_valuers r$generatez HOTP.generateEsE009"dll"23  t||4;;==r&cdtj|j||s tdy)Nz#Supplied HOTP value does not match.)rbytes_eqr>r )r1rr<s r$verifyz HOTP.verifyJs-%%dmmG&?\\^ C Oa/069 v +~~a5~1J>>r&c 8t|d||dt|fgS)Nrr<)r%r/)r1r r<rs r$get_provisioning_urizHOTP.get_provisioning_uriWs( &,)S\1J0K  r&)NT) r2bytesr3r/r HOTPHashTypesr4z typing.Anyr5boolreturnNone)r<r/rVrS)rrSr<r/rVrW)r<r/rVr/)r strr<r/rtyping.Optional[str]rVrX)__name__ __module__ __qualname__r6r>rAr9rRr&r$r r ,s~ ##' $ $$! $  $ ! $ $0> F?  *- 7K  r&) rr rrXr rXrrYr!z#typing.List[typing.Tuple[str, int]]rVrX) __future__rrtyping urllib.parserrcryptography.hazmat.primitivesrr%cryptography.hazmat.primitives.hashesrr r (cryptography.hazmat.primitives.twofactorr UnionrTr%r r]r&r$res # )>FFA T6612 D DDD ! D : D  D40 0 r&