Ë
    gQ²e—$  ã                   óR  — d dl Z d dlZd dlZddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ej                  eef   Zej                  e   Zej                  ej"                  e   ef   Z G d„ d	«      Z G d
„ de«      Z G d„ de«      Zdedej,                  e   fd„Z G d„ d«      Zy)é    Né   )Ú_base64_alphabet)Úbase64_decode)Úbase64_encode)Ú
want_bytes)ÚBadSignaturec                   ó<   — e Zd ZdZdededefd„Zdedededefd„Zy)	ÚSigningAlgorithmzgSubclasses must implement :meth:`get_signature` to provide
    signature generation functionality.
    ÚkeyÚvalueÚreturnc                 ó   — t        «       ‚)z2Returns the signature for the given key and value.)ÚNotImplementedError©Úselfr   r   s      úK/home/yussbn06/site/env/lib/python3.12/site-packages/itsdangerous/signer.pyÚget_signaturezSigningAlgorithm.get_signature   s   € ä!Ó#Ð#ó    Úsigc                 óN   — t        j                  || j                  ||«      «      S )zMVerifies the given signature matches the expected
        signature.
        )ÚhmacÚcompare_digestr   )r   r   r   r   s       r   Úverify_signaturez!SigningAlgorithm.verify_signature   s$   € ô ×"Ñ" 3¨×(:Ñ(:¸3ÀÓ(FÓGÐGr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úbytesr   Úboolr   © r   r   r
   r
      sG   „ ñð$ ð $¨uð $¸ó $ðH Eð H°%ð H¸eð HÈô Hr   r
   c                   ó$   — e Zd ZdZdededefd„Zy)ÚNoneAlgorithmz`Provides an algorithm that does not perform any signing and
    returns an empty signature.
    r   r   r   c                  ó   — y)Nr   r    r   s      r   r   zNoneAlgorithm.get_signature%   s   € Ør   N)r   r   r   r   r   r   r    r   r   r"   r"       s!   „ ñð ð ¨uð ¸ô r   r"   c                   óŠ   — e Zd ZU dZ eej                  «      Zej                  e
d<   d
dej                  fd„Zdededefd	„Zy)ÚHMACAlgorithmz*Provides signature generation using HMACs.Údefault_digest_methodNÚdigest_methodc                 ó.   — |€| j                   }|| _        y ©N)r&   r'   )r   r'   s     r   Ú__init__zHMACAlgorithm.__init__1   s   € ØÐ Ø ×6Ñ6ˆMà%2ˆÕr   r   r   r   c                 óf   — t        j                  ||| j                  ¬«      }|j                  «       S )N)ÚmsgÚ	digestmod)r   Únewr'   Údigest)r   r   r   Úmacs       r   r   zHMACAlgorithm.get_signature7   s&   € Ü�h‰h�s °×1CÑ1CÔDˆØ�z‰z‹|Ðr   r)   )r   r   r   r   ÚstaticmethodÚhashlibÚsha1r&   Ú_tÚAnyÚ__annotations__r*   r   r   r    r   r   r%   r%   )   sI   … Ù4ñ
 %1°·±Ó$>Ð˜2Ÿ6™6Ó>ñ3 b§f¡fó 3ð ð ¨uð ¸ô r   r%   Ú
secret_keyr   c                 ó‚   — t        | t        t        f«      rt        | «      gS | D �cg c]  }t        |«      ‘Œ c}S c c}w r)   )Ú
isinstanceÚstrr   r   )r7   Úss     r   Ú_make_keys_listr<   <   s6   € Ü�*œs¤E˜lÔ+Ü˜:Ó&Ð'Ð'à#-Ö.˜aŒJ�q�MÒ.Ð.ùÒ.s   §<c                   ól  — e Zd ZU dZ eej                  «      Zej                  e
d<   dZee
d<   	 	 	 	 	 ddededed	ej                   e   d
ej                   ej                     dej                   e   fd„Zedefd„«       Zddedefd„Zdedefd„Zdedefd„Zdededefd„Zdedefd„Zdedefd„Zy)ÚSigneraÖ  A signer securely signs bytes, then unsigns them to verify that
    the value hasn't been changed.

    The secret key should be a random string of ``bytes`` and should not
    be saved to code or version control. Different salts should be used
    to distinguish signing in different contexts. See :doc:`/concepts`
    for information about the security of the secret key and salt.

    :param secret_key: The secret key to sign and verify with. Can be a
        list of keys, oldest to newest, to support key rotation.
    :param salt: Extra key to combine with ``secret_key`` to distinguish
        signatures in different contexts.
    :param sep: Separator between the signature and value.
    :param key_derivation: How to derive the signing key from the secret
        key and salt. Possible values are ``concat``, ``django-concat``,
        or ``hmac``. Defaults to :attr:`default_key_derivation`, which
        defaults to ``django-concat``.
    :param digest_method: Hash function to use when generating the HMAC
        signature. Defaults to :attr:`default_digest_method`, which
        defaults to :func:`hashlib.sha1`. Note that the security of the
        hash alone doesn't apply when used intermediately in HMAC.
    :param algorithm: A :class:`SigningAlgorithm` instance to use
        instead of building a default :class:`HMACAlgorithm` with the
        ``digest_method``.

    .. versionchanged:: 2.0
        Added support for key rotation by passing a list to
        ``secret_key``.

    .. versionchanged:: 0.18
        ``algorithm`` was added as an argument to the class constructor.

    .. versionchanged:: 0.14
        ``key_derivation`` and ``digest_method`` were added as arguments
        to the class constructor.
    r&   údjango-concatÚdefault_key_derivationNr7   ÚsaltÚsepÚkey_derivationr'   Ú	algorithmc                 ó<  — t        |«      | _        t        |«      | _        | j                  t        v rt        d«      ‚|�t        |«      }nd}|| _        |€| j                  }|| _        |€| j                  }|| _
        |€t        | j                  «      }|| _        y )NzŠThe given separator cannot be used because it may be contained in the signature itself. ASCII letters, digits, and '-_=' must not be used.ó   itsdangerous.Signer)r<   Úsecret_keysr   rB   r   Ú
ValueErrorrA   r@   rC   r&   r'   r%   rD   )r   r7   rA   rB   rC   r'   rD   s          r   r*   zSigner.__init__x   s¨   € ô ,;¸:Ó+FˆÔÜ$ S›/ˆŒà�8‰8Ô'Ñ'Üð7óð ð ÐÜ˜dÓ#‰Dà)ˆDàˆŒ	àÐ!Ø!×8Ñ8ˆNà#1ˆÔàÐ Ø ×6Ñ6ˆMà%2ˆÔàÐÜ% d×&8Ñ&8Ó9ˆIà+4ˆ�r   r   c                 ó    — | j                   d   S )z�The newest (last) entry in the :attr:`secret_keys` list. This
        is for compatibility from before key rotation support was added.
        éÿÿÿÿ)rG   )r   s    r   r7   zSigner.secret_key¦   s   € ð
 ×Ñ Ñ#Ð#r   c                 ó|  — |€| j                   d   }nt        |«      }| j                  dk(  rDt        j                  t
        | j                  | j                  |z   «      j                  «       «      S | j                  dk(  rGt        j                  t
        | j                  | j                  dz   |z   «      j                  «       «      S | j                  dk(  rLt        j                  || j                  ¬«      }|j                  | j                  «       |j                  «       S | j                  dk(  r|S t        d«      ‚)	aü  This method is called to derive the key. The default key
        derivation choices can be overridden here. Key derivation is not
        intended to be used as a security method to make a complex key
        out of a short password. Instead you should use large random
        secret keys.

        :param secret_key: A specific secret key to derive from.
            Defaults to the last item in :attr:`secret_keys`.

        .. versionchanged:: 2.0
            Added the ``secret_key`` parameter.
        rJ   Úconcatr?   s   signerr   )r-   ÚnonezUnknown key derivation method)rG   r   rC   r4   Úcastr   r'   rA   r/   r   r.   ÚupdateÚ	TypeError)r   r7   r0   s      r   Ú
derive_keyzSigner.derive_key­   s  € ð ÐØ×)Ñ)¨"Ñ-‰Jä# JÓ/ˆJà×Ñ (Ò*Ü—7‘7œ5 $×"4Ñ"4°T·Y±YÀÑ5KÓ"L×"SÑ"SÓ"UÓVÐVØ× Ñ  OÒ3Ü—7‘7Ü�t×)Ñ)¨$¯)©)°iÑ*?À*Ñ*LÓM×TÑTÓVóð ð × Ñ  FÒ*Ü—(‘(˜:°×1CÑ1CÔDˆCØ�J‰J�t—y‘yÔ!Ø—:‘:“<ÐØ× Ñ  FÒ*ØÐäÐ;Ó<Ð<r   r   c                 ó†   — t        |«      }| j                  «       }| j                  j                  ||«      }t	        |«      S )z*Returns the signature for the given value.)r   rQ   rD   r   r   )r   r   r   r   s       r   r   zSigner.get_signatureÎ   s9   € ä˜5Ó!ˆØ�o‰oÓˆØ�n‰n×*Ñ*¨3°Ó6ˆÜ˜SÓ!Ð!r   c                 óZ   — t        |«      }|| j                  z   | j                  |«      z   S )zSigns the given string.)r   rB   r   )r   r   s     r   ÚsignzSigner.signÕ   s+   € ä˜5Ó!ˆØ�t—x‘xÑ $×"4Ñ"4°UÓ";Ñ;Ð;r   r   c                 óä   — 	 t        |«      }t        |«      }t        | j                  «      D ]2  }| j                  |«      }| j                  j                  |||«      sŒ2 y y# t        $ r Y yw xY w)z+Verifies the signature for the given value.FT)r   Ú	Exceptionr   ÚreversedrG   rQ   rD   r   )r   r   r   r7   r   s        r   r   zSigner.verify_signatureÚ   sw   € ð	Ü Ó$ˆCô ˜5Ó!ˆä" 4×#3Ñ#3Ó4ò 	ˆJØ—/‘/ *Ó-ˆCà�~‰~×.Ñ.¨s°E¸3Õ?Ùð		ð øô ò 	Ùð	ús   ‚A# Á#	A/Á.A/Úsigned_valuec                 óî   — t        |«      }| j                  |vrt        d| j                  ›d�«      ‚|j                  | j                  d«      \  }}| j	                  ||«      r|S t        d|›d�|¬«      ‚)zUnsigns the given string.zNo z found in valuer   z
Signature z does not match)Úpayload)r   rB   r   Úrsplitr   )r   rX   r   r   s       r   ÚunsignzSigner.unsignë   su   € ä! ,Ó/ˆà�8‰8˜<Ñ'Ü  T§X¡X L°Ð@ÓAÐAà!×(Ñ(¨¯©°1Ó5‰
ˆˆsà× Ñ  ¨Ô,ØˆLä˜Z¨ w¨oÐ>ÈÔNÐNr   c                 óF   — 	 | j                  |«       y# t        $ r Y yw xY w)znOnly validates the given signed value. Returns ``True`` if
        the signature exists and is valid.
        TF)r\   r   )r   rX   s     r   ÚvalidatezSigner.validateù   s(   € ð	Ø�K‰K˜Ô%ØøÜò 	Ùð	ús   ‚ ”	 Ÿ )rF   ó   .NNNr)   )r   r   r   r   r1   r2   r3   r&   r4   r5   r6   r@   r:   Ú_t_secret_keyÚ_t_opt_str_bytesÚ_t_str_bytesÚOptionalr
   r*   Úpropertyr   r7   rQ   r   rT   r   r   r\   r^   r    r   r   r>   r>   C   s9  … ñ#ñV %1°·±Ó$>Ð˜2Ÿ6™6Ó>ð #2Ð˜CÓ1ð
 "8Ø Ø+/Ø-1Ø37ñ,5à!ð,5ð ð,5ð ð	,5ð
 Ÿ™ CÑ(ð,5ð —{‘{ 2§6¡6Ñ*ð,5ð —;‘;Ð/Ñ0ó,5ð\ ð$˜Eò $ó ð$ñ=Ð%5ð =Àó =ðB" <ð "°Eó "ð<˜,ð <¨5ó <ð
 lð ¸ð È$ó ð"O <ð O°Eó Oð \ð °dô r   r>   )r2   r   Útypingr4   Úencodingr   r   r   r   Úexcr   ÚUnionr:   r   rb   rc   ra   ÚIterabler`   r
   r"   r%   ÚListr<   r>   r    r   r   ú<module>rk      s§   ðÛ Û Û å &Ý #Ý #Ý  Ý à�x‰x˜˜U˜
Ñ#€Ø—;‘;˜|Ñ,Ð Ø—‘˜Ÿ™ \Ñ2°LÐ@ÑA€÷Hñ Hô Ð$ô ôÐ$ô ð&/ ð /°"·'±'¸%±.ó /÷~ò ~r   