§
    pïgj   ã                   óT  — d dl Z d dlZd dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZ  G d„ de j        ¬¦  «        Z G d	„ d
ee j        ¬¦  «        Z G d„ dee j        ¬¦  «        Z G d„ dee j        ¬¦  «        Z G d„ dee j        ¬¦  «        Zdede	ddfd„Zdededdfd„Zdedede	ddfd„Zdede	ddfd„Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d „ d!e¦  «        Z G d"„ d#e¦  «        Z G d$„ d%e¦  «        Z G d&„ d'e¦  «        Z G d(„ d)ee¦  «        ZdS )*é    N)Úutils)ÚUnsupportedAlgorithmÚ_Reasons)ÚBlockCipherAlgorithmÚCipherAlgorithm)Ú
algorithmsc                   ó^   — e Zd Zej        defd„¦   «         Zej        deddfd„¦   «         Z	dS )ÚModeÚreturnc                 ó   — dS )z@
        A string naming this mode (e.g. "ECB", "CBC").
        N© ©Úselfs    úN/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/modes.pyÚnamez	Mode.name   ó   € € € ó    Ú	algorithmNc                 ó   — dS )zq
        Checks that all the necessary invariants of this (mode, algorithm)
        combination are met.
        Nr   ©r   r   s     r   Úvalidate_for_algorithmzMode.validate_for_algorithm   r   r   )
Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractpropertyÚstrr   Úabstractmethodr   r   r   r   r   r
   r
      so   € € € € € ØÔð�cð ð ð ñ Ôðð
 	Ôð°ð ÀDð ð ð ñ Ôðð ð r   r
   )Ú	metaclassc                   ó4   — e Zd Zej        defd„¦   «         ZdS )ÚModeWithInitializationVectorr   c                 ó   — dS )zP
        The value of the initialization vector for this mode as bytes.
        Nr   r   s    r   Úinitialization_vectorz2ModeWithInitializationVector.initialization_vector"   r   r   N)r   r   r   r   r   Úbytesr#   r   r   r   r!   r!   !   s=   € € € € € ØÔð uð ð ð ñ Ôðð ð r   r!   c                   ó4   — e Zd Zej        defd„¦   «         ZdS )ÚModeWithTweakr   c                 ó   — dS )z@
        The value of the tweak for this mode as bytes.
        Nr   r   s    r   ÚtweakzModeWithTweak.tweak*   r   r   N)r   r   r   r   r   r$   r(   r   r   r   r&   r&   )   ó=   € € € € € ØÔð�uð ð ð ñ Ôðð ð r   r&   c                   ó4   — e Zd Zej        defd„¦   «         ZdS )ÚModeWithNoncer   c                 ó   — dS )z@
        The value of the nonce for this mode as bytes.
        Nr   r   s    r   ÚnoncezModeWithNonce.nonce2   r   r   N)r   r   r   r   r   r$   r-   r   r   r   r+   r+   1   r)   r   r+   c                   óJ   — e Zd Zej        dej        e         fd„¦   «         ZdS )ÚModeWithAuthenticationTagr   c                 ó   — dS )zP
        The value of the tag supplied to the constructor of this mode.
        Nr   r   s    r   ÚtagzModeWithAuthenticationTag.tag:   r   r   N)	r   r   r   r   r   ÚtypingÚOptionalr$   r1   r   r   r   r/   r/   9   sD   € € € € € ØÔð�V”_ UÔ+ð ð ð ñ Ôðð ð r   r/   r   r   r   c                 óT   — |j         dk    r|j        dk    rt          d¦  «        ‚d S d S )Né   ÚAESz=Only 128, 192, and 256 bit keys are allowed for this AES mode)Úkey_sizer   Ú
ValueErrorr   s     r   Ú_check_aes_key_lengthr9   A   s?   € ØÔ˜CÒÐ I¤N°eÒ$;Ð$;ÝØKñ
ô 
ð 	
ð  ÐÐ$;Ð$;r   c                 óº   — t          | j        ¦  «        dz  |j        k    r:t          d                     t          | j        ¦  «        | j        ¦  «        ¦  «        ‚d S )Né   zInvalid IV size ({}) for {}.)Úlenr#   Ú
block_sizer8   Úformatr   r   s     r   Ú_check_iv_lengthr?   H   sb   € õ ˆ4Ô%Ñ&Ô&¨Ñ*¨iÔ.BÒBÐBÝØ*×1Ò1Ý�DÔ.Ñ/Ô/°´ñô ñ
ô 
ð 	
ð CÐBr   r-   r   c                 ó   — t          |t          ¦  «        st          |› d�t          j        ¦  «        ‚t          | ¦  «        dz  |j        k    r0t          d                     t          | ¦  «        |¦  «        ¦  «        ‚d S )Nú" requires a block cipher algorithmr;   zInvalid nonce size ({}) for {}.)	Ú
isinstancer   r   r   ÚUNSUPPORTED_CIPHERr<   r=   r8   r>   )r-   r   r   s      r   Ú_check_nonce_lengthrD   S   sˆ   € õ �iÕ!5Ñ6Ô6ð 
Ý"ØÐ7Ð7Ð7ÝÔ'ñ
ô 
ð 	
õ ˆ5�z„z�A�~˜Ô-Ò-Ð-ÝØ-×4Ò4µS¸±Z´ZÀÑFÔFñ
ô 
ð 	
ð .Ð-r   c                 óª   — t          |t          ¦  «        st          | › d�t          j        ¦  «        ‚t          | |¦  «         t          | |¦  «         d S )NrA   )rB   r   r   r   rC   r9   r?   r   s     r   Ú_check_iv_and_key_lengthrF   a   sc   € õ �iÕ!5Ñ6Ô6ð 
Ý"ØÐ7Ð7Ð7ÝÔ'ñ
ô 
ð 	
õ ˜$ 	Ñ*Ô*Ð*Ý�T˜9Ñ%Ô%Ð%Ð%Ð%r   c                   ó>   — e Zd Zd Zdefd„Zedefd„¦   «         ZeZ	dS )ÚCBCr#   c                 ó>   — t          j        d|¦  «         || _        d S ©Nr#   ©r   Ú_check_byteslikeÚ_initialization_vector©r   r#   s     r   Ú__init__zCBC.__init__p   ó%   € ÝÔÐ6Ð8MÑNÔNÐNØ&;ˆÔ#Ð#Ð#r   r   c                 ó   — | j         S ©N©rM   r   s    r   r#   zCBC.initialization_vectort   ó   € àÔ*Ð*r   N©
r   r   r   r   r$   rO   Úpropertyr#   rF   r   r   r   r   rH   rH   m   ó_   € € € € € Ø€Dð<¨eð <ð <ð <ð <ð ð+ uð +ð +ð +ñ „Xð+ð 6ÐÐÐr   rH   c                   óJ   — e Zd Zd Zdefd„Zedefd„¦   «         Zdeddfd„Z	dS )ÚXTSr(   c                 ó‚   — t          j        d|¦  «         t          |¦  «        dk    rt          d¦  «        ‚|| _        d S )Nr(   é   z!tweak must be 128-bits (16 bytes))r   rL   r<   r8   Ú_tweak)r   r(   s     r   rO   zXTS.__init__~   s@   € ÝÔ˜w¨Ñ.Ô.Ð.åˆu‰:Œ:˜ÒÐÝÐ@ÑAÔAÐAàˆŒˆˆr   r   c                 ó   — | j         S rR   )r\   r   s    r   r(   z	XTS.tweak†   ó
   € àŒ{Ðr   r   Nc                 ó    — t          |t          j        t          j        f¦  «        rt	          d¦  «        ‚|j        dvrt          d¦  «        ‚d S )Nz\The AES128 and AES256 classes do not support XTS, please use the standard AES class instead.)r5   i   z\The XTS specification requires a 256-bit key for AES-128-XTS and 512-bit key for AES-256-XTS)rB   r   ÚAES128ÚAES256Ú	TypeErrorr7   r8   r   s     r   r   zXTS.validate_for_algorithmŠ   se   € Ý�i¥*Ô"3µZÔ5FÐ!GÑHÔHð 	Ýð2ñô ð ð
 Ô ZÐ/Ð/Ýð3ñô ð ð 0Ð/r   )
r   r   r   r   r$   rO   rV   r(   r   r   r   r   r   rY   rY   {   s}   € € € € € Ø€Dð˜eð ð ð ð ð ð�uð ð ð ñ „Xðð°ð ÀDð ð ð ð ð ð r   rY   c                   ó   — e Zd Zd ZeZdS )ÚECBN)r   r   r   r   r9   r   r   r   r   rd   rd   ˜   s   € € € € € Ø€Dà2ÐÐÐr   rd   c                   ó>   — e Zd Zd Zdefd„Zedefd„¦   «         ZeZ	dS )ÚOFBr#   c                 ó>   — t          j        d|¦  «         || _        d S rJ   rK   rN   s     r   rO   zOFB.__init__¡   rP   r   r   c                 ó   — | j         S rR   rS   r   s    r   r#   zOFB.initialization_vector¥   rT   r   NrU   r   r   r   rf   rf   ž   rW   r   rf   c                   ó>   — e Zd Zd Zdefd„Zedefd„¦   «         ZeZ	dS )ÚCFBr#   c                 ó>   — t          j        d|¦  «         || _        d S rJ   rK   rN   s     r   rO   zCFB.__init__¯   rP   r   r   c                 ó   — | j         S rR   rS   r   s    r   r#   zCFB.initialization_vector³   rT   r   NrU   r   r   r   rj   rj   ¬   rW   r   rj   c                   ó>   — e Zd Zd Zdefd„Zedefd„¦   «         ZeZ	dS )ÚCFB8r#   c                 ó>   — t          j        d|¦  «         || _        d S rJ   rK   rN   s     r   rO   zCFB8.__init__½   rP   r   r   c                 ó   — | j         S rR   rS   r   s    r   r#   zCFB8.initialization_vectorÁ   rT   r   NrU   r   r   r   rn   rn   º   s_   € € € € € Ø€Dð<¨eð <ð <ð <ð <ð ð+ uð +ð +ð +ñ „Xð+ð 6ÐÐÐr   rn   c                   óJ   — e Zd Zd Zdefd„Zedefd„¦   «         Zdeddfd„Z	dS )ÚCTRr-   c                 ó>   — t          j        d|¦  «         || _        d S )Nr-   )r   rL   Ú_nonce)r   r-   s     r   rO   zCTR.__init__Ë   s    € ÝÔ˜w¨Ñ.Ô.Ð.ØˆŒˆˆr   r   c                 ó   — | j         S rR   )rt   r   s    r   r-   z	CTR.nonceÏ   r^   r   r   Nc                 ó\   — t          | |¦  «         t          | j        | j        |¦  «         d S rR   )r9   rD   r-   r   r   s     r   r   zCTR.validate_for_algorithmÓ   s.   € Ý˜d IÑ.Ô.Ð.Ý˜DœJ¨¬	°9Ñ=Ô=Ð=Ð=Ð=r   )
r   r   r   r   r$   rO   rV   r-   r   r   r   r   r   rr   rr   È   s}   € € € € € Ø€Dð˜eð ð ð ð ð ð�uð ð ð ñ „Xðð>°ð >ÀDð >ð >ð >ð >ð >ð >r   rr   c                   ó¨   — e Zd Zd ZdZdZ	 	 ddedej        e         de	fd„Z
ed	ej        e         fd
„¦   «         Zed	efd„¦   «         Zded	dfd„ZdS )ÚGCMl   àÿ? l            Nr[   r#   r1   Úmin_tag_lengthc                 ó†  — t          j        d|¦  «         t          |¦  «        dk     st          |¦  «        dk    rt          d¦  «        ‚|| _        |�_t          j        d|¦  «         |dk     rt          d¦  «        ‚t          |¦  «        |k     r"t          d                     |¦  «        ¦  «        ‚|| _        || _        d S )	Nr#   r;   é€   zIinitialization_vector must be between 8 and 128 bytes (64 and 1024 bits).r1   é   zmin_tag_length must be >= 4z.Authentication tag must be {} bytes or longer.)	r   rL   r<   r8   rM   Ú_check_bytesr>   Ú_tagÚ_min_tag_length)r   r#   r1   ry   s       r   rO   zGCM.__init__Ý   sã   € õ 	ÔÐ6Ð8MÑNÔNÐNÝÐ$Ñ%Ô%¨Ò)Ð)­SÐ1FÑ-GÔ-GÈ#Ò-MÐ-MÝð"ñô ð ð '<ˆÔ#Øˆ?ÝÔ˜u cÑ*Ô*Ð*Ø Ò!Ð!Ý Ð!>Ñ?Ô?Ð?Ý�3‰xŒx˜.Ò(Ð(Ý ØD×KÒKØ&ñô ñô ð ð
 ˆŒ	Ø-ˆÔÐÐr   r   c                 ó   — | j         S rR   )r~   r   s    r   r1   zGCM.tagù   s
   € àŒyÐr   c                 ó   — | j         S rR   rS   r   s    r   r#   zGCM.initialization_vectorý   rT   r   r   c                 ó  — t          | |¦  «         t          |t          ¦  «        st          dt          j        ¦  «        ‚|j        dz  }| j        �:t          | j        ¦  «        |k    r$t          d 
                    |¦  «        ¦  «        ‚d S d S )Nz%GCM requires a block cipher algorithmr;   z0Authentication tag cannot be more than {} bytes.)r9   rB   r   r   r   rC   r=   r~   r<   r8   r>   )r   r   Úblock_size_bytess      r   r   zGCM.validate_for_algorithm  s¡   € Ý˜d IÑ.Ô.Ð.Ý˜)Õ%9Ñ:Ô:ð 	Ý&Ø7ÝÔ+ñô ð ð %Ô/°1Ñ4ÐØŒ9Ð ¥S¨¬¡^¤^Ð6FÒ%FÐ%FÝØB×IÒIØ$ñô ñô ð ð !Ð Ð%FÐ%Fr   )Nr[   )r   r   r   r   Ú_MAX_ENCRYPTED_BYTESÚ_MAX_AAD_BYTESr$   r2   r3   ÚintrO   rV   r1   r#   r   r   r   r   r   rx   rx   Ø   sß   € € € € € Ø€DØ-ÐØ!€Nð
 '+Ø ð	.ð .à$ð.ð Œ_˜UÔ#ð.ð ð	.ð .ð .ð .ð8 ð�V”_ UÔ+ð ð ð ñ „Xðð ð+ uð +ð +ð +ñ „Xð+ð°ð ÀDð ð ð ð ð ð r   rx   ) r   r2   Úcryptographyr   Úcryptography.exceptionsr   r   Ú/cryptography.hazmat.primitives._cipheralgorithmr   r   Ú&cryptography.hazmat.primitives.ciphersr   ÚABCMetar
   r!   r&   r+   r/   r9   r?   r$   r   rD   rF   rH   rY   rd   rf   rj   rn   rr   rx   r   r   r   ú<module>rŒ      s“  ðð €
€
€
Ø €€€à Ð Ð Ð Ð Ð Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bðð ð ð ð ð ð ð ð >Ð =Ð =Ð =Ð =Ð =ðð ð ð ð �S”[ð ñ ô ð ðð ð ð ð  4°3´;ð ñ ô ð ðð ð ð ð �D C¤Kð ñ ô ð ðð ð ð ð �D C¤Kð ñ ô ð ðð ð ð ð  °´ð ñ ô ð ð
 ð 
°ð 
ÀTð 
ð 
ð 
ð 
ð
Ø
&ð
Ø3Gð
à	ð
ð 
ð 
ð 
ð
Øð
Øð
Ø(7ð
à	ð
ð 
ð 
ð 
ð	&Ø
&ð	&Ø3Bð	&à	ð	&ð 	&ð 	&ð 	&ð6ð 6ð 6ð 6ð 6Ð
&ñ 6ô 6ð 6ðð ð ð ð ˆ-ñ ô ð ð:3ð 3ð 3ð 3ð 3ˆ$ñ 3ô 3ð 3ð6ð 6ð 6ð 6ð 6Ð
&ñ 6ô 6ð 6ð6ð 6ð 6ð 6ð 6Ð
&ñ 6ô 6ð 6ð6ð 6ð 6ð 6ð 6Ð'ñ 6ô 6ð 6ð>ð >ð >ð >ð >ˆ-ñ >ô >ð >ð 6ð 6ð 6ð 6ð 6Ð
&Ð(Añ 6ô 6ð 6ð 6ð 6r   