
    ¿igM                     z   d dl Z 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 d dlmZ d dlmZ d	 Z G d
 dej                  Z G d dej                  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	unhexlify)list_test_cases)load_test_vectors_wycheproof)tobytesbchr)AES)SHAKE128)strxorc                 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_SIV.pyget_tag_randomr   -   s)    <WS\\***//777    c                       e Zd Z edd          Z edd          Z edd          Z edd          Z ed	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 )SivTestskey_256    key_3840   key_512@   	nonce_128   r      c                 t   | j         | j        | j        fD ]}t          j        |t          j        | j                  }t          dd          }|                    |          \  }}t          j        |t          j        | j                  }|	                    ||          }| 
                    ||           d S )Nnonce	plaintexti@  )r   r   r   r	   r   MODE_SIVnonce_96r   encrypt_and_digestdecrypt_and_verifyassertEqual)selfkeycipherptctmacpt2s          r   test_loopback_128zSivTests.test_loopback_1289   s    <t|; 	& 	&CWS#,dmDDDFX66B//33GBWS#,dmDDDF++B44CR%%%%	& 	&r   c                    t          j        | j        t           j                   t          j        | j        t           j        | j                  }|                    | j                  \  }}t          j        | j        t           j        | j                  }|                    | j                  \  }}|                     ||z   ||z              d S Nr!   )r	   r   r   r$   r%   r&   r   r(   )r)   r+   ct1tag1ct2tag2s         r   
test_noncezSivTests.test_nonceC   s    cl+++s|T]CC--di88	Ts|4=III--di88	TtS4Z00000r   c                 v    |                      t          t          j        | j        t          j        d           d S )Ntest12345678r!   )assertRaises	TypeErrorr	   r   r   r$   r)   s    r   test_nonce_must_be_bytesz!SivTests.test_nonce_must_be_bytesN   s:    )SWdlCL / 	 	1 	1 	1 	1 	1r   c                 2   |                      t          t          j        | j        t          j        d           t          dd          D ]M}t          j        | j        t          j        t          d          |z            }|                    d           Nd S )Nr   r!      r      )	r:   
ValueErrorr	   r   r   r$   ranger   r&   )r)   xr+   s      r   test_nonce_lengthzSivTests.test_nonce_lengthR   s    *cgt|S\ # 	 	% 	% 	% q# 	/ 	/AWT\3<tAww{KKKF%%g....	/ 	/r   c                     t          j        | j        t           j        | j                  }|                     |j        t           j                   d S r2   )r	   r   r   r$   r%   r(   
block_sizer)   r+   s     r   test_block_size_128zSivTests.test_block_size_128[   s?    s|4=III*CN;;;;;r   c                 &   t          j        | j        t           j        | j                  }|                     |j        | j                   |                     t          t          j        | j        t           j                  d                     d S )Nr!   r"   )	r	   r   r   r$   r%   r(   r"   assertFalsehasattrrG   s     r   test_nonce_attributezSivTests.test_nonce_attribute_   sn    s|4=IIIt}555 	s|!D!DgNNOOOOOr   c                 T   |                      t          t          j        | j        t          j        | j        d           |                      t          t          j        | j        t          j        | j        d           t          j        | j        t          j        | j        d           d S )N   )r"   unknownF)r"   	use_aesni)r:   r;   r	   r   r   r$   r%   r<   s    r   test_unknown_parametersz SivTests.test_unknown_parametersf   s    )SWdlCL-	, 	, 	,)SWdlCL $q 	 	: 	: 	:
 	cl$-	! 	! 	! 	! 	! 	!r   c                    t          j        | j        t           j        | j                  }|                    | j                   |                     t          |j	        | j                   t          j        | j        t           j        | j                  }|                    | j                   |                     t          |j
        | j        | j                   d S r2   )r	   r   r   r$   r%   r&   r   r:   r;   decryptr'   rG   s     r   test_encrypt_excludes_decryptz&SivTests.test_encrypt_excludes_decryptq   s    s|4=III!!$),,,)V^TY???s|4=III!!$),,,)V%>)TY	0 	0 	0 	0 	0r   c                 8   t          j        | j        t           j        | j                  }|                     t          |j        d           t          j        | j        t           j        | j                  }|                     t          |j        dd           d S )Nr!   ztest1234567890-*s   xxxx)	r	   r   r   r$   r%   r:   r;   encryptr'   rG   s     r   test_data_must_be_bytesz SivTests.test_data_must_be_bytes{   s    s|4=III)V^5HIIIs|4=III)V%>-w	8 	8 	8 	8 	8r   c                     t          j        | j        t           j        | j                  }|                    | j                  \  }}|                     t          |          d           d S )Nr!      )	r	   r   r   r$   r%   r&   r   r(   len)r)   r+   _r.   s       r   test_mac_lenzSivTests.test_mac_len   sY    s|4=III**49553S2&&&&&r   c                 T   ddl m} t          j        | j        t          j        | j                  }|                    | j                  \  }} ||d          }t          j        | j        t          j        | j                  }| 	                    t          |j        ||           d S )Nr   )strxor_cr!   r?   )Cryptodome.Util.strxorr^   r	   r   r   r$   r%   r&   r   r:   rA   r'   )r)   r^   r+   r-   r.   invalid_macs         r   test_invalid_maczSivTests.test_invalid_mac   s    333333s|4=III++DI66ChsD))s|4=III*f&?%	' 	' 	' 	' 	'r   c                 n   t          j        | j        t           j        | j                  }|                                }|                     |                                t          |                     t          j        | j        t           j        | j                  }|	                    |           d S r2   )
r	   r   r   r$   r%   	hexdigestr(   digestr   	hexverify)r)   r+   mac_hexs      r   test_hex_maczSivTests.test_hex_mac   s    s|4=III""$$)G*<*<===s|4=III!!!!!r   c                 t   t          | j                  }t          | j                  }t          | j                  }t          | j                  }t	          j        | j        t          j        | j                  }|                    | j                   |                    | j                  \  }}t	          j        |t          j        |          }d|d d<   d|d d<   |                    |           d|d d<   |                    |          \  }	}
| 	                    ||	           | 	                    ||
           | 	                    |j
        |j
                   t          | j                  }t          | j                  }t          | j                  }t          |          }t          |          }t	          j        |t          j        |          }d|d d<   d|d d<   |                    |           d|d d<   |                    ||          }| 	                    | j        |           d S Nr!   s      )	bytearrayr   r%   r   r	   r   r$   updater&   r(   r"   r'   r)   r*   r"   r   headercipher1r-   r   cipher2ct_testtag_testct_batag_bacipher3pt_tests                  r   test_bytearrayzSivTests.test_bytearray   s    %%$-((##49%%'$,, $/ / / 	ty!!!,,TY77C'#, %' ' ' "BQB#bqb	v$rr
#66t<<W%%%h'''666 %%$-((49%%"3'#, %' ' ' "BQB#bqb	v$rr
,,UF;;G,,,,,r   c                 ^   t          t          | j                            }t          t          | j                            }t          t          | j                            }t          t          | j                            }t          j        | j        t
          j        | j                  }|                    | j                   |	                    | j                  \  }}t          j        |t
          j        |          }d|d d<   d|d d<   |                    |           d|d d<   |	                    |          \  }	}
| 
                    ||	           | 
                    ||
           | 
                    |j        |j                   t          t          | j                            }t          t          | j                            }t          t          | j                            }t          t          |                    }t          t          |                    }t          j        |t
          j        |          }d|d d<   d|d d<   |                    |           d|d d<   |                    ||          }| 
                    | j        |           d S ri   )
memoryviewrk   r   r%   r   r	   r   r$   rl   r&   r(   r"   r'   rm   s                  r   test_memoryviewzSivTests.test_memoryview   sg    4<00119T]3344)DI..//Idi0011'$,, $/ / / 	ty!!!,,TY77C'#, %' ' ' "BQB#bqb	v$rr
"55d;;W%%%h'''666 4<00119T]3344Idi00119R==))IcNN++'#, %' ' ' "BQB#bqb	v$rr
,,UF;;G,,,,,r   c                    d}t          j        | j        t           j        | j                  }|                    |          \  }}t          d          }t          j        | j        t           j        | j                  }|                    ||          \  }}|                     ||           |                     |d            |                     ||           t          j        | j        t           j        | j                  }|                    |||          }|                     ||           |                     |d            d S Ns   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555r!   r   output)	r	   r   r   r$   r%   r&   rk   r(   r'   )r)   r,   r+   r-   r   r~   restag_outs           r   test_output_paramzSivTests.test_output_param   s'   s|4=III++B//C3s|4=III00F0CCWV$$$d###g&&&s|4=III''C'??V$$$d#####r   c                 *   d}t          j        | j        t           j        | j                  }|                    |          \  }}t          t          d                    }t          j        | j        t           j        | j                  }|                    ||           |                     ||           t          j        | j        t           j        | j                  }|	                    |||           |                     ||           d S r|   )
r	   r   r   r$   r%   r&   ry   rk   r(   r'   )r)   r,   r+   r-   r   r~   s         r   test_output_param_memoryviewz%SivTests.test_output_param_memoryview  s    s|4=III++B//CIcNN++s|4=III!!"V!444V$$$s|4=III!!"c&!999V$$$$$r   c                 >   d}d|z  }t          j        | j        t           j        | j                  }|                    |          \  }}t          j        | j        t           j        | j                  }|                     t          |j        |d|z             t          j        | j        t           j        | j                  }|                     t          |j        ||d|z             t          |dz
            }t          j        | j        t           j        | j                  }|                     t          |j        ||           t          j        | j        t           j        | j                  }|                     t          |j        |||           d S )Nr      5r!      0r}   r?   )r	   r   r   r$   r%   r&   r:   r;   r'   rk   rA   )r)   LEN_PTr,   r+   r-   r   shorter_outputs          r   test_output_param_negzSivTests.test_output_param_neg  s[   F]s|4=III++B//Cs|4=III)V%>4RX=YYYs|4=III)V%>CPTW]P]^^^"6A:..s|4=III*f&?N[[[s|4=III*f&?SQ_`````r   N)__name__
__module____qualname__r   r   r   r   r%   r   r0   r7   r=   rD   rH   rL   rQ   rT   rW   r\   ra   rg   rw   rz   r   r   r    r   r   r   r   1   sr       nY++GnY++GnY++G~k2..H>&#&&D& & &	1 	1 	11 1 1/ / /< < <P P P	! 	! 	!0 0 08 8 8' ' '
	' 	' 	'" " "+- +- +-Z+- +- +-Z$ $ $$% % %a a a a ar   r   c                       e Zd Z edd          Z edd          Z edd          Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd ZdS )SivFSMTestsr   r   r%   r   r   r   c                     t          j        | j        t           j        | j                  }|                     t          |j        d           d S Nr!   s   xxx)r	   r   r   r$   r%   r:   r;   rV   rG   s     r   test_invalid_init_encryptz%SivFSMTests.test_invalid_init_encrypt0  E    s|#}. . .)V^V<<<<<r   c                     t          j        | j        t           j        | j                  }|                     t          |j        d           d S r   )r	   r   r   r$   r%   r:   r;   rS   rG   s     r   test_invalid_init_decryptz%SivFSMTests.test_invalid_init_decrypt6  r   r   c                 l   t          j        | j        t           j        | j                  }|                    | j                   |                                }t          j        | j        t           j        | j                  }|                    | j                   |                    |           d S r2   )	r	   r   r   r$   r%   rl   r   rd   verifyr)   r+   r.   s      r   $test_valid_init_update_digest_verifyz0SivFSMTests.test_valid_init_update_digest_verify<  s     s|#}. . .di   mmoo s|#}. . .di   cr   c                     t          j        | j        t           j        | j                  }|                                 d S r2   )r	   r   r   r$   r%   rd   rG   s     r   test_valid_init_digestz"SivFSMTests.test_valid_init_digestJ  s/    s|4=IIIr   c                    t          j        | j        t           j        | j                  }|                                }t          j        | j        t           j        | j                  }|                    |           d S r2   )r	   r   r   r$   r%   rd   r   r   s      r   test_valid_init_verifyz"SivFSMTests.test_valid_init_verifyO  s_    s|4=IIImmoos|4=IIIcr   c                    t          j        | j        t           j        | j                  }|                    | j                   |                                }t          d          D ]*}| 	                    ||                                           +t          j        | j        t           j        | j                  }|                    | j                   t          d          D ]}|
                    |           d S )Nr!         )r	   r   r   r$   r%   rl   r   rd   rB   r(   r   )r)   r+   	first_macrC   s       r   $test_valid_multiple_digest_or_verifyz0SivFSMTests.test_valid_multiple_digest_or_verifyW  s    s|4=IIIdi   MMOO	q 	9 	9AY8888 s|4=IIIdi   q 	% 	%AMM)$$$$	% 	%r   c                    t          j        | j        t           j        | j                  }|                    | j                   |                    | j                  \  }}t          j        | j        t           j        | j                  }|                    | j                   |                    ||          }| 	                    | j        |           d S r2   )
r	   r   r   r$   r%   rl   r   r&   r'   r(   )r)   r+   r-   r.   r,   s        r   0test_valid_encrypt_and_digest_decrypt_and_verifyz<SivFSMTests.test_valid_encrypt_and_digest_decrypt_and_verifye  s    s|4=IIIdi   ++DI66C s|4=IIIdi   &&r3//B'''''r   c                     t          j        | j        t           j        | j                  }|                    | j                  \  }}|                     t          |j        d           d S )Nr!   r   )	r	   r   r   r$   r%   r&   r   r:   r;   r)   r+   r-   r   s       r   (test_invalid_multiple_encrypt_and_digestz4SivFSMTests.test_invalid_multiple_encrypt_and_digestq  sX    s|4=III++DI66C)V%>DDDDDr   c                 \   t          j        | j        t           j        | j                  }|                    | j                  \  }}t          j        | j        t           j        | j                  }|                    ||           |                     t          |j        ||           d S r2   )
r	   r   r   r$   r%   r&   r   r'   r:   r;   r   s       r   (test_invalid_multiple_decrypt_and_verifyz4SivFSMTests.test_invalid_multiple_decrypt_and_verifyv  s    s|4=III++DI66Cs|4=III!!"c***)V%>CHHHHHr   N)r   r   r   r   r   r%   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   *  s        nY++G~j"--H>&#&&D= = == = =    
  % % %
( 
( 
(E E E
I I I I Ir   r   c                     d | d                              d          D             g}|d | dd         D             z  }| d         rt          | d                   }nd }||gz  }|S )Nc                 ,    g | ]}t          |          S r   r   .0rC   s     r   
<listcomp>ztransform.<locals>.<listcomp>  s    666y||666r   r   -c                 ,    g | ]}t          |          S r   r   r   s     r   r   ztransform.<locals>.<listcomp>  s    ...	!...r   r?   r   )splitr   )tvnew_tvr"   s      r   	transformr     s~    66RU[[%5%56667F
..b1g....F	!u "Q%  
iFMr   c                   8    e Zd ZdZddgZd eD             Zd ZdS )TestVectorsz6Class exercising the SIV test vectors found in RFC5297)0101112131415161718191a1b1c1d1e1f2021222324252627112233445566778899aabbccddee40c02b9690c4dc04daef7f6afe5c 85632d07c6e8f37f950acd320a2ecc93@fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0f0f1f2f3f4f5f6f7f8f9fafbfcfdfeffN)ze00112233445566778899aabbccddeeffdeaddadadeaddadaffeeddccbbaa99887766554433221100-102030405060708090a0^7468697320697320736f6d6520706c61696e7465787420746f20656e6372797074207573696e67205349562d414553^cb900f2fddbe404326601965c889bf17dba77ceb094fa663b7a3f748ba8af829ea64ad544a272e9c485b62a3fd5c0d 7bdb6e3b432667eb06f4d14bff2fbd0f@7f7e7d7c7b7a79787776757473727170404142434445464748494a4b4c4d4e4f 09f911029d74e35bd84156c5635688c0c                 ,    g | ]}t          |          S r   )r   )r   r   s     r   r   zTestVectors.<listcomp>  s    ???rYr]]???r   c                    | j         D ]\  }}}}}}t          j        |t          j        |          }|D ]}|                    |           |                    |          \  }	}
|                     ||	           |                     ||
           t          j        |t          j        |          }|D ]}|                    |           |                    ||          }|                     ||           d S r2   )test_vectorsr	   r   r$   rl   r&   r(   r'   )r)   
assoc_datar,   r-   r.   r*   r"   r+   rC   r5   mac2r/   s               r   runTestzTestVectors.runTest  s   373D 	& 	&/JBS% WS#,e<<<F ! !a    11"55ICR%%%S$''' WS#,e<<<F ! !a    ++B44CR%%%%	& 	&r   N)r   r   r   __doc__test_vectors_hexr   r   r   r   r   r   r     sR        @@
, @?-=???L& & & & &r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestVectorsWycheproofc                 R    t           j                            |            d| _        d S NNoneunittestTestCase__init___idr<   s    r   r   zTestVectorsWycheproof.__init__  $    ""4(((r   c                 2    t          ddd          | _        d S )NCipher
wycheproofzaes_siv_cmac_test.jsonzWycheproof AES SIVr   r   r<   s    r   setUpzTestVectorsWycheproof.setUp  s"    ./G/G/CE Er   c                     | j         S Nr   r<   s    r   shortDescriptionz&TestVectorsWycheproof.shortDescription  	    xr   c                 B   dt          |j                  z   | _        t          j        |j        t          j                  }|                    |j                   |	                    |j
                  \  }}|j        r |                     ||z   |j                   d S d S )Nz!Wycheproof Encrypt AES-SIV Test #)stridr   r	   r   r*   r$   rl   aadr&   msgvalidr(   r-   r)   r   r+   r-   r   s        r   test_encryptz"TestVectorsWycheproof.test_encrypt  s    6RUC..bf++BF33C8 	.S2Xru-----	. 	.r   c                    dt          |j                  z   | _        t          j        |j        t          j                  }|                    |j                   	 |	                    |j
        dd          |j
        d d                   }|j        sJ |                     ||j                   d S # t          $ r |j        rJ Y d S w xY w)Nz!Wycheproof Decrypt AES_SIV Test #rY   )r   r   r   r	   r   r*   r$   rl   r   r'   r-   r   r(   r   rA   r)   r   r+   r,   s       r   test_decryptz"TestVectorsWycheproof.test_decrypt  s    6RUC..bf	)**25:ruSbSzBBB 8OOOR(((((	  	  	  	 x	 s   0B2 2C	C	c                 n    | j         D ],}|                     |           |                     |           -d S r   r   r   r   r)   r   s     r   r   zTestVectorsWycheproof.runTest  H    ' 	" 	"Bb!!!b!!!!	" 	"r   N	r   r   r   r   r   r   r   r   r   r   r   r   r   r     sq          E E E
  . . .) ) )" " " " "r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestVectorsWycheproof2c                 R    t           j                            |            d| _        d S r   r   r<   s    r   r   zTestVectorsWycheproof2.__init__  r   r   c                 2    t          ddd          | _        d S )Nr   zaead_aes_siv_cmac_test.jsonzWycheproof AEAD SIVr   r<   s    r   r   zTestVectorsWycheproof2.setUp  s"    ./G/L/DF Fr   c                     | j         S r   r   r<   s    r   r   z'TestVectorsWycheproof2.shortDescription  r   r   c                    dt          |j                  z   | _        t          j        |j        t          j        |j                  }|                    |j	                   |
                    |j                  \  }}|j        r8|                     ||j                   |                     ||j                   d S d S )Nz&Wycheproof Encrypt AEAD-AES-SIV Test #r!   )r   r   r   r	   r   r*   r$   ivrl   r   r&   r   r   r(   r-   r   r   s        r   r   z#TestVectorsWycheproof2.test_encrypt  s    ;c"%jjHRU;;;bf++BF33C8 	*R'''S"&)))))	* 	*r   c                    dt          |j                  z   | _        t          j        |j        t          j        |j                  }|                    |j	                   	 |
                    |j        |j                  }|j        sJ |                     ||j                   d S # t           $ r |j        rJ Y d S w xY w)Nz&Wycheproof Decrypt AEAD-AES-SIV Test #r!   )r   r   r   r	   r   r*   r$   r   rl   r   r'   r-   r   r   r(   r   rA   r   s       r   r   z#TestVectorsWycheproof2.test_decrypt  s    ;c"%jjHRU;;;bf	)**25"&99B 8OOOR(((((	  	  	  	 x	 s   # B) )C ?C c                 n    | j         D ],}|                     |           |                     |           -d S r   r   r   s     r   r   zTestVectorsWycheproof2.runTest  r   r   Nr   r   r   r   r   r     sq          F F F
  * * *) ) )" " " " "r   r   c                     |                      d          }g }|t          t                    z  }|t          t                    z  }|t	                      gz  }|t                      gz  }|t                      gz  }|S )Nwycheproof_warnings)getr   r   r   r   r   r   )configr   testss      r   	get_testsr     s|     **%:;;E	_X&&&E	_[)))E	{}}E	$&&((E	%''))ELr   __main__c                  B    t          j        t                                S r   )r   	TestSuiter   r   r   r   <lambda>r  '  s    H&y{{33 r   suite)defaultTest)jsonr   binasciir   Cryptodome.SelfTest.st_commonr   Cryptodome.SelfTest.loaderr   Cryptodome.Util.py3compatr   r   Cryptodome.Cipherr	   Cryptodome.Hashr
   r_   r   r   r   r   r   r   r   r   r   r   r   r  mainr   r   r   <module>r     s  >         9 9 9 9 9 9 C C C C C C 3 3 3 3 3 3 3 3 ! ! ! ! ! ! $ $ $ $ $ $ ) ) ) ) ) )8 8 8va va va va vax  va va varRI RI RI RI RI(# RI RI RIj  6& 6& 6& 6& 6&(# 6& 6& 6&r(" (" (" (" ("H- (" (" ("V)" )" )" )" )"X. )" )" )"X  	 	 	 	 z33EHMg&&&&&& r   