
    ¿igC                        d Z ddlZddlmZmZmZ ddlmZ ddlm	Z	  G d d          Z
e
fdZ G d	 d
ej                  Z G d de          Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z e            fdZd ZdS )z*Self-testing for PyCryptodome hash modules    N)a2b_hexb2a_hexhexlify)b)strxor_cc                       e Zd ZdS )
_NoDefaultN)__name__
__module____qualname__     ]/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/Cipher/common.pyr	   r	   !   s          r   r	   c                 X    	 | |         }n# t           $ r |t          u r |cY S w xY w| |= |S )zAGet an item from a dictionary, and remove it from the dictionary.)KeyErrorr	   )dkdefaultretvals       r   _extractr   "   sR    1   j   	
!Ms    $$c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )CipherSelfTestc                    t           j                            |            || _        |                                }t          |d          | _        t          t          |d                    | _        t          t          |d                    | _	        t          t          |d                    | _
        t          |dd           | _        t          |dd           | _        t          |dd           | _        | j        rt          | j                  | _        t          |dd           }t          |          | _        |qt!          | j        d	|z             | _        t          |d
d           | _        | j        t          |dd           | _        | j        t          | j                  | _        n=d | _        t          |d
d           | _        | j        t          | j                  | _        || _        d S Ndescriptionkey	plaintext
ciphertextmodule_name
assoc_datamacmodeMODE_ivnonceunittestTestCase__init__modulecopyr   r   r   r   r   r   r   r    r!   str	mode_namegetattrr"   r$   extra_paramsselfr*   paramsr"   s       r   r)   zCipherSelfTest.__init__0   s   ""4((( #FM::Xfe,,--8FK8899HV\::;;#FM4@@"6<>>FE400? 	#{{DH--TWt^<<DIvtT22DGw"67D99w"DG** DIvtT22DGw"DG**"r   c                     | j         S N)r   r1   s    r   shortDescriptionzCipherSelfTest.shortDescriptionV   s    r   c                     | j                                         }t          | j                  }g }| j        | j        g}| j        |t          | j                  gz  } | j        j        |g|R i |S r4   r/   r+   r   r   r"   r$   r*   newr1   r2   r   	old_styles       r   _newzCipherSelfTest._newY   ~    "''))dh	9 )I7747++--It{s9Y999&999r   c                 x    t          | j        d|z             sdS | j        t          | j        d|z             k    S )Nr#   F)hasattrr*   r"   r.   )r1   names     r   isModezCipherSelfTest.isModee   s<    t{GDL11 	5yGDK>>>>r   c                    t          | j                  }t          | j                  }g }| j        rd | j        D             }d }d }t	          d          D ]}|                                 }|                                 }|D ],}	|                    |	           |                    |	           -t          |                    |                    }
t          |	                    |                    }|r,| 
                    ||
           | 
                    ||           |
|}}| 
                    | j        |           | 
                    | j        |           | j        ret          |                                          }| 
                    | j        |           |                    t          | j                             d S d S )Nc                 F    g | ]}t          t          |                    S r   )r   r   .0xs     r   
<listcomp>z*CipherSelfTest.runTest.<locals>.<listcomp>o   s$    BBBQ71Q44==BBBr      )r   r   r   r    ranger<   updater   encryptdecryptassertEqualr!   digestverify)r1   r   r   r    ctpticipherdeciphercompctXptXr!   s                r   runTestzCipherSelfTest.runTestj   s   DN++	T_--

? 	CBB$/BBBJ q 	 	AYY[[Fyy{{H # & &d###%%%%&..3344C(**:6677C *  S)))  S)))#BB"---,,,8 	/&--//**CTXs+++OOGDH--.....	/ 	/r   N)r
   r   r   r)   r6   r<   rA   rX   r   r   r   r   r   .   s`        $# $# $#L     
: 
: 
:? ? ?
%/ %/ %/ %/ %/r   r   c                       e Zd Zd Zd ZdS )CipherStreamingSelfTestc                 D    | j         }| j        |d| j        dz  }|dS )Nz in z modez# should behave like a stream cipher)r   r"   r-   )r1   descs     r   r6   z(CipherStreamingSelfTest.shortDescription   s4    9 DT^^^55D:>$$@@r   c           	      &   t          | j                  }t          | j                  }g }|                                 }t	          dt          |          d          D ]5}|                    |                    |||dz                                 6t          t          d          
                    |                    }|                     | j        |           g }|                                 }t	          dt          |          d          D ]5}|                    |                    |||dz                                 6t          t          d          
                    |                    }|                     | j        |           d S )Nr       )r   r   r   r<   rI   lenappendrK   r   r   joinrM   )r1   r   r   ct3rS   rR   pt3s          r   rX   zCipherStreamingSelfTest.runTest   sV   DN++	T_--

 q#i..!,, 	9 	9AJJv~~i!A#&6778888aeejjoo&&#... q#j//1-- 	: 	:AJJv~~j1Q3&7889999aeejjoo&&-----r   N)r
   r   r   r6   rX   r   r   r   rZ   rZ      s5        A A A. . . . .r   rZ   c                        e Zd Zd Zd Zd ZdS )RoundtripTestc                 @   ddl m} t          j                            |            || _        |                    |j                  | _        t          |d                   | _
        dt          |d                   z  | _        |                    dd           | _        d S )Nr   )Randomr   d   r   r   )
Cryptodomerh   r'   r(   r)   r*   get_random_bytes
block_sizer$   r   r   r   getr   )r1   r*   r2   rh   s       r   r)   zRoundtripTest.__init__   s    %%%%%%""4((())&*;<<VE]##q!4555!::mT::r   c                     | j         dS )Nz6 .decrypt() output of .encrypt() should not be garbled)r   r5   s    r   r6   zRoundtripTest.shortDescription   s    QUQaQaQaccr   c                 f   | j         j        }| j                             t          | j                  |          }|                    | j                  }| j                             t          | j                  |          }|                    |          }|                     | j        |           d S r4   )	r*   MODE_ECBr9   r   r   rK   r   rL   rM   )r1   r"   encryption_cipherr   decryption_cipherdecrypted_plaintexts         r   rX   zRoundtripTest.runTest   s     {# KOOGDH,=,=tDD&..t~>>
 KOOGDH,=,=tDD/77
CC)<=====r   N)r
   r   r   r)   r6   rX   r   r   r   rf   rf      sD        ; ; ;d d d> > > > >r   rf   c                   &    e Zd Zd Zd Zd Zd ZdS )IVLengthTestc                     t           j                            |            || _        t	          |d                   | _        d S Nr   r'   r(   r)   r*   r   r   r1   r*   r2   s      r   r)   zIVLengthTest.__init__   7    ""4(((VE]##r   c                     dS )NzTCheck that all modes except MODE_ECB and MODE_CTR require an IV of the proper lengthr   r5   s    r   r6   zIVLengthTest.shortDescription   s    eer   c           	          |                      t          | j        j        t	          | j                  | j        j        t          d                     d S )Nr_   )assertRaises	TypeErrorr*   r9   r   r   rp   r   r5   s    r   rX   zIVLengthTest.runTest   sH    )T[_gdh6G6G$aee	- 	- 	- 	- 	-r   c                      d| j         j        z  S )N )r*   rl   r5   s    r   _dummy_counterzIVLengthTest._dummy_counter   s    dk,,,r   N)r
   r   r   r)   r6   rX   r   r   r   r   ru   ru      sS        $ $ $
f f f- - -- - - - -r   ru   c                       e Zd Zd Zd ZdS )NoDefaultECBTestc                     t           j                            |            || _        t	          |d                   | _        d S rw   rx   ry   s      r   r)   zNoDefaultECBTest.__init__   rz   r   c                 v    |                      t          | j        j        t	          | j                             d S r4   )r}   r~   r*   r9   r   r   r5   s    r   rX   zNoDefaultECBTest.runTest   s.    )T[_gdh6G6GHHHHHr   Nr
   r   r   r)   rX   r   r   r   r   r      s7        $ $ $
I I I I Ir   r   c                       e Zd Zd Zd ZdS )BlockSizeTestc                     t           j                            |            || _        t	          t          |d                             | _        d S rw   )r'   r(   r)   r*   r   r   r   ry   s      r   r)   zBlockSizeTest.__init__   s?    ""4(((1VE]++,,r   c                     | j                             | j        | j         j                  }|                     |j        | j         j                   d S r4   )r*   r9   r   rp   rM   rl   )r1   rS   s     r   rX   zBlockSizeTest.runTest   sB    4;+?@@*DK,BCCCCCr   Nr   r   r   r   r   r      s7        - - -
D D D D Dr   r   c                   $    e Zd ZdZd Zd Zd ZdS )ByteArrayTestz;Verify we can use bytearray's for encrypting and decryptingc                    t           j                            |            || _        |                                }t          |d          | _        t          t          |d                    | _        t          t          |d                    | _	        t          t          |d                    | _
        t          |dd           | _        t          |dd           | _        t          |dd           | _        | j        rt          | j                  | _        t          |dd           }t          |          | _        |qt!          | j        d	|z             | _        t          |d
d           | _        | j        t          |dd           | _        | j        t          | j                  | _        n=d | _        t          |d
d           | _        | j        t          | j                  | _        || _        d S r   r&   r0   s       r   r)   zByteArrayTest.__init__      ""4((( #FM::Xfe,,--8FK8899HV\::;;#FM4@@"6<>>FE400? 	#{{DH--TWt^<<DIvtT22DGw"67D99w"DG** DIvtT22DGw"DG**"r   c                     | j                                         }t          | j                  }g }| j        | j        g}| j        |t          | j                  gz  } | j        j        |g|R i |S r4   r8   r:   s       r   r<   zByteArrayTest._new  r=   r   c                 R   t          | j                  }t          | j                  }g }| j        rd | j        D             }|                                 }|                                 }|D ],}|                    |           |                    |           -t          |                    t          |                              }t          |	                    t          |                              }| 
                    | j        |           | 
                    | j        |           | j        rrt          |                                          }	| 
                    | j        |	           |                    t          t          | j                                       d S d S )Nc           	      `    g | ]+}t          t          t          |                              ,S r   )	bytearrayr   r   rD   s     r   rG   z)ByteArrayTest.runTest.<locals>.<listcomp>)  s,    MMM9WQqTT]]33MMMr   )r   r   r   r    r<   rJ   r   rK   r   rL   rM   r!   rN   rO   
r1   r   r   r    rS   rT   rU   rP   rQ   r!   s
             r   rX   zByteArrayTest.runTest#  sv   DN++	T_--

? 	NMMT_MMMJ99;;  	" 	"DMM$OOD!!!!V^^Ii$8$899::X%%i
&;&;<<=="---,,,8 	:&--//**CTXs+++OOIgdh&7&78899999	: 	:r   Nr
   r   r   __doc__r)   r<   rX   r   r   r   r   r      sH        EE## ## ##J
: 
: 
:: : : : :r   r   c                   $    e Zd ZdZd Zd Zd ZdS )MemoryviewTestz;Verify we can use memoryviews for encrypting and decryptingc                    t           j                            |            || _        |                                }t          |d          | _        t          t          |d                    | _        t          t          |d                    | _	        t          t          |d                    | _
        t          |dd           | _        t          |dd           | _        t          |dd           | _        | j        rt          | j                  | _        t          |dd           }t          |          | _        |qt!          | j        d	|z             | _        t          |d
d           | _        | j        t          |dd           | _        | j        t          | j                  | _        n=d | _        t          |d
d           | _        | j        t          | j                  | _        || _        d S r   r&   r0   s       r   r)   zMemoryviewTest.__init__B  r   r   c                     | j                                         }t          | j                  }g }| j        | j        g}| j        |t          | j                  gz  } | j        j        |g|R i |S r4   r8   r:   s       r   r<   zMemoryviewTest._newg  r=   r   c                 R   t          | j                  }t          | j                  }g }| j        rd | j        D             }|                                 }|                                 }|D ],}|                    |           |                    |           -t          |                    t          |                              }t          |	                    t          |                              }| 
                    | j        |           | 
                    | j        |           | j        rrt          |                                          }	| 
                    | j        |	           |                    t          t          | j                                       d S d S )Nc           	      `    g | ]+}t          t          t          |                              ,S r   )
memoryviewr   r   rD   s     r   rG   z*MemoryviewTest.runTest.<locals>.<listcomp>y  s,    NNN:gaddmm44NNNr   )r   r   r   r    r<   rJ   r   rK   r   rL   rM   r!   rN   rO   r   s
             r   rX   zMemoryviewTest.runTests  sv   DN++	T_--

? 	ONNdoNNNJ99;;  	" 	"DMM$OOD!!!!V^^Jy$9$9::;;X%%j&<&<==>>"---,,,8 	;&--//**CTXs+++OOJwtx'8'899:::::	; 	;r   Nr   r   r   r   r   r   ?  sH        EE## ## ##J
: 
: 
:; ; ; ; ;r   r   c           
         g }d}t          t          |                    D ]}||         }i }t          |          dk    r|\  |d<   |d<   |d<   nt          |          dk    r|\  |d<   |d<   |d<   |d<   n]t          |          dk    r*|\  |d<   |d<   |d<   |d<   }	|                    |	           n t          d	t          |          fz            d
|vrd|d
<   |                                }
t          |
d          }t          |
d          }t          |
d          }t          |
d
          }t          |
dd           }||}n|dk    r|
s	d|d|}nd|d|d|
}d||dz   |fz  }||d<   ||d<   |                    |           |sR|t          | |          t          | |          t          | |          t          | |          t          | |          gz  }d}|                    t          | |                     |S )NFr^   r   r   r      r      Unsupported tuple size %dr"   ECBp=, k=, 
%s #%d: %s   r   T)rI   r`   rJ   AssertionErrorr+   r   rf   ru   r   r   r   ra   r   )r*   r   	test_dataadditional_paramstestsextra_tests_addedrR   rowr2   r/   p2p_keyp_plaintextp_ciphertextp_modep_descriptionr   r@   s                     r   make_block_testsr     su   E3y>>"" 75 75l s88q==ILFVK &"6uXX]]`c]VK &"6uvmG\G\XX]]nqkVK &"6uvmG\^jMM,'''' !<C{!JKKK"F6N [[]]U##r;//L11"f%% ]D99$'KKu__R__*5++uu=KK.9kk555""EK{AaC== $} +}'((( ! 	%ff--VV,, 00ff--ff-- E !% 	^FF334444Lr   c                    g }d}t          t          |                    D ]}||         }i }t          |          dk    r|\  |d<   |d<   |d<   nt          |          dk    r|\  |d<   |d<   |d<   |d<   n]t          |          dk    r*|\  |d<   |d<   |d<   |d<   }|                    |           n t          d	t          |          fz            |                                }	t          |	d          }
t          |	d          }t          |	d          }t          |	dd           }||}n|	s	d
|d|
}nd
|d|
d|	}d||dz   |fz  }||d<   ||d<   |s9|t          | |          gz  }|                    t          | |                     d}|                    t          | |                     |                    t          | |                     |S )NFr^   r   r   r   r   r   r   r   r   r   r   r   r   r   T)rI   r`   rJ   r   r+   r   r   ra   r   r   rZ   )r*   r   r   r   r   rR   r   r2   r/   r   r   r   r   r   r   r@   s                   r   make_stream_testsr     sK   E3y>>"" +> +>l s88q==ILFVK &"6uXX]]`c]VK &"6uvmG\G\XX]]nqkVK &"6uvmG\^jMM,'''' !<C{!JKKK [[]]U##r;//L11 ]D99$'KK 	F 	F*5++uu=KK	F /:kk555""EK{AaC== $} +} ! 	%ff-- E LL77888 $ 	^FF33444,VV<<====Lr   )r   r'   binasciir   r   r   Cryptodome.Util.py3compatr   Cryptodome.Util.strxorr   r	   r   r(   r   rZ   rf   ru   r   r   r   r   dictr   r   r   r   r   <module>r      sS  2 1 0  . . . . . . . . . . ' ' ' ' ' ' + + + + + +        % 	 	 	 	a/ a/ a/ a/ a/X& a/ a/ a/F. . . . .n . . .@> > > > >H% > > >0- - - - -8$ - - -"I I I I Ix( I I ID D D D DH% D D DM: M: M: M: M:H% M: M: M:`M; M; M; M; M;X& M; M; M;` HLtvv < < < <|/ / / / /r   