403Webshell
Server IP : 121.121.20.254  /  Your IP : 216.73.216.202
Web Server : Microsoft-IIS/10.0
System : Windows NT WEB-SERVER 10.0 build 20348 (Windows Server 2022) AMD64
User : IUSR ( 0)
PHP Version : 8.3.28
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /Python315/Lib/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /Python315/Lib/test/__pycache__/test_hmac.cpython-315.opt-1.pyc
R
>lqj��c
�	�Qs]PHs]PHs]PHs]PHs]PHs]PHs]PHs]QH G	s
]QH,Gs]QH4GsGs]QH4Gs]QH4GsGs]QHLGsGsGsGs]QH`Gs]QHhGs]PHrs]Q	HrGs]PH�s!Q
s"QQ2s#Q
Q\#2s$\OJ2QQ\#22s&\'2s(QQ2s)QQ2s*Qs+Qs,QQ\#\)\*2s-QQ\#\)\*2s.\O^2QQ\)\*22s0QQ\&\)\*2s1QQ 2s2Q!Q"\)\*\22s3Q#Q$\$\32s4Q%Q&\0\32s5Q'Q(\1\32s6Q)Q*\\32s7Q+Q,\$\2s8Q-Q.\-\4\\7\8\Or2s:Q/Q0\-\4\\7\8\Or2s;Q1Q2\.\4\\7\8\Or2s<Q3Q4\.\4\\7\8\Or2s=Q5Q6\5\\7\Or2s>Q7Q8\6\\7\Or2s?Q9Q:\)\*2s@Q;Q<\)\*\22sAQ=Q>\$\@\A2sBQ?Q@\-\B\Or2sCQAQB\.\B\Or2sDQCQD\@\A2sEQEQF\0\E\Or2sFQGQH\1\E\Or2sGQIQJ\)2sH\O�QK2QLQM\-\$\H\Or22sJ\O�QK2QNQO\0\H\Or22sLQPQQ\1\H\Or2sMQRQS2sN\"2QTQU\$\N\Or22sO\O�QK2QVQW\N\Or22sPQXQY\&\N\Or2sQQZQ[2sR\O�QK2Q\Q]\R\Or22sSQ^Q_\R2sT\O�QK2Q`Qa\T\Or22sU\OJ2QbQc\T\Or22sVQdQe2sWQfQg\W\Or2sX\O^2QhQi\W\Or22sYQjQk\W\Or2sZQlQm\Or2s[QnQo\&\Or2s\\]Qp6Xc\O�2P!P!\c	PsPsCKOh9h\cPs!CKZh9h)qa�Test suite for HMAC.

Python provides three different implementations of HMAC:

- OpenSSL HMAC using OpenSSL hash functions.
- HACL* HMAC using HACL* hash functions.
- Generic Python HMAC using user-defined hash functions.

The generic Python HMAC implementation is able to use OpenSSL
callables or names, HACL* named hash functions or arbitrary
objects implementing PEP 247 interface.

In the two first cases, Python HMAC wraps a C HMAC object (either OpenSSL
or HACL*-based). As a last resort, HMAC is re-implemented in pure Python.
It is however interesting to test the pure Python implementation against
the OpenSSL and HACL* hash functions.
)�_compare_digest)�support)�_4G�
bigmemtest)�check_disallow_instantiation)�hashlib_helper�
import_helper)�BuiltinHashFunctionsTrait�HashFunctionsTrait�NamedHashFunctionsTrait�OpenSSLHashFunctionsTrait)�import_fresh_module)�patch)�compare_digestc�>�[O[PIQ2!)Nzrequires _sha2)�unittest�skipIf�sha2���#C:\Python315\\Lib\test\test_hmac.py�requires_builtin_sha2r5s���?�?�4�4�<�)9�:�:rc� �\sQs]9sQsPsQsP!)�ModuleMixinz(Mixin with a HMAC module implementation.r)�__name__�
__module__�__qualname__�__firstlineno__�__doc__�hmac�__static_attributes__rrrrr9s
��2��Drrc�B``�\sQs]?snQs\U1Qk2sQsUsU9s	!)�
PyModuleMixinz�Pure Python implementation of HMAC.

The underlying hash functions may be OpenSSL-based or HACL* based,
depending on whether OpenSSL is present or not.
c�N:�[RU_2[QQQ,Q5UmP!)r�_hashlib�_hmac��blocked��super�
setUpClassrr��cls�	__class__s&�rr)�PyModuleMixin.setUpClassFs!���
����&�v�
�G�7L�M��rr�
rrrrr�classmethodr)r�__classdictcell__�
__classcell__�r,�
__classdict__s@@rr!r!?s&������N��N�Nrr!c�B``�\sQs]LsnQs\U1Qk2sQsUsU9s	!)�BuiltinModuleMixinz&Built-in HACL* implementation of HMAC.c�F:�[RU_2[Q2UmP!)r$r'r*s&�rr)�BuiltinModuleMixin.setUpClassPs���
����&�w�/��rrr.r2s@@rr5r5Ls����0��0��0�0rr5c�:`�\sQs]ZsnQsP\1QksQsQsUs	P!)�CreatorMixinz/Mixin exposing a method creating a HMAC object.c��[g)z�Create a new HMAC object.

Implementations should accept arbitrary 'digestmod' as this
method can be used to test which exceptions are being raised.
��NotImplementedError��self�key�msg�	digestmods&&&&r�hmac_new�CreatorMixin.hmac_new]�
��"�!rc�H�[OUOUQ5!)z=Return a specialization of hmac_new() with a bound digestmod.�rA)�	functools�partialrB�r>rAs&&r�
bind_hmac_new�CreatorMixin.bind_hmac_newes��� � ����)�D�Drr)
rrrrr�DIGESTMOD_SENTINELrBrJrr0�r3s@rr9r9Zs����9� $�0B�"�E�Err9c�:`�\sQs]jsnQsP\1QksQsQsUs	P!)�DigestMixinz0Mixin exposing a method computing a HMAC digest.c��[g)z�Compute a HMAC digest.

Implementations should accept arbitrary 'digestmod' as this
method can be used to test which exceptions are being raised.
r;r=s&&&&r�hmac_digest�DigestMixin.hmac_digestmrDrc�H�[OUOUQ5!)z@Return a specialization of hmac_digest() with a bound digestmod.rF)rGrHrQrIs&&r�bind_hmac_digest�DigestMixin.bind_hmac_digestus��� � ��!1�!1�Y�G�Grr)
rrrrrrLrQrTrr0rMs@rrOrOjs����:�#'�3E�"�H�HrrOc�<�U[Ic	UV2!UVUQ5!�rF�rL)�new_funcr?r@rAs&&&&r�_call_newobj_funcrZzs#���&�&���!�!��C�	�2�2rc�<�U[Ic	UV2!UVUQ5!))�digestrX)�digest_funcr?r@rAs&&&&r�_call_digest_funcr^�s#���&�&��3�$�$��s�	�2�2rc�B`�\sQs]�snQsP\1QksP\1QksQsUs	P!)�ThroughObjectMixinz�Mixin delegating to <module>.HMAC() and <module>.HMAC(...).digest().

Both the C implementation and the Python implementation of HMAC should
expose a HMAC class with the same functionalities.
c�F�[UOOVU2!)z:Create a HMAC object via a module-level class constructor.)rZr�HMACr=s&&&&rrB�ThroughObjectMixin.hmac_new�s�� �������9�E�Erc�N�[UOVU2O2!)zACall the digest() method on a HMAC object obtained by hmac_new().)rZrBr\r=s&&&&rrQ�ThroughObjectMixin.hmac_digest�s�� �����)�D�K�K�M�Mrr�
rrrrrrLrBrQrr0rMs@rr`r`�s,�����!%�0B�F�$(�3E�N�Nrr`c�B`�\sQs]�snQsP\1QksP\1QksQsUs	P!)�ThroughModuleAPIMixinz9Mixin delegating to <module>.new() and <module>.digest().c�F�[UOOVU2!)z1Create a HMAC object via a module-level function.�rZr�newr=s&&&&rrB�ThroughModuleAPIMixin.hmac_new�s�� �������)�D�Drc�F�[UOOVU2!)z!One-shot HMAC digest computation.)r^rr\r=s&&&&rrQ�!ThroughModuleAPIMixin.hmac_digest�s�� ����!1�!1�3�Y�G�GrrrfrMs@rrhrh�s(����C� $�0B�E�$(�3E�H�Hrrhc�B`�\sQs]�snQsP\1QksP\1QksQsUs	P!)�ThroughOpenSSLAPIMixinzCMixin delegating to _hashlib.hmac_new() and _hashlib.hmac_digest().c�:�[[OVU2!�N)rZr#rBr=s&&&&rrB�ThroughOpenSSLAPIMixin.hmac_new�s�� ��!2�!2�C�i�H�Hrc�:�[[OVU2!rr)r^r#rQr=s&&&&rrQ�"ThroughOpenSSLAPIMixin.hmac_digest�s�� ��!5�!5�s��K�KrrrfrMs@rrprp�s(����M� $�0B�I�$(�3E�L�Lrrpc�B`�\sQs]�snQsP\1QksP\1QksQsUs	P!)�ThroughBuiltinAPIMixinz;Mixin delegating to _hmac.new() and _hmac.compute_digest().c�F�[UOOVU2!rrrjr=s&&&&rrB�ThroughBuiltinAPIMixin.hmac_new�s�� �������)�D�Drc�F�[UOOVU2!rr)r^r�compute_digestr=s&&&&rrQ�"ThroughBuiltinAPIMixin.hmac_digest�s�� ����!9�!9�3�Y�O�OrrrfrMs@rrwrw�s(����E� $�0B�E�$(�3E�P�Prrwc�8`�\sQs]�snQsQsQsQsQsUs	P!)�ObjectCheckerMixinzCMixin for checking HMAC objects (pure Python, OpenSSL or built-in).c�P�UOVVE2UOVU2P!)z1Check a HMAC object 'h' against the given values.)�check_internals�check_hexdigest)r>�h�	hexdigest�hashname�digest_size�
block_sizes&&&&&&r�check_object�ObjectCheckerMixin.check_object�s"�����Q�+�B����Q�;�7rc��UOUOQU02UOUOU2UOUOU2P!)z/Check the constant attributes of a HMAC object.�hmac-)�assertEqual�namer�r�)r>r�r�r�r�s&&&&&rr��"ObjectCheckerMixin.check_internals�sE��������5��
�!3�4��������4�������z�2rc�:�UO[UO22U2UOUO2[OU22UOUO2O
2UO
22P!)z*Check the HMAC digest of 'h' and its size.)r��lenr\�binascii�	unhexlifyr��upper)r>r�r�r�s&&&&rr��"ObjectCheckerMixin.check_hexdigest�sc������Q�X�X�Z��+�6��������X�%7�%7�	�%B�C��������,�,�.�	���0A�Brr)
rrrrrr�r�r�rr0rMs@rr~r~�s����M�8�
3�C�Crr~c�`�\sQs]�snQsQQksQQksQsQsQs	\
21QksQsQ	s
\
21Q
ksQsQsQ
sUsP!)�AssertersMixinzMixin class for common tests.c�V�UOU[2UOVUQ5!)a�Alternative implementation of hmac_new().

This is typically useful when one needs to test against an HMAC
implementation which only recognizes underlying hash functions
by their name (all HMAC implementations must at least recognize
hash functions by their names but some may use aliases such as
`hashlib.sha1` instead of "sha1").

Unlike hmac_new(), this method may assert the type of 'hashname'
as it should only be used in tests that are expected to create
a HMAC object.
rF)�assertIsInstance�strrB�r>r?r@r�s&&&$r�hmac_new_by_name�AssertersMixin.hmac_new_by_name�s'��	
���h��,��}�}�S��}�:�:rc�V�UOU[2UOVUQ5!)z�Alternative implementation of hmac_digest().

Unlike hmac_digest(), this method may assert the type of 'hashname'
as it should only be used in tests that are expected to compute a
HMAC digest.
rF)r�r�rQr�s&&&$r�hmac_digest_by_name�"AssertersMixin.hmac_digest_by_name�s*��	
���h��,�����H��=�=rc
��VE6XcU,oLVE,oSFDuo	UOU	Q59^tt^2UOVV9VVU2UOVV9U2UOVV9VVU2UO	VV9VVU2PPP2Jw	UOVV5Vg2UO
VV5U2P!)%fhJ�9h)a�Check that HMAC(key, msg) == digest.

The 'hashfunc' and 'hashname' are used as 'digestmod' values,
thereby allowing to test the underlying dispatching mechanism.

Note that 'hashfunc' may be a string, a callable, or a PEP-257
module. Note that not all HMAC implementations may recognize the
same set of types for 'hashfunc', but they should always accept
a hash function by its name.
rF)�subTest�assert_hmac_new�assert_hmac_hexdigest�assert_hmac_common_cases�assert_hmac_extra_cases�assert_hmac_new_by_name�assert_hmac_hexdigest_by_name)
r>r?r@r��hashfuncr�r�r��choicesrAs
&&&&&&&&  r�assert_hmac�AssertersMixin.assert_hmac�s������j�G��*�G� �I����	��2�2��$�$��i��:���*�*��i�K���-�-��i��:���,�,��i��:��3�2�!�$	
�$�$��i�;�	
�	
�*�*��i�;�	
�)3�2�2�s�AB3	�3C
�<C
c�L�UOVV5VgUOQU-Q5P!)zeCheck that HMAC(key, msg) == digest.

This test uses the `hmac_new()` method to create HMAC objects.
rA��
hmac_new_func�
hmac_new_kwds)�check_hmac_newrB�r>r?r@r�rAr�r�r�s&&&&&&&&rr��AssertersMixin.assert_hmac_news-��	
����i�;��-�-�&�	�2�	�	
rc�L�UOVV4VVUOQU-Q5P!)zmCheck that HMAC(key, msg) == digest.

This test uses the `hmac_new_by_name()` method to create HMAC objects.
r�r�)r�r�)r>r?r@r�r�r�r�s&&&&&&&rr��&AssertersMixin.assert_hmac_new_by_name#s/��	
����i�;��/�/�%�x�0�	�	
rc	��```````�RRR1-R@o	ROU	RURU2UUUUUUU1Qko
ROQ29^tt^2U
2PPP2ROQ29^tt^2U
Q2PPP2ROQ29^tt^2U
P2PPP2P!)%fhKf9h)%fhKO9h)%fhP!9h)z�Check that HMAC(key, msg) == digest.

This also tests that using an empty/None initial message and
then calling `h.update(msg)` produces the same result, namely
that HMAC(key, msg) is equivalent to HMAC(key).update(msg).
c�l:�RR,UN3-R@oUOR2ROURR2P!rr)�updater�)	�argsr�r�r�r�r�r?r@r>s	* �������r�
hmac_new_feed�4AssertersMixin.check_hmac_new.<locals>.hmac_new_feed=s4����c�:�D�:�M�:�A�
�H�H�S�M�� � ��I�{�;rzno initial messagezinitial message is emptyrzinitial message is None)r�r�)r>r?r@r�r�r�r�r�r�r�r�sffff&f&ff  rr��AssertersMixin.check_hmac_new0s����
�#�s�4�m�4�����!�Y��+�z�J�	<�	<�
�\�\�.�
/�
/��O�0�
�\�\�4�
5�
5��#��6�
�\�\�3�
4�
4��$��5�
4�	0�
/��
5�
5��
4�
4�
4�s6�B4�7	C�!	C�4C	�=C	�C	�C	�C+	�#C+	c	�J�UOVV5UOQU-Q5P!)z.Check a HMAC digest computed by hmac_digest().rA��hmac_digest_func�hmac_digest_kwds)�check_hmac_hexdigestrQ)r>r?r@r�rAr�s&&&&&&rr��$AssertersMixin.assert_hmac_hexdigestIs-��	
�!�!��i�!�-�-�)�9�5�	"�	
rc	�v�UOU[2UOVV5UOQU-Q5P!)z6Check a HMAC digest computed by hmac_digest_by_name().r�r�)r�r�r�r�)r>r?r@r�r�r�s&&&&&&rr��,AssertersMixin.assert_hmac_hexdigest_by_nameSs=��	
���h��,��!�!��i�!�5�5�(�(�3�	"�	
rc��UV1-U@oUO[U2U2UOU[OU22U!)z�Check and return a HMAC digest computed by hmac_digest_func().

This HMAC digest is computed by:

    hmac_digest_func(key, msg, **hmac_digest_kwds)

This is typically useful for checking one-shot HMAC functions.
)r�r�r�r�)r>r?r@r�r�r�r��ds&&&&&&& rr��#AssertersMixin.check_hmac_hexdigest^sH��
�S�:�)9�:������Q���-�����H�.�.�y�9�:��rc��UOVQ5oUO2o	U	OQ2UOU2UOV�VVU2P!)z(Common tests executed by all subclasses.)r�s&test update should not affect original)r��copyr�r�)
r>r?r@r�rAr�r�r��h1�h2s
&&&&&&&&  rr��'AssertersMixin.assert_hmac_common_casesosL���
"�
"�3�
"�
:��
�W�W�Y��
�	�	�;�<�
�	�	�#�����"��
�Krc��P!)z,Extra tests that can be added in subclasses.rr�s&&&&&&&&rr��&AssertersMixin.assert_hmac_extra_casesys�rrrr)rrrrrr�r�r�r�r��
frozendictr�r�r�r�r�r�rr0rMs@rr�r��sT����'�;� >�)
�V
�
�&0�\� �2
�	
�,6�<��"L�;�;rr�c�(`�\sQsQsnQsQsUsP!)�PyAssertersMixin�c���UOOOUOO2oUOVUQ5UO	V�VVU2P!rW)rrb�__new__�	_init_oldr�)	r>r?r@r�rAr�r�r�r�s	&&&&&&&& rr��(PyAssertersMixin.assert_hmac_extra_cases�sF��
�I�I�N�N�"�"�4�9�9�>�>�2��	���C�	��2����!��z�Jrr)rrrrr�rr0rMs@rr�r�s����K�Krr�c�6`�\sQsQsnQQksQQksQsUsP!)�OpenSSLAssertersMixin�c�|�UOU[2[[QU02oUO	VUQ5!��openssl_rF)r�r��getattrr#rB�r>r?r@r��openssl_funcs&&&$ rr��&OpenSSLAssertersMixin.hmac_new_by_name�s8�����h��,��x�8�H�:�)>�?���}�}�S��}�>�>rc�|�UOU[2[[QU02oUO	VUQ5!r�)r�r�r�r#rQr�s&&&$ rr��)OpenSSLAssertersMixin.hmac_digest_by_name�s;�����h��,��x�8�H�:�)>�?������L��A�Arrrr)rrrrr�r�rr0rMs@rr�r��s����?�
B�Brr�c��\sQsQsQsP!)�BuiltinAssertersMixin�r)rrrrrrrrr�r��s��rr�c�h`�\sQsQsnQsQsQsQsQsQs	Qs
Q	sQ
sQs
QsQ
sQsUsP!)�RFCTestCaseMixin�a+Test HMAC implementations against RFC 2202/4231 and NIST test vectors.

- Test vectors for MD5 and SHA-1 are taken from RFC 2202.
- Test vectors for SHA-2 are taken from RFC 4231.
- Test vectors for SHA-3 are NIST's test vectors [1].

[1] https://csrc.nist.gov/projects/message-authentication-codes
c��`�U1QkoUQQQ2UQQQ2UQQQ2U[[]]22QQ2UQQQ	2UQQ
Q2UQQQ
2P!)c	�J:�ROVUROQ]]@2P!)�md5)r�r��r?r@r�r>s&&&�r�md5test�2RFCTestCaseMixin.test_md5_rfc2202.<locals>.md5test�s������S�y�$�(�(�E�2�r�Jr�Hi There� 9294727a3638bb1c13f48ef8158bfc9d�Jefe�what do ya want for nothing?� 750c783e6ab0b503eaa86e310a5db738� 56be34521d144c88dbb8c733f0e8b3f6� 697eaf0aca3a3aea3a75164746ffaa79�Test With Truncation� 56461ef2342edc00f9bab995690efd4c�6Test Using Larger Than Block-Size Key - Hash Key First� 6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd�ITest Using Larger Than Block-Size Key and Larger Than One Block-Size Data� 6f630fad67cda0ee1fb1f562db3aa53ess�����������������2���������������������������������������������������2��������������������������������������������������s�P����������������������������������������������������������������������������������bytes�range)r>r�sf r�test_md5_rfc2202�!RFCTestCaseMixin.test_md5_rfc2202�s����	K�	���2�	4�	��/�2�	4�	���2�	4�	��e�A�r�l�#��2�	4�	��'�2�	4�	��I�2�	4�	��8�2�	4rc��`�U1QkoUQQQ2UQQQ2UQQQ2U[[]]22QQ2UQQQ	2UQQ
Q2UQQQ
2P!)c	�J:�ROVUROQ]]@2P!)�sha1)r�rr�s&&&�r�shatest�3RFCTestCaseMixin.test_sha1_rfc2202.<locals>.shatest�s������S�y�$�)�)�V�R��Lrr��(b617318655057264e28bc0b6fb378c8ef146be00r�r��(effcdf6ae5eb2fa2d27416d5f184df9c259a7c79�(125d7342b9ac11cd91a39af48aa17b4f63f175d3�(4c9007f4026250c6bc8414f9bf50c86c2d7235dar��(4c1a03424b55e07fe7f27be1d58bb9324a9a5a04r��(aa4ae5e15272d00e95705637ce8a3b55ed402112r��(e8e99d0f45237d786d6bbaa7965c7808bbff1a91����������������������r�r�sr�r�)r>rsf r�test_sha1_rfc2202�"RFCTestCaseMixin.test_sha1_rfc2202�s����	M�	���:�	<�	��/�:�	<�	���:�	<�	��e�A�r�l�#��:�	<�	��'�:�	<�	��I�:�	<�	��8�:�	<rc�D�UOUOQ]]@2P!)�sha224)�_test_sha2_rfc4231r�r>s&r�test_sha2_224_rfc4231�&RFCTestCaseMixin.test_sha2_224_rfc4231����������X�r�2�>rc�D�UOUOQ] ]@2P!��sha256)rrrs&r�test_sha2_256_rfc4231�&RFCTestCaseMixin.test_sha2_256_rfc4231�rrc�D�UOUOQ]0]�2P!)�sha384)rrrs&r�test_sha2_384_rfc4231�&RFCTestCaseMixin.test_sha2_384_rfc4231����������X�r�3�?rc�D�UOUOQ]@]�2P!)�sha512)rr$rs&r�test_sha2_512_rfc4231�&RFCTestCaseMixin.test_sha2_512_rfc4231�r"rc�<`````�UUUUU1QkoUQ$QQQQQQQQQ	-Q
5UQQQQ
QQQQQQ-Q
5UQ%Q&QQQQQQQQ-Q
5U[Q[]]222Q'QQQQQQQQ-Q
5UQ(QQQQQQQQQ-Q
5UQ(QQQ QQ!QQ"QQ#-Q
5P!))c
�J:�UR*oROVURRRRQ5P!)�r�r�r�r�)r�)	r?r@�
hexdigestsr�r�r�r�r�r>s	&&& �����r�hmactest�5RFCTestCaseMixin._test_sha2_rfc4231.<locals>.hmactest�s1���"�8�,�I�����)�!�!�'�%�
�
rr�r�8896fb1128abbdf196832107cd49df33f47b4b1169912ba4f53684b22r�@b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7r�`afd03944d84895626b0825f4ab46907f15f9dadbe4101ec682aa034c7cebc59cfaea9ea9076ede7f4af152e8b2fa9cb6r$ڀ87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854)r?r@r*r�r��8a30e01098bc6dbbf45690f3a7e9e6d0f8bbea2a39e6148008fd05e44�@5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843�`af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649ڀ164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737�87fb3cb3588c6c1f6ffa9694d7d6ad2649365b0c1f65d69d1ec8333ea�@773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe�`88062608d3e6ad8a0aa2ace014c8a86f0aa635d947ac9febe83ef4e55966144b2a5ab39dc13814b94e3ab6e101a34f27ڀfa73b0089d56a284efb0f0756c890be9b1b5dbdd8ee81a3655f83e33b2279d39bf3e848279a722c806b485a47e67c807b946a337bee8942674278859e13292fbc3�0�SF �Dpw�	J		P!3hrrr)�.0�xs& r�	<genexpr>�6RFCTestCaseMixin._test_sha2_rfc4231.<locals>.<genexpr>2s��&;���&;��1�&;�s��86c11506874013cac6a2abc1bb382627cec6a90d86efc012de7afec5a�@82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b�`3e8a69b7783c25851933ab6290af6ca77a9981480850009cc5577c6e1f573b4e6801dd23c4a7d679ccf8a386c674cffbڀb0ba465637458c6990e5a8c5f61d4af7e576d97ff94b872de76f8050361ee3dba91ca5c11aa25eb4d679275cc5788063a5f19741120c4f2de2adebeb10a298ddr��895e9a0db962095adaebe9b2d6f0dbce2d499f112f2d2b7273fa6870e�@60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54�`4ece084485813e9088d2c63a041bc5b44f9ef1012a2b588f3cd11f05033ac4c60c2ef6ab4030fe8296248df163f44952ڀ80b24263c7c1a3ebb71493c1dd7be8b49b46d1f41b4aeec1121b013783f8f3526b56d037e05f2598bd0fd2215d6a1e5295e64f73f63f0aec8b915a985d786598s�This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm.�83a854166ac5d9f023f54d517d0b39dbd946770db9c2b95c9f6f565d1�@9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2�`6617178e941f020d351e2f254e8fd32c602420feb0b8fb9adccebb82461e99c5a678cc31e799176d3860e6110c46523eڀe37b6a775dc87dbaa4dfa9f96e5e3ffddebd71f8867289865df5a32d20cdc944b6022cac3c4982b10d5eeb55c3e4de15134676fb6de0446065c97440fa8c6a58rrr�r�s������������������������������������������������������������������������������������������������������������������������������������r�)r>r�r�r�r�r+sfffff rr�#RFCTestCaseMixin._test_sha2_rfc4231�s}���		�		�	�\� �� :�� B�� B�� B��	�"	�W�4�� :�� B�� B�� B��	�"	�\�!�� :�� B�� B�� B��	�"	�U�<�e�D�(�&;�<�<�!�� :�� B�� B�� B��	�"	�]�/�� :�� B�� B�� B��	�$	�]�1�� :�� B�� B�� B��
	rc���[[]22QQ1[[]�22QQ1[[]�22QQ11FD'vqoUOVUUOQ]]�Q5J)	P!)	��"Sample message for keylen<blocklen�8332cfd59347fdb8e576e77260be4aba2d6dc53117b3bfb52c6d18c04�"Sample message for keylen=blocklen�8d8b733bcf66c644a12323d564e24dcf3fc75f231f3b67968359100c7�"Sample message for keylen>blocklen�8078695eecc227c636ad31d063a15dd05a7e819a66ec6d8de1e193e59�sha3_224r))r�r�r�rS�r>r?r@r�s&   r�test_sha3_224_nist�#RFCTestCaseMixin.test_sha3_224_nistis����e�B�i� �5�J�
�
�e�C�j�!�5�J��
�e�C�j�!�5�J��$
��C�i�
����)������3�
�
�$
rc���[[] 22QQ1[[]�22QQ1[[]�22QQ11FD'vqoUOVUUOQ] ]�Q5J)	P!)	� rM�@4fe8e202c4f058e8dddc23d8c34e467343e23555e24fc2f025d598f558f67205rO�@68b94e2e538a9be4103bebb5aa016d47961d4d1aa906061313b557f8af2c3faarQ�@9bcf2c238e235c3ce88404e813bd2f3a97185ac6f238c63d6229a00b07974258�sha3_256r))r�r�r�r\rTs&   r�test_sha3_256_nist�#RFCTestCaseMixin.test_sha3_256_nists����e�B�i� �5�3�
��e�C�j�!�5�3���e�C�j�!�5�3��$
��C�i�$
����)������3�
�
�%$
rc���[[]022QQ1[[]h22QQ1[[]�22QQ11FD'vqoUOVUUOQ]0]hQ5J)	P!)	�0rM�`d588a3c51f3f2d906e8298c1199aa8ff6296218127f6b38a90b6afe2c5617725bc99987f79b22a557b6520db710b7f42rO�`a27d24b592e8c8cbf6d4ce6fc5bf62d8fc98bf2d486640d9eb8099e24047837f5f3bffbe92dcce90b4ed5b1e7e44fa90rQ�`e5ae4c739f455279368ebf36d4f5354c95aa184c899d3870e460ebc288ef1f9470053f73f7c6da2a71bcaec38ce7d6ac�sha3_384r))r�r�r�rdrTs&   r�test_sha3_384_nist�#RFCTestCaseMixin.test_sha3_384_nist�s����e�B�i� �5�3�
��e�C�j�!�5�3���e�C�j�!�5�3��$
��C�i�*
����)������3�
�
�+$
rc���[[]@22QQ1[[]H22QQ1[[]�22QQ11FD'vqoUOVUUOQ]@]HQ5J)	P!)	�@rMڀ4efd629d6c71bf86162658f29943b1c308ce27cdfa6db0d9c3ce81763f9cbce5f7ebe9868031db1a8f8eb7b6b95e5c5e3f657a8996c86a2f6527e307f0213196rOڀ544e257ea2a3e5ea19a590e6a24b724ce6327757723fe2751b75bf007d80f6b360744bf1b7a88ea585f9765b47911976d3191cf83c039f5ffab0d29cc9d9b6darQڀ5f464f5e5b7848e3885e49b2c385f0694985d0e38966242dc4a5fe3fea4b37d46b65ceced5dcf59438dd840bab22269f0ba7febdb9fcf74602a35666b2a32915�sha3_512r))r�r�r�rlrTs&   r�test_sha3_512_nist�#RFCTestCaseMixin.test_sha3_512_nist�s����e�B�i� �5�3�
��e�B�i� �5�3���e�C�j�!�5�3��$
��C�i�0
����)������2�
�
�1$
rr)rrrrrrrrrr r%rrUr]rermrr0rMs@rr�r��sL�����4�B<�B?�?�@�@�u�n�,�2�8�rr�c�T``�\sQsQsn\U1Qk2s\U1Qk2sQsUsU9s	!)�PurePythonInitHMAC��c	�:�[RU_2QFDbo[UOOU2o[
OUOOUP	UQ5oUOU2Jd	P!)�_init_openssl_hmac��autospec�wraps)rs�_init_builtin_hmac)r(r)r�rrbr
�object�enterClassContext)r+�meth�fn�cmr,s&   �rr)�PurePythonInitHMAC.setUpClass�sW���
����@�D��������-�B����c�h�h�m�m�T�D��K�B��!�!�"�%�Arc��:�UOOOO2UOOOO2[
RU_2P!rr)rrbrs�assert_not_calledrwr(�
tearDownClassr*s&�rr�� PurePythonInitHMAC.tearDownClass�sD������
�
�(�(�:�:�<����
�
�(�(�:�:�<�	���rr)
rrrrr/r)r�rr0r1r2s@@rrprp�s0�����&��&�� �� � rrpc��\sQsQsQsQsP!)�PyRFCOpenSSLTestCase��z�Python implementation of HMAC using hmac.HMAC().

The underlying hash functions are OpenSSL-based but
_init_old() is used instead of _init_openssl_hmac().
r�rrrrrrrrrr�r�����rr�c��\sQsQsQsQsP!)�PyRFCBuiltinTestCase�z�Python implementation of HMAC using hmac.HMAC().

The underlying hash functions are HACL*-based but
_init_old() is used instead of _init_builtin_hmac().
rr�rrrr�r��r�rr�c��\sQsQsQsQsP!)�PyDotNewOpenSSLRFCTestCase�z�Python implementation of HMAC using hmac.new().

The underlying hash functions are OpenSSL-based but
_init_old() is used instead of _init_openssl_hmac().
rr�rrrr�r�r�rr�c��\sQsQsQsQsP!)�PyDotNewBuiltinRFCTestCase�z�Python implementation of HMAC using hmac.new().

The underlying hash functions are HACL-based but
_init_old() is used instead of _init_openssl_hmac().
rr�rrrr�r�r�rr�c��\sQsQsQsQsP!)�OpenSSLRFCTestCase�zWOpenSSL implementation of HMAC.

The underlying hash functions are also OpenSSL-based.
rr�rrrr�r�s��rr�c�,`�\sQsQsnQsQsQsUsP!)�BuiltinRFCTestCase�(z\Built-in HACL* implementation of HMAC.

The underlying hash functions are also HACL*-based.
c	��UOVUQ59^tt^2[UOQU02oUO[	U22UOVV6U2PPP2P!)%fhP!9h))r?r@r��compute_)r�r�r�
assertTrue�callabler�)	r>r?r@r�rAr�r�r��funcs	&&&&&&&& rr��*BuiltinRFCTestCase.assert_hmac_extra_cases1s_���\�\�c�X�\�
>�
>��4�9�9���
�&;�<�D��O�O�H�T�N�+��%�%�c�	��M�?�
>�
>�
>�s�AA.�.A?	�7A?	r)rrrrrr�rr0rMs@rr�r�(s�����
N�Nrr�c�l`�\sQsQsnQsQsQsQsQsQs	Qs
Q	sQQ
ksQs
QsQ
sQsUsP!)�DigestModTestCaseMixin�;zETests for the 'digestmod' parameter for hmac_new() and hmac_digest().c�0�UO[Q2!)z>A context manager catching errors when a digestmod is missing.z [M|m]issing.*required.*digestmod)�assertRaisesRegex�	TypeErrorrs&r�assert_raises_missing_digestmod�6DigestModTestCaseMixin.assert_raises_missing_digestmod>s���%�%�i�&H�J�	Jrc�0�UO[Q2!)z>A context manager catching errors when a digestmod is unknown.z[Uu]nsupported.*)r��
ValueErrorrs&r�assert_raises_unknown_digestmod�6DigestModTestCaseMixin.assert_raises_unknown_digestmodCs���%�%�j�2D�E�Erc�B�UOoUOU2P!rr)r��%do_test_constructor_missing_digestmod�r>�catchers& r�"test_constructor_missing_digestmod�9DigestModTestCaseMixin.test_constructor_missing_digestmodG����6�6���2�2�7�;rc�B�UOoUOU2P!rr)r��%do_test_constructor_unknown_digestmodr�s& r�"test_constructor_unknown_digestmod�9DigestModTestCaseMixin.test_constructor_unknown_digestmodKr�rc��UO2FDJvq#oUOV4Q59^tt^2U29^tt^2UU-U@PPP2PPP2JL	P!)%fhK9h)%fhJt9h�)r��kwds)�&cases_missing_digestmod_in_constructorr��r>r�r�r�r�s&&   rr��<DigestModTestCaseMixin.do_test_constructor_missing_digestmodO�Z�� $� K� K� M��D�����4��3�3�W�Y�Y��d�#�d�#�6?�3�3�!N�5>�Y��3�3�3��/�A6	�
A#
�
A6	�#A3�,A3�.A6	�6B
�?B
c��UO2FDJvq#oUOV4Q59^tt^2U29^tt^2UU-U@PPP2PPP2JL	P!)%fhK9h)%fhJt9hr�)�&cases_unknown_digestmod_in_constructorr�r�s&&   rr��<DigestModTestCaseMixin.do_test_constructor_unknown_digestmodTr�r�c��[grrr;rs&rr��=DigestModTestCaseMixin.cases_missing_digestmod_in_constructorY���!�!rc�@�QQqC[,UNoUOVVE2!)z�Generate cases for missing digestmod tests.

Only the Python implementation should consider "falsey" 'digestmod'
values as being equivalent to a missing one.
�
unused key�
unused msg)rL�_invalid_digestmod_cases)r>r��missing_liker?r@r�s&&&   r�make_missing_digestmod_cases�3DigestModTestCaseMixin.make_missing_digestmod_cases\s+��!�-�S�%�5��5���,�,�T��E�Erc��[grrr;rs&rr��=DigestModTestCaseMixin.cases_unknown_digestmod_in_constructorfr�rc�.�QQqCUOVVB2!)z+Generate cases for unknown digestmod tests.r�r�)r�)r>r��bad_digestmodsr?r@s&&&  r�make_unknown_digestmod_cases�3DigestModTestCaseMixin.make_unknown_digestmod_casesis�� �-�S��,�,�T��L�Lrc	��,oSFDMoQU-oUOV1U12UOVU1U12UOV1UQU-*12JO	U!)rAr@)�append)r>r�r?r@r��casesrA�kwargss&&&&&   rr��/DigestModTestCaseMixin._invalid_digestmod_casesnsf���� �I�!�9�-�F��L�L�$���/�0��L�L�$�c�
�F�3�4��L�L�$���%���(=�>�?�	!�
�rr)r)rrrrrr�r�r�r�r�r�r�r�r�r�r�rr0rMs@rr�r�;sH����O�J�
F�<�<�$�
$�
"�F�"�M�
�rr�c�`�\sQsQsnQsQsQsQsQsQs	Qs
\OQ	2Q
2s
\OQ	2Q2sQsUsP!)
�ConstructorTestCaseMixin�xz/HMAC constructor tests based on HMAC-SHA-2/256.�keys
hash this!�@6c845b47f52b3b47f6590c502db7825aad757bf4fadc8fa972f7cd2e76a5bdebc�L�UOU2UOU2P!rr)�!do_test_constructor_invalid_types�#do_test_constructor_supported_types�r>�hmac_on_key_and_msgs&&r�do_test_constructor�,ConstructorTestCaseMixin.do_test_constructors ���.�.�/B�C��0�0�1D�Erc���UO[U]2UO[UQ2UO[UQ]2UO[UQQ2P!)�r?r�r@)�assertRaisesr�r�s&&rr��:ConstructorTestCaseMixin.do_test_constructor_invalid_types�sR�����)�%8�!�<����)�%8�%�@����)�%8�&�!�D����)�%8�&�%�Hrc��[[1FD�o[[[1FD�oUOV#Q59^tt^2UUUO2UUO
22oUO
UOQ2UO
UO2UO2PPP2J�	J�	P!)%fhJ�9h))�tp_key�tp_msg�hmac-sha256)
r��	bytearray�
memoryviewr�r?r@r�r�r��res)r>r�r�r�r�s&&   rr��<ConstructorTestCaseMixin.do_test_constructor_supported_types�s����i�(�F� �)�Z�8���\�\��\�?�?�+�F�4�8�8�,<�f�T�X�X�>N�O�A��$�$�Q�V�V�]�;��$�$�Q�[�[�]�D�H�H�=�@�?�9�)�?�?�?�s�A0C
�C�Crc�H�UOUOQ22P!r)r�rJrs&r�test_constructor�)ConstructorTestCaseMixin.test_constructor�s��� � ��!3�!3�H�!=�>rc��UOUOUOQ2oUOU[O
UO22P!r)rQr?r@r�r�r�r��r>r\s& r�test_digest�$ConstructorTestCaseMixin.test_digest�s=���!�!�$�(�(�D�H�H�h�?�������!3�!3�D�H�H�!=�>rr)rrrrrr?r@r�r�r�r�r�requires_hashdigestr�r�rr0rMs@rr�r�xsf����9�
�C�
�C�
L�C�F�I�>��'�'��1�?�2�?��'�'��1�?�2�?rr�c�b`�\sQsQsnQsQs\2Q2s\2Q2sQs	Us
P!)�PyConstructorBaseMixin�c�D�UO,QNq!UOV2!)�)r�NF)rBr��r>r�r�s&  rr��=PyConstructorBaseMixin.cases_missing_digestmod_in_constructor�s���
�
�'8�g��0�0��?�?rc�B�UOQ,q!UOV2!)�unknown�rBr�r�s&  rr��=PyConstructorBaseMixin.cases_unknown_digestmod_in_constructor�s ���
�
�	�{�g��0�0��?�?rc�d�UOUO[O22P!rr)r�rJrrrs&r�test_constructor_with_module�3PyConstructorBaseMixin.test_constructor_with_module�s��� � ��!3�!3�D�K�K�!@�Arc���UOUOUO[O2oUOU[OUO22P!rr)	rQr?r@rrr�r�r�r�r�s& r�test_digest_with_module�.PyConstructorBaseMixin.test_digest_with_module�sA���!�!�$�(�(�D�H�H�d�k�k�B�������!3�!3�D�H�H�!=�>rr)rrrrr�r�rr�rrr0rMs@rr�r��sA����@�@���B��B���?��?rr�c��\sQsQsQsQsP!)�PyConstructorTestCase�z-Test the hmac.HMAC() pure Python constructor.rr�rrrrr�s��7rrc�,`�\sQsQsnQsQsQsUsP!)�PyModuleConstructorTestCase�z�Test the hmac.new() and hmac.digest() functions.

Note that "self.hmac" is imported by blocking "_hashlib" and "_hmac".
For testing functions in "hmac", extend PyMiscellaneousTests instead.
c�H�UOoQoUO[Q29^tt^2UQQU2PPP2UO[Q29^tt^2UQQQ2PPP2UO[Q29^tt^2UQQQ2PPP2UO[Q29^tt^2UQQP2PPP2P!)%fhK�9h)%fhK�9h)%fhKi9h)%fhP!9h)c��[Q2g)�custom exception)�RuntimeErrorrrr�raiser�PPyModuleConstructorTestCase.test_hmac_digest_digestmod_parameter.<locals>.raiser�s���1�2�2rrr��msgzunsupported hash algorithmr�rk��)rQr�r
r��AttributeError)r>r�rs&  r�$test_hmac_digest_digestmod_parameter�@PyModuleConstructorTestCase.test_hmac_digest_digestmod_parameter�s�������	3��
#�
#�L�2D�
E�
E�����(�F��
#�
#�J�0L�
M�
M�����+�N��
#�
#�N�E�
:�
:�����&�;�
�
#�
#�N�E�
:�
:�����&�;�
:�F�
E��N�
M��;�
:��
:�
:�
:�sG�C� C*�C=�D�C'	� C'	�*C:	�3C:	�=D
	�D
	�D!	�D!	r)rrrrrrrr0rMs@rrr�s�����'�'rrc�Z`�\sQsQsn\Q2s\Q2sQsQsQs	Qs
QsUsP!)	�!ExtensionConstructorTestCaseMixin��c��[g)z*The underlying (non-instantiable) C class.r;rs&r�obj_type�*ExtensionConstructorTestCaseMixin.obj_type��
��"�!rc��[g)zAThe exact exception class raised upon invalid 'digestmod' values.r;rs&r�exc_type�*ExtensionConstructorTestCaseMixin.exc_type�rrc���[VO2UO[Q29^tt^2PUOmPPP2P!)%fhP!9h)zimmutable type)rrr�r��valuers&r�test_internal_types�5ExtensionConstructorTestCaseMixin.test_internal_types�s>��$�T�=�=�9�
�
#�
#�I�/?�
@�
@�"&�D�M�M��A�
@�
@�
@�s�A�A"	�A"	c�z�UOUO[2UOUO2!rr)�assertIsSubclassrr�r�rs&rr��AExtensionConstructorTestCaseMixin.assert_raises_unknown_digestmod�s+�����d�m�m�Z�8�� � ����/�/rc�:�UOUO2!rr)r�rBrs&rr��HExtensionConstructorTestCaseMixin.cases_missing_digestmod_in_constructor�s���0�0����?�?rc�D�UOQQ,q!UOV2!)r�rr�r�s&  rr��HExtensionConstructorTestCaseMixin.cases_unknown_digestmod_in_constructor�s#���
�
�	�4�'8�g��0�0��?�?rr)
rrrr�propertyrrr!r�r�r�rr0rMs@rrr�sI�����"��"��"��"�'�0�@�@�@rrc�z`�\sQsQsn\Q2s\Q2sQs\OQQ2Q2s
QsUsP!)	�OpenSSLConstructorTestCase��c�$�[O!rr)r#rbrs&rr�#OpenSSLConstructorTestCase.obj_type�s���}�}�rc�$�[O!rr)r#�UnsupportedDigestmodErrorrs&rr�#OpenSSLConstructorTestCase.exc_type�s���1�1�1rc�(�[QQP1FDZoUOUQ59^tt^2UO29^tt^2UOQQU2PPP2PPP2J\	P!)%fhK9h)%fhJ�9h�r�r)r r�r�rxr�r�rQ�r>r s& rr�?OpenSSLConstructorTestCase.test_hmac_digest_digestmod_parameter��i���i��t�4�E����5��)�)��4�4�6�6�� � ����7�7�*�)�5�7�6��*�)�)��/�B	�A-
�B	�-A=�6A=�8B	�B
�	B
�xof_namec��UO[O29^tt^2UOQUQ5PPP2P!)%fhP!9h)r�rF)r�r#r1rB)r>r:s&&r�test_hmac_new_xof_digestmod�6OpenSSLConstructorTestCase.test_hmac_new_xof_digestmods;���
�
�x�A�A�
B�
B��M�M�&�H�M�5�C�
B�
B�
B�s�A�A	�A	r)�	shake_128�	shake_256)
rrrrr*rrrr�subTestsr<rr0rMs@rr,r,�sT���������2��2�8�
���j�"<�=�6�>�6rr,c�H`�\sQsQsn\Q2s\Q2sQsQsUs	P!)�BuiltinConstructorTestCaseic�0�UOO!rr�rrbrs&rr�#BuiltinConstructorTestCase.obj_types���y�y�~�~�rc�0�UOO!rr)r�UnknownHashErrorrs&rr�#BuiltinConstructorTestCase.exc_types���y�y�)�)�)rc�(�[QQP1FDZoUOUQ59^tt^2UO29^tt^2UOQQU2PPP2PPP2J\	P!)%fhK9h)%fhJ�9hr4r5r6s& rr�?BuiltinConstructorTestCase.test_hmac_digest_digestmod_parameterr8r9r)
rrrrr*rrrrr0rMs@rrBrBs7���������*��*�8�8rrBc�J`�\sQsQsnQsQsQsQsQsU1Qks	Qs
UsP!)	�SanityTestCaseMixini!z�Sanity checks for HMAC objects and their object interface.

The tests here use a common digestname and do not check all supported
hash functions.
c��UOQUOQ5oUOVO2UO	UOQ22UOUO
2[2UOUO2[2UOUO2UO2P!)�
my secret keyrFscompute the hash of this text!)rB�
digestnamer��
hmac_class�assertIsNoner�r\r�r�r�r��r>r�s& r�test_methods� SanityTestCaseMixin.test_methods0s����M�M�*�d�o�o�M�F�����a���1����!�(�(�#D�E�F����a�h�h�j�%�0����a�k�k�m�S�1����a�f�f�h����8rc�,�UOQUOQ5oUOUOQUO02UOUOUO2UOUO
UO
2P!)rNrFr�)rBrOr�r�r�r�rRs& r�test_properties�#SanityTestCaseMixin.test_properties8sk���M�M�*�d�o�o�M�F��������5����(9�!:�;��������(8�(8�9�������t���7rc�F�UOQUOQ5oUO2oUOUOUO2UOUO
UO
2UOUOUO2P!)rNrF)rBrOr�r�r�r�r��r>r�r�s&  r�	test_copy�SanityTestCaseMixin.test_copy>sn���]�]�+�t���]�
G��
�W�W�Y��������"�'�'�*����������8��������
�
�6rc��[grrr;rs&r�	test_repr�SanityTestCaseMixin.test_reprG���!�!rc�L:�U]6�cPg-RZ9Q$RZ9Q$RZ9Q$RZ9Q$!)�rPrOr�r�)�typer��int)�formatr3s"�r�__annotate__� SanityTestCaseMixin.__annotate__!s7��������O������O�rr)rrrrrrSrVrZr]�__annotate_func__rr0rMs@rrLrL!s&�����9�8�7�"�M�rrLrc�D``�\sQsQsn\U1Qk2sQsQsUsU9s	!)�PySanityTestCaseiLc�:�[RU_2UOOUmQUm] Um]@UmP!r�r(r)rrbrPrOr�r�r*s&�rr)�PySanityTestCase.setUpClassP�2���
�����������!��������rc�x�UOQUOQ5oUO[U2Q2P!)rNrFz<hmac.HMAC object at�rBrO�assertStartsWith�reprrRs& rr]�PySanityTestCase.test_reprXs.���M�M�*�d�o�o�M�F�����d�1�g�'=�>rr�
rrrrr/r)r]rr0r1r2s@@rririLs#��������?�?rric�D``�\sQsQsn\U1Qk2sQsQsUsU9s	!)�OpenSSLSanityTestCasei]c�z:�[RU_2[OUmQUm] Um]@UmP!r)r(r)r#rbrPrOr�r�r*s&�rr)� OpenSSLSanityTestCase.setUpClassas.���
����!�����!��������rc��UOQUOQ5oUO[U2QUOQ02P!�rNrF�<z HMAC object @rorRs& rr]�OpenSSLSanityTestCase.test_repri�;���M�M�*�d�o�o�M�F�����d�1�g��4�?�?�*;�>�'J�Krrrsr2s@@rruru]s%��������L�Lrruc�D``�\sQsQsn\U1Qk2sQsQsUsU9s	!)�BuiltinSanityTestCaseinc�:�[RU_2UOOUmQUm] Um]@UmP!rrkr*s&�rr)� BuiltinSanityTestCase.setUpClassqrmrc��UOQUOQ5oUO[U2QUOQ02P!ryrorRs& rr]�BuiltinSanityTestCase.test_repryr|rrrsr2s@@rr~r~ns%��������L�Lrr~c�X`�\sQsQsnQsQ
Qks\Q2sQsQs	Qs
QsQ	sUs
P!)�UpdateTestCaseMixini~z/Tests for the update() method (streaming HMAC).c��[g)zCreate a HMAC object.r;�r>r?r@s&&&rrb�UpdateTestCaseMixin.HMAC�r_rc��[g)z4Get the maximal input length for the GIL to be held.r;rs&r�gil_minsize�UpdateTestCaseMixin.gil_minsize�rrc�r�[U2oQOU2oUOV2oUOU2oSFDoUOU2J	UO	UO2UO22UO	UO
2UO
22P!)r)�list�joinrbr�r�r\r�)r>r?�chunksr@r�r��chunks&&&    r�check_update� UpdateTestCaseMixin.check_update�s����f����h�h�v���
�Y�Y�s�
 ��
�Y�Y�s�^���E��I�I�e���	
�������b�i�i�k�2������������8rc���[O]2[O]2q!UOVQ59^tt^2UOV,2PPP2P!)%fhP!9h)�)r?r@)�random�	randbytesr�r�r�s&  r�test_update�UpdateTestCaseMixin.test_update�sO���#�#�B�'��)9�)9�"�)=�S�
�\�\�c�\�
+�
+����c�5�)�,�
+�
+�
+�s�A$�$A5	�-A5	c���UOo[O]2o[OU]*2o[OU]*2oUOV#U,2P!)r�)r�r�r�r�)r>r�r?�top�bots&    r�test_update_large�%UpdateTestCaseMixin.test_update_large�sW���&�&�����r�"�����{�Q��/�����{�Q��/�����#�S�z�*rc	��UOQ2oQ]{Q,1FDGoUOUQ59^tt^2UO[UOU2PPP2JI	P!)%fhJ^9h)r�zinvalid msg)r@r)rbr�r�r�r�)r>r�r@s&  r�test_update_exceptions�*UpdateTestCaseMixin.test_update_exceptions�s\���I�I�f���!�3��B�/�C����#��&�&��!�!�)�Q�X�X�s�;�'�&�0�&�&�&�s�"A'	�'A8
�0A8
rrr)rrrrrrbr*r�r�r�r�r�rr0rMs@rr�r�~s:����9�"��"��"�
9�*�
+�<�<rr�c�<`�\sQsQsnQQks\Q2sQsUsP!)�PyUpdateTestCasei�c�>�UOOVQQ5!�rrFrDr�s&&&rrb�PyUpdateTestCase.HMAC�s���y�y�~�~�c�(�~�;�;rc�$�[O!rr)r�_GIL_MINSIZErs&rr��PyUpdateTestCase.gil_minsize�s��� � � rrrr�	rrrrrbr*r�rr0rMs@rr�r��s����<��!��!rr�c�<`�\sQsQsnQQks\Q2sQsUsP!)�OpenSSLUpdateTestCasei�c�4�[OVQQ5!r�)r#rBr�s&&&rrb�OpenSSLUpdateTestCase.HMAC�s��� � ��X�>�>rc�$�[O!rr)r#r�rs&rr��!OpenSSLUpdateTestCase.gil_minsize�s���$�$�$rrrrr�rMs@rr�r��s����?��%��%rr�c�<`�\sQsQsnQQks\Q2sQsUsP!)�BuiltinUpdateTestCasei�c�>�UOOVQQ5!r�)rrkr�s&&&rrb�BuiltinUpdateTestCase.HMAC�s���y�y�}�}�S��}�:�:rc�0�UOO!rr)rr�rs&rr��!BuiltinUpdateTestCase.gil_minsize�s���y�y�%�%�%rrrrr�rMs@rr�r��s����;�
�&��&rr�c�.`�\sQsQsnQsQsQsUsP!)�CopyBaseTestCasei�c��[grrr;rs&r�test_attributes� CopyBaseTestCase.test_attributes�r�rc��[grrr;rs&r�
test_realcopy�CopyBaseTestCase.test_realcopy�r�rr)rrrrr�r�rr0rMs@rr�r��s����"�"�"rr�c�:`�\sQsQsnQsQsQsQsQsUs	P!)�PythonCopyTestCasei�c���[OO[O2oUOQQQQ5UO	UO
2UO
UO2UO
UO2UO2oUO	UO
2UO
UO2UO
UO2UO[UO2[UO22UO[UO2[UO22P!�r�rrrF)rrbr�r�rQr$�assertIsNotNone�_inner�_outerr�r�rbrYs&  rr��"PythonCopyTestCase.test_attributes�s���
�Y�Y�
�
�t�y�y�
)��
���V�V�x��8����"�(�(�#����R�Y�Y�'����R�Y�Y�'�
�W�W�Y�����"�(�(�#����R�Y�Y�'����R�Y�Y�'�����b�i�i��$�r�y�y�/�:�����b�i�i��$�r�y�y�/�:rc���[OO[O2oUOQQQQ5UO	2oUO[
U2[
U22UO[
UO2[
UO22UO[
UO2[
UO22P!r�)	rrbr�r�r��assertNotEqual�idr�r�rYs&  rr�� PythonCopyTestCase.test_realcopy�s���
�Y�Y�
�
�t�y�y�
)��
���V�V�x��8�
�W�W�Y�����B�r�F�B�r�F�+����B�r�y�y�M�2�b�i�i�=�9����B�r�y�y�M�2�b�i�i�=�9rc�2�[OQQQ5oUOQ2UO2oUO	UO2UO22UO	UO
2UO
22P!�r�rrFssome random text)rrbr�r�r�r\r�rYs&  r�
test_equality� PythonCopyTestCase.test_equality�sb��
�Y�Y�v��
2��
�	�	�%�&�
�W�W�Y���������b�i�i�k�2������������8rc�z�[OQQQ5oUOQ2UO2oUO	[U2[U22UO
UO2UO22UO
UO2UO22P!r�)	rrkr�r�r�r�r�r\r�rYs&  r�test_equality_new�$PythonCopyTestCase.test_equality_new�sz��
�X�X�f��
1��
�	�	�%�&�
�W�W�Y�����B�r�F�B�r�F�+��������b�i�i�k�2������������8rr)
rrrrr�r�r�r�rr0rMs@rr�r��s����
;�:�9�9�9rr�c�4`�\sQsQsnQsQsQsQsUsP!)�ExtensionCopyTestCaseic��[g)z(Call the dedicate init() method to test.r;rRs&&r�init�ExtensionCopyTestCase.initr_rc���[OO[O2oUOU2UO	UO
2UO
UO2UO
UO2UO2oUO	UO
2UO
UO2UO
UO2P!rr)
rrbr�r�r�r$rQr�r�r�rYs&  rr��%ExtensionCopyTestCase.test_attributes
s���
�Y�Y�
�
�t�y�y�
)���	�	�"�
����R�X�X�&����"�)�)�$����"�)�)�$�
�W�W�Y�����R�X�X�&����"�)�)�$����"�)�)�$rc��[OO[O2oUOU2UO	2oUO[
UO2[
UO22P!rr)rrbr�r�r�r�r�r$rYs&  rr��#ExtensionCopyTestCase.test_realcopysP��
�Y�Y�
�
�t�y�y�
)���	�	�"�
�
�W�W�Y�����B�r�x�x�L�"�R�X�X�,�7rr)	rrrrr�r�r�rr0rMs@rr�r�s����"�%�8�8rr�c�(`�\sQsQsnQsQsUsP!)�OpenSSLCopyTestCasei c�0�UOQQQQ5P!r�)rsrRs&&rr��OpenSSLCopyTestCase.init#s��	���V�V�x��@rr�rrrrr�rr0rMs@rr�r� s����A�Arr�c�(`�\sQsQsnQsQsUsP!)�BuiltinCopyTestCasei'c�0�UOQQQQ5P!r�)rwrRs&&rr��BuiltinCopyTestCase.init*s��	
���V�V�x��@rrr�rMs@rr�r�'s����A�Arr�c�h`�\sQsQsn\Q2sQsQsQsQs	Qs
QsQ	sQ
s
QsQsUsP!)
�CompareDigestMixini0c��[g)z#Implementation of 'a == b' to test.r;��a�bs&&rr�!CompareDigestMixin.compare_digest2rrc�b�UOVQ59^tt^2UOUOV22PPP2UOV!Q59^tt^2UOUOV!22PPP2P!)%fhKU9h)%fhP!9h�r�)r�r�r�r>r�r�s&&&r�assert_digest_equal�&CompareDigestMixin.assert_digest_equal7sr��
�\�\�A�\�
#�
#��O�O�D�/�/��5�6�$�
�\�\�A�\�
#�
#��O�O�D�/�/��5�6�$�
#�$�
#��
#�
#�
#��#�!B
�!B�
B	�B	�B.	�&B.	c�b�UOVQ59^tt^2UOUOV22PPP2UOV!Q59^tt^2UOUOV!22PPP2P!)%fhKU9h)%fhP!9hr�)r��assertFalserr�s&&&r�assert_digest_not_equal�*CompareDigestMixin.assert_digest_not_equal=sv��
�\�\�A�\�
#�
#����T�0�0��6�7�$�
�\�\�A�\�
#�
#����T�0�0��6�7�$�
#�$�
#��
#�
#�
#�r�c��QFDGvqUO[UOV2UO[UOV!2JI	P!)�d))r���)r��foobar)�foobarr�)�fooär�)r�r�rr�s&  r�test_exceptions�"CompareDigestMixin.test_exceptionsCsB��
�D�A�
���i��)<�)<�a�C����i��)<�)<�a�C�
rc��QQq!UOV2QQq!UOV2QQq!UOV2QQq!UOV2QQq!UOV2QQq!UOV2P!)r��foosޭ��sޭ�foobazs���)r�r�r�s&  r�
test_bytes�CompareDigestMixin.test_bytesMs����&�1��$�$�Q�*�"�K�1��$�$�Q�*��)�1��$�$�Q�*�"�$7�1��$�$�Q�*��)�1�� � ��&�"�$7�1�� � ��&rc���[Q2[Q2q!UOV2[Q2[Q2q!UOV2[Q2[Q2q!UOV2P!�r�r�r��r�r�r�r�s&  r�test_bytearray�!CompareDigestMixin.test_bytearray`sc����#�Y�y�%9�1�� � ��&���#�Y�v�%6�1��$�$�Q�*���#�Y�y�%9�1��$�$�Q�*rc��[Q2Qq!UOV2[Q2Qq!UOV2[Q2Qq!UOV2P!rrr�s&  r�test_mixed_types�#CompareDigestMixin.test_mixed_typesmsT����#�Y�1�� � ��&���#�V�1��$�$�Q�*���#�Y�1��$�$�Q�*rc��QQq!UOV2QQq!UOV2QQq!UOV2P!)r��foo�foobaz)r�r�r�s&  r�test_string�CompareDigestMixin.test_stringzsE����1�� � ��&��h�1��$�$�Q�*���1��$�$�Q�*rc���QQ[2oUQ2UQ2q2UOV#2UQ2Qq2UOV#2UQ2UQ2q2UOV#2P!)c�(`�\sQsQsnQsQsUsP!)�2CompareDigestMixin.test_string_subclass.<locals>.Si�c��[Q2g�zshould not be called�r��r>�others&&r�__eq__�9CompareDigestMixin.test_string_subclass.<locals>.S.__eq__���� �!7�8�8rr�rrrrrrr0rMs@r�Sr������
9�
9rrr�r
)r�r�r�)r>rr�r�s&   r�test_string_subclass�'CompareDigestMixin.test_string_subclass�sc��	9��	9���{�A�h�K�1�� � ��&���{�H�1�� � ��&���{�A�h�K�1��$�$�Q�*rc���QQ[2oUQ2UQ2q2UOV#2UQ2Qq2UOV#2UQ2UQ2q2UOV#2P!)c�(`�\sQsQsnQsQsUsP!)�1CompareDigestMixin.test_bytes_subclass.<locals>.Bi�c��[Q2grrrs&&rr�8CompareDigestMixin.test_bytes_subclass.<locals>.B.__eq__�rrrrrMs@r�Br�rrr"r�r�)r�r�r�)r>r"r�r�s&   r�test_bytes_subclass�&CompareDigestMixin.test_bytes_subclass�sc��	9��	9���|�Q�y�\�1�� � ��&���|�Y�1�� � ��&���|�Q�y�\�1��$�$�Q�*rr)rrrr�staticmethodrr�r�r�r�rrrrr#rr0rMs@rr�r�0sJ�����"��"�7�8�D�'�&+�+�+�
+�
+�
+rr�c�@`�\sQsQsn\O
sQsQsUsP!)�HMACCompareDigestTestCasei�c��[d#UOUO[2P!UOUO[2P!rr)�openssl_compare_digest�assertIsr�operator_compare_digestrs&r�test_compare_digest_func�2HMACCompareDigestTestCase.test_compare_digest_func�s2��!�-��M�M�$�-�-�/E�F��M�M�$�-�-�/F�Grr)	rrrrrrr,rr0rMs@rr'r'�s�����(�(�N�H�Hrr'c��\sQsQs\sQsP!)�OpenSSLCompareDigestTestCasei�r)rrrrr)rrrrrr/r/�s��+�Nrr/c��\sQsQs\sQsP!)�OperatorCompareDigestTestCasei�r)rrrrr+rrrrrr1r1�s��,�Nrr1c�`�\sQsQsnQs\O2Q2s\OQ2Q2s	\OQ2Q2s
\OQ2Q2s\OQ2\
\]*]P
Q	5Q
22s\O Q2\
\]*]P
Q	5Q22sQs\OQP	Q
5\
\]*]P
Q	5Q22sQsUsP!)�PyMiscellaneousTestsi�z4Miscellaneous tests for the pure Python HMAC module.c
�r�[QQ,Q5oQoUUOQ29^tt^2oUUOQ29^tt^2oUOQQQQ	5oUO2UO2PPP2PPP2P!)%fhK9h)%fhP!9h)
rr#r%c�L�[V2o[OVP	UQ5!)Trt)r�r
rx)r+r�rvs&& r�watch_method�MPyMiscellaneousTests.test_hmac_constructor_uses_builtin.<locals>.watch_method�s���C�&�E��<�<��D��F�Frrsrwr�rrrF)rrbr�assert_called_once)r>rr6�f�g�_s&     r�"test_hmac_constructor_uses_builtin�7PyMiscellaneousTests.test_hmac_constructor_uses_builtin�s���#�6�J�<�@��	G�

����$8�9�9�Q�����$8�9�9�Q��	�	�&�&�H�=�A�
���!�
� � �"�	
:�
:�9�9�9��
:�9�9�s/�B%�
6B	�B%�B"
�B"
�B%�%B6	�.B6	rc���[OQQQQ5oUOUOQ2UOUO] 2UOUO
]@2P!)r�rrrFr�)rrbr�r�r�r�rRs& r�test_hmac_delegated_properties�3PyMiscellaneousTests.test_hmac_delegated_properties�sP���I�I�f�f��9���������/��������+�������r�*rc
�j�QQ[2o[O29^tt^2[OQ[2UO[29^tt^2[OQQUQ5UOQ2PPP2]Um	UO[29^tt^2[OQQUQ5UOQ2PPP2PPP2P!)%fhKq9h)%fhK-9h)%fhP!9h)c�8`�\sQsQsnQsQsQsQsQsUs	P!)�KPyMiscellaneousTests.test_legacy_block_size_warnings.<locals>.MockCrazyHashi�z#Ain't no block_size attribute here.c�r�[OUUmUOOUmP!rr)�hashlibr�_xr�)r>r�s&*r�__init__�TPyMiscellaneousTests.test_legacy_block_size_warnings.<locals>.MockCrazyHash.__init__�s$��!�.�.�$�/���#'�7�7�#6�#6�� rc�>�UOOU2P!rr)rFr�)r>�vs&&rr��RPyMiscellaneousTests.test_legacy_block_size_warnings.<locals>.MockCrazyHash.update�s�������q�!rc�8�UOO2!rr)rFr\rs&rr\�RPyMiscellaneousTests.test_legacy_block_size_warnings.<locals>.MockCrazyHash.digest�s���w�w�~�~�'�'r)rFr�)
rrrrrrGr�r\rr0rMs@r�
MockCrazyHashrC�s����5�
7�
"�
(�
(rrN�error�a�brFz)Expected warning about missing block_sizez'Expected warning about small block_size)
rx�warnings�catch_warnings�simplefilter�RuntimeWarningr�rrb�failr�)r>rNs& r�test_legacy_block_size_warnings�4PyMiscellaneousTests.test_legacy_block_size_warnings�s���	(�F�	(��
$�
$�
&�
&��!�!�'�>�:��"�"�>�2�2��	�	�$��
�>��	�	�E�F�3�()�M�$��"�"�>�2�2��	�	�$��
�>��	�	�C�D�3�'�
&�2�2��
3�2��'�
&�
&�sM�9D!�'+C;	�,D!�>+D	�)D!�;D
�D
�D!�D
�D
�D!�!D2	�*D2	c��[[Q2o[OUQ$[OQQQ2O2oQoUO
V#2UOQ2P!SOQ2h9h)�__builtin_constructor_cacher	r�smessage�@6e9ef29b75fffc5b7abae527d58fdadb2fe42e7219011976917343065f58ed4a)r�rErrr\�hexr��pop)r>�cacher��expecteds&   r�test_with_fallback�'PyMiscellaneousTests.test_with_fallback�sj����!>�?��	�"�>�>�E�%�L����F�J��>�B�B�D�I�;�H����Y�1��I�I�e���E�I�I�e��s�AA2�2Br�)�size�memuse�dry_runc�F�[QQ,Q5oUOV!2P!)rr$r%�r�1do_test_hmac_digest_overflow_error_switch_to_slow�r>rbrs&& r�,test_hmac_digest_overflow_error_openssl_only�APyMiscellaneousTests.test_hmac_digest_overflow_error_openssl_only�s ��#�6�G�9�=���>�>�t�Jrc�F�[QQ,Q5oUOV!2P!)rr#r%rfrhs&& r�,test_hmac_digest_overflow_error_builtin_only�APyMiscellaneousTests.test_hmac_digest_overflow_error_builtin_only�s ��#�6�J�<�@���>�>�t�Jrc��QU*oQU*o[OUQ29^tt^2oUOUQQ2UO2PPP2[OUQ29^tt^2oUOQUQ2UO2PPP2P!)%fhK^9h)%fhP!9h)z�Check that hmac.digest() falls back to pure Python.

The *hmac* argument implements the HMAC module interface.
The *size* argument is a large key size or message size that would
trigger an OverflowError in the C implementation(s) of hmac.digest().
�K�M�_compute_digest_fallback�mr��k)r
rxr\r8)r>rrb�bigkey�bigmsg�slows&&&   rrg�FPyMiscellaneousTests.do_test_hmac_digest_overflow_error_switch_to_slow�s�����������
�\�\�$� :�
;�
;�t��K�K���e�,��#�#�%�<��\�\�$� :�
;�
;�t��K�K��f�e�,��#�#�%�<�
;�	<�
;��<�
;�
;�s#�%B.�?%C�.B>	�7B>	�C	�
C	)�opensslc��[QQQ,Q5oQU*Q1QQU*11FD�vq4UO[U2[U2Q59^tt^2[OUQ	29^tt^2oUO
V4Q
2UO
2PPP2PPP2J�	P!)%fhK9h)%fhJ�9h)rr#r$r%rorrrsrp)�keysize�msgsizerqr�)rr�r�r
rxr\r8)r>rbrr?r@rvs&&    r�.test_hmac_digest_no_overflow_error_in_fallback�CPyMiscellaneousTests.test_hmac_digest_no_overflow_error_in_fallbacks���#�6�J��3H�I����+�t�,�t�T�D�[�.A�B�H�C����c�#�h��C���A�A��\�\�$�(B�C�C�t��K�K��%�0��+�+�-�D�B�A�C�C�C��B�A�A�s0� C	�:$B4
�C	�4C�=C�?C	�C
�C
r)rrrrrr�requires_builtin_hmacr<r�r?rWr`�requires_openssl_hashdigestrrri�requires_builtin_hashdigestrlrgr|rr0rMs@rr3r3�s)����>��)�)�+�#�,�#�"�'�'��1�+�2�+��'�'��1�E�2�E�,�'�'��1�	�2�	��/�/��6��S�1�W�Q��6�K�7�7�K��/�/��6��S�1�W�Q��6�K�7�7�K�&�&�'�'��t�<��S�1�W�Q��6�.�7�=�.rr3c�T``�\sQsQsnQs\U1Qk2sQsQsQs	Qs
UsU9s!)�BuiltinMiscellaneousTestsiaHMAC-BLAKE2 is not standardized as BLAKE2 is a keyed hash function.

In particular, there is no official test vectors for HMAC-BLAKE2.
However, we can test that the HACL* interface is correctly used by
checking against the pure Python implementation output.
c��:�[RU_2[OQ2UmUOO
UmUOOUmP!)�_blake2)r(r)r�
import_module�blake2�blake2b�blake2sr*s&�rr)�$BuiltinMiscellaneousTests.setUpClass%sB���
����"�0�0��;��
��j�j�(�(����j�j�(�(��rc��UOU[2[OV#U2oUO	V2P!rr)r�r�rrqr�)r>r\r?r@r��expects&&&&& r�assert_hmac_blake_correctness�7BuiltinMiscellaneousTests.assert_hmac_blake_correctness,s2�����f�e�,��.�.�s��B������(rc���[O]2[O]2q!UOOV2oUO	V1V O
2P!��)r�r�r�compute_blake2b_32r�r��r>r?r@r\s&   r�test_compute_blake2b_32�1BuiltinMiscellaneousTests.test_compute_blake2b_321�G���#�#�A�&��(8�(8��(<�S����-�-�c�7���*�*�6��\�\�Jrc���[O]2[O]2q!UOOV2oUO	V1V O
2P!r�)r�r�r�compute_blake2s_32r�r�r�s&   r�test_compute_blake2s_32�1BuiltinMiscellaneousTests.test_compute_blake2s_326r�rr)
rrrrrr/r)r�r�r�rr0r1r2s@@rr�r�s5������)��)�)�
K�
K�Krr��__main__)_rr�rGrrEr�rrR�	_operatorrr+�testr�test.supportrrrrr�test.support.hashlib_helperrr	r
r�test.support.import_helperr�
unittest.mockr
r#rr)�ImportError�_sha2rrrr!r~r5rxrLr9rOrZr^r`rh�requires_openssl_hashlibrprwr~r�r�r�r�r�rp�TestCaser�r�r�r�r�r�r�r�r�rrrr,rBrLr�rirrur~r�r�r�r�r�r�r�r�r�r�r'r/r1r3r�r�mainrrr�<module>r�s����$����
���@��(�5�6���;��"��A�
��
;���
N�K�
N��%�%�'�0��0�(�0��X��
E�
E� 
H�
H� 3�3�
N��l�K�
N� 	H�K��{�	H��(�(�*�L�\�;�L�+�L�P�/��{�P�C�C�*n;�\�;�0B�n;�bK�}�n�K�
B�2�N�
B�	�2�N�	�w�)�>�w�t	 ��(:� �,
�-�+�4�+�-�#�,�,�
�
�-�+�4�+�-�#�,�,�
�
�!6�!1�!:�!1�!3�!)�!2�!2�
�
�!6�!1�!:�!1�!3�!)�!2�!2�
��.�2�)�!�*�*��N�.�0�)�!�*�*�N�&:�\�;�:�z!?�|�[�:L�!?�H?�]�3�5�?�,8�.�0F�$�-�-�8�
'�"7�9O�"*�"3�"3�'�4@�(>�(@�@�>6�!7�!B�!)�!2�!2�6�88�!7�!B�!)�!2�!2�8�*("�,�("�V�#�#�H�-�
?�)�=�:M��(�(�
?�.�
?� �+�+�H�5�
L�2�4G�$�-�-�
L�6�
L� 
L�2�4G�$�-�-�
L� (<�(<�V��!�}�&9�8�;L�;L�!��!��+�+�H�5�%�/��1B�1B�%�6�%�
&�.�/��1B�1B�
&�"�"��#�#�H�-�+9�)�8�+<�+<�+9�.�+9�\8�,�8�8�+�+�H�5�A�/��1B�1B�A�6�A��%�%�'�A�/��1B�1B�A�(�A�m+�m+�`H� 2�H�4E�4E�H��(�(�*�,�#5�x�7H�7H�,�+�,�-�$6��8I�8I�-�g.�8�,�,�g.�TK� 2�H�4E�4E�K�>�z���M�M�O���c0�"��H�!��"�����D��s0�
R&�&R8�&R5�,R5�4R5�8S�>S�S

Youez - 2016 - github.com/yon3zu
LinuXploit