ó
    _š‘hD"  ã                   óF  • 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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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©Úforce_bytes)Úimport_string)Ú_lazy_re_compilez^[A-z0-9-_=]*$Ú>0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzc                   ó   • \ rS rSrSrSrg)ÚBadSignatureé4   zSignature does not match.© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    ÚWC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\django/core/signing.pyr   r   4   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'   @   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.   L   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_encoder4   Y   s   € Ü×#Ò# AÓ&×,Ñ,¨TÓ2Ð2r   c                 óV   • S[        U 5      * S-  -  n[        R                  " X-   5      $ )Nr0   é   )Úlenr1   Ú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)r4   r   ÚdigestÚdecode)ÚsaltÚvalueÚkeyr=   s       r   Úbase64_hmacrC   b   s)   € ÜÜ�D Ñ:×AÑAÓCóç�fƒhðr   c                 ó   • S[        U 5      -   $ )Ns   django.http.cookiesr   )rB   s    r   Ú_cookie_signer_keyrE   h   s   € à!¤K°Ó$4Ñ4Ð4r   c                 óª   • [        [        R                  5      nU" [        [        R                  5      [        [        [        R                  5      U S9$ )N)rB   Úfallback_keysr@   )r   r   ÚSIGNING_BACKENDrE   Ú
SECRET_KEYÚmapÚSECRET_KEY_FALLBACKS)r@   ÚSigners     r   Úget_cookie_signerrM   m   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év   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   rW   ÚJSONSerializer.dumps|   s   € Ü�zŠz˜#¨*Ñ5×<Ñ<¸YÓGÐGr   c                 óL   • [         R                  " UR                  S5      5      $ )NrU   )rV   Úloadsr?   )rY   Údatas     r   r]   ÚJSONSerializer.loads   s   € Ü�zŠz˜$Ÿ+™+ iÓ0Ó1Ð1r   r   N)r   r   r   r   r   rW   r]   r   r   r   r   rO   rO   v   s   † ñò
Hõ2r   rO   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.
)rB   r@   )Ú
serializerÚcompress)ÚTimestampSignerÚsign_object)rZ   rB   r@   ra   rb   s        r   rW   rW   ƒ   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.
)rB   r@   rG   )ra   Úmax_age)rc   Úunsign_object)r#   rB   r@   ra   rf   rG   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)rL   é±   NrS   )rB   Úsepr@   r=   rG   c                ó‚  • 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
        [        R                  U R
                  5      (       a  [        SU-  5      eg )NÚ.Úsha256zJUnsafe Signer separator: %r (cannot be empty or consist of only A-z0-9-_=))r   rI   rB   rK   rG   rj   Ú	__class__r   r   r@   r=   Ú_SEP_UNSAFEÚmatchÚ
ValueError)rY   rB   rj   r@   r=   rG   s         r   Ú__init__ÚSigner.__init__²   s¨   € ð ×-œ(×-Ñ-ˆŒð Ñ(ñ ä×.Ñ.ð 	Ôð
 ŒØ÷ 
Ø�N‰N×%Ô%Ø�N‰N×#Ó#ð
ˆŒ	ð #×. hˆŒÜ×Ñ˜TŸX™X×&Ñ&Üð"Ø$'ñ(óð ð 'r   c                 óp   • U=(       d    U R                   n[        U R                  S-   XU R                  S9$ )NÚsignerr<   )rB   rC   r@   r=   )rY   rA   rB   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)rj   rv   )rY   rA   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)rj   r   ÚrsplitrB   rG   r   rv   )rY   Úsigned_valuerA   ÚsigrB   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)   Trl   )rW   Úzlibrb   r7   r4   r?   r$   )rY   rZ   ra   rb   r^   Úis_compressedÚ
compressedÚbase64ds           r   rd   Ú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   rX   r:   r‚   Ú
decompressr]   )rY   Ú
signed_objra   Úkwargsr…   r‰   r^   s          r   rg   ÚSigner.unsign_objectð   sl   € ð —+’+˜jÑ3¨FÑ3×:Ñ:Ó<ˆØ˜R˜a�[ DÑ(ˆ
Þà˜a˜b�kˆGÜ˜'Ó"ˆÞÜ—?’? 4Ó(ˆDÙ‹|×!Ñ! $Ó'Ð'r   )r=   rG   rB   r@   rj   ry   )r   r   r   r   rr   rv   r$   r   rO   rd   rg   r   r   r   r   rL   rL   ±   s;   † à˜s¨¸ÈTõô*WòCòBð +9À5ô "ð2 4B÷ (r   rL   c                   ó>   ^ • \ rS rSrS rU 4S jrSU 4S jjrSrU =r$ )rc   éþ   c                 óP   • [        [        [        R                  " 5       5      5      $ ry   )r'   ÚintÚtime)rY   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      $ ry   )rj   r’   Úsuperr$   )rY   rA   rn   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|   rj   r.   Ú
isinstanceÚdatetimeÚ	timedeltaÚtotal_secondsr‘   r   )rY   rA   rf   Úresultr’   Úagern   s         €r   r   ÚTimestampSigner.unsign  s…   ø€ ô
 ‘‘ Ó&ˆØ!Ÿ=™=¨¯©°1Ó5ÑˆÜ˜yÓ)ˆ	ØÑÜ˜'¤8×#5Ñ#5×6Ñ6Ø!×/Ñ/Ó1�ä—)’)“+ 	Ñ)ˆCØ‹}Ý&Ë#ËwÐ'WÓXÐXØˆr   r   ry   )	r   r   r   r   r’   r$   r   r   Ú__classcell__)rn   s   @r   rc   rc   þ   s   ø† ò,õ#÷õ r   rc   )Úsha1)z%django.core.signing.get_cookie_signer)"r   r1   r™   rV   r‘   r‚   Údjango.confr   Údjango.utils.cryptor   r   Údjango.utils.encodingr   Údjango.utils.module_loadingr   Údjango.utils.regex_helperr	   ro   r"   Ú	Exceptionr   r   r'   r.   r4   r:   rC   rE   rM   rO   rW   r]   rL   rc   r   r   r   Ú<module>r§      sÁ   ðñ!óF Û Û Û Û å  ß BÝ -Ý 5Ý 6áÐ0Ó1€ØR€ô	�9ô 	ô	�|ô 	ò	ò
ò3ò-ô
ò5ô
÷
2ñ 
2ð Ð-¸.ÐSXôð4 	Ø	ØØØô÷,J(ñ J(ôZ�fõ r   