Ë
    (üàgQ–  ã                   ó`  — 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     ú]/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/Crypto/SelfTest/Cipher/test_CCM.pyÚget_tag_randomr   -   s    € Ü�<‰<œW S›\Ô*×/Ñ/°Ó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ˆØ�n‰n˜RÓ ˆØ×Ñ˜˜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Ô)Ø×Ñ˜F FÔ+ä—‘˜Ÿ™¤s§|¡|°T·]±]ÓCˆØ�^‰^˜DŸI™IÓ&ˆä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ×Ñ˜˜VŸ^™^¨D¯I©IÓ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,   € Ø×Ñœ)¤S§W¡W¨d¯l©l¼C¿L¹LØ /ð 	õ 	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È   € Ø×Ñœ*¤c§g¡g¨t¯|©|¼S¿\¹\Ø #ð 	ô 	%à×Ñœ*¤c§g¡g¨t¯|©|¼S¿\¹\Ü $ Q£¨!¡ð 	ô 	-à×Ñœ*¤c§g¡g¨t¯|©|¼S¿\¹\Ü $ Q£¨"¡ð 	ô 	.ä�q˜&Ó!ò 	CˆAÜ�G‰G�D—L‘L¤#§,¡,´d¸1³gÀ±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ˆØ×Ñ˜×*Ñ*¬C¯N©NÕ;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Ô)Ø×Ñ˜F FÕ+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€   € Ø×Ñœ)¤S§W¡W¨d¯l©l¼C¿L¹LØŸ-™-¨ô	,à×Ñœ)¤S§W¡W¨d¯l©l¼C¿L¹LØ $§¡°qð 	ô 	:ô
 	�‰�—‘œcŸl™l°$·-±-Øö	!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Ü—W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}ÔMˆFØ*”W˜V TÓ*¨3Ó/ˆFØ×Ñ˜V SÕ)ñ	*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·<±<ÄÇÁØ$(§M¡M¸7ð õ Dð	Dô
 ˜Q ¨Ó*ò 	0ˆGÜ—W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}Ø%,ô.ˆFà×.Ñ.¨t¯y©yÓ9‰FˆAˆsØ×ÑœS ›X wÕ/ð		0ô —‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ×*Ñ*¨4¯9©9Ó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ˆØ×+Ñ+¨D¯I©IÓ6‰ˆˆCá˜s DÓ)ˆä—‘˜Ÿ™¤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¿=¹=Ø#$ô&ˆà×Ñœ* f§m¡m°TÔ:ô —‘˜Ÿ™¤s§|¡|¸4¿=¹=Ø#%ô'ˆà×Ñœ* f§m¡m°T·Y±YÕ?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Š  € Ü�t—y‘y“>ˆô —‘˜Ÿ™¤s§|¡|¸4¿=¹=Ø#+¨a¡<ô1ˆà�‰�d—i‘iÔ Ø×Ñœ* f§n¡n°d·i±iÔ@ô —‘˜Ÿ™¤s§|¡|¸4¿=¹=Ø#+¨a¡<ô1ˆà�‰�d—i‘iÔ Ø×Ñœ* f§m¡mÔ4ô —‘˜Ÿ™¤s§|¡|¸4¿=¹=Ø#+¨a¡<ô1ˆà�‰�d—i‘iÔ Ø×Ñœ* f§n¡n°d·i±iÔ@ô —‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�‰�d—i‘iÔ Ø�m‰m‹oˆä—‘˜Ÿ™¤s§|¡|¸4¿=¹=Ø#+¨a¡<ô1ˆà�‰�d—i‘iÔ Ø×Ñœ* f§m¡m°SÕ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›   € Ü�t—y‘y“>ˆä—‘˜Ÿ™¤s§|¡|¸4¿=¹=Ø!)¨A¡ô/ˆà�‰�t—y‘yÔ!Ø×Ñœ* f§m¡mÔ4ä—‘˜Ÿ™¤s§|¡|¸4¿=¹=Ø!)¨A¡ô/ˆà×Ñœ* f§n¡n°d·i±iÕ@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Ë   € Ü�t—y‘y“>ˆä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ×+Ñ+¨D¯I©IÓ6‰ˆˆCä—‘˜Ÿ™¤s§|¡|¸4¿=¹=Ø!)¨A¡ô/ˆà�‰�rÔØ×Ñœ* f§m¡m°SÔ9ä—‘˜Ÿ™¤s§|¡|¸4¿=¹=Ø!)¨A¡ô/ˆà×Ñœ* f§n¡n°bÕ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"ö #¨q�D˜˜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ä—W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}Ø%(°Cô9ˆFñ " )¨\Ó:ò %�Ø—‘˜eÕ$ð%àˆCÙ! *¨lÓ;ò -�Ø�v—~‘~ eÓ,Ñ,‘ð-à×Ñ˜Y¨Ô,Ø�M‰M˜'Õ"ð	#ð @ò 	7ˆLä—W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}Ø%(°Cô9ˆFñ " )¨\Ó:ò %�Ø—‘˜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Ÿ]™]Ó+ˆÜ˜dŸi™iÓ(ˆ	Ü˜DŸI™IÓ&ˆä—'‘'˜$Ÿ,™,ÜŸ,™,Ø $§¡ô/ˆð 	�‰�t—y‘yÔ!Ø�_‰_˜TŸY™YÓ'ˆØ�n‰nÓˆä—'‘'˜&ÜŸ,™,Ø (ô*ˆð %ˆˆr�ˆ
Ø&ˆ��!ˆØ�‰�yÔ!Ø'ˆ	�"�1ˆØ—/‘/ 'Ó*ˆØ%ˆ��ˆØ—>‘>Ó#ˆà×Ñ˜˜WÔ%Ø×Ñ˜˜hÔ'Ø×Ñ˜Ÿ™¨¯©Ô6ô ˜4Ÿ<™<Ó(ˆÜ˜TŸ]™]Ó+ˆÜ˜dŸi™iÓ(ˆ	Øä—'‘'˜&ÜŸ,™,Ø (ô*ˆð %ˆˆr�ˆ
Ø&ˆ��!ˆØ�‰�yÔ!Ø'ˆ	�"�1ˆØ×,Ñ,¬Y°wÓ-?ÄÈ8ÓATÓ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ÿ  € ô œI d§l¡lÓ3Ó4ˆÜœi¨¯©Ó6Ó7ˆÜœy¨¯©Ó3Ó4ˆ	ÜœY t§y¡yÓ1Ó2ˆä—'‘'˜$Ÿ,™,ÜŸ,™,Ø $§¡ô/ˆð 	�‰�t—y‘yÔ!Ø�_‰_˜TŸY™YÓ'ˆØ�n‰nÓˆä—'‘'˜&ÜŸ,™,Ø (ô*ˆð %ˆˆr�ˆ
Ø&ˆ��!ˆØ�‰�yÔ!Ø'ˆ	�"�1ˆØ—/‘/ 'Ó*ˆØ%ˆ��ˆØ—>‘>Ó#ˆà×Ñ˜˜WÔ%Ø×Ñ˜˜hÔ'Ø×Ñ˜Ÿ™¨¯©Ô6ô œI d§l¡lÓ3Ó4ˆÜœi¨¯©Ó6Ó7ˆÜœy¨¯©Ó3Ó4ˆ	Øä—'‘'˜&ÜŸ,™,Ø (ô*ˆð %ˆˆr�ˆ
Ø&ˆ��!ˆØ�‰�yÔ!Ø'ˆ	�"�1ˆØ×,Ñ,¬Z¸Ó-@Ä*ÈXÓBVÓ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ÓˆØ�m‰m‹oˆä˜3“ˆÜ—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�n‰n˜R¨ˆnÓ/ˆØ×Ñ˜˜VÔ$Ø×Ñ˜˜dÔ#ä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�n‰n˜R¨ˆ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ÓˆäœI c›NÓ+ˆÜ—‘˜Ÿ™¤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ˆØ×Ñœ* f§n¡n°bÀÐÔPÜ—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ×Ñœ* f§n¡n°bÀÐÕ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Ù˜k¨2Ó.€HÙ˜& #Ó&€Dò"ò8ò1òCò<ò,ò	!ò*ò:òJò'ò$	'ò"ò	@ò:ò>
Aò:ò)7òV--ò^--ò^$ò:%ò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Ø ¤# d§i¡i£.Ð1ò #�äŸ™ §¡¬s¯|©|Ø'+§}¡}Ø+4Ø)0ô2�ð —^‘^ D§I¡IÓ.�Ø—m‘m“o�ô Ÿ™ §¡¬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¸   € à¤ D§I¡I£Ð/ò 	#ˆIØ$ò #�äŸ™ §¡¬s¯|©|Ø'+§}¡}Ø+4Ø)0ô2�ð —‘˜dŸi™iÔ(Ø—m‘m“o�ô Ÿ™ §¡¬s¯|©|Ø'+§}¡}Ø+4Ø)0ô2�ð —‘˜dŸi™iÔ(Ø—‘˜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ã   € à¤ D§I¡I£Ð/ó 	#ˆIØ ¤# d§i¡i£.Ð1ò #�äŸ™ §¡¬s¯|©|Ø'+§}¡}Ø+4Ø)0ô2�ð —‘˜dŸi™iÔ(Ø—^‘^ D§I¡IÓ.�Ø—m‘m“o�ô Ÿ™ §¡¬s¯|©|Ø'+§}¡}Ø+4Ø)0ô2�ð —‘˜dŸi™iÔ(Ø—‘˜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ˆØ�m‰m‹oˆä—‘˜Ÿ™¤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Ø" F¨D¯I©IØ"Ÿi™i¨$Ñ.ð0ò "�	àÐ$Ø $‘Iä # I£�IÜŸ™ §¡¬s¯|©|Ø'+§}¡}Ø)+Ø+4ô6�ð Ð(Ø—M‘M )Ô,Ü  ¨Ó5�Ù�t—y‘yÔ!Ù�t—y‘yÔ!Ù�t—y‘yÔ!Ù�t—y‘yÕ!ñ!"ñ	"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ˆØ�‰�d—i‘iÔ Ø—M‘M“Oˆ	Ü�q“ò 	9ˆAØ×Ñ˜Y¨¯©«Õ8ð	9ô —‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�‰�d—i‘iÔ Ü�q“ò 	%ˆAØ�M‰M˜)Õ$ñ	%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ˆØ�‰�d—i‘iÔ Ø×+Ñ+¨D¯I©IÓ6‰ˆˆCô —‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�‰�d—i‘iÔ Ø×&Ñ& r¨3Ó/ˆØ×Ñ˜Ÿ™ 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�á%Ø—M‘M $§)¡)Ô,Ü  ¨Ó5�Ù�t—y‘yÔ!Ø×!Ñ!¤)¨V°T·Y±YÕ?ñ@ñ	@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¯|©|Ø'+§}¡}Ø)+ô-�ñ &Ø—M‘M $§)¡)Ô,Ø-”˜ Ó-¨d¯i©iÔ8Ø×!Ñ!¤)¬W°V¸\Ó-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š   € Ø.ò 	1ˆKÜ—W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}ÔMˆFØ�N‰N˜4Ÿ9™9Ô%Ø�M‰MŒOØ×Ñœi¬°¸Ó)EØ"Ÿi™iô)ô —W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}ÔMˆFØ×%Ñ% d§i¡iÕ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ˆØ�^‰^˜DŸI™IÓ&ˆØ�m‰m‹oˆà.ó 
	)ˆKÜ—W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}ÔMˆFØ�N‰N˜2ÔØ�M‰M˜#ÔØ×Ñœi¬°¸Ó)EØ"Ÿi™iô)ô —W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}ÔMˆFØ×%Ñ% b¨#Ô.Ø×Ñœi¬°¸Ó)EØ"Ÿi™iö)ñ
	)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Ù˜k¨2Ó.€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)Ú(000102030405060708090a0b0c0d0e0f10111213Ú0202122232425262728292a2b2c2d2e2f3031323334353637Ú0e3b201a9f5b71a7a9b1ceaeccd97e70b6176aad9a4428aa5Ú484392fbc1b09951rè   Ú101112131415161718191a1bÚ r   r   z%02Xé   Ú@202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3fÚ@69915dad1e84c6376a68c2967e4dab615ae0fd1faec44cc484828529463ccf72Úb4ac6bec93e8598e7f0dadbcea5brè   Ú101112131415161718191a1b1c)rä   Ú.08090a0b0c0d0e0f101112131415161718191a1b1c1d1eÚ.588c979a61c663d2f066d0c2c0f989806d5f6b61dac384Ú17e8d12cfdf926e0Ú c0c1c2c3c4c5c6c7c8c9cacbcccdcecfÚ00000003020100a0a1a2a3a4a5)rä   Ú008090a0b0c0d0e0f101112131415161718191a1b1c1d1e1fÚ072c91a36e135f8cf291ca894085c87e3cc15c439c9e43a3bÚa091d56e10400916rý   Ú00000004030201a0a1a2a3a4a5)rä   Ú208090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20Ú251b1e5f44a197d1da46b0f8e2d282ae871e838bb64da859657Ú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)Ú63018f76dc8a1bcbÚ09020ea6f91bdd85afa0039ba4baff9bfb79c7028949cd0ecÚ04ccb1e7ca981befaa0726c55d378061298c85c92814abc33Úc52ee81d7d77c08ar*  Ú0033568ef7b2633c9696766cfa)Úaa6cfa36cae86b40Ú2b916e0eacc1c00d7dcec68ec0b3bbb1a02de8a2d1aa346132eÚ2b1d23a2220ddc0ac900d9aa03c61fcf4a559a4417767089708Úa776796edb723506r*  Ú00103fe41336713c9696766cfa)Úd0d0735c531e1becf049c244Ú&12daac5630efa5396f770ce1a66b21f7b2101cÚ&14d253c3967b70609b7cbb7c49916028324526Ú9a6f49975bcadeafr*  Ú00764c63b8058e3c9696766cfa)Ú77b60f011c03e1525899bcaeÚ(e88b6a46c78d63e52eb8c546efb5de6f75e9cc0dÚ(5545ff1a085ee2efbf52b2e04bee1e2336c73e3fÚ762c0c7744fe7e3cr*  Ú00f8b678094e3b3c9696766cfa)Úcd9044d2b71fdb8120ea60c0Ú*6435acbafb11a82e2f071d7ca4a5ebd93a803ba87fÚ*009769ecabdf48625594c59251e6035722675e04c8Ú47099e5ae0704551r*  Ú00d560912d3f703c9696766cfa)Úd85bc7e69f944fb8Ú.8a19b950bcf71a018e5e6701c91787659809d67dbedd18Ú.bc218daa947427b6db386a99ac1aef23ade0b52939cb6aÚ637cf9bec2408897c6bar*  Ú0042fff8f1951c3c9696766cfa)Ú74a0ebc9069f5b37Ú01761433c37c5a35fc1f39f406302eb907c6163be38c98437Ú05810e6fd25874022e80361a478e3e9cf484ab04f447efff6Úf0a477cc2fc9bf548944r*  Ú00920f40e56cdc3c9696766cfa)Ú44a3aa3aae6475caÚ2a434a8e58500c6e41530538862d686ea9e81301b5ae4226bfaÚ2f2beed7bc5098e83feb5b31608f8e29c38819a89c8e776f154Ú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Ì   € Ø37×3DÑ3Dò 	&Ñ/ˆJ˜˜B  S¨%ä—W‘W˜S¤#§,¡,°¼sÀ3»xÔHˆFØ�M‰M˜*Ô%Ø×1Ñ1°"Ó5‰IˆC�Ø×Ñ˜R Ô%Ø×Ñ˜S $Ô'ô —W‘W˜S¤#§,¡,°¼sÀ3»xÔHˆFØ�M‰M˜*Ô%Ø×+Ñ+¨B°Ó4ˆCØ×Ñ˜R Õ%ñ	&r   N)
r¶   r·   r¸   Ú__doc__Újoinr>   Útest_vectors_hexr   rd  rh  )Ú.0r?   Úyr>   Útvr   s   000000r   rã   rã   •  s/  „ ñ*ð	ð	ð	&ð �7‰7©u°Q°r«{×PÑP¨!ÄEÈ!ÈBÃKÒP¸q�F˜a ™d 1™fÓ%ÐPÐ%ÕPÓQÐSVÑ
VØ
LØ
LØ
(Ø
,Ø
&ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ð	(ðMlÐð\ :J×JÑJ°2¨2Ö. a”Y˜q•\Ô.ÕJ€Ló&ùõ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Ø:DÀjÐ9QôSˆ�r   c                 ó   — | j                   S ©N)rx  r6   s    r   ÚshortDescriptionz&TestVectorsWycheproof.shortDescriptionr  s   € Ø�x‰xˆ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ÛØ�MŠM¸4¿8»8ÀRÇZÃZÐ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>  € Ø2´S¸¿¹³ZÑ?ˆŒð
	Ü—W‘W˜RŸV™V¤S§\¡\°2·5±5ñ 6À"Ç+Á+ð 6Ø"&×"4Ñ"4ñ6ˆFð 	�‰�b—f‘fÔØ×+Ñ+¨B¯F©FÓ3‰ˆˆCØ�8Š8Ø×Ñ˜R §¡Ô'Ø×Ñ˜S "§&¡&Ô)Ø�I‰I�b�Mð øô ò 	Ü�2—5‘5‹z¤ q¨&°!Ó!4Ñ4Ð9VÔZ]Ð^_ÓZ`Ñ9`ØŸ8š8Ð#�|ÜØ�{‰{¤%¨¨6°1Ó"5Ñ5Ð:OÔSVÐWXÓSYÑ:YØŸ8š8Ð#�|ÜØˆ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�  sP  € Ø2´S¸¿¹³ZÑ?ˆŒð
	Ü—W‘W˜RŸV™V¤S§\¡\°2·5±5ñ 6À"Ç+Á+ð 6Ø"&×"4Ñ"4ñ6ˆFð 	�‰�b—f‘fÔð	Ø×*Ñ*¨2¯5©5°"·&±&Ó9ˆBð —8’8ˆO�8Ø×Ñ˜R §¡Ô(Ø�I‰I�b�Møô# ò 	Ü�2—5‘5‹z¤ q¨&°!Ó!4Ñ4Ð9VÔZ]Ð^_ÓZ`Ñ9`ØŸ8š8Ð#�|ÜØ�{‰{¤%¨¨6°1Ó"5Ñ5Ð:OÔSVÐWXÓSYÑ:YØŸ8š8Ð#�|ÜØˆGûð	ûô ò 	 Ø—x’xÐ�<‘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ˆŒÜˆr�u‰u‹:œU 1 f¨aÓ0Ñ0´C¸¿¹³JÀ!²OØÜ—‘˜Ÿ™¤§¡¨r¯u©uñ 2¸b¿k¹kð 2Ø"×0Ñ0ñ2ˆà�‰�b—f‘fÔÜ˜BŸE™E 7¬c°"·%±%«j¸1©nÑ#=ÀÑ#GÓHˆ
Ø×Ñœ* f×&?Ñ&?ÀÈRÏVÉVÕ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Ø	Œk‹mˆ_Ñ€EØ	Ô#Ð$7Ó8Ð9Ñ9€Eà€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Òò(à€H‡M�M˜gÖ&ð r   