ó
    »Rjh%  ã                   óZ  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJr  SSK	J
r
Jr  SSKJr  SSKJr  SSKJr  SSKJr  \" S	5      rS
r " S S\5      r " S S\5      rS rS rS rS rS S jrS rS!S jr " S S5      r SS\ S4S jr!SS\ SS4S jr" " S S5      r# " S S\#5      r$g)"a_  
Functions for creating and restoring url-safe signed JSON objects.

The format used looks like this:

>>> signing.dumps("hello")
'ImhlbGxvIg:1QaUZC:YIye-ze3TTx7gtSv422nZA4sgmk'

There are two components here, separated by a ':'. The first component is a
URLsafe base64 encoded JSON of the object passed to dumps(). The second
component is a base64 encoded hmac/SHA-256 hash of "$first_component:$secret"

signing.loads(s) checks the signature and returns the deserialized object.
If the signature fails, a BadSignature exception is raised.

>>> signing.loads("ImhlbGxvIg:1QaUZC:YIye-ze3TTx7gtSv422nZA4sgmk")
'hello'
>>> signing.loads("ImhlbGxvIg:1QaUZC:YIye-ze3TTx7gtSv42-modified")
...
BadSignature: Signature "ImhlbGxvIg:1QaUZC:YIye-ze3TTx7gtSv42-modified" does not match

You can optionally compress the JSON prior to base64 encoding it to save
space, using the compress=True argument. This checks if compression actually
helps and only applies compression if the result is a shorter string:

>>> signing.dumps(list(range(1, 20)), compress=True)
'.eJwFwcERACAIwLCF-rCiILN47r-GyZVJsNgkxaFxoDgxcOHGxMKD_T7vhAml:1QaUaL:BA0thEZrp4FQVXIXuOvYJtLJSrQ'

The fact that the string is compressed is signalled by the prefixed '.' at the
start of the base64 JSON.

There are 65 url-safe characters: the 64 used by url-safe base64 and the ':'.
These functions make use of all of them.
é    N)Úsettings)Úconstant_time_compareÚsalted_hmac)ÚRemovedInDjango51Warning©Úforce_bytes)Úimport_string)Ú_lazy_re_compilez^[A-z0-9-_=]*$Ú>0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzc                   ó   • \ rS rSrSrSrg)ÚBadSignatureé6   zSignature does not match.© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    Ú?D:\diplom_project\venv\Lib\site-packages\django/core/signing.pyr   r   6   s   † Ù#âr   r   c                   ó   • \ rS rSrSrSrg)ÚSignatureExpiredé<   z3Signature timestamp is older than required max_age.r   Nr   r   r   r   r   r   <   s   † Ù=âr   r   c                 ó–   • U S:X  a  gU S:  a  SOSn[        U 5      n SnU S:”  a"  [        U S5      u  p[        U   U-   nU S:”  a  M"  X-   $ )Nr   Ú0Ú-Ú é>   )ÚabsÚdivmodÚBASE62_ALPHABET)ÚsÚsignÚencodedÚ	remainders       r   Ú
b62_encoder(   B   s]   € ØˆAƒvØØ�a“%‰3˜R€DÜˆA‹€AØ€GØ
ˆa‹%Ü˜a “}‰ˆÜ! )Ñ,¨wÑ6ˆð ˆa�%ð ‰>Ðr   c                 óˆ   • U S:X  a  gSnU S   S:X  a  U SS  n SnSnU  H  nUS-  [         R                  U5      -   nM      X-  $ )Nr   r   é   r   éÿÿÿÿr    )r#   Úindex)r$   r%   ÚdecodedÚdigits       r   Ú
b62_decoder/   N   s\   € ØˆCƒxØØ€DØˆ�tˆsƒ{ØˆaˆbˆEˆØˆØ€GÛˆØ˜B‘,¤×!6Ñ!6°uÓ!=Ñ=Šñ à‰>Ðr   c                 óL   • [         R                  " U 5      R                  S5      $ )Nó   =)Úbase64Úurlsafe_b64encodeÚstrip)r$   s    r   Ú
b64_encoder5   [   s   € Ü×#Ò# AÓ&×,Ñ,¨TÓ2Ð2r   c                 óV   • S[        U 5      * S-  -  n[        R                  " X-   5      $ )Nr1   é   )Úlenr2   Úurlsafe_b64decode)r$   Úpads     r   Ú
b64_decoder;   _   s)   € Ø
”3�q“6�'˜A‘+Ñ
€CÜ×#Ò# A¡GÓ,Ð,r   c           	      ó`   • [        [        XX#S9R                  5       5      R                  5       $ )N©Ú	algorithm)r5   r   ÚdigestÚdecode)ÚsaltÚvalueÚkeyr>   s       r   Úbase64_hmacrD   d   s)   € ÜÜ�D Ñ:×AÑAÓCóç�fƒhðr   c                 ó   • S[        U 5      -   $ )Ns   django.http.cookiesr   )rC   s    r   Ú_cookie_signer_keyrF   j   s   € à!¤K°Ó$4Ñ4Ð4r   c                 óª   • [        [        R                  5      nU" [        [        R                  5      [        [        [        R                  5      U S9$ )N)rC   Úfallback_keysrA   )r	   r   ÚSIGNING_BACKENDrF   Ú
SECRET_KEYÚmapÚSECRET_KEY_FALLBACKS)rA   ÚSigners     r   Úget_cookie_signerrN   o   sA   € Üœ8×3Ñ3Ó4€FÙÜœx×2Ñ2Ó3ÜÔ,¬h×.KÑ.KÓLØñð r   c                   ó$   • \ rS rSrSrS rS rSrg)ÚJSONSerializeréx   zK
Simple wrapper around json to be used in signing.dumps and
signing.loads.
c                 óJ   • [         R                  " USS9R                  S5      $ )N)Ú,Ú:)Ú
separatorsúlatin-1)ÚjsonÚdumpsÚencode)ÚselfÚobjs     r   rX   ÚJSONSerializer.dumps~   s   € Ü�zŠz˜#¨*Ñ5×<Ñ<¸YÓGÐGr   c                 óL   • [         R                  " UR                  S5      5      $ )NrV   )rW   Úloadsr@   )rZ   Údatas     r   r^   ÚJSONSerializer.loads�   s   € Ü�zŠz˜$Ÿ+™+ iÓ0Ó1Ð1r   r   N)r   r   r   r   r   rX   r^   r   r   r   r   rP   rP   x   s   † ñò
Hõ2r   rP   zdjango.core.signingFc                 ó0   • [        XS9R                  XUS9$ )a�  
Return URL-safe, hmac signed base64 compressed JSON string. If key is
None, use settings.SECRET_KEY instead. The hmac algorithm is the default
Signer algorithm.

If compress is True (not the default), check if compressing using zlib can
save some space. Prepend a '.' to signify compression. This is included
in the signature, to protect against zip bombs.

Salt can be used to namespace the hash, so that a signed string is
only valid for a given namespace. Leaving this at the default
value or re-using a salt value across different parts of your
application without good cause is a security risk.

The serializer is expected to return a bytestring.
)rC   rA   )Ú
serializerÚcompress)ÚTimestampSignerÚsign_object)r[   rC   rA   rb   rc   s        r   rX   rX   …   s&   € ô& ˜sÑ.×:Ñ:Ø¨Xð ;ð ð r   c                 ó4   • [        XUS9R                  U UUS9$ )zp
Reverse of dumps(), raise BadSignature if signature fails.

The serializer is expected to accept a bytestring.
)rC   rA   rH   )rb   Úmax_age)rd   Úunsign_object)r$   rC   rA   rb   rg   rH   s         r   r^   r^   �   s.   € ô Ø¨-ñç�mØ	ØØð ð ðr   c                   óZ   • \ rS rSrSSSSSS.S jrSS jrS rS r\S	4S
 jr	\4S jr
Srg)rM   é³   NrT   ©rC   ÚseprA   r>   rH   c                óX  • U=(       d    [         R                  U l        Ub  UO[         R                  U l        X l        U=(       d1    U R                  R                  < SU R                  R                  < 3U l	        U=(       d    SU l
        U(       ad  [        R                  " SU R                  R                   S3[        SS9  [        U/ SQ5       H   u  pxU(       d  US:X  d  M  [        XU5        M"     [         R#                  U R
                  5      (       a  [%        S	U-  5      eg )
NÚ.Úsha256z Passing positional arguments to z is deprecated.é   )Ú
stacklevelrk   rl   zJUnsafe Signer separator: %r (cannot be empty or consist of only A-z0-9-_=))r   rJ   rC   rL   rH   rl   Ú	__class__r   r   rA   r>   ÚwarningsÚwarnr   ÚzipÚsetattrÚ_SEP_UNSAFEÚmatchÚ
ValueError)	rZ   rC   rl   rA   r>   rH   ÚargsÚargÚattrs	            r   Ú__init__ÚSigner.__init__¸   s
  € ð ×-œ(×-Ñ-ˆŒð Ñ(ñ ä×.Ñ.ð 	Ôð
 ŒØ÷ 
Ø�N‰N×%Ô%Ø�N‰N×#Ó#ð
ˆŒ	ð #×. hˆŒæÜ�MŠMØ2°4·>±>×3JÑ3JÐ2Kð Lð ä(Øò	ô !ØÒJö‘	�ö ˜$ %�-Ü˜D¨Ö,ñ	ô
 ×Ñ˜TŸX™X×&Ñ&Üð"Ø$'ñ(óð ð 'r   c                 óp   • U=(       d    U R                   n[        U R                  S-   XU R                  S9$ )NÚsignerr=   )rC   rD   rA   r>   )rZ   rB   rC   s      r   Ú	signatureÚSigner.signatureà   s+   € Ø�o�T—X‘XˆÜ˜4Ÿ9™9 xÑ/°ÀtÇ~Á~ÑVÐVr   c                 óJ   • U< U R                   < U R                  U5      < 3$ ©N)rl   r�   )rZ   rB   s     r   r%   ÚSigner.signä   s   € Ú  $§(£(¨D¯N©N¸5Õ,AÐBÐBr   c                 ó0  • U R                   U;  a  [        SU R                   -  5      eUR                  U R                   S5      u  p#U R                  /U R                  Q H&  n[        X0R                  X$5      5      (       d  M$  Us  $    [        SU-  5      e)NzNo "%s" found in valuer*   zSignature "%s" does not match)rl   r   ÚrsplitrC   rH   r   r�   )rZ   Úsigned_valuerB   ÚsigrC   s        r   ÚunsignÚSigner.unsignç   sƒ   € Ø�8‰8˜<Ó'ÜÐ7¸$¿(¹(ÑBÓCÐCØ!×(Ñ(¨¯©°1Ó5‰
ˆØ—H‘HÐ2˜t×1Ñ1Ó2ˆCÜ$ S¯.©.¸Ó*D×EÓEØ’ñ 3ô Ð:¸SÑ@ÓAÐAr   Fc                 ó  • U" 5       R                  U5      nSnU(       a5  [        R                  " U5      n[        U5      [        U5      S-
  :  a  UnSn[	        U5      R                  5       nU(       a  SU-   nU R                  U5      $ )a5  
Return URL-safe, hmac signed base64 compressed JSON string.

If compress is True (not the default), check if compressing using zlib
can save some space. Prepend a '.' to signify compression. This is
included in the signature, to protect against zip bombs.

The serializer is expected to return a bytestring.
Fr*   Trn   )rX   Úzlibrc   r8   r5   r@   r%   )rZ   r[   rb   rc   r_   Úis_compressedÚ
compressedÚbase64ds           r   re   ÚSigner.sign_objectð   sx   € ñ ‹|×!Ñ! #Ó&ˆàˆæäŸš tÓ,ˆJÜ�:‹¤# d£)¨a¡-Ó0Ø!�Ø $�Ü˜TÓ"×)Ñ)Ó+ˆÞØ˜G‘mˆGØ�y‰y˜Ó!Ð!r   c                 óè   • U R                   " U40 UD6R                  5       nUS S S:H  nU(       a  USS  n[        U5      nU(       a  [        R                  " U5      nU" 5       R                  U5      $ )Nr*   ó   .)rŠ   rY   r;   r�   Ú
decompressr^   )rZ   Ú
signed_objrb   Úkwargsr�   r”   r_   s          r   rh   ÚSigner.unsign_object	  sl   € ð —+’+˜jÑ3¨FÑ3×:Ñ:Ó<ˆØ˜R˜a�[ DÑ(ˆ
Þà˜a˜b�kˆGÜ˜'Ó"ˆÞÜ—?’? 4Ó(ˆDÙ‹|×!Ñ! $Ó'Ð'r   )r>   rH   rC   rA   rl   r„   )r   r   r   r   r}   r�   r%   rŠ   rP   re   rh   r   r   r   r   rM   rM   ³   sB   † ð ØØØØõ&ôPWòCòBð +9À5ô "ð2 4B÷ (r   rM   c                   ó>   ^ • \ rS rSrS rU 4S jrSU 4S jjrSrU =r$ )rd   i  c                 óP   • [        [        [        R                  " 5       5      5      $ r„   )r(   ÚintÚtime)rZ   s    r   Ú	timestampÚTimestampSigner.timestamp  s   € Üœ#œdŸiši›kÓ*Ó+Ð+r   c                 óh   >• U< U R                   < U R                  5       < 3n[        TU ]  U5      $ r„   )rl   rœ   Úsuperr%   )rZ   rB   rr   s     €r   r%   ÚTimestampSigner.sign  s)   ø€ Ú! 4§8£8¨T¯^©^Õ-=Ð>ˆÜ‰w‰|˜EÓ"Ð"r   c                 ó>  >• [         TU ]  U5      nUR                  U R                  S5      u  p[	        U5      nUb`  [        U[        R                  5      (       a  UR                  5       n[        R                  " 5       U-
  nXR:”  a  [        SU< SU< S35      eU$ )zS
Retrieve original value and check it wasn't signed more
than max_age seconds ago.
r*   zSignature age z > z seconds)rŸ   rŠ   r‡   rl   r/   Ú
isinstanceÚdatetimeÚ	timedeltaÚtotal_secondsr›   r   )rZ   rB   rg   Úresultrœ   Úagerr   s         €r   rŠ   ÚTimestampSigner.unsign  s…   ø€ ô
 ‘‘ Ó&ˆØ!Ÿ=™=¨¯©°1Ó5ÑˆÜ˜yÓ)ˆ	ØÑÜ˜'¤8×#5Ñ#5×6Ñ6Ø!×/Ñ/Ó1�ä—)’)“+ 	Ñ)ˆCØ‹}Ý&Ë#ËwÐ'WÓXÐXØˆr   r   r„   )	r   r   r   r   rœ   r%   rŠ   r   Ú__classcell__)rr   s   @r   rd   rd     s   ø† ò,õ#÷õ r   rd   )Úsha1)z%django.core.signing.get_cookie_signer)%r   r2   r£   rW   r›   rs   r�   Údjango.confr   Údjango.utils.cryptor   r   Údjango.utils.deprecationr   Údjango.utils.encodingr   Údjango.utils.module_loadingr	   Údjango.utils.regex_helperr
   rw   r#   Ú	Exceptionr   r   r(   r/   r5   r;   rD   rF   rN   rP   rX   r^   rM   rd   r   r   r   Ú<module>r²      sÇ   ðñ!óF Û Û Û Û Û å  ß BÝ =Ý -Ý 5Ý 6áÐ0Ó1€ØR€ô	�9ô 	ô	�|ô 	ò	ò
ò3ò-ô
ò5ô
÷
2ñ 
2ð Ð-¸.ÐSXôð4 	Ø	ØØØô÷,a(ñ a(ôH�fõ r   