Ë
    ýQµi©   ã                  ó6  — d dl mZ 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&d„Z	 	 	 	 	 	 d'd„Z	 	 	 	 	 	 	 	 d(d„Z	 	 	 	 	 	 d)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y)*é    )ÚannotationsN)Úutils)ÚUnsupportedAlgorithmÚ_Reasons)ÚBlockCipherAlgorithmÚCipherAlgorithm)Ú
algorithmsc                  ób   — e Zd Zeej
                  dd„«       «       Zej
                  dd„«       Zy)ÚModec                 ó   — y)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   ó   � ó    c                 ó   — y)zq
        Checks that all the necessary invariants of this (mode, algorithm)
        combination are met.
        Nr   ©r   Ú	algorithms     r   Úvalidate_for_algorithmzMode.validate_for_algorithm   r   r   N)ÚreturnÚstr©r   r   r   ÚNone)Ú__name__Ú
__module__Ú__qualname__ÚpropertyÚabcÚabstractmethodr   r   r   r   r   r   r      s<   „ ØØ×Ñòó ó ðð
 	×Ñòó ñr   r   )Ú	metaclassc                  ó<   — e Zd Zeej
                  dd„«       «       Zy)ÚModeWithInitializationVectorc                 ó   — y)zP
        The value of the initialization vector for this mode as bytes.
        Nr   r   s    r   Úinitialization_vectorz2ModeWithInitializationVector.initialization_vector$   r   r   N©r   Úbytes)r   r   r   r   r    r!   r&   r   r   r   r$   r$   #   ó"   „ ØØ×Ñòó ó ñr   r$   c                  ó<   — e Zd Zeej
                  dd„«       «       Zy)ÚModeWithTweakc                 ó   — y)z@
        The value of the tweak for this mode as bytes.
        Nr   r   s    r   ÚtweakzModeWithTweak.tweak-   r   r   Nr'   )r   r   r   r   r    r!   r-   r   r   r   r+   r+   ,   r)   r   r+   c                  ó<   — e Zd Zeej
                  dd„«       «       Zy)ÚModeWithNoncec                 ó   — y)z@
        The value of the nonce for this mode as bytes.
        Nr   r   s    r   ÚnoncezModeWithNonce.nonce6   r   r   Nr'   )r   r   r   r   r    r!   r1   r   r   r   r/   r/   5   r)   r   r/   c                  ó<   — e Zd Zeej
                  dd„«       «       Zy)ÚModeWithAuthenticationTagc                 ó   — y)zP
        The value of the tag supplied to the constructor of this mode.
        Nr   r   s    r   ÚtagzModeWithAuthenticationTag.tag?   r   r   N©r   útyping.Optional[bytes])r   r   r   r   r    r!   r5   r   r   r   r3   r3   >   r)   r   r3   c                óX   — |j                   dkD  r|j                  dk(  rt        d«      ‚y y )Né   ÚAESz=Only 128, 192, and 256 bit keys are allowed for this AES mode)Úkey_sizer   Ú
ValueErrorr   s     r   Ú_check_aes_key_lengthr=   G   s3   € Ø×Ñ˜CÒ I§N¡N°eÒ$;ÜØKó
ð 	
ð %<Ðr   c                ó¾   — t        | j                  «      dz  |j                  k7  r8t        dj	                  t        | j                  «      | j
                  «      «      ‚y )Né   zInvalid IV size ({}) for {}.)Úlenr&   Ú
block_sizer<   Úformatr   r   s     r   Ú_check_iv_lengthrC   N   sW   € ô ˆ4×%Ñ%Ó&¨Ñ*¨i×.BÑ.BÒBÜØ*×1Ñ1Ü�D×.Ñ.Ó/°·±óó
ð 	
ð Cr   c                óÊ   — t        |t        «      st        |› d�t        j                  «      ‚t        | «      dz  |j                  k7  rt        dt        | «      › d|› d�«      ‚y )Nú" requires a block cipher algorithmr?   zInvalid nonce size (z) for ú.)Ú
isinstancer   r   r   ÚUNSUPPORTED_CIPHERr@   rA   r<   )r1   r   r   s      r   Ú_check_nonce_lengthrI   Y   sl   € ô �iÔ!5Ô6Ü"ØˆfÐ6Ð7Ü×'Ñ'ó
ð 	
ô ˆ5ƒz�A�~˜×-Ñ-Ò-ÜÐ/´°E³
¨|¸6À$ÀÀqÐIÓJÐJð .r   c                óŽ   — t        |t        «      st        | › d�t        j                  «      ‚t        | |«       t        | |«       y )NrE   )rG   r   r   r   rH   r=   rC   r   s     r   Ú_check_iv_and_key_lengthrK   e   sF   € ô �iÔ!5Ô6Ü"ØˆfÐ6Ð7Ü×'Ñ'ó
ð 	
ô ˜$ 	Ô*Ü�T˜9Õ%r   c                  ó.   — e Zd Zd Zdd„Zedd„«       ZeZy)ÚCBCc                ó>   — t        j                  d|«       || _        y ©Nr&   ©r   Ú_check_byteslikeÚ_initialization_vector©r   r&   s     r   Ú__init__zCBC.__init__t   ó   € Ü×ÑÐ6Ð8MÔNØ&;ˆÕ#r   c                ó   — | j                   S ©N©rR   r   s    r   r&   zCBC.initialization_vectorx   ó   € à×*Ñ*Ð*r   N©r&   r(   r'   ©	r   r   r   r   rT   r   r&   rK   r   r   r   r   rM   rM   q   ó(   „ Ø€Dó<ð ò+ó ð+ð 6Ñr   rM   c                  ó2   — e Zd Zd Zdd„Zedd„«       Zdd„Zy)ÚXTSc                óp   — t        j                  d|«       t        |«      dk7  rt        d«      ‚|| _        y )Nr-   é   z!tweak must be 128-bits (16 bytes))r   rQ   r@   r<   Ú_tweak)r   r-   s     r   rT   zXTS.__init__‚   s1   € Ü×Ñ˜w¨Ô.äˆu‹:˜ÒÜÐ@ÓAÐAàˆ�r   c                ó   — | j                   S rW   )ra   r   s    r   r-   z	XTS.tweakŠ   ó   € à�{‰{Ðr   c                ó    — t        |t        j                  t        j                  f«      rt	        d«      ‚|j
                  dvrt        d«      ‚y )Nz\The AES128 and AES256 classes do not support XTS, please use the standard AES class instead.)r9   i   z\The XTS specification requires a 256-bit key for AES-128-XTS and 512-bit key for AES-256-XTS)rG   r	   ÚAES128ÚAES256Ú	TypeErrorr;   r<   r   s     r   r   zXTS.validate_for_algorithmŽ   sV   € Ü�i¤*×"3Ñ"3´Z×5FÑ5FÐ!GÔHÜð2óð ð
 ×Ñ ZÑ/Üð3óð ð 0r   N)r-   r(   r'   r   )r   r   r   r   rT   r   r-   r   r   r   r   r^   r^      s%   „ Ø€Dóð òó ðôr   r^   c                  ó   — e Zd Zd ZeZy)ÚECBN)r   r   r   r   r=   r   r   r   r   ri   ri   œ   s   „ Ø€Dà2Ñr   ri   c                  ó.   — e Zd Zd Zdd„Zedd„«       ZeZy)ÚOFBc                ó>   — t        j                  d|«       || _        y rO   rP   rS   s     r   rT   zOFB.__init__¥   rU   r   c                ó   — | j                   S rW   rX   r   s    r   r&   zOFB.initialization_vector©   rY   r   NrZ   r'   r[   r   r   r   rk   rk   ¢   r\   r   rk   c                  ó.   — e Zd Zd Zdd„Zedd„«       ZeZy)ÚCFBc                ó>   — t        j                  d|«       || _        y rO   rP   rS   s     r   rT   zCFB.__init__³   rU   r   c                ó   — | j                   S rW   rX   r   s    r   r&   zCFB.initialization_vector·   rY   r   NrZ   r'   r[   r   r   r   ro   ro   °   r\   r   ro   c                  ó.   — e Zd Zd Zdd„Zedd„«       ZeZy)ÚCFB8c                ó>   — t        j                  d|«       || _        y rO   rP   rS   s     r   rT   zCFB8.__init__Á   rU   r   c                ó   — | j                   S rW   rX   r   s    r   r&   zCFB8.initialization_vectorÅ   rY   r   NrZ   r'   r[   r   r   r   rs   rs   ¾   s(   „ Ø€Dó<ð ò+ó ð+ð 6Ñr   rs   c                  ó2   — e Zd Zd Zdd„Zedd„«       Zdd„Zy)ÚCTRc                ó>   — t        j                  d|«       || _        y )Nr1   )r   rQ   Ú_nonce)r   r1   s     r   rT   zCTR.__init__Ï   s   € Ü×Ñ˜w¨Ô.Øˆ�r   c                ó   — | j                   S rW   )ry   r   s    r   r1   z	CTR.nonceÓ   rc   r   c                ó^   — t        | |«       t        | j                  | j                  |«       y rW   )r=   rI   r1   r   r   s     r   r   zCTR.validate_for_algorithm×   s    € Ü˜d IÔ.Ü˜DŸJ™J¨¯	©	°9Õ=r   N)r1   r(   r'   r   )r   r   r   r   rT   r   r1   r   r   r   r   rw   rw   Ì   s%   „ Ø€Dóð òó ðô>r   rw   c                  ó\   — e Zd Zd ZdZdZ	 	 d	 	 	 	 	 d	d„Zed
d„«       Zedd„«       Z	dd„Z
y)ÚGCMl   àÿ? l            Nc                óH  — t        j                  d|«       t        |«      dk  st        |«      dkD  rt        d«      ‚|| _        |�Nt        j
                  d|«       |dk  rt        d«      ‚t        |«      |k  rt        dj                  |«      «      ‚|| _        || _        y )	Nr&   r?   é€   zIinitialization_vector must be between 8 and 128 bytes (64 and 1024 bits).r5   é   zmin_tag_length must be >= 4z.Authentication tag must be {} bytes or longer.)	r   rQ   r@   r<   rR   Ú_check_bytesrB   Ú_tagÚ_min_tag_length)r   r&   r5   Úmin_tag_lengths       r   rT   zGCM.__init__á   s±   € ô 	×ÑÐ6Ð8MÔNÜÐ$Ó%¨Ò)¬SÐ1FÓ-GÈ#Ò-MÜð"óð ð '<ˆÔ#Øˆ?Ü×Ñ˜u cÔ*Ø Ò!Ü Ð!>Ó?Ð?Ü�3‹x˜.Ò(Ü ØD×KÑKØ&óóð ð
 ˆŒ	Ø-ˆÕr   c                ó   — | j                   S rW   )r‚   r   s    r   r5   zGCM.tagý   s   € à�y‰yÐr   c                ó   — | j                   S rW   rX   r   s    r   r&   zGCM.initialization_vector  rY   r   c                ó  — t        | |«       t        |t        «      st        dt        j
                  «      ‚|j                  dz  }| j                  �3t        | j                  «      |kD  rt        dj                  |«      «      ‚y y )Nz%GCM requires a block cipher algorithmr?   z0Authentication tag cannot be more than {} bytes.)r=   rG   r   r   r   rH   rA   r‚   r@   r<   rB   )r   r   Úblock_size_bytess      r   r   zGCM.validate_for_algorithm  s„   € Ü˜d IÔ.Ü˜)Ô%9Ô:Ü&Ø7Ü×+Ñ+óð ð %×/Ñ/°1Ñ4ÐØ�9‰9Ð ¤S¨¯©£^Ð6FÒ%FÜØB×IÑIØ$óóð ð &GÐ r   )Nr`   )r&   r(   r5   r7   r„   Úintr6   r'   r   )r   r   r   r   Ú_MAX_ENCRYPTED_BYTESÚ_MAX_AAD_BYTESrT   r   r5   r&   r   r   r   r   r}   r}   Ü   sh   „ Ø€DØ-ÐØ!€Nð
 '+Ø ð	.à$ð.ð $ð.ð ó	.ð8 òó ðð ò+ó ð+ôr   r}   )r   r   r   r   r   r   )r   r$   r   r   r   r   )r1   r(   r   r   r   r   r   r   )r   r$   r   r   r   r   ) Ú
__future__r   r    ÚtypingÚcryptographyr   Úcryptography.exceptionsr   r   Ú/cryptography.hazmat.primitives._cipheralgorithmr   r   Ú&cryptography.hazmat.primitives.ciphersr	   ÚABCMetar   r$   r+   r/   r3   r=   rC   rI   rK   rM   r^   ri   rk   ro   rs   rw   r}   r   r   r   ú<module>r“      sI  ðõ
 #ã 
Û å ß B÷õ >ô�S—[‘[õ ô  4°3·;±;õ ô�D C§K¡Kõ ô�D C§K¡Kõ ô °·±õ ó
ð
Ø
&ð
Ø3Gð
à	ó
ð	KØð	KØð	KØ(7ð	Kà	ó	Kð	&Ø
&ð	&Ø3Bð	&à	ó	&ô6Ð
&ô 6ôˆ-ô ô:3ˆ$ô 3ô6Ð
&ô 6ô6Ð
&ô 6ô6Ð'ô 6ô>ˆ-ô >ô 6Ð
&Ð(Aõ 6r   