Ë
    ¸Å:j“  ã                  óú   — d dl mZ d dlm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 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 ddlmZ ddlmZ ddlmZ  G d„ de«      Z G d„ dee   «      Zy)é    )ÚannotationsN)Údatetime)Útimezoneé   )Úbase64_decode)Úbase64_encode)Úbytes_to_int)Úint_to_bytes)Ú
want_bytes)ÚBadSignature)ÚBadTimeSignature)ÚSignatureExpired)Ú_TSerialized)Ú
Serializer)ÚSignerc                  óÎ   ‡ — e Zd ZdZd	d„Zd
d„Zdd„Zej                  	 	 d	 	 	 	 	 	 	 dd„«       Z	ej                  	 	 d	 	 	 	 	 	 	 dd„«       Z		 	 d	 	 	 	 	 	 	 dˆ fd„Z	ddd„Z
ˆ xZS )ÚTimestampSignerzþWorks like the regular :class:`.Signer` but also records the time
    of the signing and can be used to expire signatures. The
    :meth:`unsign` method can raise :exc:`.SignatureExpired` if the
    unsigning failed because the signature is expired.
    c                ó<   — t        t        j                  «       «      S )zTReturns the current timestamp. The function must return an
        integer.
        )ÚintÚtime)Úselfs    úg/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/itsdangerous/timed.pyÚget_timestampzTimestampSigner.get_timestamp   s   € ô ”4—9‘9“;ÓÐó    c                óL   — t        j                  |t        j                  ¬«      S )a   Convert the timestamp from :meth:`get_timestamp` into an
        aware :class`datetime.datetime` in UTC.

        .. versionchanged:: 2.0
            The timestamp is returned as a timezone-aware ``datetime``
            in UTC rather than a naive ``datetime`` assumed to be UTC.
        )Útz)r   Úfromtimestampr   Úutc)r   Útss     r   Útimestamp_to_datetimez%TimestampSigner.timestamp_to_datetime#   s   € ô ×%Ñ% b¬X¯\©\Ô:Ð:r   c                óÄ   — t        |«      }t        t        | j                  «       «      «      }t        | j                  «      }||z   |z   }||z   | j                  |«      z   S )z:Signs the given string and also attaches time information.)r   r   r
   r   ÚsepÚget_signature)r   ÚvalueÚ	timestampr"   s       r   ÚsignzTimestampSigner.sign-   sZ   € ä˜5Ó!ˆÜ!¤,¨t×/AÑ/AÓ/CÓ"DÓEˆ	Ü˜Ÿ™Ó"ˆØ˜‘˜iÑ'ˆØ�s‰{˜T×/Ñ/°Ó6Ñ6Ð6r   c                 ó   — y ©N© ©r   Úsigned_valueÚmax_ageÚreturn_timestamps       r   ÚunsignzTimestampSigner.unsign8   s   € ð r   c                 ó   — y r(   r)   r*   s       r   r.   zTimestampSigner.unsign@   s   € ð "%r   c                ó
  •— 	 t         ‰| �  |«      }d}t	        | j
                  «      }||vr|r|‚t        d|¬«      ‚|j                  |d«      \  }}	d}
d}	 t        t        |	«      «      }
|�+|
�	 | j                  |
«      }t        t        |«      ||¬«      ‚|
€t        d|¬«      ‚|�b| j!                  «       |
z
  }||kD  r$t#        d|› d	|› d
�|| j                  |
«      ¬«      ‚|dk  r!t#        d|› d�|| j                  |
«      ¬«      ‚|r|| j                  |
«      fS |S # t        $ r}|}|j                  xs d}Y d}~�Œ0d}~ww xY w# t        $ r Y Œëw xY w# t        t        t        f$ r}t        d|¬«      |‚d}~ww xY w)aí  Works like the regular :meth:`.Signer.unsign` but can also
        validate the time. See the base docstring of the class for
        the general behavior. If ``return_timestamp`` is ``True`` the
        timestamp of the signature will be returned as an aware
        :class:`datetime.datetime` object in UTC.

        .. versionchanged:: 2.0
            The timestamp is returned as a timezone-aware ``datetime``
            in UTC rather than a naive ``datetime`` assumed to be UTC.
        Nr   ztimestamp missing)Úpayloadr   zMalformed timestamp)r1   Údate_signedzSignature age z > z secondsr   z < 0 seconds)Úsuperr.   r   r1   r   r"   r   Úrsplitr	   r   Ú	Exceptionr    Ú
ValueErrorÚOSErrorÚOverflowErrorÚstrr   r   )r   r+   r,   r-   ÚresultÚ	sig_errorÚer"   r$   Úts_bytesÚts_intÚts_dtÚexcÚageÚ	__class__s                 €r   r.   zTimestampSigner.unsignH   s×  ø€ ð 	&Ü‘W‘^ LÓ1ˆFØˆIô
 ˜Ÿ™Ó"ˆð �fÑÙØ�ä"Ð#6ÀÔGÐGà Ÿ-™-¨¨QÓ/‰ˆˆxØ!ˆØ!%ˆð	Ü!¤-°Ó"9Ó:ˆFð Ð ØÐ!ðØ ×6Ñ6°vÓ>�Eô #¤3 y£>¸5ÈeÔTÐTð ˆ>Ü"Ð#8À%ÔHÐHð ÐØ×$Ñ$Ó&¨Ñ/ˆCà�WŠ}Ü&Ø$ S E¨¨W¨I°XÐ>Ø!Ø $× :Ñ :¸6Ó Bôð ð �QŠwÜ&Ø$ S E¨Ð6Ø!Ø $× :Ñ :¸6Ó Bôð ñ Ø˜$×4Ñ4°VÓ<Ð<Ð<àˆøôG ò 	&ØˆIØ—Y‘YÒ% #ŽFûð	&ûô. ò 	Ùð	ûô #¤G¬]Ð;ò ô +Ø-°uôàðûðúsA   ƒD# ÁE Á1E Ä#	E	Ä,EÅE	Å	EÅEÅFÅ/E=Å=Fc                óJ   — 	 | j                  ||¬«       y# t        $ r Y yw xY w)zeOnly validates the given signed value. Returns ``True`` if
        the signature exists and is valid.)r,   TF)r.   r   )r   r+   r,   s      r   ÚvalidatezTimestampSigner.validate    s,   € ð	Ø�K‰K˜¨gˆKÔ6ØøÜò 	Ùð	ús   ‚ –	"¡")Úreturnr   )r   r   rE   r   )r$   ústr | bytesrE   Úbytes)NF)r+   rF   r,   ú
int | Noner-   zt.Literal[False]rE   rG   )NT)r+   rF   r,   rH   r-   zt.Literal[True]rE   ztuple[bytes, datetime])r+   rF   r,   rH   r-   ÚboolrE   ztuple[bytes, datetime] | bytesr(   )r+   rF   r,   rH   rE   rI   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r&   ÚtÚoverloadr.   rD   Ú__classcell__©rB   s   @r   r   r      sæ   ø„ ñó ó;ó7ð ‡Z�Zð #Ø-2ð	à!ðð ðð +ð	ð
 
òó ðð ‡Z�Zð #Ø,0ð	%à!ð%ð ð%ð *ð	%ð
 
 ò%ó ð%ð #Ø!&ð	Và!ðVð ðVð ð	Vð
 
(õV÷pð r   r   c                  ó|   ‡ — e Zd ZU dZeZded<   	 d	 	 	 dˆ fd„Z	 	 	 d		 	 	 	 	 	 	 	 	 d
d„Z	 	 d	 	 	 	 	 	 	 dd„Z	ˆ xZ
S )ÚTimedSerializerzOUses :class:`TimestampSigner` instead of the default
    :class:`.Signer`.
    ztype[TimestampSigner]Údefault_signerc                óJ   •— t        j                  dt        ‰| �  |«      «      S )Núcabc.Iterator[TimestampSigner])rN   Úcastr3   Úiter_unsigners)r   ÚsaltrB   s     €r   rX   zTimedSerializer.iter_unsigners±   s!   ø€ ô �v‰vÐ6¼¹Ñ8NÈtÓ8TÓUÐUr   c                ó&  — t        |«      }d}| j                  |«      D ]6  }	 |j                  ||d¬«      \  }}| j                  |«      }	|r|	|fc S |	c S  t        j                  t
        |«      ‚# t        $ r ‚ t
        $ r}
|
}Y d}
~
Œld}
~
ww xY w)a†  Reverse of :meth:`dumps`, raises :exc:`.BadSignature` if the
        signature validation fails. If a ``max_age`` is provided it will
        ensure the signature is not older than that time in seconds. In
        case the signature is outdated, :exc:`.SignatureExpired` is
        raised. All arguments are forwarded to the signer's
        :meth:`~TimestampSigner.unsign` method.
        NT)r,   r-   )r   rX   r.   Úload_payloadr   r   rN   rW   )r   Úsr,   r-   rY   Úlast_exceptionÚsignerÚbase64dr%   r1   Úerrs              r   ÚloadszTimedSerializer.loads¹   s¬   € ô �q‹MˆØˆà×)Ñ)¨$Ó/ò 	%ˆFð%Ø%+§]¡]Ø˜w¸ð &3ó &Ñ"�˜ð ×+Ñ+¨GÓ4�á#Ø" IÐ-Ò-à’ð	%ô$ �f‰f”\ >Ó2Ð2øô $ò ð Üò %Ø!$•ûð%ús   £-A2ÁA2Á2BÂBÂBc                ó.   — | j                  ||d|i¬«      S )Nr,   )Úload_kwargs)Ú_loads_unsafe_impl)r   r\   r,   rY   s       r   Úloads_unsafezTimedSerializer.loads_unsafeÞ   s!   € ð ×&Ñ& q¨$¸YÈÐ<PÐ&ÓQÐQr   r(   )rY   ústr | bytes | NonerE   rV   )NFN)
r\   rF   r,   rH   r-   rI   rY   rf   rE   zt.Any)NN)r\   rF   r,   rH   rY   rf   rE   ztuple[bool, t.Any])rJ   rK   rL   rM   r   rT   Ú__annotations__rX   ra   re   rP   rQ   s   @r   rS   rS   ª   s«   ø… ñð -<€NÐ)Ó;ð *.ðVØ&ðVà	'õVð #Ø!&Ø#'ð#3àð#3ð ð#3ð ð	#3ð
 !ð#3ð 
ó#3ðP #Ø#'ð	RàðRð ðRð !ð	Rð
 
÷Rr   rS   )Ú
__future__r   Úcollections.abcÚabcÚcabcr   ÚtypingrN   r   r   Úencodingr   r   r	   r
   r   r@   r   r   r   Ú
serializerr   r   r^   r   r   rS   r)   r   r   ú<module>ro      sZ   ðÝ "å Û Û Ý Ý å #Ý #Ý "Ý "Ý  Ý Ý !Ý !Ý $Ý "Ý ôQ�fô Qôh:R�j Ñ.õ :Rr   