
    ,hQ                     `   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 d	lmZ d
 Z G d de j&                        Z G d de j&                        Z G d de j&                        Z G d de j&                        Zi fdZedk(  rd Z e j6                  d       yy)    N)	unhexlify)list_test_cases)load_test_vectors_wycheproof)tobytesbchr)AES)SHAKE128)strxor)CCMMessageTooLongErrorc                 ^    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_CCM.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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 Zd Zd Zy) CcmTestskey_128   	nonce_128   r      c                 l   t        j                  | j                  t         j                  | j                        }t        dd      }|j                  |      }t        j                  | j                  t         j                  | j                        }|j                  |      }| j                  ||       y )Nnonce	plaintexti@  )	r   r   r   MODE_CCMnonce_96r   encryptdecryptassertEqual)selfcipherptctpt2s        r   test_loopback_128zCcmTests.test_loopback_1287   sv    s||4==IK2^^Bs||4==InnR S!r   c                    t        j                  | j                  t         j                        }|j                  }t        j                  | j                  t         j                        }|j                  }| j                  t        |      d       | j                  ||       t        j                  | j                  t         j                  | j                        }|j                  | j                        }t        j                  | j                  t         j                  | j                        }| j                  ||j                  | j                               y )N   r   )r   r   r   r    r   r$   lenassertNotEqualr!   r"   r   )r%   r&   nonce1nonce2r(   s        r   
test_noncezCcmTests.test_nonce@   s    s||4s||4Vb)FF+s||T]]C^^DII&s||4==IV^^DII67r   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!CcmTests.test_nonce_must_be_bytesO   s,    )SWWdllCLL / 	 	1r   c           	      N   | j                  t        t        j                  | j                  t        j
                  d       | j                  t        t        j                  | j                  t        j
                  t        d      dz         | j                  t        t        j                  | j                  t        j
                  t        d      dz         t        dd      D ]>  }t        j                  | j                  t        j
                  t        d      |z         @ y )Nr   r               )r4   
ValueErrorr   r   r   r    r   range)r%   xs     r   test_nonce_lengthzCcmTests.test_nonce_lengthS   s    *cggt||S\\ # 	 	%*cggt||S\\ $Q! 	 	-*cggt||S\\ $Q" 	 	.q&! 	CAGGDLL#,,d1gkB	Cr   c                     t        j                  | j                  t         j                  | j                        }| j                  |j                  t         j                         y Nr   )r   r   r   r    r!   r$   
block_sizer%   r&   s     r   test_block_sizezCcmTests.test_block_size]   s:    s||4==I**CNN;r   c                    t        j                  | j                  t         j                  | j                        }| j                  |j                  | j                         t        j                  | j                  t         j                        j                  }t        j                  | j                  t         j                        j                  }| j                  t        |      d       | j                  ||       y )Nr   r,   )	r   r   r   r    r!   r$   r   r-   r.   )r%   r&   r/   r0   s       r   test_nonce_attributezCcmTests.test_nonce_attributea   s    s||4==It}}5 s||4::s||4::Vb)FF+r   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 )Nr<   )r   unknownF)r   	use_aesni)r4   r5   r   r   r   r    r!   r6   s    r   test_unknown_parametersz CcmTests.test_unknown_parametersk   s    )SWWdllCLL--	,)SWWdllCLL $q 	 	:
 	cll$--	!r   c                     dD ]`  }t        j                  | j                  t         j                  | j                        } t        ||      d      }| j                  |d       b y )Nr"   r#   r   r   )r   r   r   r    r!   getattrr$   )r%   funcr&   results       r   test_null_encryption_decryptionz(CcmTests.test_null_encryption_decryptionv   sR    ( 	*DWWT\\3<<t}}MF*WVT*3/FVS)	*r   c                    t        j                  | j                  t         j                  | j                        }|j                  d       | j                  t        |j                  d       t        j                  | j                  t         j                  | j                        }|j                  d       | j                  t        |j
                  d       y )Nr   r   )	r   r   r   r    r!   r"   r4   r5   r#   rD   s     r   test_either_encrypt_or_decryptz'CcmTests.test_either_encrypt_or_decrypt|   s    s||4==Is)V^^S9s||4==Is)V^^S9r   c                 p   t        j                  | j                  t         j                  | j                        }| j                  t        |j                  d       t        j                  | j                  t         j                  | j                        }| j                  t        |j                  d       y )Nr   ztest1234567890-*)	r   r   r   r    r!   r4   r5   r"   r#   rD   s     r   test_data_must_be_bytesz CcmTests.test_data_must_be_bytes   sl    s||4==I)V^^5HIs||4==I)V^^5HIr   c           	         t        ddd      D ]M  }| j                  t        t        j                  | j
                  t        j                  | j                  |       O t        ddd      D ]v  }t        j                  | j
                  t        j                  | j                  |      }|j                  | j                        \  }}| j                  t        |      |       x t        j                  | j
                  t        j                  | j                        }|j                  | j                        \  }}| j                  t        |      d       y )	N         )r   mac_len      r   r   )r>   r4   r=   r   r   r   r    r!   encrypt_and_digestr   r$   r-   )r%   rZ   r&   _macs        r   test_mac_lenzCcmTests.test_mac_len   s   Q* 	DGj#''4<<$(MM7  D	D
 Q* 	0GWWT\\3<<t}}%,.F..tyy9FAsSXw/		0 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   r9   )Crypto.Util.strxorrb   r   r   r   r    r!   r]   r   r4   r=   decrypt_and_verify)r%   rb   r&   r(   r_   invalid_macs         r   test_invalid_maczCcmTests.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 rB   )
r   r   r   r    r!   	hexdigestr$   digestr   	hexverify)r%   r&   mac_hexs      r   test_hex_maczCcmTests.test_hex_mac   su    s||4==I""$)G*<=s||4==I!r   c                    t        j                  | j                  t         j                  | j                  d      }| j                  t        |j                  d       t        j                  | j                  t         j                  | j                  d      }| j                  t        |j                  | j                         y )Nr   r   	assoc_len   1   )	r   r   r   r    r!   r4   r=   updater   rD   s     r   $test_longer_assoc_data_than_declaredz-CcmTests.test_longer_assoc_data_than_declared   sz    s||4==#$&*fmmT: s||4==#%'*fmmTYY?r   c                    t        | j                        }t        j                  | j                  t        j
                  | j                  |dz         }|j                  | j                         | j                  t        |j                  | j                         t        j                  | j                  t        j
                  | j                  |dz         }|j                  | j                         | j                  t        |j                         t        j                  | j                  t        j
                  | j                  |dz         }|j                  | j                         | j                  t        |j                  | j                         t        j                  | j                  t        j
                  | j                        }|j                  | j                         |j                         }t        j                  | j                  t        j
                  | j                  |dz         }|j                  | j                         | j                  t        |j                  |       y )Nr9   rn   r   )r-   r   r   r   r   r    r!   rr   r4   r=   r"   ri   r#   verify)r%   DATA_LENr&   r_   s       r   %test_shorter_assoc_data_than_expectedz.CcmTests.test_shorter_assoc_data_than_expected   s   tyy> s||4==#+a<1dii *fnndii@ s||4==#+a<1dii *fmm4 s||4==#+a<1dii *fnndii@ s||4==Idii mmos||4==#+a<1dii *fmmS9r   c                    t        | j                        }t        j                  | j                  t        j
                  | j                  |dz         }|j                  | j                         | j                  t        |j                         t        j                  | j                  t        j
                  | j                  |dz
        }| j                  t        |j                  | j                         y )Nr9   r   msg_len)r-   r   r   r   r   r    r!   r"   r4   r=   ri   )r%   rv   r&   s      r   /test_shorter_and_longer_plaintext_than_declaredz8CcmTests.test_shorter_and_longer_plaintext_than_declared   s    tyy>s||4==!)A/tyy!*fmm4s||4==!)A/*fnndii@r   c                 |   t        | j                        }t        j                  | j                  t        j
                  | j                        }|j                  | j                        \  }}t        j                  | j                  t        j
                  | j                  |dz         }|j                  |       | j                  t        |j                  |       t        j                  | j                  t        j
                  | j                  |dz
        }| j                  t        |j                  |       y )Nr   r9   ry   )r-   r   r   r   r   r    r!   r]   r#   r4   r=   ru   )r%   rv   r&   r(   r_   s        r   %test_shorter_ciphertext_than_declaredz.CcmTests.test_shorter_ciphertext_than_declared   s    tyy>s||4==I++DII6Cs||4==!)A/r*fmmS9s||4==!)A/*fnnb9r   c                    t        dd      }t        dd      }t        j                  | j                  t        j                  | j
                        }|j                  |       |j                  |      \  }}d }dD ]  }t        j                  | j                  t        j                  | j
                  dd      } |||      D ]  }|j                  |        d}	 |||      D ]  }|	|j                  |      z  }	 | j                  ||	       |j                  |        dD ]  }t        j                  | j                  t        j                  | j
                  dd      } |||      D ]  }|j                  |        d}
 |||      D ]  }|
|j                  |      z  }
 | j                  ||
       | j                  |j                         |        y )	Nzauthenticated data   r   r   c                 `    t        dt        |       |      D cg c]
  }| |||z     c}S c c}w Nr   )r>   r-   )r   chunk_lengthis      r   break_upz.CcmTests.test_message_chunks.<locals>.break_up  s9    49!SY 5" #qD1\>* # # #s   +)
r9   rY   rW   r<   
      r   (   P   r   r   rz   ro   r   )r   r   r   r   r    r!   rr   r]   r#   r$   ru   r"   ri   )r%   	auth_datar   r&   
ciphertextref_macr   r   chunkr)   ct2s              r   test_message_chunkszCcmTests.test_message_chunks   s    ##7=	";4	s||4==Ii $77	B
G	#
 @ 	#LWWT\\3<<t}}%(C9F ")\: %e$%C!*l; -v~~e,,-Y,MM'"	# @ 	7LWWT\\3<<t}}%(C9F ")\: %e$%C!)\: -v~~e,,-Z-V]]_g6	7r   c                    t        | j                        }t        | j                        }t        | j                        }t        | j                        }t	        j
                  | j                  t        j                  | j                        }|j                  | j                         |j                  | j                        }|j                         }t	        j
                  |t        j                  |      }d|d d d|d d |j                  |       d|d d |j                  |      }	d|d d |j                         }
| j                  ||	       | j                  ||
       | j                  |j                  |j                         t        | j                        }t        | j                        }t        | j                        }~t	        j
                  |t        j                  |      }d|d d d|d d |j                  |       d|d d |j                  t        |	      t        |
            }| j                  | j                  |       y Nr   s   rW   )	bytearrayr   r!   r   r   r   r    rr   r"   ri   r$   r   rd   )r%   key_banonce_ba	header_badata_bacipher1r(   r   cipher2ct_testtag_testcipher4pt_tests                r   test_bytearrayzCcmTests.test_bytearray!  s    4<<(T]]+dii(	DII&''$,,,, $/ 	tyy!__TYY'nn''&,, (* %r
&!y!'	"1//'*%>>#W%h'6 4<<(T]]+dii(	''&,, (* %r
&!y!'	"1,,Yw-?8ATU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                        }|j                         }t        j                  |t
        j                  |      }d|d d d|d d |j                  |       d|d d |j                  |      }	d|d d |j                         }
| j                  ||	       | j                  ||
       | j                  |j                  |j                         t        t        | j                              }t        t        | j                              }t        t        | j                              }~t        j                  |t
        j                  |      }d|d d d|d d |j                  |       d|d d |j                  t        |	      t        |
            }| j                  | j                  |       y r   )
memoryviewr   r   r!   r   r   r   r    rr   r"   ri   r$   r   rd   )r%   key_mvnonce_mv	header_mvdata_mvr   r(   r   r   r   r   r   r   s                r   test_memoryviewzCcmTests.test_memoryviewP  s    Idll34i67y34	Ytyy12''$,,,, $/ 	tyy!__TYY'nn''&,, (* %r
&!y!'	"1//'*%>>#W%h'6 Idll34i67y34	''&,, (* %r
&!y!'	"1,,Z-@*XBVWG,r   c                    d}t        j                  | j                  t         j                  | j                        }|j                  |      }|j                         }t        d      }t        j                  | j                  t         j                  | j                        }|j                  ||      }| j                  ||       | j                  |d        t        j                  | j                  t         j                  | j                        }|j                  ||      }| j                  ||       | j                  |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"   ri   r   r$   r#   r]   rd   )r%   r'   r&   r(   r   r   restag_outs           r   test_output_paramzCcmTests.test_output_param  s   s||4==I^^Bmmo3s||4==InnRn/V$d#s||4==InnRn/V$d#s||4==I00F0CWV$d#g&s||4==I''C'?V$d#r   c                 B   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"   r   r   r$   r#   )r%   r'   r&   r(   r   s        r   test_output_param_memoryviewz%CcmTests.test_output_param_memoryview  s    s||4==I^^BIcN+s||4==Ir&)V$s||4==Ir&)V$r   c                    d}t        j                  | j                  t         j                  | j                        }|j                  |      }t        j                  | j                  t         j                  | j                        }| j                  t        |j
                  |d       t        j                  | j                  t         j                  | j                        }| j                  t        |j                  |d       t        d      }t        j                  | j                  t         j                  | j                        }| j                  t        |j
                  ||       t        j                  | j                  t         j                  | j                        }| j                  t        |j                  ||       y )Ns   5555555555555555r   s   0000000000000000r   rq   )r   r   r   r    r!   r"   r4   r5   r#   r   r=   )r%   r'   r&   r(   shorter_outputs        r   test_output_param_negzCcmTests.test_output_param_neg  s    s||4==I^^Bs||4==I)V^^RHs||4==I)V^^RH"2s||4==I*fnnbPs||4==I*fnnbPr   c           	      l   d}| j                  t        t        j                  | j                  t        j
                  |dd       d}| j                  t        t        j                  | j                  t        j
                  |dd       d}t        j                  | j                  t        j
                  |      }| j                  t        |j                  ddz         d}t        j                  | j                  t        j
                  |      }| j                  t        |j                  ddz         y )	Ns   NNNNNNNNNNNNN   i   r   ro   rz   s   NNNNNNNl            r      C)r4   r   r   r   r   r    r"   r#   )r%   r   r&   s      r   test_message_too_longzCcmTests.test_message_too_long  s    0'',,,, %$&") 	 	+ 0'',,,, %$&"' 	 	) s||5A0 ...	* s||5A0 ...	*r   N)__name__
__module____qualname__r   r   r!   r   r*   r1   r7   r@   rE   rG   rK   rQ   rS   rU   r`   rf   rl   rs   rw   r{   r}   r   r   r   r   r   r   r    r   r   r   r   1   s    Y+Gk2.H&#&D"81C<,	!*:J'$	'"	@:>
A:)7V--^--^$:%Q$*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 Zd Zd Zy)CcmFSMTestsr   r   r   r   r   c           	         dD ]  }d t        | j                        fD ]  }t        j                  | j                  t        j
                  | j                  ||      }|j                  | j                        }|j                         }t        j                  | j                  t        j
                  | j                  ||      }|j                  |       |j                  |         y Nr   r   )r-   r   r   r   r   r    r!   r"   ri   r#   ru   r%   ro   rz   r&   r(   r_   s         r   -test_valid_init_encrypt_decrypt_digest_verifyz9CcmFSMTests.test_valid_init_encrypt_decrypt_digest_verify  s    " 	#I #dii.1 #s||'+}}+4)02 ^^DII.mmo s||'+}}+4)02 r"c"#	#r   c           	         d t        | j                        fD ]  }dD ]  }t        j                  | j                  t        j
                  | j                  ||      }|j                  | j                         |j                         }t        j                  | j                  t        j
                  | j                  ||      }|j                  | j                         |j                  |         y r   )
r-   r   r   r   r   r    r!   rr   ri   ru   )r%   ro   rz   r&   r_   s        r   $test_valid_init_update_digest_verifyz0CcmFSMTests.test_valid_init_update_digest_verify  s    DII/ 	#I$ #s||'+}}+4)02 dii(mmo s||'+}}+4)02 dii(c"#	#r   c           	      n   d t        | j                        fD ]  }d t        | j                        fD ]  }t        j                  | j                  t        j
                  | j                  ||      }|j                  | j                         |j                  | j                        }|j                         }t        j                  | j                  t        j
                  | j                  ||      }|j                  | j                         |j                  |       |j                  |         y )Nr   )r-   r   r   r   r   r    r!   rr   r"   ri   r#   ru   r   s         r   test_valid_full_pathz CcmFSMTests.test_valid_full_path  s    DII/ 	#I #dii.1 #s||'+}}+4)02 dii(^^DII.mmo s||'+}}+4)02 dii(r"c"##	#r   c                     t        j                  | j                  t         j                  | j                        }|j                          y rB   )r   r   r   r    r!   ri   rD   s     r   test_valid_init_digestz"CcmFSMTests.test_valid_init_digest"  s)    s||4==Ir   c                 .   t        j                  | j                  t         j                  | j                        }|j                         }t        j                  | j                  t         j                  | j                        }|j                  |       y rB   )r   r   r   r    r!   ri   ru   )r%   r&   r_   s      r   test_valid_init_verifyz"CcmFSMTests.test_valid_init_verify'  sU    s||4==Immos||4==Icr   c           	         dD ]  }d d| j                   | j                   dz   fD ]  }|d }nt        |      }t        j                  | j                  t        j
                  | j                  d|      }||j                  |       t        ||      } || j                           || j                           || j                           || j                            y )NrM   s   333   3@   r   )	r   r-   r   r   r   r    r!   rr   rN   )r%   method_namer   ro   r&   methods         r   &test_valid_multiple_encrypt_or_decryptz2CcmFSMTests.test_valid_multiple_encrypt_or_decrypt/  s    / 	"K"FDII"ii$.0 "	$ $I #IIs||'+}})++46 (MM), 5tyy!tyy!tyy!tyy!!"	"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    r!   rr   r   ri   r>   r$   ru   )r%   r&   	first_macr?   s       r   $test_valid_multiple_digest_or_verifyz0CcmFSMTests.test_valid_multiple_digest_or_verifyD  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 rB   )
r   r   r   r    r!   rr   r   r]   rd   r$   )r%   r&   r(   r_   r'   s        r   0test_valid_encrypt_and_digest_decrypt_and_verifyz<CcmFSMTests.test_valid_encrypt_and_digest_decrypt_and_verifyR  s    s||4==Idii ++DII6C s||4==Idii &&r3/B'r   c                 L   dD ]  }dD ]  }t        j                  | j                  t         j                  | j                        }|r|j                  | j                         t        ||      } || j                         | j                  t        || j                           y )NrM   TFr   
r   r   r   r    r!   rr   r   rN   r4   r5   )r%   r   assoc_data_presentr&   r   s        r   5test_invalid_multiple_encrypt_decrypt_without_msg_lenzACcmFSMTests.test_invalid_multiple_encrypt_decrypt_without_msg_len^  s    / 	@K&3 @"s||'+}}6%MM$)), 5tyy!!!)VTYY?@	@r   c           	      d   dD ]  \  }}dD ]  }t        j                  | j                  t         j                  | j                  d      }|r|j                  | j                          t        ||      | j                         | j                  t        t        ||      | j                           y )N)rM   )r#   r"   r       ry   r   )r%   method1_namemethod2_namer   r&   s        r   #test_invalid_mixing_encrypt_decryptz/CcmFSMTests.test_invalid_mixing_encrypt_decryptj  s    +C 
	-&L,&3 -"s||'+}})+- &MM$)),--dii8!!)WV\-J"&))--
	-r   c                    dD ]  }t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                          | j                  t        t        ||      | j                         t        j                  | j                  t         j                  | j                        }|j                  | j                          y )N)r"   rr   r   )r   r   r   r    r!   r"   r   ri   r4   r5   rN   r]   )r%   r   r&   s      r   +test_invalid_encrypt_or_update_after_digestz7CcmFSMTests.test_invalid_encrypt_or_update_after_digestx  s    . 	1KWWT\\3<<t}}MFNN499%MMOi)E"ii) WWT\\3<<t}}MF%%dii0	1r   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                        }|j                         }dD ]  }t        j                  | j                  t         j                  | j                        }|j                  |       |j                  |       | j                  t        t        ||      | j                         t        j                  | j                  t         j                  | j                        }|j                  ||       | j                  t        t        ||      | j                          y )Nr   )r#   rr   )r   r   r   r    r!   r"   r   ri   r#   ru   r4   r5   rN   rd   )r%   r&   r(   r_   r   s        r   +test_invalid_decrypt_or_update_after_verifyz7CcmFSMTests.test_invalid_decrypt_or_update_after_verify  s    s||4==I^^DII&mmo. 
	)KWWT\\3<<t}}MFNN2MM#i)E"ii) WWT\\3<<t}}MF%%b#.i)E"ii)
	)r   N)r   r   r   r   r   r!   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     sc    Y+Gk2.H&"%D#(#(#,
"*%
(
@-	1)r   r   c                   p   e Zd ZdZddddj	                   edd      D  cg c]  }t        dd      D ]  }d|dz  |z   z     c}}}}       d	z  d
ddddfdddddddddddddddddd d!d"d#d$d%d&gZeD  cg c]  }|D cg c]  }t        |       c} c}}}} Zd' Z	y(c c}}}} w c c}w c c}}}} w ))TestVectorsz`Class exercising the CCM test vectors found in Appendix C
    of NIST SP 800-38C and in RFC 3610)0001020304050607202122237162015b4dac255d 404142434445464748494a4b4c4d4e4f10111213141516) 000102030405060708090a0b0c0d0e0f 202122232425262728292a2b2c2d2e2f d2a1f0e051ea5f62081a7792073d593d1fc64fbfaccdr   1011121314151617)(000102030405060708090a0b0c0d0e0f101112130202122232425262728292a2b2c2d2e2f30313233343536370e3b201a9f5b71a7a9b1ceaeccd97e70b6176aad9a4428aa5484392fbc1b09951r   101112131415161718191a1b r   r   z%02X   @202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f@69915dad1e84c6376a68c2967e4dab615ae0fd1faec44cc484828529463ccf72b4ac6bec93e8598e7f0dadbcea5br   101112131415161718191a1b1c)r   .08090a0b0c0d0e0f101112131415161718191a1b1c1d1e.588c979a61c663d2f066d0c2c0f989806d5f6b61dac38417e8d12cfdf926e0 c0c1c2c3c4c5c6c7c8c9cacbcccdcecf00000003020100a0a1a2a3a4a5)r   008090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f072c91a36e135f8cf291ca894085c87e3cc15c439c9e43a3ba091d56e10400916r   00000004030201a0a1a2a3a4a5)r   208090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20251b1e5f44a197d1da46b0f8e2d282ae871e838bb64da8596574adaa76fbd9fb0c5r   00000005040302A0A1A2A3A4A5)000102030405060708090a0b&0c0d0e0f101112131415161718191a1b1c1d1e&a28c6865939a9a79faaa5c4c2a9d4a91cdac8c96c861b9c9e61ef1r   00000006050403a0a1a2a3a4a5)r  (0c0d0e0f101112131415161718191a1b1c1d1e1f(dcf1fb7b5d9e23fb9d4e131253658ad86ebdca3e51e83f077d9c2d93r   00000007060504a0a1a2a3a4a5)r  *0c0d0e0f101112131415161718191a1b1c1d1e1f20*6fc1b011f006568b5171a42d953d469b2570a4bd87405a0443ac91cb94r   00000008070605a0a1a2a3a4a5)r   r   .0135d1b2c95f41d5d1d4fec185d166b8094e999dfed96c048c56602c97acbb7490r   00000009080706a0a1a2a3a4a5)r   r   07b75399ac0831dd2f0bbd75879a2fd8f6cae6b6cd9b7db24c17b4433f434963f34b4r   0000000a090807a0a1a2a3a4a5)r   r  282531a60cc24945a4b8279181ab5c84df21ce7f9b73f42e197ea9c07e56b5eb17e5f4er   0000000b0a0908a0a1a2a3a4a5)r  r  &07342594157785152b074098330abb141b947b566aa9406b4d999988ddr   0000000c0b0a09a0a1a2a3a4a5)r  r  (676bb20380b0e301e8ab79590a396da78b834934f53aa2e9107a8b6c022cr   0000000d0c0b0aa0a1a2a3a4a5)r  r  *c0ffa0d6f05bdb67f24d43a4338d2aa4bed7b20e43cd1aa31662e7ad65d6dbr   0000000e0d0c0ba0a1a2a3a4a5)0be1a88bace018b1.08e8cf97d820ea258460e96ad9cf5289054d895ceac47c.4cb97f86a2a4689a877947ab8091ef5386a6ffbdd080f8e78cf7cb0cddd7b3 d7828d13b2b0bdc325a76236df93cc6b00412b4ea9cdbe3c9696766cfa)63018f76dc8a1bcb09020ea6f91bdd85afa0039ba4baff9bfb79c7028949cd0ec04ccb1e7ca981befaa0726c55d378061298c85c92814abc33c52ee81d7d77c08ar*  0033568ef7b2633c9696766cfa)aa6cfa36cae86b402b916e0eacc1c00d7dcec68ec0b3bbb1a02de8a2d1aa346132e2b1d23a2220ddc0ac900d9aa03c61fcf4a559a4417767089708a776796edb723506r*  00103fe41336713c9696766cfa)d0d0735c531e1becf049c244&12daac5630efa5396f770ce1a66b21f7b2101c&14d253c3967b70609b7cbb7c499160283245269a6f49975bcadeafr*  00764c63b8058e3c9696766cfa)77b60f011c03e1525899bcae(e88b6a46c78d63e52eb8c546efb5de6f75e9cc0d(5545ff1a085ee2efbf52b2e04bee1e2336c73e3f762c0c7744fe7e3cr*  00f8b678094e3b3c9696766cfa)cd9044d2b71fdb8120ea60c0*6435acbafb11a82e2f071d7ca4a5ebd93a803ba87f*009769ecabdf48625594c59251e6035722675e04c847099e5ae0704551r*  00d560912d3f703c9696766cfa)d85bc7e69f944fb8.8a19b950bcf71a018e5e6701c91787659809d67dbedd18.bc218daa947427b6db386a99ac1aef23ade0b52939cb6a637cf9bec2408897c6bar*  0042fff8f1951c3c9696766cfa)74a0ebc9069f5b3701761433c37c5a35fc1f39f406302eb907c6163be38c9843705810e6fd25874022e80361a478e3e9cf484ab04f447efff6f0a477cc2fc9bf548944r*  00920f40e56cdc3c9696766cfa)44a3aa3aae6475ca2a434a8e58500c6e41530538862d686ea9e81301b5ae4226bfa2f2beed7bc5098e83feb5b31608f8e29c38819a89c8e776f1544d4151a4ed3a8b87b9cer*  0027ca0c7120bc3c9696766cfa)ec46bb63b02520c33c49fd70&b96b49e21d621741632875db7f6c9243d2d7c2&31d750a09da3ed7fddd49a2032aabf17ec8ebf7d22c8088c666be5c197r*  005b8ccbcd9af83c9696766cfa)47a65ac78b3d594227e85e71(e2fcfbb880442c731bf95167c8ffd7895e337076(e882f1dbd38ce3eda7c23f04dd65071eb41342acdf7e00dccec7ae52987dr*  003ebe94044b9a3c9696766cfa)6e37a6ef546d955d34ab6059*abf21c0b02feb88f856df4a37381bce3cc128517d4*f32905b88a641b04b9c9ffb58cc390900f3da12ab16dce9e82efa16da62059r*  008d493b30ae8b3c9696766cfac           	         | j                   D ]  \  }}}}}}t        j                  |t        j                  |t	        |            }|j                  |       |j                  |      \  }}	| j                  ||       | j                  ||	       t        j                  |t        j                  |t	        |            }|j                  |       |j                  ||      }
| j                  ||
        y )N)rZ   )	test_vectorsr   r   r    r-   rr   r]   r$   rd   )r%   
assoc_datar'   r(   r_   keyr   r&   r   mac2r)   s              r   runTestzTestVectors.runTestP  s    373D3D 	&/JBS%WWS#,,s3xHFMM*%11"5ICR%S$' WWS#,,s3xHFMM*%++B4CR%	&r   N)
r   r   r   __doc__joinr>   test_vectors_hexr   rd  rh  ).0r?   yr>   tvr   s   000000r   r   r     s/   *			& 77uQr{PP!E!BKPqFad1f%P%PQSV
V
L
L
(
,
&	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(Ml\ :JJJ22.aYq\.JL&y Qt /Js   #B#9	B0
B+B0
+B0
r   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestVectorsWycheproofc                 l    t         j                  j                  |        || _        || _        d| _        y )NNone)unittestTestCase__init___wycheproof_warnings_extra_params_id)r%   wycheproof_warningsextra_paramss      r   ru  zTestVectorsWycheproof.__init__b  s-    ""4($7!)r   c                 6    d }t        dddd|i      | _        y )Nc                     | d   dz  S )NtagSize   r   )groups    r   
filter_tagz/TestVectorsWycheproof.setUp.<locals>.filter_tagj  s    #q((r   )Cipher
wycheproofzaes_ccm_test.jsonzWycheproof AES CCMtag_size)	group_tag)r   rn  )r%   r  s     r   setUpzTestVectorsWycheproof.setUph  s'    	) //G/B/C:Dj9QSr   c                     | j                   S N)rx  r6   s    r   shortDescriptionz&TestVectorsWycheproof.shortDescriptionr  s    xxr   c                     |j                   r>| j                  r1dd l}|j                  d| j                  d|j
                  d       y y y )Nr   zWycheproof warning: z ())warningrv  warningswarnrx  comment)r%   rn  r  s      r   r  zTestVectorsWycheproof.warnu  s4    ::$33MM488RZZPQ 4:r   c                    dt        |j                        z   | _        	 t        j                  |j
                  t        j                  |j                  fd|j                  i| j                  }|j                  |j                         |j!                  |j"                        \  }}|j                  rJ| j%                  ||j&                         | j%                  ||j(                         | j+                  |       y y # t        $ r}t        |j                        t        ddd      vr dt        |      v r|j                  rJ Y d }~y |j                  t        ddd      vr d	t        |      v r|j                  rJ Y d }~y |d }~ww xY w)
NzWycheproof Encrypt CCM Test #rZ   r<   r;   rY   Length of parameter 'nonce'r[   r\   Parameter 'mac_len')stridrx  r   r   rf  r    ivr  rw  r=   r-   r>   validrr   aadr]   msgr$   r(   r   r  )r%   rn  r&   er(   r   s         r   test_encryptz"TestVectorsWycheproof.test_encryptz  s:   2SZ?
	WWRVVS\\255 6"++ 6"&"4"46F 	bff++BFF3C88R'S"&&)IIbM   	255zq&!!449VZ]^_Z`9`88#{{%61"55:OSVWXSY:Y88#G	s$   AC? ?	F
=F
4FFF
c                 0   dt        |j                        z   | _        	 t        j                  |j
                  t        j                  |j                  fd|j                  i| j                  }|j                  |j                         	 |j!                  |j"                  |j$                        }|j                  sJ | j'                  ||j(                         | j+                  |       y # t        $ r}t        |j                        t        ddd      vr dt        |      v r|j                  rJ Y d }~y |j                  t        ddd      vr d	t        |      v r|j                  rJ Y d }~y |d }~ww xY w# t        $ r |j                  rJ Y y w xY w)
NzWycheproof Decrypt CCM Test #rZ   r<   r;   rY   r  r[   r\   r  )r  r  rx  r   r   rf  r    r  r  rw  r=   r-   r>   r  rr   r  rd   r(   r   r$   r  r  )r%   rn  r&   r  r'   s        r   test_decryptz"TestVectorsWycheproof.test_decrypt  sH   2SZ?
	WWRVVS\\255 6"++ 6"&"4"46F 	bff	**255"&&9B 88OR(IIbM#  	255zq&!!449VZ]^_Z`9`88#{{%61"55:OSVWXSY:Y88#G	  	 xxx	 s6   AC- &E; -	E86=E384E31E33E8;FFc                 F   dt        |j                        z   | _        t        |j                        t        ddd      vst        |j                        dk(  ry t        j                  |j                  t        j                  |j                  fd|j                  i| j                  }|j                  |j                         t        |j                  dt        |j                        dz
  z  d	z         }| j!                  t"        |j$                  ||j&                         y )
Nz%Wycheproof Corrupt Decrypt CCM Test #r<   r;   rY   r   rZ       r9      )r  r  rx  r-   r  r>   r(   r   r   rf  r    r  rw  rr   r  r
   r4   r=   rd   r   )r%   rn  r&   
ct_corrupts       r   test_corrupt_decryptz*TestVectorsWycheproof.test_corrupt_decrypt  s    :SZGruu:U1fa00CJ!Oruu 2bkk 2"002bffBEE7c"%%j1n#=#GH
*f&?&?RVVTr   c                     | j                   D ]5  }| j                  |       | j                  |       | j                  |       7 y r  )rn  r  r  r  )r%   rn  s     r   rh  zTestVectorsWycheproof.runTest  s?    '' 	*Bb!b!%%b)	*r   N)r   r   r   ru  r  r  r  r  r  r  rh  r   r   r   rp  rp  `  s-    SR
,2U*r   rp  c                     | j                  d      }g }|t        t              z  }|t        t              z  }|t	               gz  }|t        |      gz  }|S )Nry  )getr   r   r   r   rp  )configry  testss      r   	get_testsr    s\     **%:;E	_X&&E	_[))E	km_E	#$7899ELr   __main__c                  >    t        j                  t                      y r  )rs  	TestSuiter  r   r   r   suiter    s    9;'r   r  )defaultTest)rs  binasciir   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   Crypto.Util.py3compatr   r   Crypto.Cipherr   Crypto.Hashr	   rc   r
   Crypto.Cipher._mode_ccmr   r   rt  r   r   r   rp  r  r   r  mainr   r   r   <module>r     s   >   5 ? /    % :8j*x   j*Zt)(## t)nH&(## H&VX*H-- X*v  	 z(HMMg& r   