Ë
    (üàgœ‘  ã                   óÐ  — d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZ d dlmZ d dlmZmZ d d	lmZ d
„ Z G d„ dej*                  «      Z G d„ dej*                  «      Z G d„ dej*                  «      Z G d„ dej*                  «      Z G d„ dej*                  «      Z G d„ dej*                  «      Z eddddd„ i«      xs g Ze eddddd„ i«      xs g z  Z ee«      D ].  \  ZZ e ee!«      rŒefd„Z" e#ed ez  e"«        e#ed ez  e"«       Œ0  G d!„ d"ej*                  «      Z$ G d#„ d$ej*                  «      Z%i fd%„Z&e'd&k(  rd'„ Z( ejR                  d(¬)«       yy)*é    )Úprint_functionN)Ú	unhexlify)Úlist_test_cases)Úload_test_vectorsÚload_test_vectors_wycheproof)ÚtobytesÚbchr)ÚAES)ÚSHAKE128ÚSHA256)Ústrxorc                 ó^   — 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_GCM.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y)ÚGcmTestsÚ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_GCMÚnonce_96r   ÚencryptÚdecryptÚassertEqual)ÚselfÚcipherÚptÚctÚpt2s        r   Útest_loopback_128zGcmTests.test_loopback_1288   sv   € Ü—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆÜ˜K¨Ó2ˆØ�^‰^˜BÓˆä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�n‰n˜RÓ ˆØ×Ñ˜˜SÕ!r   c                 óÒ  — t        j                  | j                  t         j                  «       t        j                  | j                  t         j                  | j                  «      }|j                  | j                  «      }t        j                  | j                  t         j                  | j                  ¬«      }| j                  ||j                  | j                  «      «       y ©Nr   )r
   r   r   r"   r#   r$   r   r&   )r'   r(   r*   s      r   Ú
test_noncezGcmTests.test_nonceA   sƒ   € ä�‰�—‘œcŸl™lÔ+ä—‘˜Ÿ™¤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!GcmTests.test_nonce_must_be_bytesK   s,   € Ø×Ñœ)¤S§W¡W¨d¯l©l¼C¿L¹LØ /ð 	õ 	1r   c                 óR  — | j                  t        t        j                  | j                  t        j
                  d¬«       t        dd«      D ]X  }t        j                  | j                  t        j
                  t        d«      |z  ¬«      }|j                  t        d«      «       ŒZ y )Nr   r   é   r   )	r2   Ú
ValueErrorr
   r   r   r"   Úranger	   r$   )r'   Úxr(   s      r   Útest_nonce_lengthzGcmTests.test_nonce_lengthO   su   € à×Ñœ*¤c§g¡g¨t¯|©|¼S¿\¹\Ø #ð 	ô 	%ô �q˜#“ò 	$ˆAÜ—W‘W˜TŸ\™\¬3¯<©<¼tÀA»wÈ¹{ÔKˆFØ�N‰Nœ4 ›7Õ#ñ	$r   c                 óÌ   — t        j                  | j                  t         j                  | j                  ¬«      }| j                  |j                  t         j                  «       y r.   )r
   r   r   r"   r#   r&   Ú
block_size©r'   r(   s     r   Útest_block_size_128zGcmTests.test_block_size_128X   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    ÚlenÚassertNotEqual)r'   r(   Únonce1Únonce2s       r   Útest_nonce_attributezGcmTests.test_nonce_attribute\   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 )Né   )r    ÚunknownF)r    Ú	use_aesni)r2   r3   r
   r   r   r"   r#   r4   s    r   Útest_unknown_parametersz GcmTests.test_unknown_parametersf   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(GcmTests.test_null_encryption_decryptionq   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$   r2   r3   r%   r>   s     r   Útest_either_encrypt_or_decryptz'GcmTests.test_either_encrypt_or_decryptw   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#   r2   r3   r$   r%   r>   s     r   Útest_data_must_be_bytesz GcmTests.test_data_must_be_bytes€   sl   € Ü—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ×Ñœ) V§^¡^Ð5HÔIä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ×Ñœ) V§^¡^Ð5HÕIr   c                 ó   — | j                  t        t        j                  | j                  t        j
                  | j                  d¬«       | j                  t        t        j                  | j                  t        j
                  | j                  d¬«       t        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   )r2   r8   r
   r   r   r"   r#   r9   Úencrypt_and_digestr   r&   rA   )r'   rW   r(   Ú_Úmacs        r   Útest_mac_lenzGcmTests.test_mac_len‡   s  € à×Ñœ*¤c§g¡g¨t¯|©|¼S¿\¹\Ø $§¡°qð 	ô 	:à×Ñœ*¤c§g¡g¨t¯|©|¼S¿\¹\Ø $§¡°tð 	ô 	=ô ˜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   r7   )ÚCrypto.Util.strxorr_   r
   r   r   r"   r#   rZ   r   r2   r8   Údecrypt_and_verify)r'   r_   r(   r*   r\   Úinvalid_macs         r   Útest_invalid_maczGcmTests.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 r.   )
r
   r   r   r"   r#   Ú	hexdigestr&   Údigestr   Ú	hexverify)r'   r(   Úmac_hexs      r   Útest_hex_maczGcmTests.test_hex_mac¥   su   € Ü—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ×"Ñ"Ó$ˆØ×Ñ˜Ÿ™›¬)°GÓ*<Ô=ä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ×Ñ˜Õ!r   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 ]  }|j                  |«       Œ d}	 |||«      D ]  }|	|j                  |«      z  }	Œ | j                  ||	«       |j                  |«       Œ¤ dD ]±  }t        j                  | j                  t        j                  | j
                  ¬«      } |||«      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   )r9   rA   )r   Úchunk_lengthÚis      r   Úbreak_upz.GcmTests.test_message_chunks.<locals>.break_up¸   s9   € Ü49¸!¼SÀ»YØ ó5"ö #¨q�D˜˜1˜\™>Ò*ò #ð #ùò #s   ™+)
r7   é   rV   rG   é
   é   r   é(   éP   r   r   )r   r
   r   r   r"   r#   ÚupdaterZ   r%   r&   Úverifyr$   rf   )r'   Ú	auth_datar!   r(   Ú
ciphertextÚref_macro   rm   Úchunkr+   Úct2s              r   Útest_message_chunkszGcmTests.test_message_chunks­   s£  € ô #Ð#7¸Ó=ˆ	Ü" ;°Ó4ˆ	ä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�‰�iÔ Ø$×7Ñ7¸	ÓBÑˆ
�Gò	#ð
 @ò 
	#ˆLä—W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}ÔMˆFá! )¨\Ó:ò %�Ø—‘˜eÕ$ð%àˆCÙ! *¨lÓ;ò -�Ø�v—~‘~ eÓ,Ñ,‘ð-à×Ñ˜Y¨Ô,Ø�M‰M˜'Õ"ð
	#ð @ò 
	7ˆLä—W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}ÔMˆ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   ÿÿÿrV   )Ú	bytearrayr   r#   r   r
   r   r"   ru   r$   rf   r&   r    ra   )r'   Úkey_baÚnonce_baÚ	header_baÚdata_baÚcipher1r*   r   Úcipher2Úct_testÚtag_testÚcipher4Úpt_tests                r   Útest_bytearrayzGcmTests.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"   ru   r$   rf   r&   r    ra   )r'   Úkey_mvÚnonce_mvÚ	header_mvÚdata_mvr„   r*   r   r…   r†   r‡   rˆ   r‰   s                r   Útest_memoryviewzGcmTests.test_memoryview  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$   rf   r   r&   r%   rZ   ra   )r'   r)   r(   r*   r   r•   ÚresÚtag_outs           r   Útest_output_paramzGcmTests.test_output_param4  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%GcmTests.test_output_param_memoryviewQ  s½   € àˆÜ—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�^‰^˜BÓˆäœI c›NÓ+ˆÜ—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�‰�r &ˆÔ)Ø×Ñ˜˜VÔ$ä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�‰�r &ˆÔ)Ø×Ñ˜˜VÕ$r   c                 ó¸  — d}d|z  }t        j                  | j                  t         j                  | j                  ¬«      }|j                  |«      }t        j                  | j                  t         j                  | j                  ¬«      }| j                  t        |j
                  |d|z  ¬«       t        j                  | j                  t         j                  | j                  ¬«      }| j                  t        |j                  |d|z  ¬«       t        |dz
  «      }t        j                  | j                  t         j                  | j                  ¬«      }| j                  t        |j
                  ||¬«       t        j                  | j                  t         j                  | j                  ¬«      }| j                  t        |j                  ||¬«       y )Nr   ó   5r   ó   0r”   r7   )r
   r   r   r"   r#   r$   r2   r3   r%   r   r8   )r'   ÚLEN_PTr)   r(   r*   Úshorter_outputs         r   Útest_output_param_negzGcmTests.test_output_param_neg`  s6  € Øˆà�F‰]ˆÜ—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�^‰^˜BÓˆä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ×Ñœ) V§^¡^°RÀÀvÁÐÔNä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ×Ñœ) V§^¡^°RÀÀvÁÐÔNä" 6¨A¡:Ó.ˆÜ—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ×Ñœ* f§n¡n°bÀÐÔPÜ—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ×Ñœ* f§n¡n°bÀÐÕPr   N)Ú__name__Ú
__module__Ú__qualname__r   r   r#   r   r,   r/   r5   r;   r?   rE   rJ   rP   rR   rT   r]   rc   ri   r|   rŠ   r‘   r˜   rš   r    © r   r   r   r   2   sŠ   „ á˜Y¨Ó+€GÙ˜k¨2Ó.€HÙ˜& #Ó&€Dò"ò8ò1ò$ò<ò,ò	!ò*ò:òJò'ò&	'ò"ò'7òR--ò^--ò^$ò:%ó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y)ÚGcmFSMTestsr   r   r   r   r   r   c                 ó†  — t        j                  | j                  t         j                  | j                  ¬«      }|j                  | j                  «      }|j                  «       }t        j                  | j                  t         j                  | j                  ¬«      }|j                  |«       |j                  |«       y r.   )
r
   r   r   r"   r#   r$   r   rf   r%   rv   ©r'   r(   r*   r\   s       r   Ú-test_valid_init_encrypt_decrypt_digest_verifyz9GcmFSMTests.test_valid_init_encrypt_decrypt_digest_verifyz  s}   € ô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�^‰^˜DŸI™IÓ&ˆØ�m‰m‹oˆô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�‰�rÔØ�‰�cÕr   c                 óš  — 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#   ru   r   rf   rv   ©r'   r(   r\   s      r   Ú$test_valid_init_update_digest_verifyz0GcmFSMTests.test_valid_init_update_digest_verifyˆ  s   € ô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�‰�d—i‘iÔ Ø�m‰m‹oˆô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�‰�d—i‘iÔ Ø�‰�cÕr   c                 óò  — t        j                  | j                  t         j                  | j                  ¬«      }|j                  | j                  «       |j                  | j                  «      }|j                  «       }t        j                  | j                  t         j                  | j                  ¬«      }|j                  | j                  «       |j                  |«       |j                  |«       y r.   )r
   r   r   r"   r#   ru   r   r$   rf   r%   rv   r¨   s       r   Útest_valid_full_pathz GcmFSMTests.test_valid_full_path–  s�   € ô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�‰�d—i‘iÔ Ø�^‰^˜DŸI™IÓ&ˆØ�m‰m‹oˆô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�‰�d—i‘iÔ Ø�‰�rÔØ�‰�cÕr   c                 ó˜   — t        j                  | j                  t         j                  | j                  ¬«      }|j                  «        y r.   )r
   r   r   r"   r#   rf   r>   s     r   Útest_valid_init_digestz"GcmFSMTests.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 r.   )r
   r   r   r"   r#   rf   rv   r«   s      r   Útest_valid_init_verifyz"GcmFSMTests.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                  ¬«      }|�|j                  |«       t        ||«      } || j                   «        || j                   «        || j                   «        || j                   «       Œµ Œ× y )NrL   s   333ó   3r   )	r   rA   r
   r   r   r"   r#   ru   rM   )r'   Úmethod_namerw   Ú	assoc_lenr(   Úmethods         r   Ú&test_valid_multiple_encrypt_or_decryptz2GcmFSMTests.test_valid_multiple_encrypt_or_decrypt³  s¼   € Ø/ò 	"ˆKØ" F¨D¯I©IØ"Ÿi™i¨$Ñ.ð0ò "�	àÐ$Ø $‘Iä # I£�IÜŸ™ §¡¬s¯|©|Ø'+§}¡}ô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   é   rY   )r
   r   r   r"   r#   ru   r   rf   r9   r&   rv   )r'   r(   Ú	first_macr:   s       r   Ú$test_valid_multiple_digest_or_verifyz0GcmFSMTests.test_valid_multiple_digest_or_verifyÅ  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 r.   )
r
   r   r   r"   r#   ru   r   rZ   ra   r&   )r'   r(   r*   r\   r)   s        r   Ú0test_valid_encrypt_and_digest_decrypt_and_verifyz<GcmFSMTests.test_valid_encrypt_and_digest_decrypt_and_verifyÓ  sž   € ä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�‰�d—i‘iÔ Ø×+Ñ+¨D¯I©IÓ6‰ˆˆCô —‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�‰�d—i‘iÔ Ø×&Ñ& r¨3Ó/ˆØ×Ñ˜Ÿ™ BÕ'r   c           	      ób  — dD ]ª  \  }}dD ]   }t        j                  | j                  t         j                  | j                  ¬«      }|r|j                  | j                  «        t        ||«      | j                  «       | j                  t        t        ||«      | j                  «       Œ¢ Œ¬ y )N)rL   )r%   r$   )TFr   )
r
   r   r   r"   r#   ru   r   rM   r2   r3   )r'   Úmethod1_nameÚmethod2_nameÚassoc_data_presentr(   s        r   Ú#test_invalid_mixing_encrypt_decryptz/GcmFSMTests.test_invalid_mixing_encrypt_decryptß  s’   € ð+Cò 		-Ñ&ˆL˜,à&3ò -Ð"ÜŸ™ §¡¬s¯|©|Ø'+§}¡}ô6�á%Ø—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$   ru   r   )r
   r   r   r"   r#   r$   r   rf   r2   r3   rM   rZ   )r'   rµ   r(   s      r   Ú+test_invalid_encrypt_or_update_after_digestz7GcmFSMTests.test_invalid_encrypt_or_update_after_digestì  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%   ru   )r
   r   r   r"   r#   r$   r   rf   r%   rv   r2   r3   rM   ra   )r'   r(   r*   r\   rµ   s        r   Ú+test_invalid_decrypt_or_update_after_verifyz7GcmFSMTests.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¦   t  s]   „ á˜Y¨Ó+€GÙ˜k¨2Ó.€HÙ˜& #Ó&€Dòòòò ò
ò"ò$%ò
(ò-ò	1ó)r   r¦   c                   ó’   — e Zd ZdZg d¢ZeD � ���cg c]  }|D �cg c]  }t        |«      ‘Œ c}‘Œ c}}}} Zd„ Zyc c}w c c}}}} w )ÚTestVectorsz‘Class exercising the GCM test vectors found in
       http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf))Ú rÊ   rÊ   Ú 58e2fccefa7e3061367f1d57a4e7455aÚ 00000000000000000000000000000000Ú000000000000000000000000)rÊ   rÌ   Ú 0388dace60b6a392f328c2b971b2fe78Ú ab6e47d42cec13bdf53a67b21257bddfrÌ   rÍ   )rÊ   Ú€d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255Ú€42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985Ú 4d5c2af327cd64a62cf35abd2ba6fab4Ú feffe9928665731c6d6a8f9467308308Úcafebabefacedbaddecaf888)Ú(feedfacedeadbeeffeedfacedeadbeefabaddad2Úxd9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39Úx42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091Ú 5bc94fbc3221a5db94fae95ae7121a47rÓ   rÔ   )rÕ   rÖ   Úx61353b4c2806934a777ff51fa22a4755699b2a714fcdc6f83766e5f97b6c742373806900e49f24b22b097544d4896b424989b5e1ebac0f07c23f4598Ú 3612d2e79e3b0785561be14aaca2fccbrÓ   Úcafebabefacedbad)rÕ   rÖ   Úx8ce24998625615b603a033aca13fb894be9112a5c3a211a8ba262a3cca7e2ca701e4a9a4fba43c90ccdcb281d48c7c6fd62875d2aca417034c34aee5Ú 619cc5aefffe0bfa462af43c1699d050rÓ   Úx9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b)rÊ   rÊ   rÊ   Ú cd33b28ac773f74ba00ed1f312572435Ú0000000000000000000000000000000000000000000000000rÍ   )rÊ   rÌ   Ú 98e7247c07f0fe411c267e4384b0f600Ú 2ff58d80033927ab8ef4d4587514f0fbrà   rÍ   )rÊ   rÐ   Ú€3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710acade256Ú 9924a7c8587336bfb118024db8674a14Ú0feffe9928665731c6d6a8f9467308308feffe9928665731crÔ   )rÕ   rÖ   Úx3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710Ú 2519498e80f1478f37ba55bd6d27618crå   rÔ   )rÕ   rÖ   Úx0f10f599ae14a154ed24b36e25324db8c566632ef2bbb34f8347280fc4507057fddc29df9a471f75c66541d4d4dad1c9e93a19a58e8b473fa0f062f7Ú 65dcc57fcf623a24094fcca40d3533f8rå   rÛ   )rÕ   rÖ   Úxd27e88681ce3243c4830165a8fdcf9ff1de9a1d8e6b447ef6ef7b79828666e4581e79012af34ddd9e2f037589b292db3e67c036745fa22e7e9b7373bÚ dcf566ff291c25bbb8568fc3d376a6d9rå   rÞ   )rÊ   rÊ   rÊ   Ú 530f8afbc74536b9a963b4f1c4cb738bÚ@0000000000000000000000000000000000000000000000000000000000000000rÍ   )rÊ   rÌ   Ú cea7403d4d606b6e074ec5d3baf39d18Ú d0d1c8a799996bf0265b98b5d48ab919rí   rÍ   )rÊ   rÐ   Ú€522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015adÚ b094dac5d93471bdec1a502270e3cc6cÚ@feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308rÔ   )rÕ   rÖ   Úx522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662Ú 76fc6ece0f4e1768cddf8853bb2d551brò   rÔ   )rÕ   rÖ   Úxc3762df1ca787d32ae47c13bf19844cbaf1ae14d0b976afac52ff7d79bba9de0feb582d33934a4f0954cc2363bc73f7862ac430e64abe499f47c9b1fÚ 3a337dbf46a792c45e454913fe2ea8f2rò   rÛ   )rÕ   rÖ   Úx5a8def2f0c9e53f1f75d7853659e2a20eeb2b22aafde6419a058ab4f6f746bf40fc0c3b780f244452da3ebf1c5d82cdea2418997200ef82e44ae7e3fÚ a44a8266ee1c8eb0c8b5d4cf5ae9f19arò   rÞ   c           	      óð  — | j                   D ]ç  \  }}}}}}t        j                  |t        j                  |t	        |«      ¬«      }|j                  |«       |j                  |«      \  }}	| j                  ||«       | j                  ||	«       t        j                  |t        j                  |t	        |«      ¬«      }|j                  |«       |j                  ||«      }
| j                  ||
«       Œé y )N)rW   )	Útest_vectorsr
   r   r"   rA   ru   rZ   r&   ra   )r'   Ú
assoc_datar)   r*   r\   Úkeyr    r(   r{   Úmac2r+   s              r   ÚrunTestzTestVectors.runTestÆ  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__Útest_vectors_hexr   rú   rþ   )Ú.0Útvr:   r   s   0000r   rÉ   rÉ   	  sD   „ ñfònÐð` :J×JÑJ°2¨2Ö. a”Y˜q•\Ô.ÕJ€Ló&ùò /ùÕJs   ’	A
›<­A
¼A
rÉ   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚTestVectorsGueronKrasnovz¦Class exercising the GCM test vectors found in
       'The fragility of AES-GCM authentication algorithm', Gueron, Krasnov
       https://eprint.iacr.org/2013/157.pdfc                 ó  — t        d«      }t        d«      }t        d«      }t        d«      }t        j                  |t        j                  |«      j	                  |«      }| j                  ||j                  «       «       y )NÚ 3da6c536d6295579c0959a7043efb503Ú2b926197d34e091ef722db94Ú 00000000000000000000000000000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3fÚ 69dd586555ce3fcc89663801a71d957b)r   r
   r   r"   ru   r&   rf   )r'   rü   ÚivÚaadrf   r(   s         r   Útest_1zTestVectorsGueronKrasnov.test_1Ü  sk   € ÜÐ:Ó;ˆÜÐ2Ó3ˆÜð ;ó <ˆô
 Ð=Ó>ˆä—‘˜œcŸl™l¨BÓ/×6Ñ6°sÓ;ˆØ×Ñ˜ §¡£Õ1r   c                 ó`  — t        d«      }t        d«      }t        d«      }t        d«      }t        d«      }t        d«      }t        j                  |t        j                  |«      j	                  |«      }|j                  |«      \  }}	| j                  ||«       | j                  ||	«       y )NÚ 843ffcf5d2b72694d19ed01d01249412Údbcca32ebf9b804617c3aa9eÚ@00000000000000000000000000000000101112131415161718191a1b1c1d1e1fÚ 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4fÚ 6268c6fa2a80b2d137467f092f657ac04d89be2beaa623d61b5a868c8f03ff95d3dcee23ad2f1ab3a6c80eaf4b140eb05de3457f0fbc111a6b43d0763aa422a3013cf1dc37fe417d1fbfc449b75d4cc5Ú 3b629ccfbc1119b7319e1dce2cd6fd6d)r   r
   r   r"   ru   rZ   r&   )
r'   rü   r
  r  r)   r*   rf   r(   r{   Údigest2s
             r   Útest_2zTestVectorsGueronKrasnov.test_2é  s©   € ÜÐ:Ó;ˆÜÐ2Ó3ˆÜð ;ó <ˆäð ;ó <ˆô
 ð ;ó <ˆô
 Ð=Ó>ˆä—‘˜œcŸl™l¨BÓ/×6Ñ6°sÓ;ˆØ×0Ñ0°Ó4‰ˆˆWà×Ñ˜˜SÔ!Ø×Ñ˜ Õ)r   N)r¡   r¢   r£   rÿ   r  r  r¤   r   r   r  r  ×  s   „ ñ/ò2ó*r   r  c                   ó   — e Zd Zd„ Zy)ÚNISTTestVectorsGCMc                 óR   — d| _         t        j                  j                  | |«       y )NT©Ú	use_clmulÚunittestÚTestCaseÚ__init__©r'   Úas     r   r  zNISTTestVectorsGCM.__init__  s   € ØˆŒÜ×Ñ×"Ñ" 4¨Õ+r   N©r¡   r¢   r£   r  r¤   r   r   r  r    ó   „ ó,r   r  c                   ó   — e Zd Zd„ Zy)ÚNISTTestVectorsGCM_no_clmulc                 óR   — d| _         t        j                  j                  | |«       y )NFr  r  s     r   r  z$NISTTestVectorsGCM_no_clmul.__init__
  s   € ØˆŒÜ×Ñ×"Ñ" 4¨Õ+r   Nr   r¤   r   r   r#  r#    r!  r   r#  )ÚCipherr
   zgcmDecrypt128.rspzGCM decryptÚcountc                 ó   — t        | «      S ©N©Úint©r:   s    r   ú<lambda>r,    ó
   € ¬C°«F€ r   zgcmEncryptExtIV128.rspzGCM encryptc                 ó   — t        | «      S r(  r)  r+  s    r   r,  r,    r-  r   c                 ó  — |j                   | _        t        j                  |j                  t        j
                  |j                  t        |j                  «      | j                  ¬«      }|j                  |j                  «       d|j                  v r7| j                  t        |j                  |j                   |j                  «       y |j                  |j                   |j                  «      }| j#                  ||j$                  «       y )N)r    rW   r  ÚFAIL)ÚdescÚdescriptionr
   r   rü   r"   r
  rA   r   r  ru   r  Úothersr2   r8   ra   r*   r&   r)   )r'   r  r(   r)   s       r   Úsingle_testr4  !  s±   € àŸ7™7ˆÔÜ—‘˜Ÿ™¤§¡°R·U±UÜ%(¨¯©£[¸D¿N¹NôLˆà�‰�b—f‘fÔØ�R—Y‘YÑØ×Ñœj¨&×*CÑ*CØ"$§%¡%¨¯©õ1ð ×*Ñ*¨2¯5©5°"·&±&Ó9ˆBØ×Ñ˜R §¡Õ'r   ztest_%dc                   ó<   — 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)r  r  r  Ú_wycheproof_warningsÚ_extra_paramsÚ_id)r'   Úwycheproof_warningsÚextra_paramss      r   r  zTestVectorsWycheproof.__init__4  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_tag<  s   € Ø˜Ñ# qÑ(Ð(r   )r%  Ú
wycheproofzaes_gcm_test.jsonzWycheproof GCMÚtag_size)Ú	group_tag)r   r  )r'   rC  s     r   ÚsetUpzTestVectorsWycheproof.setUp:  s'   € ò	)ô /Ð/GØ/BØ/?Ø:DÀjÐ9QôSˆ�r   c                 ó   — | j                   S r(  )r;  r4   s    r   ÚshortDescriptionz&TestVectorsWycheproof.shortDescriptionD  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 (ú))Úwarningr9  ÚwarningsÚwarnr;  Úcomment)r'   r  rM  s      r   rN  zTestVectorsWycheproof.warnG  s4   € Ø�:Š:˜$×3Ò3ÛØ�MŠM¸4¿8»8ÀRÇZÃZÐPÕQð 4ˆ:r   c                 óx  — 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        $ r1}t        |j                  «      dk(  rdt        |«      v rY d }~y |‚d }~ww xY w)NzWycheproof Encrypt GCM Test #rW   r   úNonce cannot be empty)ÚstrÚidr;  r
   r   rü   r"   r
  rE  r:  r8   rA   ru   r  rZ   ÚmsgÚvalidr&   r*   r   rN  )r'   r  r(   Úer*   r   s         r   Útest_encryptz"TestVectorsWycheproof.test_encryptL  sò   € Ø2´S¸¿¹³ZÑ?ˆŒð	Ü—W‘W˜RŸV™V¤S§\¡\°2·5±5ñ .À"Ç+Á+ð .Ø×,Ñ,ñ.ˆFð 	�‰�b—f‘fÔØ×+Ñ+¨B¯F©FÓ3‰ˆˆCØ�8Š8Ø×Ñ˜R §¡Ô'Ø×Ñ˜S "§&¡&Ô)Ø�I‰I�b�Mð øô ò 	Ü�2—5‘5‹z˜QŠÐ#:¼cÀ!»fÑ#DÜØˆGûð	ús   ŸAC? Ã?	D9Ä%D4Ä2D4Ä4D9c                 óŽ  — 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        $ r1}t        |j                  «      dk(  rdt        |«      v rY d }~y |‚d }~ww xY w# t        $ r |j"                  rJ ‚Y y w xY w)NzWycheproof Decrypt GCM Test #rW   r   rQ  )rR  rS  r;  r
   r   rü   r"   r
  rE  r:  r8   rA   ru   r  ra   r*   r   rU  r&   rT  rN  )r'   r  r(   rV  r)   s        r   Útest_decryptz"TestVectorsWycheproof.test_decrypt^  s  € Ø2´S¸¿¹³ZÑ?ˆŒð	Ü—W‘W˜RŸV™V¤S§\¡\°2·5±5ñ .À"Ç+Á+ð .Ø×,Ñ,ñ.ˆFð 	�‰�b—f‘fÔð	Ø×*Ñ*¨2¯5©5°"·&±&Ó9ˆBð —8’8ˆO�8Ø×Ñ˜R §¡Ô(Ø�I‰I�b�Møô ò 	Ü�2—5‘5‹z˜QŠÐ#:¼cÀ!»fÑ#DÜØˆGûð	ûô ò 	 Ø—x’xÐ�<‘xð	 ús0   ŸAC- Â&D* Ã-	D'Ã6%D"Ä D"Ä"D'Ä*EÅEc                 ó2  — dt        |j                  «      z   | _        t        |j                  «      dk(  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 GCM Test #r   r7   rW   ó    ó   )rR  rS  r;  rA   r
  r*   r
   r   rü   r"   rE  r:  ru   r  r   r2   r8   ra   r   )r'   r  r(   Ú
ct_corrupts       r   Útest_corrupt_decryptz*TestVectorsWycheproof.test_corrupt_decrypts  sÃ   € Ø:¼SÀÇÁ»ZÑGˆŒÜˆr�u‰u‹:˜Š?œc "§%¡%›j¨1šnØÜ—‘˜Ÿ™¤§¡¨r¯u©uñ *¸b¿k¹kð *Ø×(Ñ(ñ*ˆà�‰�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(  )r  rW  rY  r^  )r'   r  s     r   rþ   zTestVectorsWycheproof.runTest}  s?   € à—'‘'ò 	*ˆBØ×Ñ˜bÔ!Ø×Ñ˜bÔ!Ø×%Ñ% bÕ)ñ	*r   N)r¡   r¢   r£   r  rG  rI  rN  rW  rY  r^  rþ   r¤   r   r   r6  r6  2  s-   „ òòSòòRò
ò$ò*Uó*r   r6  c                   ó   — e Zd Zd„ Zd„ Zy)ÚTestVariableLengthc                 óP   — t         j                  j                  | «       || _        y r(  )r  r  r  r:  )r'   r=  s     r   r  zTestVariableLength.__init__‡  s   € Ü×Ñ×"Ñ" 4Ô(Ø)ˆÕr   c                 óº  — d}t        j                  «       }t        d«      D ]—  }dj                  |«      j	                  d«      }t        |«      |z  }t        j                  |t        j                  fd|i| j                  ¤Ž}|j                  |«      \  }}|j                  |«       |j                  |«       Œ™ | j                  |j                  «       d«       y )Ns   0000000000000000é    z{0:04d}zutf-8r    Ú@7b7eb1ffbe67a2e53a912067c0ec8e62ebc7ce4d83490ea7426941349811bdf4)r   r   r9   ÚformatÚencoder	   r
   r"   r:  rZ   ru   r&   re   )	r'   rü   Úhr   r    r   r(   r*   r   s	            r   rþ   zTestVariableLength.runTest‹  sµ   € ØˆÜ�J‰J‹Lˆä˜C“jò 	ˆFØ×$Ñ$ VÓ,×3Ñ3°GÓ<ˆEÜ˜“< &Ñ(ˆDÜ—W‘W˜S¤#§,¡,ÑR°eÐR¸t×?QÑ?QÑRˆFØ×/Ñ/°Ó5‰GˆB�Ø�H‰H�RŒLØ�H‰H�S�Mð	ð 	×Ñ˜Ÿ™›Ð(jÕkr   N)r¡   r¢   r£   r  rþ   r¤   r   r   ra  ra  …  s   „ ò*ólr   ra  c                 ó  — ddl m} | j                  d«      }g }|t        t        «      z  }|t        t
        «      z  }|t        «       gz  }|t        |«      gz  }|t        t        «      z  }|t        «       gz  }| j                  d«      r|t        t        «      z  }|j                  «       rF|t        |d¬«      gz  }|t        d¬«      gz  }| j                  d«      r|t        t        «      z  }|S t        d«       |S )Nr   )Ú_cpu_featuresr<  Ú
slow_testsF)r  z%Skipping test of PCLMULDQD in AES GCM)ÚCrypto.Utilrj  Úgetr   r   r¦   rÉ   r6  r  ra  r  Ú
have_clmulr#  Úprint)Úconfigrj  r<  Útestss       r   Ú	get_testsrr  š  sÿ   € Ý)à Ÿ*™*Ð%:Ó;Ðà€EØ	Œ_œXÓ&Ñ&€EØ	Œ_œ[Ó)Ñ)€EØ	Œk‹mˆ_Ñ€EØ	Ô#Ð$7Ó8Ð9Ñ9€EØ	Œ_Ô5Ó6Ñ6€EØ	Ô Ó"Ð#Ñ#€EØ‡z�z�,ÔØ”Ô!3Ó4Ñ4ˆà×ÑÔ!ØÔ'Ð(;ÀuÔMÐNÑNˆØÔ$¨uÔ5Ð6Ñ6ˆØ�:‰:�lÔ#Ø”_Ô%@ÓAÑAˆEð €Lô 	Ð5Ô6à€Lr   Ú__main__c                  ó>   — t        j                  t        «       «       y r(  )r  Ú	TestSuiterr  r¤   r   r   Úsuiterv  µ  s   € Ü×Ñœ9›;Õ'r   rv  )ÚdefaultTest)*Ú
__future__r   r  Úbinasciir   ÚCrypto.SelfTest.st_commonr   ÚCrypto.SelfTest.loaderr   r   ÚCrypto.Util.py3compatr   r	   ÚCrypto.Cipherr
   ÚCrypto.Hashr   r   r`   r   r   r  r   r¦   rÉ   r  r  r#  Útest_vectors_nistÚ	enumerateÚidxr  Ú
isinstancerR  r4  Úsetattrr6  ra  rr  r¡   rv  Úmainr¤   r   r   ú<module>r…     s¨  ðõ> &ã Ý å 5ß Rç /Ý ß (å %ò8ôQˆx× Ñ ô QôD
R)�(×#Ñ#ô R)ôjK&�(×#Ñ#ô K&ô\'*˜x×0Ñ0ô '*ôT,˜×*Ñ*ô ,ô, (×"3Ñ"3ô ,ñ &Ø)Ø+Ø%Ø Ñ"2Ð3ó	5ò ;ð 9;ð	 ð Ñ&Ø)Ø0Ø%Ø Ñ"2Ð3ó	5ò ;ð 9;ñ	;Ð ñ Ð*Ó+ò G�G€Cˆñ �"�cÔØàó (ñ Ð 	¨C¡°Ô=ÙÐ'¨°S©¸+ÕFð)Gô.P*˜H×-Ñ-ô P*ôfl˜×*Ñ*ô lð* ó ð4 ˆzÒò(à€H‡M�M˜gÖ&ð r   