
    ¿igVS                         d dl Z d dlmZm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mZ d dlmZ d Z G d	 d
e j                  Z G d de j                  Z G d de j                  Zi fdZedk    rd Z e j        d           dS dS )    N)hexlify	unhexlify)list_test_cases)tobytesbchr)AESDES3)SHAKE128SHA256)Counterc                 l    t          j        t          |                                         |          S )N)data)r
   newr   read)taglengths     _/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/Cipher/test_CTR.pyget_tag_randomr   (   s)    <WS\\***//777    c                   4   e Zd Z edd          Z edd          Z edd          Z edd          Z ej	        d	e
          Z
 ej	        de
          Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Z d!S )"CtrTestskey_128   key_192   nonce_32   nonce_64       prefix@   c                 R   t          j        | j        t           j        | j                  }t          dd          }|                    |          }t          j        | j        t           j        | j                  }|                    |          }|                     ||           d S )Ncounter	plaintexti@  )	r   r   r   MODE_CTRctr_128r   encryptdecryptassertEqualselfcipherptctpt2s        r   test_loopback_128zCtrTests.test_loopback_1284   s    s|T\JJJK22^^Bs|T\JJJnnR  S!!!!!r   c                 R   t          j        | j        t           j        | j                  }t          dd          }|                    |          }t          j        | j        t           j        | j                  }|                    |          }|                     ||           d S )Nr%   r'   i   )	r	   r   r   r(   ctr_64r   r*   r+   r,   r-   s        r   test_loopback_64zCtrTests.test_loopback_64=   s    $,t{KKKK11^^B$,t{KKKnnR  S!!!!!r   c                     |                      t          t          j        | j        t
          j                   |                      t          t
          j        | j        t
          j        | j                   d S N)	assertRaises	TypeErrorr	   r   r   r   r(   r   r)   r.   s    r   test_invalid_counter_parameterz'CtrTests.test_invalid_counter_parameterF   sN    )TXt|S\JJJ 	)SWdlCL$,WWWWWr   c                    t          j        | j        t           j        | j                  }|                     |j        | j                   t          j        | j	        t          j        | j
                  }|                     |j        | j                   t          j        d| j        | j                  }t          j        | j	        t          j        |          }|                     t          |d                     d S )Nr%   r#   )r"   suffixnonce)r	   r   r   r(   r5   r,   r?   r   r   r   r)   r   r   assertFalsehasattr)r.   r/   r&   s      r   test_nonce_attributezCtrTests.test_nonce_attributeM   s    $,t{KKKt}555 s|T\JJJt}555 +bt}MMMs|WEEE1122222r   c                 @   t          j        | j        t           j        | j                  }|                     |j        | j                   t          j        d| j        d          }t          j        | j        t           j        |          }|                     |j        |j                   t          dd          }|                     |	                    |          |	                    |                     t          j        | j        t           j                  j        }t          j        | j        t           j                  j        }| 
                    ||           |                     t          |          d           t          j        | j        t           j        d	          }|                     d	|j                   |	                    d
           |                     t          t           j        | j        t           j        | j        | j                   d S )Nr?   r#   r   r"   initial_valuer%   r'      r   r   s,  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)r&   r?   )r   r   r   r(   r   r,   r?   r   r   r*   assertNotEquallenr9   r:   r)   )r.   cipher1r&   cipher2r0   nonce1nonce2r/   s           r   test_nonce_parameterzCtrTests.test_nonce_parameter[   s   '$,DMJJJ666+baHHH'$,gFFF666K//,,goob.A.ABBB s|44:s|44:FF+++Va((( s|3???fl+++x    	)SWdlCL"&,dm 	 	E 	E 	E 	E 	Er   c                 ^   t          j        | j        t           j        | j        d          }t          j        d| j        d          }t          j        | j        t           j        |          }t          dd          }|                     |                    |          |                    |                     t          j        | j        t           j        d          }t          j        d|j	        d          }t          j        | j        t           j        |          }t          dd          }|                     |                    |          |                    |                     | 
                    t          t           j        | j        t           j        | j        d	
           d S )N  r?   rF   r#   rE   r%   r'   rG   rF   r   )r&   rF   )r   r   r   r(   r   r   r   r,   r*   r?   r9   r:   r)   )r.   rJ   r&   rK   r0   s        r   test_initial_value_parameterz%CtrTests.test_initial_value_parameterv   sn   '$, $VE E E+bfMMM'$,gFFFK//,,goob.A.ABBB '$,(.0 0 0+bfMMM'$,gFFFK//,,goob.A.ABBB 	)SWdlCL"&,a 	 	A 	A 	A 	A 	Ar   c                 &   t          j        | j        t           j        | j        d          }t          j        | j        t           j        | j        d          }t          dd          }|                     |                    |          |                    |                     |                     t          t           j        | j        t           j        d           |                     t          t           j        | j        t           j        | j        d           |                     t          t           j        | j        t           j        d	           |                     t          t           j        | j        t           j        | j        d
           d S )N         rQ   rP   r'   rG   s   55555555555555555rR   s	   555555555s   555555555555555s   5555555)
r   r   r   r(   r   r   r,   r*   r9   
ValueError)r.   rJ   rK   r0   s       r   "test_initial_value_bytes_parameterz+CtrTests.test_initial_value_bytes_parameter   se   '$, $(=? ? ? '$, $VE E EK//,,goob.A.ABBB 	*cgt|S\(/ 	 	1 	1 	1*cgt|S\ $V 	 	E 	E 	E 	*cgt|S\(/ 	 	1 	1 	1*cgt|S\ $V 	 	E 	E 	E 	E 	Er   c           	      .   |                      t          t          j        | j        t          j        t          j        d                     |                      t          t          j        | j        t          j        t          j        d                     d S )Nx   r%      )r9   rV   r   r   r   r(   r   r;   s    r   test_iv_with_matching_lengthz%CtrTests.test_iv_with_matching_length   s|    *cgt|S\")+c"2"2 	 	4 	4 	4*cgt|S\")+c"2"2 	 	4 	4 	4 	4 	4r   c                     t          j        | j        t           j        | j                  }|                     |j        t           j                   d S Nr%   )r   r   r   r(   r)   r,   
block_sizer.   r/   s     r   test_block_size_128zCtrTests.test_block_size_128   s?    s|T\JJJ*CN;;;;;r   c                     t          j        | j        t           j        | j                  }|                     |j        t           j                   d S r]   )r	   r   r   r(   r5   r,   r^   r_   s     r   test_block_size_64zCtrTests.test_block_size_64   s?    $,t{KKK*DO<<<<<r   c                    dgdz  }t          j        | j        t           j        | j                  fd|D             }t          j        | j        t           j        | j                  |                     d                    |                              d                    |                               t          j        | j        t           j        | j                  fd|D             }t          j        | j        t           j        | j                  |                     d                    |                              d                    |                               d S )N   7777777d   r%   c                 :    g | ]}                     |          S  r*   .0xr/   s     r   
<listcomp>z4CtrTests.test_unaligned_data_128.<locals>.<listcomp>   %    ???aq))???r   r   c                 :    g | ]}                     |          S rg   rh   ri   s     r   rl   z4CtrTests.test_unaligned_data_128.<locals>.<listcomp>   rm   r   )r   r   r   r(   r)   r,   joinr*   r.   
plaintextsciphertextsr/   s      @r   test_unaligned_data_128z CtrTests.test_unaligned_data_128   s+   !^c)
s|T\JJJ????:???s|T\JJJ+..sxx
?S?S0T0TUUUs|T\JJJ????:???s|T\JJJ+..sxx
?S?S0T0TUUUUUr   c                    dgdz  }t          j        | j        t          j        | j                  fd|D             }t          j        | j        t          j        | j                  |                     d                    |                              d                    |                               t          j        | j        t          j        | j                  fd|D             }t          j        | j        t          j        | j                  |                     d                    |                              d                    |                               d S )Nrd   re   r%   c                 :    g | ]}                     |          S rg   rh   ri   s     r   rl   z3CtrTests.test_unaligned_data_64.<locals>.<listcomp>   rm   r   r   c                 :    g | ]}                     |          S rg   rh   ri   s     r   rl   z3CtrTests.test_unaligned_data_64.<locals>.<listcomp>   rm   r   )	r	   r   r   r   r(   r5   r,   ro   r*   rp   s      @r   test_unaligned_data_64zCtrTests.test_unaligned_data_64   s+   !^c)
$,dkJJJ????:???$,dkJJJ+..sxx
?S?S0T0TUUU$,dkJJJ????:???$,dkJJJ+..sxx
?S?S0T0TUUUUUr   c                 V   |                      t          t          j        | j        t          j        d| j                   |                      t          t          j        | j        t          j        | j        d           t          j        | j        t          j        | j        d           d S )N   r%   )r&   unknownF)r&   	use_aesni)r9   r:   r   r   r   r(   r)   r;   s    r   test_unknown_parametersz CtrTests.test_unknown_parameters   s    )SWdlCLT\ 	 	3 	3 	3)SWdlCL"&, 	 	; 	; 	; 	clDLERRRRRRr   c                     dD ]\}t          j        | j        t           j        | j                  } t          ||          d          }|                     |d           ]d S )N)r*   r+   r%   r   )r   r   r   r(   r)   getattrr,   )r.   funcr/   results       r   test_null_encryption_decryptionz(CtrTests.test_null_encryption_decryption   si    ( 	* 	*DWT\3<NNNF*WVT**3//FVS))))	* 	*r   c                    t          j        | j        t           j        | j                  }|                    d           |                     t          |j        d           t          j        | j        t           j        | j                  }|                    d           |                     t          |j        d           d S )Nr%   r   )	r   r   r   r(   r)   r*   r9   r:   r+   r_   s     r   test_either_encrypt_or_decryptz'CtrTests.test_either_encrypt_or_decrypt   s    s|T\JJJs)V^S999s|T\JJJs)V^S99999r   c                    t          j        dt          d          dz            }d}t          j        | j        t          j        |          }|                    d|z             |                     t          |j        d           t          j        | j        t          j        |          }|                     t          |j        d|dz   z             t          j        | j        t          j        |          }|	                    d|z             |                     t          |j	        d           t          j        | j        t          j        |          }|                     t          |j	        d|dz   z             d S )	Nr   	      r!   i   r%      9   )
r   r   r   r   r   r(   r*   r9   OverflowErrorr+   )r.   r&   	max_bytesr/   s       r   test_wrap_aroundzCtrTests.test_wrap_around   s;   +aQ"555	s|WEEEti'(((->>>s|WEEE-Q9OPPPs|WEEEti'(((->>>s|WEEE-Q9OPPPPPr   c                 J   d}d}t          j        | j        t           j        | j        |          }|                    |          }t          j        | j        t           j        t          | j                  t          |                    }|                    t          |                    }|                     ||           |                     |j        |j                   t          j        | j        t           j        | j        |          }|	                    |          }t          j        | j        t           j        t          | j                  t          |                    }	|		                    t          |                    }
|                     ||
           d S )Ns   1111111111111111rU   rQ   )
r   r   r   r(   r   r*   	bytearrayr,   r?   r+   )r.   r   ivrJ   ref1rK   ref2cipher3ref3cipher4ref4s              r   test_bytearrayzCtrTests.test_bytearray   sh   & '$, $(*, , , t$$'$, )$- 8 8(1"7 7 7 y//t$$$666 '$, $(*, , , t$$'$, )$- 8 8(1"7 7 7 y//t$$$$$r   c                     t          j        dt           j        d          }|                    ddz            }t	          j        |                                          }|                     |d           d S )Ns    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr   rD      Bi@B @96204fc470476561a3a8f3b6fe6d24be85c87510b638142d1d0fb90989f8a6a6)r   r   r(   r*   r   	hexdigestr,   )r.   r/   r1   digests       r   test_very_long_datazCtrTests.test_very_long_data  se    CL<<<^^D7N++B))++!cdddddr   c                 B   d}t          j        dt           j        | j                  }|                    |          }t          d          }t          j        dt           j        | j                  }|                    ||          }|                     ||           |                     |d            t          j        dt           j        | j                  }|                    ||          }|                     ||           |                     |d            d S Ns   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555   4444444444444444rD      output)r   r   r(   r   r*   r   r,   r+   )r.   r0   r/   r1   r   ress         r   test_output_paramzCtrTests.test_output_param  s    #,dmDDD^^B3#,dmDDDnnRn//V$$$d####,dmDDDnnRn//V$$$d#####r   c                    d}t          j        dt           j        | j                  }|                    |          }t          t          d                    }t          j        dt           j        | j                  }|                    ||           |                     ||           t          j        dt           j        | j                  }|                    ||           |                     ||           d S r   )	r   r   r(   r   r*   
memoryviewr   r,   r+   )r.   r0   r/   r1   r   s        r   test_output_param_memoryviewz%CtrTests.test_output_param_memoryview(  s    #,dmDDD^^BIcNN++#,dmDDDr&)))V$$$#,dmDDDr&)))V$$$$$r   c                    d}d|z  }t          j        dt           j        | j                  }|                    |          }t          j        dt           j        | j                  }|                     t          |j        |d|z             t          j        dt           j        | j                  }|                     t          |j        |d|z             t          |dz
            }t          j        dt           j        | j                  }|                     t          |j        ||           t          j        dt           j        | j                  }|                     t          |j        ||           d S )Nr      5r   rD      0r   r   )
r   r   r(   r   r*   r9   r:   r+   r   rV   )r.   LEN_PTr0   r/   r1   shorter_outputs         r   test_output_param_negzCtrTests.test_output_param_neg7  s>   F]#,dmDDD^^B#,dmDDD)V^RvNNN#,dmDDD)V^RvNNN"6A:..#,dmDDD*fnbPPP#,dmDDD*fnbPPPPPr   N)!__name__
__module____qualname__r   r   r   r   r   r   r   r5   r)   r3   r6   r<   rB   rN   rS   rW   r[   r`   rb   rs   rw   r|   r   r   r   r   r   r   r   r   rg   r   r   r   r   +   s       nY++GnY++G~j!,,H~j!,,HW[H---Fgk"X...G" " "" " "X X X3 3 3E E E6A A A*E E E,4 4 4< < <= = =V V V
V 
V 
VS S S* * *: : :Q Q Q&% % %>e e e$ $ $"% % %Q Q Q Q Qr   r   c                   $    e Zd ZdZd Zd Zd ZdS )SP800TestVectorszQClass exercising the CTR test vectors found in Section F.5
    of NIST SP 800-38Ac                    d}d}d}t          j        dt          d          d          }t          |          }t          |          }t          |          }t          j        |t          j        |          }|                     |                    |          |           t          j        |t          j        |          }|                     |                    |          |           d S )	Nڀ6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710ڀ874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab1e031dda2fbe03d1792170a0f3009cee 2b7e151628aed2a6abf7158809cf4f3cr   f0f1f2f3f4f5f6f7f8f9fafbfcfd  nbitsr"   rF   r%   r   r   r   r   r(   r,   r*   r+   r.   r'   
ciphertextkeyr&   r/   s         r   test_aes_128zSP800TestVectors.test_aes_128O  s    ;	;
 ;"+45S+T+T28: : : nni((	z**
clG<<<	22J???clG<<<
33Y?????r   c                    d}d}d}t          j        dt          d          d          }t          |          }t          |          }t          |          }t          j        |t          j        |          }|                     |                    |          |           t          j        |t          j        |          }|                     |                    |          |           d S )	Nr   ڀ1abc932417521ca24f2b0459fe7e6e0b090339ec0aa6faefd5ccc2c6f4ce8e941e36b26bd1ebc670d1bd1d665620abf74f78a7f6d29809585a97daec58c6b05008e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7br   r   r   r   r%   r   r   s         r   test_aes_192zSP800TestVectors.test_aes_192f  s    ;	;
 K"+45S+T+T28: : : nni((	z**
clG<<<	22J???clG<<<
33Y?????r   c                    d}d}d}t          j        dt          d          d          }t          |          }t          |          }t          |          }t          j        |t          j        |          }|                     |                    |          |           t          j        |t          j        |          }|                     |                    |          |           d S )	Nr   ڀ601ec313775789a5b7a7f504bbf3d228f443e3ca4d62b59aca84e990cacaf5c52b0930daa23de94ce87017ba2d84988ddfc9c58db67aada613c2dd08457941a6@603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4r   r   r   r   r%   r   r   s         r   test_aes_256zSP800TestVectors.test_aes_256}  s    ;	;
 ["+45S+T+T28: : : nni((	z**
clG<<<	22J???clG<<<
33Y?????r   N)r   r   r   __doc__r   r   r   rg   r   r   r   r   K  sV         @ @ @.@ @ @.@ @ @ @ @r   r   c                   d    e Zd ZdZg ZeD ]!Ze                    d eD                        "d ZdS )RFC3686TestVectors)	) 53696e676c6520626c6f636b206d7367 e4095d4fb7a7b3792d6175a3261311b8 ae6852f8121067cc4bf7a5765577f39e000000300000000000000000)@000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f@5104a106168a72d9790d41ee8edad388eb2e1efc46da57c8fce630df9141be28 7e24067817fae0d743d6ce1f32539163006cb6dbc0543b59da48d90b)H000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223Hc1cf48a89f2ffdd9cf4652e9efdb72d74540a42bde6d7836d59a5ceaaef3105325b2072f 7691be035e5020a8ac6e618529f9a0dc00e0017b27777f3f4a1786f0)r    4b55384fe259c9c84e7935a003cbe928016af5b145fc9f579c175f93e3bfb0eed863d06ccfdb785150000004836733c147d6d93cb)r   @453243fc609b23327edfaafa7131cd9f8490701c5ad4a79cfc1fe0ff42f4fb0007c5cb2401b3dc33c19e7340819e0f69c678c3db8e6f6a91a0096b03b020c6eadc2cb500d)r   H96893fc55e5c722f540b7dd1ddf7e758d288bc95c69165884536c811662f2188abee0935002bf391ee8ecb159b959617b0965279bf59b60a786d3e0fe0007bdfd5cbd60278dcc0912)r    145ad01dbf824ec7560863dc71e3e0c0@776beff2851db06f4c8a0542c8696f6c6a81af1eec96b4d37fc1d689e6c1c10400000060db5672c97aa8f0b2)r   @f05e231b3894612c49ee000b804eb2a9b8306b508f839d6a5530831d9344af1c@f6d66d6bd52d59bb0796365879eff886c66dd51a5b6a99744b50590c87a2388400faac24c1585ef15a43d875)r   Heb6c52821d0bbbf7ce7594462aca4faab407df866569fd07f48cc0b583d6071f1ec0e6b8@ff7a617ce69148e4f1726e2f43581de2aa62d9f805532edff1eed687fb54153d001cc5b751a51d70a1c11148c                 ,    g | ]}t          |          S rg   )r   )rj   rk   s     r   rl   zRFC3686TestVectors.<listcomp>  s    111	!111r   c                    | j         D ]\  }}}}t          j        d|          }t          j        |t          j        |          }|                    |          }|                     t          |          t          |                     d S )Nr    r!   r%   )bindatar   r   r   r(   r*   r,   r   )r.   r0   r1   r   r"   r&   r/   r   s           r   runTestzRFC3686TestVectors.runTest  s    #'< 	; 	;BCk"V444GWS#,@@@F^^B''FWR[['&//::::		; 	;r   N)r   r   r   r   r   tvappendr   rg   r   r   r   r     se        %
DN G 3 311b1112222; ; ; ; ;r   r   c                     g }|t          t                    z  }|t          t                    z  }|t                      gz  }|S r8   )r   r   r   r   )configtestss     r   	get_testsr     sE    E	_X&&&E	_-...E	!##%%ELr   __main__c                  B    t          j        t                                S r8   )unittest	TestSuiter   rg   r   r   <lambda>r     s    H&y{{33 r   suite)defaultTest)r   binasciir   r   Cryptodome.SelfTest.st_commonr   Cryptodome.Util.py3compatr   r   Cryptodome.Cipherr   r	   Cryptodome.Hashr
   r   Cryptodome.Utilr   r   TestCaser   r   r   r   r   r   mainrg   r   r   <module>r     s  >  ' ' ' ' ' ' ' ' 9 9 9 9 9 9 3 3 3 3 3 3 3 3 ' ' ' ' ' ' ' ' , , , , , , , , # # # # # #8 8 8]Q ]Q ]Q ]Q ]Qx  ]Q ]Q ]Q@	F@ F@ F@ F@ F@x( F@ F@ F@R7; 7; 7; 7; 7;* 7; 7; 7;t      z33EHMg&&&&&& r   