Ë
    (üàg  ã                   ó^  — d dl Z d dlmZ d dlmZ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 dlmZ d	„ Z G d
„ de j$                  «      Z G d„ de j$                  «      Zd„ Z G d„ de j$                  «      Z G d„ de j$                  «      Zi fd„Zedk(  rd„ Z e j6                  d¬«       yy)é    N)Ú	unhexlify)ÚbÚtobytesÚbchr)Úlong_to_bytes)Úload_test_vectors)Úlist_test_cases)ÚAES)ÚSHAKE128c                 ó^   — 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_OCB.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y)ÚOcbTestsÚkey_128é   Ú	nonce_128é   r   é€   c                 ót  — 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_OCBÚnonce_96r   Úencrypt_and_digestÚdecrypt_and_verifyÚassertEqual)ÚselfÚcipherÚptÚctÚmacÚpt2s         r   Útest_loopback_128zOcbTests.test_loopback_1285   s€   € Ü—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆÜ˜K¨Ó2ˆØ×+Ñ+¨BÓ/‰ˆˆCä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ×'Ñ'¨¨CÓ0ˆØ×Ñ˜˜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!   Úencryptr   r$   ©r%   r&   r(   s      r   Ú
test_noncezOcbTests.test_nonce>   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!OcbTests.test_nonce_must_be_bytesH   s,   € Ø×Ñœ)¤S§W¡W¨d¯l©l¼C¿L¹LØ /ð 	õ 	1r   c           	      óÆ  — | j                  t        t        j                  | j                  t        j
                  t        d«      ¬«       t        dd«      D ]?  }t        j                  | j                  t        j
                  | j                  d | ¬«       ŒA | j                  t        t        j                  | j                  t        j
                  | j                  ¬«       y )NÚ r   é   r   )	r3   Ú
ValueErrorr
   r   r   r    r   Úranger   )r%   r   s     r   Útest_nonce_lengthzOcbTests.test_nonce_lengthL   sœ   € à×Ñœ*¤c§g¡g¨t¯|©|¼S¿\¹\Ü ! "£ð 	ô 	'ô ˜A˜r“lò 	JˆFÜ�G‰G�D—L‘L¤#§,¡,°d·i±iÀÀÐ6HÖIð	Jð 	×Ñœ*¤c§g¡g¨t¯|©|¼S¿\¹\Ø $§	¡	ð 	õ 	+r   c                 ó  — t        j                  | j                  t         j                  | j                  ¬«      }| j                  |j                  t         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$   Ú
block_sizer   ÚlenÚassertNotEqual©r%   r&   Únonce1Únonce2s       r   Útest_block_size_128zOcbTests.test_block_size_128X   sœ   € Ü—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ×Ñ˜×*Ñ*¬C¯N©NÔ;ô —‘˜Ÿ™¤s§|¡|Ó4×:Ñ:ˆÜ—‘˜Ÿ™¤s§|¡|Ó4×:Ñ:ˆØ×Ñœ˜V› bÔ)Ø×Ñ˜F FÕ+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 r>   )	r
   r   r   r    r!   r$   r   rA   rB   rC   s       r   Útest_nonce_attributezOcbTests.test_nonce_attributeb   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)r3   r4   r
   r   r   r    r!   r5   s    r   Útest_unknown_parametersz OcbTests.test_unknown_parametersl   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 ]r  }t        j                  | j                  t         j                  | j                  ¬«      } t        ||«      t        d«      «      }| j                  |t        d«      «       Œt y )N©r.   Údecryptr   r8   )r
   r   r   r    r!   Úgetattrr   r$   )r%   Úfuncr&   Úresults       r   Útest_null_encryption_decryptionz(OcbTests.test_null_encryption_decryptionw   sZ   € Ø(ò 	,ˆDÜ—W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}ÔMˆFØ*”W˜V TÓ*¬1¨R«5Ó1ˆFØ×Ñ˜V¤Q r£UÕ+ñ	,r   c                 óü  — t        j                  | j                  t         j                  | j                  ¬«      }|j                  t        d«      «       | j                  t        |j                  t        d«      «       t        j                  | j                  t         j                  | j                  ¬«      }|j                  t        d«      «       | j                  t        |j
                  t        d«      «       y )Nr   Úxyz)
r
   r   r   r    r!   r.   r   r3   r4   rP   ©r%   r&   s     r   Útest_either_encrypt_or_decryptz'OcbTests.test_either_encrypt_or_decrypt}   s’   € Ü—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�‰”q˜“xÔ Ø×Ñœ) V§^¡^´Q°u³XÔ>ä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�‰”q˜“xÔ Ø×Ñœ) V§^¡^´Q°u³XÕ>r   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!   r3   r4   r.   rP   rW   s     r   Útest_data_must_be_bytesz OcbTests.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 )NrJ   ©r   Úmac_lené   é   r   r   )r3   r:   r
   r   r   r    r!   r;   r"   r   r$   rA   )r%   r]   r&   Ú_r)   s        r   Útest_mac_lenzOcbTests.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   r9   )ÚCrypto.Util.strxorrc   r
   r   r   r    r!   r"   r   r3   r:   r#   )r%   rc   r&   r(   r)   Úinvalid_macs         r   Útest_invalid_maczOcbTests.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OcbTests.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                  |«       Œ t        d«      }	 |||«      D ]  }|	|j                  |«      z  }	Œ |	|j                  «       z  }	| j                  ||	«       |j                  |«       ŒÀ dD ]Í  }t        j                  | j                  t        j                  | j
                  ¬«      } |||«      D ]  }|j                  |«       Œ t        d«      }
 |||«      D ]  }|
|j                  |«      z  }
Œ |
|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;   rA   )r   Úchunk_lengthÚis      r   Úbreak_upz.OcbTests.test_message_chunks.<locals>.break_up¾   s9   € Ü49¸!¼SÀ»YØ ó5"ö #¨q�D˜˜1˜\™>Ò*ò #ð #ùò #s   ™+)
r9   é   é   rJ   é
   é   r   é(   éP   r   r8   )r   r
   r   r   r    r!   Úupdater"   r   rP   r$   Úverifyr.   ri   )r%   Ú	auth_datar   r&   Ú
ciphertextÚref_macrr   rp   Úchunkr*   Úct2s              r   Útest_message_chunkszOcbTests.test_message_chunks³   sÍ  € ô #Ð#7¸Ó=ˆ	Ü" ;°Ó4ˆ	ä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�‰�iÔ Ø$×7Ñ7¸	ÓBÑˆ
�Gò	#ð
 @ò 	#ˆLä—W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}ÔMˆFá! )¨\Ó:ò %�Ø—‘˜eÕ$ð%ä�B“%ˆCÙ! *¨lÓ;ò -�Ø�v—~‘~ eÓ,Ñ,‘ð-à�6—>‘>Ó#Ñ#ˆCØ×Ñ˜Y¨Ô,Ø�M‰M˜'Õ"ð	#ð @ò 	7ˆLä—W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}ÔMˆFá! )¨\Ó:ò %�Ø—‘˜eÕ$ð%ä�B“%ˆCÙ! )¨\Ó:ò -�Ø�v—~‘~ eÓ,Ñ,‘ð-à�6—>‘>Ó#Ñ#ˆCØ×Ñ˜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                  «       z   }|j                  «       }t	        j
                  |t        j                  |¬«      }d|d d d|d d |j                  |«       d|d d |j                  |«      |j                  «       z   }	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   ÿÿÿrt   )Ú	bytearrayr   r!   r   r
   r   r    ry   r.   ri   r$   r   r#   )r%   Úkey_baÚnonce_baÚ	header_baÚdata_baÚcipher1r(   r   Úcipher2Úct_testÚtag_testÚcipher4Úpt_tests                r   Útest_bytearrayzOcbTests.test_bytearrayÞ   sô  € ô ˜4Ÿ<™<Ó(ˆÜ˜TŸ]™]Ó+ˆÜ˜dŸi™iÓ(ˆ	Ü˜DŸI™IÓ&ˆä—'‘'˜$Ÿ,™,ÜŸ,™,Ø $§¡ô/ˆð 	�‰�t—y‘yÔ!Ø�_‰_˜TŸY™YÓ'¨'¯/©/Ó*;Ñ;ˆØ�n‰nÓˆä—'‘'˜&ÜŸ,™,Ø (ô*ˆð %ˆˆr�ˆ
Ø&ˆ��!ˆØ�‰�yÔ!Ø'ˆ	�"�1ˆØ—/‘/ 'Ó*¨W¯_©_Ó->Ñ>ˆØ%ˆ��ˆØ—>‘>Ó#ˆà×Ñ˜˜WÔ%Ø×Ñ˜˜hÔ'Ø×Ñ˜Ÿ™¨¯©Ô6ô ˜4Ÿ<™<Ó(ˆÜ˜TŸ]™]Ó+ˆÜ˜dŸi™iÓ(ˆ	Øä—'‘'˜&ÜŸ,™,Ø (ô*ˆð %ˆˆr�ˆ
Ø&ˆ��!ˆØ�‰�yÔ!Ø'ˆ	�"�1ˆØ×,Ñ,¬Y°wÓ-?ÄÈ8ÓATÓUˆà×Ñ˜Ÿ™ GÕ,r   c                 óf  — t        t        | j                  «      «      }t        t        | j                  «      «      }t        t        | j                  «      «      }t        t        | j                  «      «      }t        j                  | j                  t
        j                  | j                  ¬«      }|j                  | j                  «       |j                  | j                  «      |j                  «       z   }|j                  «       }t        j                  |t
        j                  |¬«      }d|d d d|d d |j                  |«       d|d d |j                  |«      |j                  «       z   }	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    ry   r.   ri   r$   r   r#   )r%   Úkey_mvÚnonce_mvÚ	header_mvÚdata_mvrˆ   r(   r   r‰   rŠ   r‹   rŒ   r�   s                r   Útest_memoryviewzOcbTests.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¯_©_Ó->Ñ>ˆØ%ˆ��ˆØ—>‘>Ó#ˆà×Ñ˜˜WÔ%Ø×Ñ˜˜hÔ'Ø×Ñ˜Ÿ™¨¯©Ô6ô œI d§l¡lÓ3Ó4ˆÜœi¨¯©Ó6Ó7ˆÜœy¨¯©Ó3Ó4ˆ	Øä—'‘'˜&ÜŸ,™,Ø (ô*ˆð %ˆˆr�ˆ
Ø&ˆ��!ˆØ�‰�yÔ!Ø'ˆ	�"�1ˆØ×,Ñ,¬Z¸Ó-@Ä*ÈXÓBVÓWˆà×Ñ˜Ÿ™ GÕ,r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r!   r   r+   r0   r6   r<   rF   rH   rM   rT   rX   rZ   ra   rf   rl   r€   rŽ   r•   © r   r   r   r   /   sy   „ á˜Y¨Ó+€GÙ˜k¨2Ó.€HÙ˜& #Ó&€Dò"ò8ò1ò
+ò,ò,ò	!ò,ò?òJò'ò&	'ò"ò)7òV--ó^--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d„ Zd„ Zy)ÚOcbFSMTestsr   r   r   r   r   r   c                 óÌ  — t        j                  | j                  t         j                  | j                  ¬«      }|j                  | j                  «      }||j                  «       z  }|j                  «       }t        j                  | j                  t         j                  | j                  ¬«      }|j                  |«       |j                  «        |j                  |«       y r-   )
r
   r   r   r    r!   r.   r   ri   rP   rz   )r%   r&   r(   r)   s       r   Ú-test_valid_init_encrypt_decrypt_digest_verifyz9OcbFSMTests.test_valid_init_encrypt_decrypt_digest_verifyC  s˜   € ô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�^‰^˜DŸI™IÓ&ˆØ
ˆf�n‰nÓÑˆØ�m‰m‹oˆô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�‰�rÔØ�‰ÔØ�‰�cÕr   c                 óÄ  — t        j                  | j                  t         j                  | j                  ¬«      }|j                  | j                  «      }| j                  t        |j                  «       t        j                  | j                  t         j                  | j                  ¬«      }|j                  |«       | j                  t        |j                  «       y r-   )r
   r   r   r    r!   r.   r   r3   r4   ri   rP   rz   r/   s      r   Ú/test_invalid_init_encrypt_decrypt_digest_verifyz;OcbFSMTests.test_invalid_init_encrypt_decrypt_digest_verifyS  sŽ   € ô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�^‰^˜DŸI™IÓ&ˆØ×Ñœ) V§]¡]Ô3ô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�‰�rÔØ×Ñœ) V§]¡]Õ3r   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!   ry   r   ri   rz   ©r%   r&   r)   s      r   Ú$test_valid_init_update_digest_verifyz0OcbFSMTests.test_valid_init_update_digest_verifya  s   € ô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�‰�d—i‘iÔ Ø�m‰m‹oˆô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�‰�d—i‘iÔ Ø�‰�cÕr   c                 óP  — t        j                  | j                  t         j                  | j                  ¬«      }|j                  | j                  «       |j                  | j                  «      }||j                  «       z  }|j                  «       }t        j                  | j                  t         j                  | j                  ¬«      }|j                  | j                  «       |j                  |«       |j                  «        |j                  |«       t        j                  | j                  t         j                  | j                  ¬«      }|j                  | j                  «       |j                  | j                  d d «      }|j                  | j                  dd  «      \  }}t        j                  | j                  t         j                  | j                  ¬«      }|j                  | j                  «       |j                  |«       |j                  ||«       y )Nr   rs   )r
   r   r   r    r!   ry   r   r.   ri   rP   rz   r"   r#   )r%   r&   r(   r)   Úct1r   s         r   Útest_valid_full_pathz OcbFSMTests.test_valid_full_patho  sp  € ô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�‰�d—i‘iÔ Ø�^‰^˜DŸI™IÓ&ˆØ
ˆf�n‰nÓÑˆØ�m‰m‹oˆô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�‰�d—i‘iÔ Ø�‰�rÔØ�‰ÔØ�‰�cÔô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�‰�d—i‘iÔ Ø�n‰n˜TŸY™Y r¨˜]Ó+ˆØ×,Ñ,¨T¯Y©Y°q°r¨]Ó;‰ˆˆSô —‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�‰�d—i‘iÔ Ø�‰�sÔØ×!Ñ! # sÕ+r   c                 óZ  — t        j                  | j                  t         j                  | j                  ¬«      }|j                  | j                  «       |j                  | j                  «       |j                  «        | j                  t        |j                  | j                  «       y r-   )
r
   r   r   r    r!   ry   r   r.   r3   r4   rW   s     r   Ú test_invalid_encrypt_after_finalz,OcbFSMTests.test_invalid_encrypt_after_final�  óg   € Ü—‘˜Ÿ™¤s§|¡|Ø#Ÿ}™}ô.ˆà�‰�d—i‘iÔ Ø�‰�t—y‘yÔ!Ø�‰ÔØ×Ñœ) V§^¡^°T·Y±YÕ?r   c                 óZ  — t        j                  | j                  t         j                  | j                  ¬«      }|j                  | j                  «       |j                  | j                  «       |j                  «        | j                  t        |j                  | j                  «       y r-   )
r
   r   r   r    r!   ry   r   rP   r3   r4   rW   s     r   Ú test_invalid_decrypt_after_finalz,OcbFSMTests.test_invalid_decrypt_after_final—  r¨   r   c                 ó˜   — t        j                  | j                  t         j                  | j                  ¬«      }|j                  «        y r-   )r
   r   r   r    r!   ri   rW   s     r   Útest_valid_init_digestz"OcbFSMTests.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!   ri   rz   r¡   s      r   Útest_valid_init_verifyz"OcbFSMTests.test_valid_init_verify¤  sU   € ä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�m‰m‹oˆä—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�‰�cÕr   c                 óÊ  — dD ]Þ  }d t        d«      | j                  | j                  t        d«      z   fD ]ª  }t        j                  | j                  t        j
                  | j                  ¬«      }|�|j                  |«       t        ||«      } || j                  «        || j                  «        || j                  «        || j                  «        |«        Œ¬ Œà y )NrO   Ú333Ú3r   )	r   r   r
   r   r   r    r!   ry   rQ   )r%   Úmethod_namer{   r&   Úmethods        r   Ú&test_valid_multiple_encrypt_or_decryptz2OcbFSMTests.test_valid_multiple_encrypt_or_decrypt¬  sµ   € Ø/ò 	ˆKØ"¤A e£H¨d¯i©iØ"Ÿi™i¬!¨C«&Ñ0ð2ò �	äŸ™ §¡¬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   é   é   )r
   r   r   r    r!   ry   r   ri   r;   r$   rz   )r%   r&   Ú	first_macÚxs       r   Ú$test_valid_multiple_digest_or_verifyz0OcbFSMTests.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!   ry   r   r"   r#   r$   )r%   r&   r(   r)   r'   s        r   Ú0test_valid_encrypt_and_digest_decrypt_and_verifyz<OcbFSMTests.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)rO   )rP   r.   )TFr   )
r
   r   r   r    r!   ry   r   rQ   r3   r4   )r%   Úmethod1_nameÚmethod2_nameÚassoc_data_presentr&   s        r   Ú#test_invalid_mixing_encrypt_decryptz/OcbFSMTests.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                  «        | j                  t        t        ||«      | j                  «       t        j                  | j                  t         j                  | j                  ¬«      }|j                  | j                  «       Œù y )N)r.   ry   r   )r
   r   r   r    r!   r.   r   ri   r3   r4   rQ   r"   )r%   r²   r&   s      r   Ú+test_invalid_encrypt_or_update_after_digestz7OcbFSMTests.test_invalid_encrypt_or_update_after_digestâ  s¤   € Ø.ò 		1ˆKÜ—W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}ÔMˆFØ�N‰N˜4Ÿ9™9Ô%Ø�N‰NÔØ�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                  «       z  }|j                  «       }dD �]  }t        j                  | j                  t         j                  | j                  ¬«      }|j                  |«       |j                  «        |j                  |«       | j                  t        t        ||«      | j                  «       t        j                  | j                  t         j                  | j                  ¬«      }|j                  ||«       | j                  t        t        ||«      | j                  «       �Œ y )Nr   )rP   ry   )r
   r   r   r    r!   r.   r   ri   rP   rz   r3   r4   rQ   r#   )r%   r&   r(   r)   r²   s        r   Ú+test_invalid_decrypt_or_update_after_verifyz7OcbFSMTests.test_invalid_decrypt_or_update_after_verifyî  s  € Ü—‘˜Ÿ™¤s§|¡|¸4¿=¹=ÔIˆØ�^‰^˜DŸI™IÓ&ˆØ
ˆf�n‰nÓÑˆØ�m‰m‹oˆà.ó 	)ˆKÜ—W‘W˜TŸ\™\¬3¯<©<¸t¿}¹}ÔMˆFØ�N‰N˜2ÔØ�N‰NÔØ�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   r›   r›   =  so   „ á˜Y¨Ó+€GÙ˜k¨2Ó.€HÙ˜& #Ó&€Dòò 4òò,ò@@ò@òò
òò%ò
(ò-ò
1ó)r   r›   c                 ó:  — t        d«      | dz  dz
  z  t        |«      z   }d}t        d«      D �]€  }t        d«      |z  }t        d|z  dz   |dz  «      }t        j                  |t        j
                  ||dz  ¬«      }|j                  |«       ||j                  |«      |j                  «       z   |j                  «       z   z  }t        d|z  dz   |dz  «      }t        j                  |t        j
                  ||dz  ¬«      }||j                  |«      |j                  «       z   |j                  «       z   z  }t        d|z  dz   |dz  «      }t        j                  |t        j
                  ||dz  ¬«      }|j                  |«       ||j                  «       |j                  «       z   z  }�Œƒ t        d	|dz  «      }t        j                  |t        j
                  ||dz  ¬«      }|j                  |«       |j                  «       |j                  «       z   S )
z.Implement the algorithm at page 18 of RFC 7253r   r_   r9   r   r   rt   r\   rs   i�  )	r   r;   r   r
   r   r    ry   r.   ri   )	ÚkeylenÚtaglenÚnoncelenÚkeyÚCrq   ÚSÚNr&   s	            r   Úalgo_rfc7253rÎ     s¾  € ô ˆq‹'�V˜q‘[ 1‘_Ñ
%¬¨V«Ñ
4€CØ€Aä�3‹Zó 0ˆÜ�‹G�a‰Kˆä˜!˜a™% !™) X°¡]Ó3ˆÜ—‘˜œcŸl™l°!¸VÀq¹[ÔIˆØ�‰�aÔØ	ˆV�^‰^˜AÓ §¡Ó!1Ñ1°F·M±M³OÑCÑCˆä˜!˜a™% !™) X°¡]Ó3ˆÜ—‘˜œcŸl™l°!¸VÀq¹[ÔIˆØ	ˆV�^‰^˜AÓ §¡Ó!1Ñ1°F·M±M³OÑCÑCˆä˜!˜a™% !™) X°¡]Ó3ˆÜ—‘˜œcŸl™l°!¸VÀq¹[ÔIˆØ�‰�aÔØ	ˆV�^‰^Ó §¡£Ñ/Ñ/Šð0ô" 	�c˜8 q™=Ó)€AÜ�W‰W�Sœ#Ÿ,™,¨a¸À1¹ÔE€FØ
‡M�M�!ÔØ�>‰>Ó˜fŸm™m›oÑ-Ð-r   c                   ó.   — e Zd ZdZdZdZdZd„ Zd„ Zd„ Z	y)	ÚOcbRfc7253TestÚ 000102030405060708090A0B0C0D0E0F))ÚBBAA99887766554433221100r8   r8   Ú 785407BFFFC8AD9EDCC5520AC9111EE6)ÚBBAA99887766554433221101Ú0001020304050607rÕ   Ú06820B3657B6F615A5725BDA0D3B4EB3A257C9AF1F8F03009)ÚBBAA99887766554433221102rÕ   r8   Ú 81017F8203F081277152FADE694A0A00)ÚBBAA99887766554433221103r8   rÕ   Ú045DD69F8F5AAE72414054CD1F35D82760B2CD00D2F99BFA9)ÚBBAA99887766554433221104rÑ   rÑ   Ú@571D535B60B277188BE5147170A9A22C3AD7A4FF3835B8C5701C1CCEC8FC3358)ÚBBAA99887766554433221105rÑ   r8   Ú 8CF761B6902EF764462AD86498CA6B97)ÚBBAA99887766554433221106r8   rÑ   Ú@5CE88EC2E0692706A915C00AEB8B2396F40E1C743F52436BDF06D8FA1ECA343D)ÚBBAA99887766554433221107Ú0000102030405060708090A0B0C0D0E0F1011121314151617râ   ÚP1CA2207308C87C010756104D8840CE1952F09673A448A122C92C62241051F57356D7F3C90BB0E07F)ÚBBAA99887766554433221108râ   r8   Ú 6DC225A071FC1B9F7C69F93B0F1E10DE)ÚBBAA99887766554433221109r8   râ   ÚP221BD0DE7FA6FE993ECCD769460A0AF2D6CDED0C395B1C3CE725F32494B9F914D85C0B1EB38357FF)ÚBBAA9988776655443322110AÚ@000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1Fré   Ú`BD6F6C496201C69296C11EFD138A467ABD3C707924B964DEAFFC40319AF5A48540FBBA186C5553C68AD9F592A79A4240)ÚBBAA9988776655443322110Bré   r8   Ú FE80690BEE8A485D11F32965BC9D2A32)ÚBBAA9988776655443322110Cr8   ré   Ú`2942BFC773BDA23CABC6ACFD9BFD5835BD300F0973792EF46040C53F1432BCDFB5E1DDE3BC18A5F840B52E653444D5DF)ÚBBAA9988776655443322110DÚP000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627rð   ÚpD5CA91748410C1751FF8A2F618255B68A0A12E093FF454606E59F9C1D0DDC54B65E8628E568BAD7AED07BA06A4A69483A7035490C5769E60)ÚBBAA9988776655443322110Erð   r8   Ú C5CD9D1850C141E358649994EE701B68)ÚBBAA9988776655443322110Fr8   rð   Úp4412923493C57D5DE0D700F753CCE0D1D2D95060122E9F15A5DDBFC5787E50B5CC55EE507BCB084E479AD363AC366B95A98CA5F3000B1479)Ú 0F0E0D0C0B0A09080706050403020100rï   rð   rð   Úh1792A4E31E0755FB03E31B22116E6C2DDF9EFD6E33D536F1A0124B0A55BAE884ED93481529C76B6AD0C515F4D1CDD4FDAC4F02AA)	)r   r   Ú 67E944D23256C5E0B6C61FA22FDF1EA2)éÀ   r   Ú F673F2C3E7174AAE7BAE986CA9F29E17)é   r   Ú D90EB8E9C977C88B79DD793D7FFA161C)r   é`   Ú77A3D8E73589158D25D01209)rù   rý   Ú05D56EAD2752C86BE6932C5E)rû   rý   Ú5458359AC23B0CBA9E6330DD)r   é@   Ú192C9B7BD90BA06A)rù   r  Ú0066BC6E0EF34E24)rû   r  Ú7D4EA5D445501CBEc           	      óà  — t        t        | j                  «      «      }| j                  D �];  }|D �cg c]  }t        t        |«      «      ‘Œ c}\  }}}}|d d |dd  }}t	        j
                  |t        j                  |¬«      }	|	j                  |«       |	j                  |«      |	j                  «       z   }
| j                  ||
«       | j                  ||	j                  «       «       t	        j
                  |t        j                  |¬«      }	|	j                  |«       |	j                  |«      |	j                  «       z   }| j                  ||«       |	j                  |«       �Œ> y c c}w )Niðÿÿÿr   )r   r   Útv1_keyÚtv1r
   r   r    ry   r.   r$   ri   rP   rz   )r%   rÊ   Útvr¹   r   Úaadr'   r(   Úmac_tagr&   r   r*   s               r   Útest1zOcbRfc7253Test.test1¾  s  € Üœ˜$Ÿ,™,›Ó(ˆØ—(‘(ó 	#ˆBØ;=Ö!>°a¤)¬A¨a«D¥/Ò!>ÑˆE�3˜˜BØ˜T˜c˜( B s t H�ˆBä—W‘W˜S¤#§,¡,°eÔ<ˆFØ�M‰M˜#ÔØ—.‘. Ó$ v§~¡~Ó'7Ñ7ˆCØ×Ñ˜R Ô%Ø×Ñ˜W f§m¡m£oÔ6ä—W‘W˜S¤#§,¡,°eÔ<ˆFØ�M‰M˜#ÔØ—.‘. Ó$ v§~¡~Ó'7Ñ7ˆCØ×Ñ˜R Ô%Ø�M‰M˜'Ö"ñ	#ùÚ!>s   ³E+c                 ó˜  — | j                   D �cg c]  }t        t        |«      «      ‘Œ c}\  }}}}}|d d |dd  }}t        j                  |t        j
                  |d¬«      }|j                  |«       |j                  |«      |j                  «       z   }	| j                  ||	«       | j                  ||j                  «       «       t        j                  |t        j
                  |d¬«      }|j                  |«       |j                  |«      |j                  «       z   }
| j                  ||
«       |j                  |«       y c c}w )Niôÿÿÿr   r\   )Útv2r   r   r
   r   r    ry   r.   r$   ri   rP   rz   )r%   r¹   rÊ   r   r	  r'   r(   r
  r&   r   r*   s              r   Útest2zOcbRfc7253Test.test2Ð  s  € à<@¿H¹HÖ"E°q¤9¬Q¨q«T¥?Ò"EÑˆˆU�C˜˜RØ˜˜#�h  3 4 ˆGˆä—‘˜œcŸl™l°%ÀÔDˆØ�‰�cÔØ�n‰n˜RÓ  6§>¡>Ó#3Ñ3ˆØ×Ñ˜˜SÔ!Ø×Ñ˜ &§-¡-£/Ô2ä—‘˜œcŸl™l°%ÀÔDˆØ�‰�cÔØ�n‰n˜RÓ  6§>¡>Ó#3Ñ3ˆØ×Ñ˜˜SÔ!Ø�‰�gÕùò #Fs   �Ec                 ó�   — | j                   D ]7  \  }}}t        ||d«      }| j                  t        t	        |«      «      |«       Œ9 y )Nrý   )Útv3rÎ   r$   r   r   )r%   rÇ   rÈ   rS   Úresult2s        r   Útest3zOcbRfc7253Test.test3á  sC   € Ø&*§h¡hò 	<Ñ"ˆF�F˜FÜ" 6¨6°2Ó6ˆGØ×ÑœY¤q¨£yÓ1°7Õ;ñ	<r   N)
r–   r—   r˜   r  r  r  r  r  r  r  r™   r   r   rÐ   rÐ     s/   „ ð 1€Gðs
€Cðv

€Cð 
€Cò#ò$ó"<r   rÐ   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)Ú
OcbDkgTestz9Test vectors from https://gitlab.com/dkg/ocb-test-vectorsc           	      ó:  — g }dD ]V  }dD ]O  }t        dd||fz  d||fz  i «      }|€ Œ$|d   j                  }|dd  D ]  }||_        |j                  |«       Œ ŒQ ŒX |D ]¹  }|j                  |j                  |j                  |j
                  |j                  f\  }}}	}
}t        |«      t        |
«      z
  }t        j                  |t        j                  ||¬«      }|j                  |	«       |j                  |
«      \  }}| j                  |||z   «       Œ» y )	N)r9   rs   )éh   ép   éx   )ÚCipherr
   ztest-vector-%d-nonce%d.txtzDKG tests, %d, %d bitsr   r9   r\   )r   ÚkÚappendÚnÚaÚpÚcrA   r
   r   r    ry   r"   r$   )r%   ÚtvsÚfiÚnbÚtv_filerÊ   r  r  r  r  r  r  r]   r&   Úc_outÚtag_outs                   r   Útest_1_2zOcbDkgTest.test_1_2ê  s(  € ØˆØò 	#ˆBØ%ò 
#�Ü+Ð,=Ø,HÈBÐPRÈ8Ñ,SØ,DÈÈBÀxÑ,OØ,.ó0�ð �?ÙØ˜a‘j—l‘l�Ø! ! "˜+ò #�BØ�B”DØ—J‘J˜r•Nñ#ñ
#ð	#ð ò 	1ˆBØŸD™D "§$¡$¨¯©¨b¯d©d°B·D±DÐ8‰MˆAˆq�!�Q˜Ü˜!“fœs 1›v‘oˆGÜ—W‘W˜Q¤§¡°A¸wÔGˆFØ�M‰M˜!ÔØ#×6Ñ6°qÓ9‰NˆE�7Ø×Ñ˜Q ¨¡Õ0ñ	1r   c                 ób  ‡ — ˆ 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d«        |dddd«        |dddd«        |dddd«        |dddd«        |dddd«        |dddd«        |dd	dd«        |dd	dd«        |dd	dd«        |dddd«        |dddd«        |dddd«        |dddd«        |dddd«        |dddd«        |dd	dd«        |dd	dd «        |dd	dd!«        |dddd"«        |dddd#«        |dddd$«       y )%Nc                 óV   •— t        | ||«      }‰j                  |t        |«      «       y ©N)rÎ   r$   r   )rÇ   rÈ   rÉ   ÚexprS   r%   s        €r   Úcheckz OcbDkgTest.test_3.<locals>.check  s%   ø€ Ü! &¨&°(Ó;ˆFØ×Ñ˜V¤Y¨s£^Õ4r   r   r  Ú C47F5F0341E15326D4D1C46F47F05062rù   Ú 95B9167A38EB80495DFC561A8486E109rû   Ú AFE1CDDB97028FD92F8FB3C8CFBA7D83rý   ÚF471B4983BA80946DF217A54Ú5AE828BC51C24D85FA5CC7B2Ú8C8335982E2B734616CAD14Cr  ÚB553F74B85FD1E5BÚ3B49D20E513531F9ÚED6DA5B1216BF8BBr  Ú CA8AFCA031BAC3F480A583BD6C50A547Ú D170C1DF356308079DA9A3F619147148Ú 57F94381F2F9231EFB04AECD323757C3Ú3A618B2531ED39F260C750DCÚ9071EB89FEDBADDA88FD286EÚFDF0EFB97F21A39AC4BAB5ACÚFAB2FF3A8DD82A13ÚAC01D912BD0737D3Ú9D1FD0B500EA4ECFr  Ú 9E043A7140A25FB91F43BCC9DD7E0F46Ú 680000E53908323A7F396B955B8EC641Ú 8304B97FAACDA56E676602E1878A7E6FÚ81F978AC9867E825D339847DÚEFCF2D60B24926ADA48CF5B1Ú84961DC56E917B165E58C174Ú227AEE6C9D905A61Ú541DE691B9E1A2F9ÚB0E761381C7129FCr™   )r%   r+  s   ` r   Útest_3zOcbDkgTest.test_3  s£  ø€ ô	5ñ
 	ˆc�3˜Ð?Ô@Ùˆc�3˜Ð?Ô@Ùˆc�3˜Ð?Ô@Ùˆc�2�sÐ6Ô7Ùˆc�2�sÐ6Ô7Ùˆc�2�sÐ6Ô7Ùˆc�2�sÐ.Ô/Ùˆc�2�sÐ.Ô/Ùˆc�2�sÐ.Ô/ñ 	ˆc�3˜Ð?Ô@Ùˆc�3˜Ð?Ô@Ùˆc�3˜Ð?Ô@Ùˆc�2�sÐ6Ô7Ùˆc�2�sÐ6Ô7Ùˆc�2�sÐ6Ô7Ùˆc�2�sÐ.Ô/Ùˆc�2�sÐ.Ô/Ùˆc�2�sÐ.Ô/ñ 	ˆc�3˜Ð?Ô@Ùˆc�3˜Ð?Ô@Ùˆc�3˜Ð?Ô@Ùˆc�2�sÐ6Ô7Ùˆc�2�sÐ6Ô7Ùˆc�2�sÐ6Ô7Ùˆc�2�sÐ.Ô/Ùˆc�2�sÐ.Ô/Ùˆc�2�sÐ.Õ/r   c                 ó~  — t        d«      }t        d«      }t        d«      }t        d«      }t        d«      }t        |«      t        |«      z
  }t        d«      }t        j                  |t        j                  |d d |¬«      }|j                  |«       |j                  |«      \  }	}
| j                  ||	|
z   «       y )NÚEEDDCCBBAA9988776655443322110Drö   rð   Úh07E903BFC49552411ABC865F5ECE60F6FAD1F5A9F14D3070FA2F1308A563207FFE14C1EEA44B22059C7484319D8A2C53C236A7B3ÚhBA015C4E5AE54D76C890AE81BD40DC5703EDC30E8AC2A58BC5D8FA4D61C5BAE6C39BEAC435B2FD56A2A5085C1B135D770C8264B7éÿÿÿÿr\   )r   rA   r
   r   r    ry   r"   r$   )r%   r   rÊ   ÚAÚPrË   r]   Úbuggy_resultr&   ÚC_out2Útag_out2s              r   Útest_2_bugfixzOcbDkgTest.test_2_bugfix(  s¿   € ÜÐ:Ó;ˆÜÐ:Ó;ˆÜð 9ó :ˆäð 9ó :ˆäð !ó "ˆô �a“&œ3˜q›6‘/ˆô
 !ð ",ó -ˆô —‘˜œcŸl™l°%¸¸°*ÀgÔNˆØ�‰�aÔØ!×4Ñ4°QÓ7Ñˆ�Ø×Ñ˜ v°Ñ'8Õ9r   N)r–   r—   r˜   Ú__doc__r&  rG  rR  r™   r   r   r  r  ç  s   „ ÙCò1ò.%0óN:r   r  c                 óš   — g }|t        t        «      z  }|t        t        «      z  }|t        t        «      z  }|t        t        «      z  }|S r)  )r	   r   r›   rÐ   r  )ÚconfigÚtestss     r   Ú	get_testsrW  A  sH   € Ø€EØ	Œ_œXÓ&Ñ&€EØ	Œ_œ[Ó)Ñ)€EØ	Œ_œ^Ó,Ñ,€EØ	Œ_œZÓ(Ñ(€EØ€Lr   Ú__main__c                  ó<   — t        j                  t        «       «      S r)  )ÚunittestÚ	TestSuiterW  r™   r   r   Úsuiter\  K  s   € Ü×!Ñ!¤)£+Ó.Ð.r   r\  )ÚdefaultTest)rZ  Úbinasciir   ÚCrypto.Util.py3compatr   r   r   ÚCrypto.Util.numberr   ÚCrypto.SelfTest.loaderr   ÚCrypto.SelfTest.st_commonr	   ÚCrypto.Cipherr
   ÚCrypto.Hashr   r   ÚTestCaser   r›   rÎ   rÐ   r  rW  r–   r\  Úmainr™   r   r   ú<module>rg     s¬   ðó> Ý ç 2Ñ 2Ý ,Ý 4Ý 5å Ý  ò8ôK-ˆx× Ñ ô K-ô\B)�(×#Ñ#ô B)òJ.ô:E<�X×&Ñ&ô E<ôPW:�×"Ñ"ô W:ðt ó ð ˆzÒò/à€H‡M�M˜gÖ&ð r   