
    ,h>                     `   d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZmZ d dlmZ d dlmZ d	 Z G d
 de      Z G d de j(                        ZdZdZeD ].  ZdD ]'  Zej5                  de      ZeefdZ eedez   e       ) 0 eD ].  ZdD ]'  Zej5                  de      ZeefdZ eedez   e       ) 0 [[dZeD ].  ZdD ]  Zej5                  de      ZeefdZ  eedez   e       0  G d de j(                        Zi fdZ e!dk(  rd Z" e jF                  d       yy)     N)	unhexlify)load_test_vectors)list_test_cases)tobytes	is_string)AESDES3DES)SHAKE128)BlockChainingTestsc                 ^    t        j                  t        |             j                  |      S )N)data)r   newr   read)taglengths     a/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/Crypto/SelfTest/Cipher/test_CFB.pyget_tag_randomr   +   s     <<WS\*//77    c                   T    e Zd Zej                  Zej                  Zd Zd Z	d Z
d Zy)CfbTestsc                 p   dgdz  }t        j                  | j                  t         j                  | j                  d      }|D cg c]  }|j                  |       }}t        j                  | j                  t         j                  | j                  d      }| j                  dj                  |      |j                  dj                  |                   t        j                  | j                  t         j                  | j                  d      }|D cg c]  }|j                  |       }}t        j                  | j                  t         j                  | j                  d      }| j                  dj                  |      |j                  dj                  |                   y c c}w c c}w )N   7777777d      segment_sizer      )r   r   key_128MODE_CFBiv_128encryptassertEqualjoinself
plaintextscipherxciphertextss        r   test_unaligned_data_128z CfbTests.test_unaligned_data_1286   s(   !^c)
s||T[[qQ3=?aq)??s||T[[qQ+.sxx
?S0TUs||T[[sS3=?aq)??s||T[[sS+.sxx
?S0TU @
 @   F.F3c                 p   dgdz  }t        j                  | j                  t         j                  | j                  d      }|D cg c]  }|j                  |       }}t        j                  | j                  t         j                  | j                  d      }| j                  dj                  |      |j                  dj                  |                   t        j                  | j                  t         j                  | j                  d      }|D cg c]  }|j                  |       }}t        j                  | j                  t         j                  | j                  d      }| j                  dj                  |      |j                  dj                  |                   y c c}w c c}w )Nr   r   r   r   r   @   )r	   r   key_192r    iv_64r"   r#   r$   r%   s        r   test_unaligned_data_64zCfbTests.test_unaligned_data_64C   s,   !^c)
$,,tzzPQR3=?aq)??$,,tzzPQR+.sxx
?S0TU$,,tzzPRS3=?aq)??$,,tzzPRS+.sxx
?S0TU @
 @r,   c           	      B   t        ddd      D ]=  }t        j                  | j                  t        j                  | j
                  |      }? dD ]M  }| j                  t        t        j                  | j                  t        j                  | j
                  |       O y )Nr      r   )r      	      r3   )ranger   r   r   r    r!   assertRaises
ValueErrorr&   bitsr(   s      r   test_segment_size_128zCfbTests.test_segment_size_128Q   s    !S!$ 	0DWWT\\3<<*.0F	0 & 	1Dj#''4<<"kk+/  1	1r   c           	      B   t        ddd      D ]=  }t        j                  | j                  t        j                  | j
                  |      }? dD ]M  }| j                  t        t        j                  | j                  t        j                  | j
                  |       O y )Nr   A   r   )r   r4   r5   ?   r>   )	r7   r	   r   r/   r    r0   r8   r9   r   r:   s      r   test_segment_size_64zCfbTests.test_segment_size_64[   s~    !RO 	1DXXdllDMM4::+/1F	1 $ 	1Dj$((DLL#,,"jj+/  1	1r   N)__name__
__module____qualname__r   r    aes_moder	   	des3_moder+   r1   r<   r@    r   r   r   r   /   s*    ||HIV
V11r   r   c                       e Zd Zd Zd Zd Zy)NistCfbVectorsc                    t        d|d|z  dd i      }|y d }|D ]  }t        |      r|}|j                  | _        t	        j
                  |j                  t        j                  |j                  |      }|dk(  r6| j                  |j                  |j                        |j                         |dk(  r6| j                  |j                  |j                        |j                         J  y )NCipherr   zAES CFB%d KATcountc                     t        |       S Nintr)   s    r   <lambda>z1NistCfbVectors._do_kat_aes_test.<locals>.<lambda>m   
    #a& r   r   	[ENCRYPT]	[DECRYPT])r   r   descdescriptionr   r   keyr    ivr#   r"   	plaintext
ciphertextdecrypt)r&   	file_namer   test_vectors	directiontvr(   s          r   _do_kat_aes_testzNistCfbVectors._do_kat_aes_testh   s    ():%+l:%(8:= 	 	B }	!wwDWWRVVS\\255*68FK'  !=r}}Mk)  !>M	r   c                    t        d|dz  dd i      }|y dv sJ d }|D ]:  t              r}j                  | _        t	        j
                  j                  t        j                  j                        }fd}|dk(  rfg }t        d	      D ]6  } |j                  ||      }	|j                  |j                  |	             8 | j                  |d
   j                         |dk(  rgg }
t        d	      D ]6  } |j                  |
|      }|
j                  |j                  |             8 | j                  |
d
   j                         ;J  y )NrJ   zAES CFB%d MontecarlorL   c                     t        |       S rN   rO   rQ   s    r   rR   z1NistCfbVectors._do_mct_aes_test.<locals>.<lambda>   rS   r   )r   r   r   c                     dk(  r|dk\  r|d   S | j                   g|   S |dk(  r| S |dk  rj                   |dz
  | S ||dz
     S )Nr      r            )rY   )
input_text
output_seqjr   r`   s      r   	get_inputz2NistCfbVectors._do_mct_aes_test.<locals>.get_input   sg    3&Av)"~-&.q116%%"W55Qq>)!!b&))r   rT   i  rU   )r   r   rV   rW   r   r   rX   r    rY   r7   rZ   appendr"   r#   r[   r\   )r&   r]   r   r^   r_   r(   rm   ctsrl   rZ   ptsr[   r`   s     `         @r   _do_mct_aes_testzNistCfbVectors._do_mct_aes_test   s[   ():%2\A%(8:= x'(	 %	B }	!wwDWWRVVS\\255*68F* K't :A )",,Q ?IJJv~~i89:   R"--8k)t ;A!*2==#q!AJJJv~~j9:;   R",,7K%	r   c                    t        d|d|z  dd i      }|y d }|D ]l  }t        |      r|}|j                  | _        t	        |d      r<t        j                  |j                  t
        j                  |j                  |      }n|j                  |j                  k7  r'|j                  |j                  z   |j                  z   }n|j                  |j                  z   }t        j                  |t        j                  |j                  |      }|dk(  r7| j                  |j                  |j                         |j"                         1|dk(  r7| j                  |j%                  |j"                        |j                          mJ  y )	N)rK   TDESzTDES CFB%d KATrL   c                     t        |       S rN   rO   rQ   s    r   rR   z.NistCfbVectors._do_tdes_test.<locals>.<lambda>   rS   r   keysr   rT   rU   )r   r   rV   rW   hasattrr
   r   rv   r    rY   key1key3key2r	   r#   r"   rZ   r[   r\   )r&   r]   r   r^   r_   r`   r(   rX   s           r   _do_tdes_testzNistCfbVectors._do_tdes_test   s?   ();%,|;%(8:= 	 	B }	!wwDr6"#,,.:< 77bgg%''BGG+bgg5C''BGG+C#t}}bee/;=K'  !=r}}Mk)  !>M/	r   N)rA   rB   rC   ra   rr   r{   rF   r   r   rH   rH   f   s    81f!r   rH   )zCFB?GFSbox128.rspzCFB?GFSbox192.rspzCFB?GFSbox256.rspzCFB?KeySbox128.rspzCFB?KeySbox192.rspzCFB?KeySbox256.rspzCFB?VarKey128.rspzCFB?VarKey192.rspzCFB?VarKey256.rspzCFB?VarTxt128.rspzCFB?VarTxt192.rspzCFB?VarTxt256.rspzCFB?MMT128.rspzCFB?MMT192.rspzCFB?MMT256.rsp)zCFB?MCT128.rspzCFB?MCT192.rspzCFB?MCT256.rsp)8128?c                 :    | j                  |t        |             y rN   )ra   rP   r&   r]   r;   s      r   new_funcr          !!)SY7r   	test_AES_c                 :    | j                  |t        |             y rN   )rr   rP   r   s      r   r   r      r   r   )zTCFB?MMT2.rspzTCFB?MMT3.rspzTCFB?invperm.rspzTCFB?permop.rspzTCFB?subtab.rspzTCFB?varkey.rspzTCFB?vartext.rsp)r|   64c                 :    | j                  |t        |             y rN   )r{   rP   r   s      r   r   r     s    y#d)4r   
test_TDES_c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	SP800TestVectorszPClass exercising the CFB test vectors found in Section F.3
    of NIST SP 800-3Ac                    d}d}d}d}t        |      }t        |      }t        |      }t        |      }t        j                  |t        j                  |d      }| j	                  |j                  |      |       t        j                  |t        j                  |d      }| j	                  |j                  |      |       y )N$6bc1bee22e409f96e93d7e117393172aae2d$3b79424c9c0dd436bace9e0ed4586a4f32b9 2b7e151628aed2a6abf7158809cf4f3c 000102030405060708090a0b0c0d0e0fr   r   r   r   r   r    r#   r"   r\   r&   rZ   r[   rX   rY   r(   s         r   test_aes_128_cfb8z"SP800TestVectors.test_aes_128_cfb8  s    >	>
::nr]i(	z*
cllBQ?	2J?cllBQ?
3Y?r   c                    d}d}d}d}t        |      }t        |      }t        |      }t        |      }t        j                  |t        j                  |d      }| j	                  |j                  |      |       t        j                  |t        j                  |d      }| j	                  |j                  |      |       y )Nr   $cda2521ef0a905ca44cd057cbf0d47a0678a08e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7br   r   r   r   r   s         r   test_aes_192_cfb8z"SP800TestVectors.test_aes_192_cfb8,  s    >	>
J:nr]i(	z*
cllBQ?	2J?cllBQ?
3Y?r   c                    d}d}d}d}t        |      }t        |      }t        |      }t        |      }t        j                  |t        j                  |d      }| j	                  |j                  |      |       t        j                  |t        j                  |d      }| j	                  |j                  |      |       y )Nr   $dc1f1a8520a64db55fcc8ac554844e889700@603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4r   r   r   r   r   s         r   test_aes_256_cfb8z"SP800TestVectors.test_aes_256_cfb8<  s    >	>
Z:nr]i(	z*
cllBQ?	2J?cllBQ?
3Y?r   c                    d}d}d}d}t        |      }t        |      }t        |      }t        |      }t        j                  |t        j                  |d      }| j	                  |j                  |      |       t        j                  |t        j                  |d      }| j	                  |j                  |      |       y )Nڀ6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710ڀ3b3fd92eb72dad20333449f8e83cfb4ac8a64537a0b3a93fcde3cdad9f1ce58b26751f67a3cbb140b1808cf187a4f4dfc04b05357c5d1c0eeac4c66f9ff7f2e6r   r   r   r   r   r   s         r   test_aes_128_cfb128z$SP800TestVectors.test_aes_128_cfb128L  s    ;	;
 ;:nr]i(	z*
cllBSA	2J?cllBSA
3Y?r   c                    d}d}d}d}t        |      }t        |      }t        |      }t        |      }t        j                  |t        j                  |d      }| j	                  |j                  |      |       t        j                  |t        j                  |d      }| j	                  |j                  |      |       y )Nr   ڀcdc80d6fddf18cab34c25909c99a417467ce7f7f81173621961a2b70171d3d7a2e1e8a1dd59b88b1c8e60fed1efac4c9c05f9f9ca9834fa042ae8fba584b09ffr   r   r   r   r   r   s         r   test_aes_192_cfb128z$SP800TestVectors.test_aes_192_cfb128b  s    ;	;
 K:nr]i(	z*
cllBSA	2J?cllBSA
3Y?r   c                    d}d}d}d}t        |      }t        |      }t        |      }t        |      }t        j                  |t        j                  |d      }| j	                  |j                  |      |       t        j                  |t        j                  |d      }| j	                  |j                  |      |       y )Nr   ڀdc7e84bfda79164b7ecd8486985d386039ffed143b28b1c832113c6331e5407bdf10132415e54b92a13ed0a8267ae2f975a385741ab9cef82031623d55b1e471r   r   r   r   r   r   s         r   test_aes_256_cfb128z$SP800TestVectors.test_aes_256_cfb128x  s    ;	
;
 [:nr]i(	z*
cllBSA	2J?cllBSA
3Y?r   N)
rA   rB   rC   __doc__r   r   r   r   r   r   rF   r   r   r   r     s+    @ @ @ @,@,@r   r   c                     g }|t        t              z  }| j                  d      r|t        t              z  }|t        t              z  }|S )N
slow_tests)r   r   getrH   r   )configtestss     r   	get_testsr     sF    E	_X&&Ezz,00	_-..ELr   __main__c                  <    t        j                  t                     S rN   )unittest	TestSuiter   rF   r   r   rR   rR     s    H&&y{3 r   suite)defaultTest)$r   binasciir   Crypto.SelfTest.loaderr   Crypto.SelfTest.st_commonr   Crypto.Util.py3compatr   r   Crypto.Cipherr   r	   r
   Crypto.Hashr   Crypto.SelfTest.Cipher.test_CBCr   r   r   TestCaserH   nist_aes_kat_mmt_filesnist_aes_mct_filesfile_gen_namer;   replacer]   r   setattrnist_tdes_filesr   r   rA   r   mainrF   r   r   <module>r      s  >   4 5 4 ( (   >841! 41nrX&& rl &  , CM C!))#t4	%.T 	8i 7B	CC ( CM C!))#t4	%.T 	8i 7B	CC x % @M 5!))#t4	%.T 	55 NL94h?@u@x(( u@p   z3EHMMg& r   