
    ,hM                        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j8                  d       yy)    N)	unhexlify)list_test_cases)load_test_vectors_wycheproof)tobytesbchr)AES)SHAKE128)strxorc                 ^    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_SIV.pyget_tag_randomr   -   s     <<WS\*//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y)SivTestskey_256    key_3840   key_512@   	nonce_128   r      c                    | j                   | j                  | j                  fD ]  }t        j                  |t        j
                  | j                        }t        dd      }|j                  |      \  }}t        j                  |t        j
                  | j                        }|j                  ||      }| j                  ||        y )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WWS#,,dmmDFX6B//3GBWWS#,,dmmDF++B4CR%	&r   c                    t        j                  | j                  t         j                         t        j                  | j                  t         j                  | j                        }|j                  | j                        \  }}t        j                  | j                  t         j                  | j                        }|j                  | j                        \  }}| j                  ||z   ||z          y Nr    )r   r   r   r#   r$   r%   r   r'   )r(   r*   ct1tag1ct2tag2s         r   
test_noncezSivTests.test_nonceC   s    cll+s||T]]C--dii8	Ts||4==I--dii8	TtS4Z0r   c                     | j                  t        t        j                  | j                  t        j
                  d       y )Ntest12345678r    )assertRaises	TypeErrorr   r   r   r#   r(   s    r   test_nonce_must_be_bytesz!SivTests.test_nonce_must_be_bytesN   s,    )SWWdllCLL / 	 	1r   c                 @   | j                  t        t        j                  | j                  t        j
                  d       t        dd      D ]O  }t        j                  | j                  t        j
                  t        d      |z        }|j                  d       Q y )Nr   r       r      )	r9   
ValueErrorr   r   r   r#   ranger   r%   )r(   xr*   s      r   test_nonce_lengthzSivTests.test_nonce_lengthR   ss    *cggt||S\\ # 	 	% q# 	/AWWT\\3<<tAw{KF%%g.	/r   c                     t        j                  | j                  t         j                  | j                        }| j                  |j                  t         j                         y r1   )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**CNN;r   c                 R   t        j                  | j                  t         j                  | j                        }| j                  |j                  | j                         | j                  t        t        j                  | j                  t         j                        d             y )Nr    r!   )	r   r   r   r#   r$   r'   r!   assertFalsehasattrrF   s     r   test_nonce_attributezSivTests.test_nonce_attribute_   sb    s||4==It}}5 	s||!DgNOr   c                    | j                  t        t        j                  | j                  t        j
                  | j                  d       | j                  t        t        j                  | j                  t        j
                  | j                  d       t        j                  | j                  t        j
                  | j                  d       y )N   )r!   unknownF)r!   	use_aesni)r9   r:   r   r   r   r#   r$   r;   s    r   test_unknown_parametersz SivTests.test_unknown_parametersf   s    )SWWdllCLL--	,)SWWdllCLL $q 	 	:
 	cll$--	!r   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                         | j                  t        |j                  | j                         t        j                  | j                  t         j                  | j                        }|j                  | j                         | j                  t        |j                  | j                  | j                         y r1   )r   r   r   r#   r$   r%   r   r9   r:   decryptr&   rF   s     r   test_encrypt_excludes_decryptz&SivTests.test_encrypt_excludes_decryptq   s    s||4==I!!$)),)V^^TYY?s||4==I!!$)),)V%>%>))TYY	0r   c                 r   t        j                  | j                  t         j                  | j                        }| j                  t        |j                  d       t        j                  | j                  t         j                  | j                        }| j                  t        |j                  dd       y )Nr    ztest1234567890-*s   xxxx)	r   r   r   r#   r$   r9   r:   encryptr&   rF   s     r   test_data_must_be_bytesz SivTests.test_data_must_be_bytes{   sr    s||4==I)V^^5HIs||4==I)V%>%>-w	8r   c                     t        j                  | j                  t         j                  | j                        }|j                  | j                        \  }}| j                  t        |      d       y )Nr       )	r   r   r   r#   r$   r%   r   r'   len)r(   r*   _r-   s       r   test_mac_lenzSivTests.test_mac_len   sL    s||4==I**49953S2&r   c                    ddl m} t        j                  | j                  t        j
                  | j                        }|j                  | j                        \  }} ||d      }t        j                  | j                  t        j
                  | j                        }| j                  t        |j                  ||       y )Nr   )strxor_cr    r>   )Crypto.Util.strxorr]   r   r   r   r#   r$   r%   r   r9   r@   r&   )r(   r]   r*   r,   r-   invalid_macs         r   test_invalid_maczSivTests.test_invalid_mac   s    /s||4==I++DII6CsD)s||4==I*f&?&?%	'r   c                    t        j                  | j                  t         j                  | j                        }|j                         }| j                  |j                         t        |             t        j                  | j                  t         j                  | j                        }|j                  |       y r1   )
r   r   r   r#   r$   	hexdigestr'   digestr   	hexverify)r(   r*   mac_hexs      r   test_hex_maczSivTests.test_hex_mac   su    s||4==I""$)G*<=s||4==I!r   c                 l   t        | j                        }t        | j                        }t        | j                        }t        | j                        }t	        j
                  | j                  t        j                  | j                        }|j                  | j                         |j                  | j                        \  }}t	        j
                  |t        j                  |      }d|d d d|d d |j                  |       d|d d |j                  |      \  }	}
| j                  ||	       | j                  ||
       | j                  |j                  |j                         t        | j                        }t        | j                        }t        | j                        }t        |      }t        |      }t	        j
                  |t        j                  |      }d|d d d|d d |j                  |       d|d d |j                  ||      }| j                  | j                  |       y 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    %$--(#499%''$,,,, $/ 	tyy!,,TYY7C''#,, %' "BQ#bq	v$r
#66t<W%h'6 %$--(499%"3''#,, %' "BQ#bq	v$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                         |j                  | j                        \  }}t        j                  |t
        j                  |      }d|d d d|d d |j                  |       d|d d |j                  |      \  }	}
| j                  ||	       | j                  ||
       | j                  |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 |j                  |       d|d d |j                  ||      }| j                  | j                  |       y rh   )
memoryviewrj   r   r$   r   r   r   r#   rk   r%   r'   r!   r&   rl   s                  r   test_memoryviewzSivTests.test_memoryview   s    4<<019T]]34)DII./Idii01''$,,,, $/ 	tyy!,,TYY7C''#,, %' "BQ#bq	v$r
"55d;W%h'6 4<<019T]]34Idii019R=)IcN+''#,, %' "BQ#bq	v$r
,,UF;G,r   c                    d}t        j                  | j                  t         j                  | j                        }|j                  |      \  }}t        d      }t        j                  | j                  t         j                  | j                        }|j                  ||      \  }}| j                  ||       | j                  |d        | j                  ||       t        j                  | j                  t         j                  | j                        }|j                  |||      }| j                  ||       | j                  |d        y Ns   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555r    r   output)	r   r   r   r#   r$   r%   rj   r'   r&   )r(   r+   r*   r,   r   r}   restag_outs           r   test_output_paramzSivTests.test_output_param   s    s||4==I++B/C3s||4==I00F0CWV$d#g&s||4==I''C'?V$d#r   c                 J   d}t        j                  | j                  t         j                  | j                        }|j                  |      \  }}t        t        d            }t        j                  | j                  t         j                  | j                        }|j                  ||       | j                  ||       t        j                  | j                  t         j                  | j                        }|j                  |||       | j                  ||       y r{   )
r   r   r   r#   r$   r%   rx   rj   r'   r&   )r(   r+   r*   r,   r   r}   s         r   test_output_param_memoryviewz%SivTests.test_output_param_memoryview  s    s||4==I++B/CIcN+s||4==I!!"V!4V$s||4==I!!"c&!9V$r   c                    d}d|z  }t        j                  | j                  t         j                  | j                        }|j                  |      \  }}t        j                  | j                  t         j                  | j                        }| j                  t        |j
                  |d|z         t        j                  | j                  t         j                  | j                        }| j                  t        |j                  ||d|z         t        |dz
        }t        j                  | j                  t         j                  | j                        }| j                  t        |j
                  ||       t        j                  | j                  t         j                  | j                        }| j                  t        |j                  |||       y )Nr      5r       0r|   r>   )r   r   r   r#   r$   r%   r9   r:   r&   rj   r@   )r(   LEN_PTr+   r*   r,   r   shorter_outputs          r   test_output_param_negzSivTests.test_output_param_neg  sM   F]s||4==I++B/Cs||4==I)V%>%>4RX=Ys||4==I)V%>%>CPTW]P]^"6A:.s||4==I*f&?&?N[s||4==I*f&?&?SQ_`r   N)__name__
__module____qualname__r   r   r   r   r$   r   r/   r6   r<   rC   rG   rK   rP   rS   rV   r[   r`   rf   rv   ry   r   r   r    r   r   r   r   1   s    Y+GY+GY+Gk2.H&#&D&	11/<P	!08'
	'"+-Z+-Z$$%ar   r   c                   x    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y)SivFSMTestsr   r   r$   r   r   r   c                     t        j                  | j                  t         j                  | j                        }| j                  t        |j                  d       y Nr    s   xxx)r   r   r   r#   r$   r9   r:   rU   rF   s     r   test_invalid_init_encryptz%SivFSMTests.test_invalid_init_encrypt0  9    s||#}}.)V^^V<r   c                     t        j                  | j                  t         j                  | j                        }| j                  t        |j                  d       y r   )r   r   r   r#   r$   r9   r:   rR   rF   s     r   test_invalid_init_decryptz%SivFSMTests.test_invalid_init_decrypt6  r   r   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                         }t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  |       y r1   )	r   r   r   r#   r$   rk   r   rc   verifyr(   r*   r-   s      r   $test_valid_init_update_digest_verifyz0SivFSMTests.test_valid_init_update_digest_verify<  s     s||#}}.dii mmo s||#}}.dii cr   c                     t        j                  | j                  t         j                  | j                        }|j                          y r1   )r   r   r   r#   r$   rc   rF   s     r   test_valid_init_digestz"SivFSMTests.test_valid_init_digestJ  s)    s||4==Ir   c                 .   t        j                  | j                  t         j                  | j                        }|j                         }t        j                  | j                  t         j                  | j                        }|j                  |       y r1   )r   r   r   r#   r$   rc   r   r   s      r   test_valid_init_verifyz"SivFSMTests.test_valid_init_verifyO  sU    s||4==Immos||4==Icr   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                         }t        d      D ]"  }| j                  ||j                                $ t        j                  | j                  t         j                  | j                        }|j                  | j                         t        d      D ]  }|j                  |        y )Nr          )r   r   r   r#   r$   rk   r   rc   rA   r'   r   )r(   r*   	first_macrB   s       r   $test_valid_multiple_digest_or_verifyz0SivFSMTests.test_valid_multiple_digest_or_verifyW  s    s||4==Idii MMO	q 	9AY8	9 s||4==Idii q 	%AMM)$	%r   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  | j                        \  }}t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  ||      }| j                  | j                  |       y r1   )
r   r   r   r#   r$   rk   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dii ++DII6C s||4==Idii &&r3/B'r   c                     t        j                  | j                  t         j                  | j                        }|j                  | j                        \  }}| j                  t        |j
                  d       y )Nr    r   )	r   r   r   r#   r$   r%   r   r9   r:   r(   r*   r,   r   s       r   (test_invalid_multiple_encrypt_and_digestz4SivFSMTests.test_invalid_multiple_encrypt_and_digestq  sP    s||4==I++DII6C)V%>%>Dr   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                        \  }}t        j                  | j                  t         j                  | j                        }|j                  ||       | j                  t        |j                  ||       y r1   )
r   r   r   r#   r$   r%   r   r&   r9   r:   r   s       r   (test_invalid_multiple_decrypt_and_verifyz4SivFSMTests.test_invalid_multiple_decrypt_and_verifyv  s    s||4==I++DII6Cs||4==I!!"c*)V%>%>CHr   N)r   r   r   r   r   r$   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   *  sU    Y+Gj"-H&#&D==
%
(E
Ir   r   c                     | d   j                  d      D cg c]  }t        |       c}g}|| dd D cg c]  }t        |       c}z  }| d   rt        | d         }nd }||gz  }|S c c}w c c}w )Nr   -r>   r   )splitr   )tvrB   new_tvr!   s       r   	transformr     sx    %'U[[%56y|67F
b1g.	!..F	!u"Q% 
iFM 7.s
   A*A/c                   f    e Zd ZdZddgZeD  cg c]  }t        |       c}}} Zd Zyc c}}} w )TestVectorsz6Class exercising the SIV test vectors found in RFC5297)0101112131415161718191a1b1c1d1e1f2021222324252627112233445566778899aabbccddee40c02b9690c4dc04daef7f6afe5c 85632d07c6e8f37f950acd320a2ecc93@fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0f0f1f2f3f4f5f6f7f8f9fafbfcfdfeffN)ze00112233445566778899aabbccddeeffdeaddadadeaddadaffeeddccbbaa99887766554433221100-102030405060708090a0^7468697320697320736f6d6520706c61696e7465787420746f20656e6372797074207573696e67205349562d414553^cb900f2fddbe404326601965c889bf17dba77ceb094fa663b7a3f748ba8af829ea64ad544a272e9c485b62a3fd5c0d 7bdb6e3b432667eb06f4d14bff2fbd0f@7f7e7d7c7b7a79787776757473727170404142434445464748494a4b4c4d4e4f 09f911029d74e35bd84156c5635688c0c                    | j                   D ]  \  }}}}}}t        j                  |t        j                  |      }|D ]  }|j	                  |        |j                  |      \  }	}
| j                  ||	       | j                  ||
       t        j                  |t        j                  |      }|D ]  }|j	                  |        |j                  ||      }| j                  ||        y r1   )test_vectorsr   r   r#   rk   r%   r'   r&   )r(   
assoc_datar+   r,   r-   r)   r!   r*   rB   r4   mac2r.   s               r   runTestzTestVectors.runTest  s    373D3D 	&/JBS% WWS#,,e<F !a !11"5ICR%S$' WWS#,,e<F !a !++B4CR%	&r   N)r   r   r   __doc__test_vectors_hexr   r   r   ).0r   r   s   000r   r   r     s;    @
, .>??rYr]?L& @s   ,r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestVectorsWycheproofc                 P    t         j                  j                  |        d| _        y NNoneunittestTestCase__init___idr;   s    r   r   zTestVectorsWycheproof.__init__      ""4(r   c                 (    t        ddd      | _        y )NCipher
wycheproofzaes_siv_cmac_test.jsonzWycheproof AES SIVr   r   r;   s    r   setUpzTestVectorsWycheproof.setUp  s    ./G/G/CEr   c                     | j                   S Nr   r;   s    r   shortDescriptionz&TestVectorsWycheproof.shortDescription      xxr   c                 d   dt        |j                        z   | _        t        j                  |j
                  t        j                        }|j                  |j                         |j                  |j                        \  }}|j                  r | j                  ||z   |j                         y y )Nz!Wycheproof Encrypt AES-SIV Test #)stridr   r   r   r)   r#   rk   aadr%   msgvalidr'   r,   r(   r   r*   r,   r   s        r   test_encryptz"TestVectorsWycheproof.test_encrypt  sz    6RUUC.bff++BFF3C88S2Xruu- r   c                    dt        |j                        z   | _        t        j                  |j
                  t        j                        }|j                  |j                         	 |j                  |j                  dd  |j                  d d       }|j                  sJ | j                  ||j                         y # t        $ r |j                  rJ Y y w xY w)Nz!Wycheproof Decrypt AES_SIV Test #rX   )r   r   r   r   r   r)   r#   rk   r   r&   r,   r   r'   r   r@   r(   r   r*   r+   s       r   test_decryptz"TestVectorsWycheproof.test_decrypt  s    6RUUC.bff	)**255:ruuSbzBB 88OR(	  	 xxx	 s   (,B? ?CCc                 j    | j                   D ]$  }| j                  |       | j                  |       & y r   r   r   r   r(   r   s     r   r   zTestVectorsWycheproof.runTest  1    '' 	"Bb!b!	"r   N	r   r   r   r   r   r   r   r   r   r   r   r   r   r     s!    E
.)"r   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestVectorsWycheproof2c                 P    t         j                  j                  |        d| _        y r   r   r;   s    r   r   zTestVectorsWycheproof2.__init__  r   r   c                 (    t        ddd      | _        y )Nr   zaead_aes_siv_cmac_test.jsonzWycheproof AEAD SIVr   r;   s    r   r   zTestVectorsWycheproof2.setUp  s    ./G/L/D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                  |j                        \  }}|j                  r9| j                  ||j                         | j                  ||j                         y y )Nz&Wycheproof Encrypt AEAD-AES-SIV Test #r    )r   r   r   r   r   r)   r#   ivrk   r   r%   r   r   r'   r,   r   r   s        r   r   z#TestVectorsWycheproof2.test_encrypt  s    ;c"%%jHRUU;bff++BFF3C88R'S"&&) r   c                    dt        |j                        z   | _        t        j                  |j
                  t        j                  |j                        }|j                  |j                         	 |j                  |j                  |j                        }|j                  sJ | j                  ||j                         y # t         $ r |j                  rJ Y y w xY w)Nz&Wycheproof Decrypt AEAD-AES-SIV Test #r    )r   r   r   r   r   r)   r#   r   rk   r   r&   r,   r   r   r'   r   r@   r   s       r   r   z#TestVectorsWycheproof2.test_decrypt  s    ;c"%%jHRUU;bff	)**255"&&9B 88OR(	  	 xxx	 s   4&C CCc                 j    | j                   D ]$  }| j                  |       | j                  |       & y r   r   r   s     r   r   zTestVectorsWycheproof2.runTest  r   r   Nr   r   r   r   r   r     s!    F
*)"r   r   c                     | j                  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     sk     **%:;E	_X&&E	_[))E	{}E	$&((E	%'))ELr   __main__c                  <    t        j                  t                     S r   )r   	TestSuiter   r   r   r   <lambda>r   '  s    H&&y{3 r   suite)defaultTest)jsonr   binasciir   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   Crypto.Util.py3compatr   r   Crypto.Cipherr   Crypto.Hashr	   r^   r
   r   r   r   r   r   r   r   r   r   r   r   mainr   r   r   <module>r     s   >    5 ? /    %8vax   varRI(## RIj6&(## 6&r("H-- ("V)"X.. )"X  	 z3EHMMg& r   