
    ,hC                        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y)z&Self-testing for PyCrypto hash modules    N)a2b_hexb2a_hexhexlify)b)strxor_cc                       e Zd Zy)
_NoDefaultN)__name__
__module____qualname__     _/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/Crypto/SelfTest/Cipher/common.pyr	   r	   !   s    r   r	   c                 L    	 | |   }| |= |S # t         $ r |t        u r |cY S w xY w)zAGet an item from a dictionary, and remove it from the dictionary.)KeyErrorr	   )dkdefaultretvals       r   _extractr   "   s?    1
 	
!M  j s    ##c                   *    e Zd Zd Zd Zd Zd Zd Zy)CipherSelfTestc                    t         j                  j                  |        || _        |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        |      | _        ||t!        | j                  d	|z         | _        t        |d
d       | _        | j$                  t        |dd       | _        | j$                  at        | j$                        | _        || _        y d | _        t        |d
d       | _        | j$                  t        | j$                        | _        || _        y 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   st   ""4( #FM:Xfe,-8FK89HV\:;#FM4@"6<>FE40??{DH-TWt^<DIvtT2DGww"67D9ww"DGG* # DIvtT2DGww"DGG*"r   c                     | j                   S N)r   r1   s    r   shortDescriptionzCipherSelfTest.shortDescriptionV   s    r   c                     | j                   j                         }t        | j                        }g }| j                  | j                  g}| j
                  |t        | j
                        gz  } | j                  j                  |g|i |S r4   r/   r+   r   r   r"   r$   r*   newr1   r2   r   	old_styles       r   _newzCipherSelfTest._newY   }    ""'')dhh	99 ))I777477+--It{{s9Y9&99r   c                     t        | j                  d|z         sy| j                  t        | j                  d|z         k(  S )Nr#   F)hasattrr*   r"   r.   )r1   names     r   isModezCipherSelfTest.isModee   s5    t{{GDL1yyGDKK>>>r   c                    t        | j                        }t        | j                        }g }| j                  r+| j                  D cg c]  }t        t	        |             }}d }d }t        d      D ]  }| j                         }| j                         }	|D ]$  }
|j                  |
       |	j                  |
       & t        |j                  |            }t        |	j                  |            }|r$| j                  ||       | j                  ||       ||}} | j                  | j                  |       | j                  | j                  |       | j                  rZt        j                               }| j                  | j                  |       	j                  t        | j                               y y c c}w )N   )r   r   r   r    r   ranger<   updater   encryptdecryptassertEqualr!   digestverify)r1   r   r   r    xctpticipherdeciphercompctXptXr!   s                 r   runTestzCipherSelfTest.runTestj   sr   DNN+	T__-

??26//BQ71Q4=BJB q 	AYY[Fyy{H # &d#%& &..34C(**:67C  S)  S)#B	" 	"-,88&--/*CTXXs+OOGDHH-. ; Cs   F>N)r
   r   r   r)   r6   r<   rA   rT   r   r   r   r   r   .   s    $#L 
:?
%/r   r   c                       e Zd Zd Zd Zy)CipherStreamingSelfTestc                 b    | 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   s1    99 T^^55D:>@@r   c           	         t        | j                        }t        | j                        }g }| j                         }t	        dt        |      d      D ](  }|j                  |j                  |||dz                 * t        t        d      j                  |            }| j                  | j                  |       g }| j                         }t	        dt        |      d      D ](  }|j                  |j                  |||dz                 * t        t        d      j                  |            }| j                  | j                  |       y )Nr       )r   r   r   r<   rD   lenappendrF   r   r   joinrH   )r1   r   r   ct3rO   rN   pt3s          r   rT   zCipherStreamingSelfTest.runTest   s   DNN+	T__-

 q#i.!, 	9AJJv~~i!A#&678	9aejjo&#. q#j/1- 	:AJJv~~j1Q3&789	: aejjo&-r   N)r
   r   r   r6   rT   r   r   r   rV   rV      s    A.r   rV   c                       e Zd Zd Zd Zd Zy)RoundtripTestc                    ddl m} t        j                  j	                  |        || _        |j                  |j                        | _        t        |d         | _
        dt        |d         z  | _        |j                  dd       | _        y )Nr   )Randomr   d   r   r   )Cryptord   r'   r(   r)   r*   get_random_bytes
block_sizer$   r   r   r   getr   )r1   r*   r2   rd   s       r   r)   zRoundtripTest.__init__   sq    !""4())&*;*;<VE]#q!4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    QUQaQaccr   c                 |   | j                   j                  }| j                   j                  t        | j                        |      }|j                  | j                        }| j                   j                  t        | j                        |      }|j                  |      }| j                  | j                  |       y r4   )	r*   MODE_ECBr9   r   r   rF   r   rG   rH   )r1   r"   encryption_cipherr   decryption_cipherdecrypted_plaintexts         r   rT   zRoundtripTest.runTest   s     {{## KKOOGDHH,=tD&..t~~>
 KKOOGDHH,=tD/77
C)<=r   N)r
   r   r   r)   r6   rT   r   r   r   rb   rb      s    ;d>r   rb   c                   $    e Zd Zd Zd Zd Zd Zy)IVLengthTestc                 v    t         j                  j                  |        || _        t	        |d         | _        y Nr   r'   r(   r)   r*   r   r   r1   r*   r2   s      r   r)   zIVLengthTest.__init__   -    ""4(VE]#r   c                      y)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    er   c           	          | j                  t        | j                  j                  t	        | j
                        | j                  j                  t        d             y )Nr[   )assertRaises	TypeErrorr*   r9   r   r   rl   r   r5   s    r   rT   zIVLengthTest.runTest   s:    )T[[__gdhh6G$$ae	-r   c                 4    d| j                   j                  z  S )N )r*   rh   r5   s    r   _dummy_counterzIVLengthTest._dummy_counter   s    dkk,,,,r   N)r
   r   r   r)   r6   rT   r}   r   r   r   rq   rq      s    $
f--r   rq   c                       e Zd Zd Zd Zy)NoDefaultECBTestc                 v    t         j                  j                  |        || _        t	        |d         | _        y rs   rt   ru   s      r   r)   zNoDefaultECBTest.__init__   rv   r   c                     | j                  t        | j                  j                  t	        | j
                               y r4   )ry   rz   r*   r9   r   r   r5   s    r   rT   zNoDefaultECBTest.runTest   s%    )T[[__gdhh6GHr   Nr
   r   r   r)   rT   r   r   r   r   r      s    $
Ir   r   c                       e Zd Zd Zd Zy)BlockSizeTestc                     t         j                  j                  |        || _        t	        t        |d               | _        y rs   )r'   r(   r)   r*   r   r   r   ru   s      r   r)   zBlockSizeTest.__init__   s2    ""4(1VE]+,r   c                     | j                   j                  | j                  | j                   j                        }| j	                  |j
                  | j                   j
                         y r4   )r*   r9   r   rl   rH   rh   )r1   rO   s     r   rT   zBlockSizeTest.runTest   sD    4;;+?+?@**DKK,B,BCr   Nr   r   r   r   r   r      s    -
Dr   r   c                   "    e Zd ZdZd Zd Zd Zy)ByteArrayTestz;Verify we can use bytearray's for encrypting and decryptingc                    t         j                  j                  |        || _        |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        |      | _        ||t!        | j                  d	|z         | _        t        |d
d       | _        | j$                  t        |dd       | _        | j$                  at        | j$                        | _        || _        y d | _        t        |d
d       | _        | j$                  t        | j$                        | _        || _        y r   r&   r0   s       r   r)   zByteArrayTest.__init__   t   ""4( #FM:Xfe,-8FK89HV\:;#FM4@"6<>FE40??{DH-TWt^<DIvtT2DGww"67D9ww"DGG* # DIvtT2DGww"DGG*"r   c                     | j                   j                         }t        | j                        }g }| j                  | j                  g}| j
                  |t        | j
                        gz  } | j                  j                  |g|i |S r4   r8   r:   s       r   r<   zByteArrayTest._new  r=   r   c           
      R   t        | j                        }t        | j                        }g }| j                  r4| j                  D cg c]  }t	        t        t        |                  ! }}| j                         }| j                         }|D ]$  }|j                  |       |j                  |       & t        |j                  t	        |                  }t        |j                  t	        |                  }	| j                  | j                  |       | j                  | j                  |	       | j                  rct        |j                               }
| j                  | j                  |
       |j                  t	        t        | j                                     y y c c}w r4   )r   r   r   r    	bytearrayr   r<   rE   r   rF   rG   rH   r!   rI   rJ   r1   r   r   r    rK   rO   rP   rQ   rL   rM   r!   s              r   rT   zByteArrayTest.runTest#  s9   DNN+	T__-

??=A__M9WQqT]3MJM99;  	"DMM$OOD!	" V^^Ii$89:X%%i
&;<="-,88&--/*CTXXs+OOIgdhh&789 ! N   $F$Nr
   r   r   __doc__r)   r<   rT   r   r   r   r   r      s    E##J
::r   r   c                   "    e Zd ZdZd Zd Zd Zy)MemoryviewTestz;Verify we can use memoryviews for encrypting and decryptingc                    t         j                  j                  |        || _        |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        |      | _        ||t!        | j                  d	|z         | _        t        |d
d       | _        | j$                  t        |dd       | _        | j$                  at        | j$                        | _        || _        y d | _        t        |d
d       | _        | j$                  t        | j$                        | _        || _        y r   r&   r0   s       r   r)   zMemoryviewTest.__init__B  r   r   c                     | j                   j                         }t        | j                        }g }| j                  | j                  g}| j
                  |t        | j
                        gz  } | j                  j                  |g|i |S r4   r8   r:   s       r   r<   zMemoryviewTest._newg  r=   r   c           
      R   t        | j                        }t        | j                        }g }| j                  r4| j                  D cg c]  }t	        t        t        |                  ! }}| j                         }| j                         }|D ]$  }|j                  |       |j                  |       & t        |j                  t	        |                  }t        |j                  t	        |                  }	| j                  | j                  |       | j                  | j                  |	       | j                  rct        |j                               }
| j                  | j                  |
       |j                  t	        t        | j                                     y y c c}w r4   )r   r   r   r    
memoryviewr   r<   rE   r   rF   rG   rH   r!   rI   rJ   r   s              r   rT   zMemoryviewTest.runTests  s9   DNN+	T__-

??>BooN:gadm4NJN99;  	"DMM$OOD!	" V^^Jy$9:;X%%j&<=>"-,88&--/*CTXXs+OOJwtxx'89: ! Or   Nr   r   r   r   r   r   ?  s    E##J
:;r   r   c           
      X   g }d}t        t        |            D ]  }||   }i }t        |      dk(  r|\  |d<   |d<   |d<   nnt        |      dk(  r|\  |d<   |d<   |d<   |d<   nLt        |      dk(  r&|\  |d<   |d<   |d<   |d<   }	|j                  |	       nt        d	t        |      fz        d
|vrd|d
<   |j	                         }
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<   |j                  |       |s>|t        | |      t        | |      t        | |      t        | |      t        | |      gz  }d}|j                  t        | |              |S )NFrZ   r   r   r      r      Unsupported tuple size %dr"   ECBp=, k=, 
%s #%d: %s   r   T)rD   r\   rE   AssertionErrorr+   r   rb   rq   r   r   r   r]   r   )r*   r   	test_dataadditional_paramstestsextra_tests_addedrN   rowr2   r/   p2p_keyp_plaintextp_ciphertextp_modep_descriptionr   r@   s                     r   make_block_testsr     s   E3y>" 75l s8q=ILFVK &"6uX]`c]VK &"6uvmG\X]nqkVK &"6uvmG\^jMM,' !<C{!JKK"F6N [[]U#r;/L1"f% ]D9$'Ku_R*5u=K.95"EK{AaC== $} +}'( !ff-VV, 0ff-ff- E !% 	^FF34o75r Lr   c                    g }d}t        t        |            D ]l  }||   }i }t        |      dk(  r|\  |d<   |d<   |d<   nnt        |      dk(  r|\  |d<   |d<   |d<   |d<   nLt        |      dk(  r&|\  |d<   |d<   |d<   |d<   }|j                  |       nt        d	t        |      fz        |j	                         }	t        |	d      }
t        |	d      }t        |	d      }t        |	dd       }||}n|	s	d
|d|
}nd
|d|
d|	}d||dz   |fz  }||d<   ||d<   |s-|t        | |      gz  }|j                  t        | |             d}|j                  t        | |             |j                  t        | |             o |S )NFrZ   r   r   r   r   r   r   r   r   r   r   r   r   r   T)rD   r\   rE   r   r+   r   r   r]   r   r   rV   )r*   r   r   r   r   rN   r   r2   r/   r   r   r   r   r   r   r@   s                   r   make_stream_testsr     s   E3y>" +>l s8q=ILFVK &"6uX]`c]VK &"6uvmG\X]nqkVK &"6uvmG\^jMM,' !<C{!JKK [[]U#r;/L1 ]D9$'K*5u=K  /:5"EK{AaC== $} +} !ff- E LL78 $ 	^FF34,VV<=W+>X Lr   )r   r'   binasciir   r   r   Crypto.Util.py3compatr   Crypto.Util.strxorr   r	   r   r(   r   rV   rb   rq   r   r   r   r   dictr   r   r   r   r   <module>r      s   2 -  . . # '  % 	a/X&& a/F.n .@>H%% >0-8$$ -"Ix(( IDH%% DM:H%% M:`M;X&& M;` HLv <|/r   