HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: sport3497 (1034)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/lib64/python3.10/site-packages/ecdsa/__pycache__/test_pyecdsa.cpython-310.pyc
o

�h�d�@s�ddlmZmZmZzddlZWn
eyddlZYnwddlZddlZddl	Z	ddl
Z
ddlZddlm
Z
mZddlZddlmZddlmZmZddlmZddlmZddlmZmZdd	lmZmZmZdd
l m!Z!ddl!m"Z"m#Z#m$Z$m%Z%m&Z&ddl!m'Z'm(Z(m)Z)dd
l!m*Z*m+Z+m,Z,ddl-m.Z.m/Z/ddl-m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZIm-Z-ddlJmKZKmLZLmMZMmNZNddlOmPZPddl mQZQddl mRZRddl mJZJGdd�deS�ZTiZUdejVv�rdeUd<dd�ZWGdd�dejX�ZYe
jZ�[ddd �e\d!�D��d"d#��Z]gZ^e-D]Z_d$D]Z`e^�ae
jbe_e`d%�ce_jde`�d&���q3�q/e
jZ�[d'e^�d(d)��ZedejVv�r_e4e:gZ^ne-Z^e
jZ�[d*e^�d+d,��Zfe
jZjgGd-d.�d.ejX��ZhGd/d0�d0ejX�ZiGd1d2�d2ejX�ZjGd3d4�d4ejX�ZkGd5d6�d6ejX�ZlGd7d8�d8ejX�ZmGd9d:�d:em�ZnGd;d<�d<em�Zoe
jZ�[d=e
jbd>d?d@dAdBejpdCdDe6dEd&�
e
jbdFdGdHdIdBejqdJdKe7dLd&�
e
jbdMdNdOdPdBejrdQdRe8dSd&�
g�dTdU��ZsdS)V�)�with_statement�division�print_functionN)�hexlify�	unhexlify)�partial)�given�settings)�binary_type�)�
SigningKey�VerifyingKey)�BadSignatureError�MalformedPointError�BadDigestError)�util)�
sigencode_der�sigencode_strings�sigencode_strings_canonize�sigencode_string_canonize�sigencode_der_canonize)�
sigdecode_der�sigdecode_strings�sigdecode_string)�number_to_string�encoded_oid_ecPublicKey�MalformedSignature)�Curve�UnknownCurveError)�	SECP112r1�	SECP112r2�	SECP128r1�	SECP160r1�NIST192p�NIST224p�NIST256p�NIST384p�NIST521p�	SECP256k1�BRAINPOOLP160r1�BRAINPOOLP192r1�BRAINPOOLP224r1�BRAINPOOLP256r1�BRAINPOOLP320r1�BRAINPOOLP384r1�BRAINPOOLP512r1�BRAINPOOLP160t1�BRAINPOOLP192t1�BRAINPOOLP224t1�BRAINPOOLP256t1�BRAINPOOLP320t1�BRAINPOOLP384t1�BRAINPOOLP512t1�Ed25519�Ed448�curves)�curve_brainpoolp224r1�curve_brainpoolp256r1�curve_brainpoolp384r1�curve_brainpoolp512r1)�Point)�der)�rfc6979)�ecdsac@seZdZdS)�SubprocessErrorN)�__name__�
__module__�__qualname__�rFrF�E/usr/local/CyberCP/lib/python3.10/site-packages/ecdsa/test_pyecdsa.pyrBJsrBz--fast��max_examplescCsVd}tj|g|��tjtjd�}|��\}}|jdkr'td|||j|f��|��S)N�openssl)�stdout�stderrrz,cmd '%s %s' failed: rc=%s, stdout/err was %s)	�
subprocess�Popen�split�PIPE�STDOUT�communicate�
returncoderB�decode)�cmd�OPENSSL�prK�ignoredrFrFrG�run_opensslUs�
��rYc@seZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)dOdP�Z*dQdR�Z+dSdT�Z,dUdV�Z-dWdX�Z.dYdZ�Z/d[d\�Z0d]d^�Z1d_d`�Z2dadb�Z3dcdd�Z4dedf�Z5dgdh�Z6didj�Z7dkdl�Z8dmdn�Z9dodp�Z:dqdr�Z;dsdt�Z<dudv�Z=dwdx�Z>dydz�Z?d{d|�Z@d}d~�ZAdd��ZBd�d��ZCd�d��ZDd�S)��ECDSAcCsjt��}|��}d}|�|�}|�|�||��|�t|j||d�t�	|�
��}|�|�||��dS)N�blahblahsbad)r�generate�get_verifying_key�sign�
assertTrue�verify�assertRaisesrr
�from_string�	to_string)�self�priv�pub�data�sig�pub2rFrFrG�
test_basicfs
zECDSA.test_basicc	Cs�d}tdd�}t�|ttj�}|��}t�tj	�
�|tjt�|����}|j||d�}|�
|�||��|j||d�}|�
|�||��|�|tj�}|�
|�||��|�||�|�||�dS)Nr[� 9d0219792467d7d37b4d43298a7d0c05�)�k)�intr�from_secret_exponentr(�hashlib�sha256r]r@�
generate_k�	generator�order�digestr^r_r`�sign_deterministic�assertEqual)	rdrg�secexprerfrm�sig1�sig2�sig3rFrFrG�test_deterministicss(
��zECDSA.test_deterministiccCs|�tt�|�tt�dS�N)ra�	TypeErrorrr
�rdrFrFrG�test_bad_usage�szECDSA.test_bad_usagecCsJt}t��}|��}|�t|���|j�|�d�}|�t|�|j	�dS)N�data)
r#rr\r]rw�lenrc�verifying_key_lengthr^�signature_length)rd�defaultrerfrhrFrFrG�test_lengths_default�s
zECDSA.test_lengths_defaultcCsd}t}t�||j�}t�||j�}|�||�t�||�}t�||�}|�t|���t|����|�|�	�|�	��|�
�}|�
�}d}	|�|	�}
|�|	�}|�|�
|
|	��|�|�
|
|	��|�|�
||	��|�|�
||	��|�t|���t|����dS)Nssecretr�)r#r� randrange_from_seed__trytryagainrtrwrrorrc�to_pemr]r^r_r`)rd�seed�curve�secexp1�secexp2�priv1�priv2�pub1rirgryrzrFrFrG�test_serialize�s*�

 zECDSA.test_serializecs�d��fdd�}tj|d�}tj|d�}|�t|�����t|������|jd|d�}|jd|d�}|�t|�t|��dS)N�=all the entropy in the entire world, compressed into one linec��d|�Sr}rF��numbytes��srFrG�not_much_entropy��z.ECDSA.test_nonrandom.<locals>.not_much_entropy��entropyr�)rr\rwrr]rcr^)rdr�r�r�ryrzrFr�rG�test_nonrandom�s�zECDSA.test_nonrandomcCs0|�|jj|jj�|�|jjj|jjj�dSr})rw�privkey�secret_multiplier�
public_keyrs)rdr�r�rFrFrG�assertTruePrivkeysEqual�s��zECDSA.assertTruePrivkeysEqualcs�d��fdd�}t��}|�|jtj�tjtd�}|�|jtj�tj|d�}|�|jtj�tj|d�}|�|jtj�|�||�tjdd�}|�|jtj�tjdd�}|�||�tjdtd	�}|�|jtj�dS)
Nr�cr�r}rFr�r�rFrGr��r�z5ECDSA.test_privkey_creation.<locals>.not_much_entropy�r�r��)rx�)rxr�)rr\rw�baselenr#r$r�ro)rdr�r�r�rFr�rG�test_privkey_creation�s"zECDSA.test_privkey_creationcCsXt��}|��}|�t|�t�|�t|�tj�t�	|�}|�
||�|��}|�t|�t�|�|�
d��|�|���d��t�|�}|�
||�|��}|�t|�t�t�|�}|�
||�tjtd�}|��}|�t|�t�|�|�
d��|�|���d��t�|�}|�
||�|��}|�t|�t�t�|�}|�
||�dS)N�-----BEGIN EC PRIVATE KEY-----�-----END EC PRIVATE KEY-----r�)rr\rcrw�typer
r�r#r�rbr�r�r_�
startswith�strip�endswith�from_pem�to_der�from_derr%�rdr��s1r�rFrFrG�test_privkey_strings�s6




zECDSA.test_privkey_stringscCs�tjtd�}|��}|�t|�t�|�|�d��|�|�	��
d��t�|�}|�||�|�
�}|�t|�t�t�|�}|�||�dS)Nr�r�r�)rr\r/r�rwr�r
r_r�r�r�r�r�r�r�r�rFrFrG�test_privkey_strings_brainpools

z$ECDSA.test_privkey_strings_brainpoolcCs<|�|jj|jj�|�|jj|jj�|�|j|j�dSr})rw�pubkey�pointrsr�)rdr�rirFrFrG�assertTruePubkeysEqualszECDSA.assertTruePubkeysEqualcCs�t��}|��}|��}|�t|�t�|�t|�tj	�t
�|�}|�||�tjt
d�}|��}|��}|�t|�t�|�t|�t
j	�t
j|t
d�}|�||�|��}|�t|�t�t
�|�}|�||�|�tjt
j|d�t
�|�}Gdd�d�}Gdd�d�}td|�|�dd�}	|	|_|��}
|�tt
j|
�|��}|�t|�t�|�|�d	�|�|�|���d
�|�t
�|�}|�||�dS)Nr��junkc@�eZdZdd�ZdS)z0ECDSA.test_pubkey_strings.<locals>.FakeGeneratorcSsdS)N��[rFrrFrFrGrt;sz6ECDSA.test_pubkey_strings.<locals>.FakeGenerator.orderN)rCrDrErtrFrFrFrG�
FakeGenerator:�r�c@r�)z.ECDSA.test_pubkey_strings.<locals>.FakeCurveFpcSstd�S)N�M65255345290392407050209505469627313404541085228058844382513856749047873406763)rnrrFrFrGrW?s�z0ECDSA.test_pubkey_strings.<locals>.FakeCurveFp.pN)rCrDrErWrFrFrFrG�FakeCurveFp>r�r��unknown)rrHr�r���s-----BEGIN PUBLIC KEY-----s-----END PUBLIC KEY-----)rr\r]rcrwr�r
r�r#r�r
rbr�r%r�r�rar?�
UnexpectedDERrr�rr�r_r�r�r�r�)rdr�r�r�ri�pub1_der�badpubr�r��badcurve�badder�pemrFrFrG�test_pubkey_stringssH

�
�
zECDSA.test_pubkey_stringscCs�tjtd�}|��}|��}|�t|�t�|�t|�tj	�t
j|td�}|�||�|�
�}|�t|�t�t
�|�}|�||�dS�Nr�)rr\r/r]rcrwr�r
r�r�r
rbr�r�r�)rdr�r�r�rir�rFrFrG�test_pubkey_strings_brainpoolSs
z#ECDSA.test_pubkey_strings_brainpoolcCsHt��}|j}|�t��|�d�Wd�dS1swYdS�N�raw)rr\�
verifying_keyra�
ValueErrorr��rd�sk�vkrFrFrG�*test_vk_to_der_with_invalid_point_encodingas
"�z0ECDSA.test_vk_to_der_with_invalid_point_encodingcCsBt��}|�t��|�d�Wd�dS1swYdSr�)rr\rar�r��rdr�rFrFrG�*test_sk_to_der_with_invalid_point_encodinghs"�z0ECDSA.test_sk_to_der_with_invalid_point_encodingcCsrt}tjd�d}t�||�}t�dd�}t�||�}|�tj��t�|�Wd�dS1s2wYdS)N�rrH�H�='r�rr�garbage���	rr?�
encode_oid�encode_sequence�encode_bitstringrar�r
r��rd�type_oid_der�
curve_oid_der�enc_type_der�	point_der�	to_decoderFrFrG�(test_vk_from_der_garbage_after_curve_oidns�"�z.ECDSA.test_vk_from_der_garbage_after_curve_oidcCsttjd�}tjd�}t�||�}t�dd�}t�||�}|�tj��t�|�Wd�dS1s3wYdS)N�rrHr�r�r�)r?r�r�r�rar�r
r�r�rFrFrG�!test_vk_from_der_invalid_key_typezs

"�z'ECDSA.test_vk_from_der_invalid_key_typecCsrt}tjd�}t�||�}t�dd�d}t�||�}|�tj��t�|�Wd�dS1s2wYdS)Nr�r�r�r�r�rFrFrG�+test_vk_from_der_garbage_after_point_string�s
"�z1ECDSA.test_vk_from_der_garbage_after_point_stringcCsnt}tjd�}t�||�}t�dd�}t�||�}|�tj��t�|�Wd�dS1s0wYdS)Nr�s�r�r�rFrFrG�"test_vk_from_der_invalid_bitstring��
"�z(ECDSA.test_vk_from_der_invalid_bitstringcCslt}tjd�}t�||�}t�dd�}t�||�}|�t��t�|�Wd�dS1s/wYdS)Nr��@����������������������������������������������������������������r)	rr?r�r�r�rarr
r�r�rFrFrG�0test_vk_from_der_with_invalid_length_of_encoding�s
"�z6ECDSA.test_vk_from_der_with_invalid_length_of_encodingcCsnt}tjd�}t�||�}t�dd�}t�||�}|�tj��t�|�Wd�dS1s0wYdS)Nr�s0������������������������������������������������rr�r�rFrFrG�"test_vk_from_der_with_raw_encoding�r�z(ECDSA.test_vk_from_der_with_raw_encodingcCs"t��}|��}d}|�|�}|�t|�t�|�t|�tj	�|�
|�||��|j|td�}|�t|�t
�|�t|�d�|�t|d�t�|�t|d�t�|�t|d�tj�|�t|d�tj�|�
|j||td��|j|td�}|�t|�t�|�
|j||td��dS)Nr�)�	sigencoderHrr)�	sigdecode)rr\r]r^rwr�r
r�r#r�r_r`r�tupler�rrr)rdr�r�rgrh�sig_derrFrFrG�test_signature_strings�s$
zECDSA.test_signature_stringscC�@d}d}tj}tt|||�|�\}}|�||�|�||�dS�N�i��rrtrrrw�rd�rr�rt�new_r�new_srFrFrG�(test_sigencode_string_canonize_no_change���z.ECDSA.test_sigencode_string_canonize_no_changecC�Hd}tj}|d}tt|||�|�\}}|�||�|�|||�dS�Nr��
r��rdr�rtr�r�r�rFrFrG�test_sigencode_string_canonize���z$ECDSA.test_sigencode_string_canonizecCr�r��rrtrrrwr�rFrFrG�)test_sigencode_strings_canonize_no_change�r�z/ECDSA.test_sigencode_strings_canonize_no_changecCr�r�r�r�rFrFrG�test_sigencode_strings_canonize�r�z%ECDSA.test_sigencode_strings_canonizecCr�)N�
���rrtrrrwr�rFrFrG�%test_sigencode_der_canonize_no_change�r�z+ECDSA.test_sigencode_der_canonize_no_changecCr�)Nr�rr�rFrFrG�test_sigencode_der_canonize�r�z!ECDSA.test_sigencode_der_canonizecCspd}tj}|dd}t|||�}t|||�}|�||�tt|||�|�\}}|�||�|�|||�dS)NrrHr)rrtrr�assertNotEqualrrw)rdr�rtr��regular_encode�canonical_encoder�r�rFrFrG�4test_sigencode_der_canonize_with_close_to_half_orders�z:ECDSA.test_sigencode_der_canonize_with_close_to_half_ordercCs>|�t��tgd�d�Wd�dS1swYdS)N)�one�twosthree��rarrrrFrFrG�*test_sig_decode_strings_with_invalid_count�"�z0ECDSA.test_sig_decode_strings_with_invalid_countcC�>|�t��tddgd�Wd�dS1swYdS)Nrr
rrrrFrFrG�(test_sig_decode_strings_with_wrong_r_len rz.ECDSA.test_sig_decode_strings_with_wrong_r_lencCr)N��s��rrrrFrFrG�(test_sig_decode_strings_with_wrong_s_len$rz.ECDSA.test_sig_decode_strings_with_wrong_s_lencCsJt��}|j}|�t��|�dd�Wd�dS1swYdS)Ns�)rr\r�rar�
verify_digestr�rFrFrG�test_verify_with_too_long_input(s
"�z%ECDSA.test_verify_with_too_long_inputcC�:|�t��t�d�Wd�dS1swYdS�Nr)rarrrorrFrFrG�4test_sk_from_secret_exponent_with_wrong_sec_exponent/�"�z:ECDSA.test_sk_from_secret_exponent_with_wrong_sec_exponentcCr)N�)rarrrbrrFrFrG�)test_sk_from_string_with_wrong_len_string3rz/ECDSA.test_sk_from_string_with_wrong_len_stringcCsTt�d�}t�|�d}|�tj��t�|�Wd�dS1s#wYdS)Nrr��r?�encode_integerr�rar�rr��rd�ver_derr�rFrFrG�)test_sk_from_der_with_junk_after_sequence7s

"�z/ECDSA.test_sk_from_der_with_junk_after_sequencecCsPt�d�}t�|�}|�tj��t�|�Wd�dS1s!wYdSrrr rFrFrG�#test_sk_from_der_with_wrong_version>s


"�z)ECDSA.test_sk_from_der_with_wrong_versioncCsvt�d�}t�d�}tjd�}t�d|�}t�||||�}|�tj��t�	|�Wd�dS1s4wYdS)Nrr�r��
r?r�encode_octet_stringr��encode_constructedr�rar�rr��rdr!�privkey_derr��	const_derr�rFrFrG�"test_sk_from_der_invalid_const_tagEs


�"�z(ECDSA.test_sk_from_der_invalid_const_tagcCszt�d�}t�d�}tjd�d}t�d|�}t�||||�}|�tj��t�	|�Wd�dS1s6wYdS)Nrr�r�r�rr$r'rFrFrG�*test_sk_from_der_garbage_after_privkey_oidQs

�"�z0ECDSA.test_sk_from_der_garbage_after_privkey_oidcCsXt�d�}t�d�}tjd�}t�d|�}t�||||�}t�|�}|�|j	j
d�dS)Nrr�r�rr)r?rr%r�r&r�rr�rwr�r�)rdr!r(r�r)r�r�rFrFrG�#test_sk_from_der_with_short_privkey]s


�
z)ECDSA.test_sk_from_der_with_short_privkeycCs�t�d�}t�t�dddddd�t�ddddddd��}t�t�t�d�t�d���}t�|||�}|�tj��t�|�Wd�dS1sIwYdS)NrHrr�r�r�r��	r?rr�r�r%rar�rr��rdr!�
algorithm_derr(r�rFrFrG�&test_sk_from_p8_der_with_wrong_versionis
���"�z,ECDSA.test_sk_from_p8_der_with_wrong_versioncCs�t�d�}t�t�ddd�t�ddddddd��}t�t�t�d�t�d���}t�|||�}|�tj��t�|�Wd�dS1sFwYdS)NrrHr�r�r�r�r-r.rFrFrG�(test_sk_from_p8_der_with_wrong_algorithmys
 ���"�z.ECDSA.test_sk_from_p8_der_with_wrong_algorithmcCs�t�d�}t�t�dddddd�t�ddddddd�t�d��}t�t�t�d�t�d���}t�|||�}|�tj��t�|�Wd�dS1sMwYdS)NrrHr�r�r�r�r�r-r.rFrFrG�6test_sk_from_p8_der_with_trailing_junk_after_algorithm�s
���"�z<ECDSA.test_sk_from_p8_der_with_trailing_junk_after_algorithmcCs�t�d�}t�t�dddddd�t�ddddddd��}t�t�t�d�t�d��t�d��}t�|||t�d��}|�tj��t�|�Wd�dS1sRwYdS)	NrrHr�r�r�r�i�r�r-r.rFrFrG�0test_sk_from_p8_der_with_trailing_junk_after_key�s*
�����"�z6ECDSA.test_sk_from_p8_der_with_trailing_junk_after_keycCsDt�d�}|�t��|�d�Wd�dS1swYdS)Nr�r�)rrorar�sign_digestr�rFrFrG�test_sign_with_too_long_hash�s
"�z"ECDSA.test_sign_with_too_long_hashc	Cs�tjttjd�}d}|�|�}tj|���	�ttjd�}|�
|�||��tjtd�}|j|tjd�}tj|���	�ttjd�}|�
|�||��tj|���	�td�}|�
|j||tjd��dS)N�r��hashfuncssecurity level is 128 bitsr��r7)rr\r%rprqr^r
rbr]rcr_r`)	rdr�rgrhr��sk2rz�vk2�vk3rFrFrG�
test_hashfunc�s*

�
��zECDSA.test_hashfunccCs�t}tj|d�}|��}d}|�|�}t�|||�}|D]}|�|�||��|�	|j
|j
�|�	|j|j�q|�|j
jdd�|D��dS)Nr�r[cS�g|]}|jj�qSrF�r�r���.0�recovered_vkrFrFrG�
<listcomp>��z2ECDSA.test_public_key_recovery.<locals>.<listcomp>)r)rr\r]r^r
�from_public_key_recoveryr_r`rwr��default_hashfunc�assertInr�r��rdr�r�r�rg�	signature�
recovered_vksrArFrFrG�test_public_key_recovery�s$
���zECDSA.test_public_key_recoverycCs�t}tj|tjd�}|��}d}|�|�}tj|||tjdd�}|D]}|�	|�
||��|�|j|j�|�tj|j
�q"|�|jjdd�|D��dS)Nr6r[T)r7�allow_truncatecSr=rFr>r?rFrFrGrBrCzCECDSA.test_public_key_recovery_with_custom_hash.<locals>.<listcomp>)r)rr\rprqr]r^r
rDr_r`rwr�rErFr�r�rGrFrFrG�)test_public_key_recovery_with_custom_hash�s(
�	�z/ECDSA.test_public_key_recovery_with_custom_hashcCs�t�d�}|j}d}|�|��|�|�|�d�|�|�|�d�d|�|�|�d�d|dd��|�|�d	�d
|�dS)Nr��0��d�S���K�x !���Ƞc���Ą)���z�#���O��HQ�*r��uncompressed��
compressed���hybrid�)rror�rwrc)rdr�r��exprFrFrG�
test_encodings
�zECDSA.test_encodingcCs�t�d�}|j}d}t�|�}|�|jj|jj�t�d|�}|�|jj|jj�t�d|dd��}|�|jj|jj�t�d|�}|�|jj|jj�dS)Nr�rMrOrQrRrT)rror�r
rbrwr�r�)rdr�r��enc�from_raw�from_uncompressed�from_compressedrFrFrG�
test_decoding!s
�
zECDSA.test_decodingcCs.d}tj|dd�}t�d�}|�||j�dS)N�1��d�S���K�x !���Ƞc���Ą)���z�#���O��HQ�*�rN��valid_encodingsr�)r
rbrrorwr�)rdrWr�r�rFrFrG�)test_uncompressed_decoding_as_only_alowed7s
�
z/ECDSA.test_uncompressed_decoding_as_only_alowedcC�Rd}|�t��}tj|dd�Wd�n1swY|�dt|j��dS)NrM�rSr^rS�rarr
rbrF�str�	exception�rdrWrUrFrFrG�%test_raw_decoding_with_blocked_formatCs��z+ECDSA.test_raw_decoding_with_blocked_formatcCsN|�t��}tjddd�Wd�n1swY|�dt|j��dS)N�)r��foobarr^zOnly uncompressed, compressed)rar�r
rbrFrdre)rd�erFrFrG�!test_decoding_with_unknown_formatNs�z'ECDSA.test_decoding_with_unknown_formatcCra)Nr\rbr^�Invalid X9.62 encodingrcrfrFrFrG�.test_uncompressed_decoding_with_blocked_formatT���z4ECDSA.test_uncompressed_decoding_with_blocked_formatcCra)Ns1��d�S���K�x !���Ƞc���Ą)���z�#���O��HQ�*r]r^rlrcrfrFrFrG�(test_hybrid_decoding_with_blocked_format`rnz.ECDSA.test_hybrid_decoding_with_blocked_formatcCs^t�d�}|j}|�d�}|�|dd�d�d|dd�}tj|ddd�}|�||�dS)	Nr�rSrrT�rbF)r_�validate_point)rror�rcrwr
rb�rdr�r�rW�brFrFrG�Atest_hybrid_decoding_with_inconsistent_encoding_and_no_validationls

�zGECDSA.test_hybrid_decoding_with_inconsistent_encoding_and_no_validationcCsZddd�}|�t��}tj|dd�Wd�n1swY|�dt|j��dS)Ns1��d�S���K�x !���Ƞc���Ą)���z�#���O��HQ�*�)rSr�r^z
(hybrid, raw)rcrfrFrFrG�,test_compressed_decoding_with_blocked_format|s��z2ECDSA.test_compressed_decoding_with_blocked_formatcC�Bd}|�t��t�d|�Wd�dS1swYdS)NrMrQ�rarr
rb�rdrWrFrFrG�)test_decoding_with_malformed_uncompressed��
�"�z/ECDSA.test_decoding_with_malformed_uncompressedcCsJd}|�t��t�d|dd��Wd�dS1swYdS)NrMrrRrxryrFrFrG�'test_decoding_with_malformed_compressed��
�"�z-ECDSA.test_decoding_with_malformed_compressedcCrw)NrMrprxryrFrFrG�&test_decoding_with_inconsistent_hybrid�r{z,ECDSA.test_decoding_with_inconsistent_hybridcCs|t�d�}|j}|�d�}|�|dd�d�d|dd�}|�t��tj|dd�}Wd�dS1s7wYdS)Ni�[rSrrprTrbr^)	rror�rcrwrarr
rbrrrFrFrG�0test_decoding_with_inconsistent_hybrid_odd_point�s

"�z6ECDSA.test_decoding_with_inconsistent_hybrid_odd_pointcCsJd}|�t��t�|dd�d�Wd�dS1swYdS)NrM�/�rxryrFrFrG�%test_decoding_with_point_not_on_curve�r}z+ECDSA.test_decoding_with_point_not_on_curvecCr)Nr�rxrrFrFrG�$test_decoding_with_point_at_infinity�s"�z*ECDSA.test_decoding_with_point_at_infinitycCsXttj��tj��d�}|�t��t�d|�Wd�dS1s%wYdS)NrrQ)rr#r�rWrarr
rbryrFrFrG�test_not_lying_on_curve�s"�zECDSA.test_not_lying_on_curvecCsZtdtjtjd�}d|_d|_|�t��t�	d|�Wd�dS1s&wYdS)N�test�rrHrl� ��
rrA�	curve_192�
generator_192r�r�rarr
rb�rdr�rFrFrG�9test_from_string_with_invalid_curve_too_short_ver_key_len��"�z?ECDSA.test_from_string_with_invalid_curve_too_short_ver_key_lencCsZtdtjtjd�}d|_d|_|�t��t�	d|�Wd�dS1s&wYdS)Nr�r�rlr�r�r�rFrFrG�8test_from_string_with_invalid_curve_too_long_ver_key_len�r�z>ECDSA.test_from_string_with_invalid_curve_too_long_ver_key_lenN)ErCrDrErjr|r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrrrrr"r#r*r+r,r0r1r2r3r5r<rJrLrVr[r`rgrkrmrortrvrzr|r~rr�r�r�r�r�rFrFrFrGrZes�
	!4




!#



rZzval,evencCsg|]}dD]}||f�qqS))TFrF)r@�i�jrFrFrGrB�srB�cCsVt|tj�}|r
d|}nd|}zt�|�}t|t�sJ�WdSty*YdSw)NrQ�)rr#rtr
rb�
isinstancer)�val�evenrWr�rFrFrG�*test_VerifyingKey_decode_with_small_values�s

�r�)r�rNrPrSz{0}-{1})�idzcurve,encodingcCsBtj|d�}|j}|�|�}tj||d�}|jj|jjksJ�dSr�)rr\r�rcr
rbr�r�)r��encodingr�r��encoded�from_encrFrFrG�test_VerifyingKey_encode_decode�s

r�r�cCsntj|d�}|��}t�|��|�}|��|��ksJ�t|���|jks'J�|�d�}t|�|j	ks5J�dS)Nr�r�)
rr\r]r
rbrcr�r�r^r�)r�rer�rirhrFrFrG�test_lengthss
r�c@s�eZdZedd�ed��d�D��Zdd�Zej	j
ej	jdevdd	�d
d���Zej	j
ej	jdevd
d	�dd���Z
ej	j
ej	jdevdd	�dd���Zej	j
ej	jdevdd	�dd���Zej	j
ej	jdevdd	�dd���Zej	j
ej	jdevdd	�dd���Zej	j
ej	jdevdd	�d d!���Zej	j
ej	jd"evd#d	�d$d%���Zej	j
ej	jd"evd#d	�d&d'���Zej	j
ej	jd"evd#d	�d(d)���Zej	j
ej	jd*evd+d	�d,d-���Zej	j
ej	jd.evd/d	�d0d1���Zej	j
ej	jd2evd3d	�d4d5���Zej	j
ej	jd6evd7d	�d8d9���Zej	j
ej	jd:evd;d	�d<d=���Zej	j
ej	jd>evd?d	�d@dA���Zej	j
ej	jdBevdCd	�dDdE���Zej	j
ej	jdFevdGd	�dHdI���Zej	j
ej	jdJevdKd	�dLdM���Zej	j
ej	jdNevdOd	�dPdQ���Zej	j
ej	jdRevdSd	�dTdU���Z ej	j
ej	jdVevdWd	�dXdY���Z!ej	j
ej	jdZevd[d	�d\d]���Z"ej	j
ej	jd^evd_d	�d`da���Z#ej	j
ej	jdbevdcd	�ddde���Z$ej	j
ej	jdfevdgd	�dhdi���Z%ej	j
ej	jdjevdkd	�dldm���Z&d�dodp�Z'ej	j
ej	jdevdd	�dqdr���Z(ej	j
ej	jdevd
d	�dsdt���Z)ej	j
ej	jdevdd	�dudv���Z*ej	j
ej	jdevdd	�dwdx���Z+ej	j
ej	jdevdd	�dydz���Z,ej	j
ej	jdevdd	�d{d|���Z-ej	j
ej	jdevdd	�d}d~���Z.ej	j
ej	jd"evd#d	�dd����Z/ej	j
ej	jd"evd#d	�d�d����Z0ej	j
ej	jd"evd#d	�d�d����Z1ej	j
ej	jd*evd+d	�d�d����Z2ej	j
ej	jd.evd/d	�d�d����Z3ej	j
ej	jd2evd3d	�d�d����Z4ej	j
ej	jd6evd7d	�d�d����Z5ej	j
ej	jd:evd;d	�d�d����Z6ej	j
ej	jd>evd?d	�d�d����Z7ej	j
ej	jdBevdCd	�d�d����Z8ej	j
ej	jdFevdGd	�d�d����Z9ej	j
ej	jdJevdKd	�d�d����Z:ej	j
ej	jdNevdOd	�d�d����Z;ej	j
ej	jdRevdSd	�d�d����Z<ej	j
ej	jdVevdWd	�d�d����Z=ej	j
ej	jdZevd[d	�d�d����Z>ej	j
ej	jd^evd_d	�d�d����Z?ej	j
ej	jdbevdcd	�d�d����Z@ej	j
ej	jdfevdgd	�d�d����ZAej	j
ej	jdjevdkd	�d�d����ZBd�d�d��ZCe�ZDzd�ed��v�red�d�d�D��ZDWn
eE�yYnwd�d��ZFej	j
ej	jd�eDvd�d	�d�d����ZGej	j
ej	jd�eDvd�d	�d�d����ZHd�d��ZIej	j
ej	jd�eDvd�d	�d�d����ZJej	j
ej	jd�eDvd�d	�d�d����ZKd�S)��OpenSSLcc�"�|]}|�d�d��VqdS��:rN�rOr��r@�crFrFrG�	<genexpr>(�
��
�zOpenSSL.<genexpr>�ecparam -list_curves�
cCs:td�}|��d�d�}|gd�krd�|�Sd�|�S)N�versionr�.)�1�0r�z-{0}z-ecdsa-with-{0})rYrO�format)rd�	hash_name�v�vsrFrFrG�get_openssl_messagedigest_arg-s


z%OpenSSL.get_openssl_messagedigest_arg�	secp112r1z)system openssl does not support secp112r1��reasoncC�
|�t�Sr})�do_test_from_opensslrrrFrFrG�test_from_openssl_secp112r1;�
z#OpenSSL.test_from_openssl_secp112r1�	secp112r2z)system openssl does not support secp112r2cCr�r})r�r rrFrFrG�test_from_openssl_secp112r2Cr�z#OpenSSL.test_from_openssl_secp112r2�	secp128r1z)system openssl does not support secp128r1cCr�r})r�r!rrFrFrG�test_from_openssl_secp128r1Kr�z#OpenSSL.test_from_openssl_secp128r1�	secp160r1z)system openssl does not support secp160r1cCr�r})r�r"rrFrFrG�test_from_openssl_secp160r1Sr�z#OpenSSL.test_from_openssl_secp160r1�
prime192v1�*system openssl does not support prime192v1cCr�r}�r�r#rrFrFrG�test_from_openssl_nist192p[r�z"OpenSSL.test_from_openssl_nist192pcC�|�td�S�N�SHA256r�rrFrFrG�!test_from_openssl_nist192p_sha256c�z)OpenSSL.test_from_openssl_nist192p_sha256�	secp224r1z)system openssl does not support secp224r1cCr�r})r�r$rrFrFrG�test_from_openssl_nist224pkr�z"OpenSSL.test_from_openssl_nist224p�
prime256v1z*system openssl does not support prime256v1cCr�r}�r�r%rrFrFrG�test_from_openssl_nist256psr�z"OpenSSL.test_from_openssl_nist256pcCr��N�SHA384r�rrFrFrG�!test_from_openssl_nist256p_sha384{r�z)OpenSSL.test_from_openssl_nist256p_sha384cCr��N�SHA512r�rrFrFrG�!test_from_openssl_nist256p_sha512�r�z)OpenSSL.test_from_openssl_nist256p_sha512�	secp384r1z)system openssl does not support secp384r1cCr�r})r�r&rrFrFrG�test_from_openssl_nist384p�r�z"OpenSSL.test_from_openssl_nist384p�	secp521r1z)system openssl does not support secp521r1cCr�r})r�r'rrFrFrG�test_from_openssl_nist521p�r�z"OpenSSL.test_from_openssl_nist521p�	secp256k1z)system openssl does not support secp256k1cCr�r})r�r(rrFrFrG�test_from_openssl_secp256k1�r�z#OpenSSL.test_from_openssl_secp256k1�brainpoolP160r1z/system openssl does not support brainpoolP160r1cCr�r})r�r)rrFrFrG�!test_from_openssl_brainpoolp160r1�r�z)OpenSSL.test_from_openssl_brainpoolp160r1�brainpoolP192r1z/system openssl does not support brainpoolP192r1cCr�r})r�r*rrFrFrG�!test_from_openssl_brainpoolp192r1�r�z)OpenSSL.test_from_openssl_brainpoolp192r1�brainpoolP224r1z/system openssl does not support brainpoolP224r1cCr�r})r�r+rrFrFrG�!test_from_openssl_brainpoolp224r1�r�z)OpenSSL.test_from_openssl_brainpoolp224r1�brainpoolP256r1z/system openssl does not support brainpoolP256r1cCr�r})r�r,rrFrFrG�!test_from_openssl_brainpoolp256r1�r�z)OpenSSL.test_from_openssl_brainpoolp256r1�brainpoolP320r1z/system openssl does not support brainpoolP320r1cCr�r})r�r-rrFrFrG�!test_from_openssl_brainpoolp320r1�r�z)OpenSSL.test_from_openssl_brainpoolp320r1�brainpoolP384r1z/system openssl does not support brainpoolP384r1cCr�r})r�r.rrFrFrG�!test_from_openssl_brainpoolp384r1�r�z)OpenSSL.test_from_openssl_brainpoolp384r1�brainpoolP512r1z/system openssl does not support brainpoolP512r1cCr�r})r�r/rrFrFrG�!test_from_openssl_brainpoolp512r1�r�z)OpenSSL.test_from_openssl_brainpoolp512r1�brainpoolP160t1z/system openssl does not support brainpoolP160t1cCr�r})r�r0rrFrFrG�!test_from_openssl_brainpoolp160t1�r�z)OpenSSL.test_from_openssl_brainpoolp160t1�brainpoolP192t1z/system openssl does not support brainpoolP192t1cCr�r})r�r1rrFrFrG�!test_from_openssl_brainpoolp192t1�r�z)OpenSSL.test_from_openssl_brainpoolp192t1�brainpoolP224t1z/system openssl does not support brainpoolP224t1cCr�r})r�r2rrFrFrG�!test_from_openssl_brainpoolp224t1�r�z)OpenSSL.test_from_openssl_brainpoolp224t1�brainpoolP256t1z/system openssl does not support brainpoolP256t1cCr�r})r�r3rrFrFrG�!test_from_openssl_brainpoolp256t1�r�z)OpenSSL.test_from_openssl_brainpoolp256t1�brainpoolP320t1z/system openssl does not support brainpoolP320t1cCr�r})r�r4rrFrFrG�!test_from_openssl_brainpoolp320t1�r�z)OpenSSL.test_from_openssl_brainpoolp320t1�brainpoolP384t1z/system openssl does not support brainpoolP384t1cCr�r})r�r5rrFrFrG�!test_from_openssl_brainpoolp384t1r�z)OpenSSL.test_from_openssl_brainpoolp384t1�brainpoolP512t1z/system openssl does not support brainpoolP512t1cCr�r})r�r6rrFrFrG�!test_from_openssl_brainpoolp512t1r�z)OpenSSL.test_from_openssl_brainpoolp512t1�SHA1cCs�|j}|sJ�|�|�}tj�d�rt�d�t�d�td|�td�d}t	dd��
}|�
|�Wd�n1s=wYtd|�td|�t	d	d
��}|��}Wd�n1sbwYt�
|�}t	dd
��}|��}	Wd�n1s�wY|�|j|	|ttj|�td��t	d
��}|��}
Wd�n1s�wYt�
|
�}|j|ttj|�d�}|�|j||ttj|�d��td�t	dd
��}|��}
Wd�n1s�wYt�
|
�}|�||�dS)N�tz+ecparam -name %s -genkey -out t/privkey.pemz.ec -in t/privkey.pem -pubout -out t/pubkey.pemr��
t/data.txt�wbz6dgst %s -sign t/privkey.pem -out t/data.sig t/data.txtz=dgst %s -verify t/pubkey.pem -signature t/data.sig t/data.txt�t/pubkey.pem�rb�
t/data.sig)r7r��
t/privkey.pemr8zJpkcs8 -topk8 -nocrypt -in t/privkey.pem -outform pem -out t/privkey-p8.pem�t/privkey-p8.pem)�openssl_namer��os�path�isdir�shutil�rmtree�mkdirrY�open�write�readr
r�r_r`rrp�newrrr^rw)rdr�r��	curvename�mdargrgrj�
pubkey_pemr�r��fpr�rh�privkey_p8_pem�
sk_from_p8rFrFrGr�sf


����
�

�
��
	
�
��
�
zOpenSSL.do_test_from_opensslcC�|�t�dSr})�do_test_to_opensslrrrFrFrG�test_to_openssl_secp112r1G�z!OpenSSL.test_to_openssl_secp112r1cCrr})rr rrFrFrG�test_to_openssl_secp112r2Orz!OpenSSL.test_to_openssl_secp112r2cCrr})rr!rrFrFrG�test_to_openssl_secp128r1Wrz!OpenSSL.test_to_openssl_secp128r1cCrr})rr"rrFrFrG�test_to_openssl_secp160r1_rz!OpenSSL.test_to_openssl_secp160r1cCrr}�rr#rrFrFrG�test_to_openssl_nist192pgrz OpenSSL.test_to_openssl_nist192pcC�|�td�dSr�rrrFrFrG�test_to_openssl_nist192p_sha256o�z'OpenSSL.test_to_openssl_nist192p_sha256cCrr})rr$rrFrFrG�test_to_openssl_nist224pwrz OpenSSL.test_to_openssl_nist224pcCrr}�rr%rrFrFrG�test_to_openssl_nist256prz OpenSSL.test_to_openssl_nist256pcCrr�rrrFrFrG�test_to_openssl_nist256p_sha384�rz'OpenSSL.test_to_openssl_nist256p_sha384cCrr�rrrFrFrG�test_to_openssl_nist256p_sha512�rz'OpenSSL.test_to_openssl_nist256p_sha512cCrr})rr&rrFrFrG�test_to_openssl_nist384p�rz OpenSSL.test_to_openssl_nist384pcCrr})rr'rrFrFrG�test_to_openssl_nist521p�rz OpenSSL.test_to_openssl_nist521pcCrr})rr(rrFrFrG�test_to_openssl_secp256k1�rz!OpenSSL.test_to_openssl_secp256k1cCrr})rr)rrFrFrG�test_to_openssl_brainpoolp160r1�rz'OpenSSL.test_to_openssl_brainpoolp160r1cCrr})rr*rrFrFrG�test_to_openssl_brainpoolp192r1�rz'OpenSSL.test_to_openssl_brainpoolp192r1cCrr})rr+rrFrFrG�test_to_openssl_brainpoolp224r1�rz'OpenSSL.test_to_openssl_brainpoolp224r1cCrr})rr,rrFrFrG�test_to_openssl_brainpoolp256r1�rz'OpenSSL.test_to_openssl_brainpoolp256r1cCrr})rr-rrFrFrG�test_to_openssl_brainpoolp320r1�rz'OpenSSL.test_to_openssl_brainpoolp320r1cCrr})rr.rrFrFrG�test_to_openssl_brainpoolp384r1�rz'OpenSSL.test_to_openssl_brainpoolp384r1cCrr})rr/rrFrFrG�test_to_openssl_brainpoolp512r1�rz'OpenSSL.test_to_openssl_brainpoolp512r1cCrr})rr0rrFrFrG�test_to_openssl_brainpoolp160t1�rz'OpenSSL.test_to_openssl_brainpoolp160t1cCrr})rr1rrFrFrG�test_to_openssl_brainpoolp192t1�rz'OpenSSL.test_to_openssl_brainpoolp192t1cCrr})rr2rrFrFrG�test_to_openssl_brainpoolp224t1�rz'OpenSSL.test_to_openssl_brainpoolp224t1cCrr})rr3rrFrFrG�test_to_openssl_brainpoolp256t1�rz'OpenSSL.test_to_openssl_brainpoolp256t1cCrr})rr4rrFrFrG�test_to_openssl_brainpoolp320t1rz'OpenSSL.test_to_openssl_brainpoolp320t1cCrr})rr5rrFrFrG�test_to_openssl_brainpoolp384t1rz'OpenSSL.test_to_openssl_brainpoolp384t1cCrr})rr6rrFrFrG�test_to_openssl_brainpoolp512t1rz'OpenSSL.test_to_openssl_brainpoolp512t1c
Cs�|j}|sJ�|�|�}tj�d�rt�d�t�d�tj	|d�}|�
�}d}tdd��}|�|�
��Wd�n1s?wYtdd��}|�|���Wd�n1s[wY|j|ttj|�td�}	tdd��
}|�|	�Wd�n1s�wYtd	d��
}|�|�Wd�n1s�wYtd
d��}|�|d�Wd�n1s�wY|�ttd|�td
|�tdd��}|�|���Wd�n1s�wYtd|�td|�tdd��}|�|jdd��Wd�n	1�s
wYtd|�td|�tdd��}|�|jdd��Wd�n	1�s8wYtd|�td|�tdd��}|�|jddd��Wd�n	1�sdwYtd|�td|�dS)Nr�r�r��t/pubkey.derr�r�)r7r�r�r��
t/baddata.txt�corruptzMdgst %s -verify t/pubkey.der -keyform DER -signature t/data.sig t/baddata.txtzJdgst %s -verify t/pubkey.der -keyform DER -signature t/data.sig t/data.txtr�z7dgst %s -sign t/privkey.pem -out t/data.sig2 t/data.txtz>dgst %s -verify t/pubkey.pem -signature t/data.sig2 t/data.txtzt/privkey-explicit.pem�explicit)�curve_parameters_encodingz@dgst %s -sign t/privkey-explicit.pem -out t/data.sig2 t/data.txtr��pkcs8)r�z:dgst %s -sign t/privkey-p8.pem -out t/data.sig3 t/data.txtz>dgst %s -verify t/pubkey.pem -signature t/data.sig3 t/data.txtzt/privkey-p8-explicit.pem)r�r5zCdgst %s -sign t/privkey-p8-explicit.pem -out t/data.sig3 t/data.txt)r�r�r�rrrrrrr\r]rrr�r�r^rrprrrarBrY)
rdr�r�r	r
r�r�rgrjr�rFrFrGrs�


��
����������������������������zOpenSSL.do_test_to_opensslz-rawinz
pkeyutl -helpccs$�|]
}|td�vr|��VqdS)zlist -public-key-methodsN)rY�lowerr�rFrFrGr�ws���)�ED25519�ED448cCs�tj�d�rt�d�t�d�tj|d�}|��}d}t	dd��}|�
|���Wd�n1s3wYt	dd��}|�
|���Wd�n1sOwY|�
|�}t	dd��
}|�
|�Wd�n1snwYt	dd��
}|�
|�Wd�n1s�wYt	d	d��}|�
|d
�Wd�n1s�wY|�t��td�Wd�n1s�wYtd�t�d�dS)
Nr�r�r�r1r�r�r�r�r2r3zWpkeyutl -verify -pubin -inkey t/pubkey.pem -rawin -in t/baddata.txt -sigfile t/data.sigzTpkeyutl -verify -pubin -inkey t/pubkey.pem -rawin -in t/data.txt -sigfile t/data.sig)r�rrrrrrr\r]rrr�r�r^rarBrY)rdr�r�r�rgrjrhrFrFrG�do_eddsa_test_to_openssls>

��
������z OpenSSL.do_eddsa_test_to_openssl�ed25519z4system openssl does not support signing with Ed25519cCr�r})r:r7rrFrFrG�test_to_openssl_ed25519�r�zOpenSSL.test_to_openssl_ed25519�ed448z2system openssl does not support signing with Ed448cCr�r})r:r8rrFrFrG�test_to_openssl_ed448�r�zOpenSSL.test_to_openssl_ed448cCs|j}tj�d�rt�d�t�d�d}td�|��td�t	dd��
}|�
|�Wd�n1s5wYtd�t	dd	��}|��}Wd�n1sRwYt	d
d	��}t�
|���}Wd�n1snwY|�|j|�|�||�t�d�dS)Nr�r�z6genpkey -algorithm {0} -outform PEM -out t/privkey.pemz=pkey -outform PEM -pubout -in t/privkey.pem -out t/pubkey.pemr�r�zHpkeyutl -sign -inkey t/privkey.pem -rawin -in t/data.txt -out t/data.sigr�r�r�)�namer�rrrrrrYr�rrrr
r��assertIsr�r`)rdr�r	rgrjrhr�rFrFrG�do_eddsa_test_from_openssl�s8

�����
��z"OpenSSL.do_eddsa_test_from_opensslcCr�r})rAr7rrFrFrG�test_from_openssl_ed25519�r�z!OpenSSL.test_from_openssl_ed25519cCr�r})rAr8rrFrFrG�test_from_openssl_ed448�r�zOpenSSL.test_from_openssl_ed448N)r�)LrCrDrE�setrYrO�OPENSSL_SUPPORTED_CURVESr��pytest�mark�slow�skipifr�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�r�rrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r�OPENSSL_SUPPORTED_TYPESrBr:r<r>rArBrCrFrFrFrGr�s�����������������������������
4���������������������������
U���%��$��r�c@s`eZdZedd�ed��d�D��Zejj	devdd�dd	��Z
ejj	devdd�d
d��ZdS)
�
TooSmallCurveccr�r�r�r�rFrFrGr��r�zTooSmallCurve.<genexpr>r�r�r�r�r�cCsZtjtd�}d}|�t��|j|ttjd�t	dd�Wd�dS1s&wYdS)Nr�r�r�F�r7r�rK)
rr\r#rarr^rrprr)rdr�rgrFrFrG�4test_sign_too_small_curve_dont_allow_truncate_raises�s
�"�zBTooSmallCurve.test_sign_too_small_curve_dont_allow_truncate_raisescCs~tjtd�}|��}d}|j|ttjd�tdd�}|�	t
��|j||ttjd�tdd�Wd�dS1s8wYdS)Nr�r�r�TrLF)r7r�rK)
rr\r#r]r^rrprrrarr`r)rdr�r�rgr�rFrFrG�6test_verify_too_small_curve_dont_allow_truncate_raises�s$
�
�"�zDTooSmallCurve.test_verify_too_small_curve_dont_allow_truncate_raisesN)rCrDrErDrYrOrErFrGrIrMrNrFrFrFrGrK�s��
�rKc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�DERcCs�|�t�d�d�|�t�d�d�|�t�d�d�|�t�d�d�|�t�d	�d
�dd�}|�|d�d
�|�|d�d�|�|d�d�|�|d�d�|�|d	�d�|�|d�d�dS)Nrsrs�s�s�r�scSst�t�|�d�S)Nr�)r?�remove_integerr)�nrFrFrGr�szDER.test_integer.<locals>.s)rr�)rr�)rPr�)rQr�)r�r��	�
~[~�e�;~p�d�)rTr�)rwr?r)rdr�rFrFrG�test_integers�zDER.test_integercCs�|�t�d�d�|�t�d�d�|�t�d�d�|�t�d�d�d	D] }t�|�d
}t�|�\}}|�||�|�||d�d
�q&dS)Nrr�rP�rQs��s�)rrrHrPrQrWr�r��more)rwr?�
encode_number�read_number�rdrS�x�n1�llenrFrFrG�test_number,s�zDER.test_numbercCs�|�t�d�d�|�t�d�d�|�t�d�d�|�t�d�d�|�t�d	�d
�|�t�d�d�|�t�d
�d�|�t�d�d�dD] }t�|�d}t�|�\}}|�||�|�||d�d�qJdS)Nrr�rPrVrQs��rs��r�s��s�s��more)�rHras��)	rrrHrPrQrr�r`rarX)rwr?�
encode_length�read_lengthr[rFrFrG�test_length9s�zDER.test_lengthcCsFt�dd�d}|�|d�t�|�\}}|�|d�|�|d�dS)NsABCsDEFsGHIs0ABCDEFGHIsABCDEF)r?r�rw�remove_sequence)rdr\�x1�restrFrFrG�
test_sequenceHs
zDER.test_sequencecCsBt�dtj�}|�t|�d�t�dtd��}|�t|�d�dS)Nrsa00706052b81040021rs0102030a0b0csa1060102030a0b0c)r?r&r$�encoded_oidrwrr)rdr\rFrFrG�test_constructedOszDER.test_constructedN)rCrDrErUr_rdrhrjrFrFrFrGrOs
rOc@sXeZdZejjdd��Zdd�Zedie	��e
ejdddd��d	d
���Z
dd�Zd
S)�UtilcCsvtj}td�D]#}d|}dD]}|||�}|�d|ko!|knd||f�qq|�d|dtj���d�dS)Ni��seed-%d)�rr�ii��rz%xr�s86fa59d73bf0446ae8743cf748fc5ac11d5585a90356417e97155c3bc)rr��ranger_rwr$rt�encode)rd�ttar�r�rtrSrFrFrG�test_trytryagainWs
	(��zUtil.test_trytryagaincCsBtj}d}d}|||�}tjdkr|�|d�dS|�|d�dS)Nrmstext)r�r���)rr��sys�version_inforw)rdrrrtr�rSrFrFrG�test_trytryagain_singlems

zUtil.test_trytryagain_singlerr�r)�	min_value�	max_valuecCsPt�d|�}dD]}tj||d�}|�d|ko|knd||f�q	dS)Nrl)rmrr�rnror�r)r�PRNG�	randranger_)rdr�r�rtrSrFrFrG�test_randrangexs
(�zUtil.test_randrangecCs�d}tdd�td|�D��}d|vsJ�||vsJ�td�D]}d|}t�||�}||d7<q|�||d�td|�D]}td|d	||d
f�qAdS)NrmcSsg|]}|df�qS)rrF)r@r�rFrFrGrB�rCz2Util.OFF_test_prove_uniformity.<locals>.<listcomp>rri@Brlz%3d: %s�*�d)�dictrprr�r_�print)rdrt�countsr�r�rSrFrFrG�OFF_test_prove_uniformity�s�zUtil.OFF_test_prove_uniformityNrF)rCrDrErFrGrHrsrxr	�HYP_SETTINGSr�st�integersr}r�rFrFrFrGrkVs
rkc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#S)$�RFC6979cCs$t�|��|||�}|�||�dSr})r@rrrtrw)rdrsrx�hsh�	hash_func�expected�actualrFrFrG�_do�szRFC6979._docCs2|jtjtdd�t�d���tjtdd�d�dS)z�RFC doesn't contain test vectors for SECP256k1 used in bitcoin.
        This vector has been computed by Golang reference implementation instead.rkrl�sample�@8fa1f95d514760e498f28957b824ee6ec39ed64826ff4fecc2b5739ec45b91cd�rsrxr�r�r�N�r�r(rsrnrprqrurrFrFrG�test_SECP256k1�s�
�zRFC6979.test_SECP256k1cC�2|jtjtdd�t�d���tjtdd�d�dS)N�@cca9fbcc1b41e5a95d369eaa6ddcff73b61a4efaa279cfc6567e8daa39cbaf50rlr��@2df40ca70e639d89528a6b670d9d48d9165fdc0febc0974056bdce192b8e16a3r�r�rrFrFrG�test_SECP256k1_2����
�zRFC6979.test_SECP256k1_2cC�&|jtjdt�d���tjdd�dS)Nr�Satoshi Nakamotol]�i�Hsi�NPI�z$Nkxke�}��r��r�r(rsrprqrurrFrFrG�test_SECP256k1_3��
�zRFC6979.test_SECP256k1_3cCr�)NrsJAll those moments will be lost in time, like tears in rain. Time to die...l�V1ujcC�X�x�i�
nH�0G<�V�Hk�8r�r�rrFrFrG�test_SECP256k1_4�s�
�zRFC6979.test_SECP256k1_4cCr�)Nl@Al 3z�~�i�9nW�~��������r�l�oT�P�*(9�L�M$d��h�W5D�v�8�M�3r�r�rrFrFrG�test_SECP256k1_5�r�zRFC6979.test_SECP256k1_5cCr�)Nl�A 
h�b�+Jnp.�(�d�0^�y�8�W�xsAlan Turingl�}�:�A�n�q�`0=�	��3�9�p�C[AZRr�r�rrFrFrG�test_SECP256k1_6�r�zRFC6979.test_SECP256k1_6cCs:|jtdddtdd��tdd�td�tjtdd�d�dS)Nr�)4000000000000000000020108A2E0CC0D99F8A5EFrl�)09A4D6792295A7F730FC3F2B49CBC0F62E862272Fs@AF2BDBE1AA9B6EC1E2ADE1D694F41FC71A831D0268E9891562113D8A62ADD1BF�)23AF4074C90A02B3FE61D286D5C87F425E6BDD81Br�)r�r>rnrrprqrrFrFrG�test_1�s��
�zRFC6979.test_1cCr�)N�06FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4rlr��037D7CA00D2C7B0E5E412AC03BD44BA837FDD5B28CD3B0021r��r�r#rsrnrp�sha1rurrFrFrG�test_2���
�zRFC6979.test_2cCr�)Nr�rlr��032B1B6D7D42A05CB449065727A84804FB1A3E34D8F261496r��r�r#rsrnrprqrurrFrFrG�test_3�r�zRFC6979.test_3cCr�)Nr�rlr��0A2AC7AB055E4F20692D49209544C203A7D1F2C0BFBC75DB1r��r�r#rsrnrp�sha512rurrFrFrG�test_4r�zRFC6979.test_4cCr�)Nr�rl�test�0D9CF9C3D3297D3260773A1DA7418DB5537AB8DD93DE7FA25r�r�rrFrFrG�test_5r�zRFC6979.test_5cCr�)Nr�rlr��05C4CE89CF56D9E7C77C8585339B006B97B5F0680B4306C6Cr�r�rrFrFrG�test_6r�zRFC6979.test_6cCr�)Nr�rlr��00758753A5254759C7CFBAD2E2D9B0792EEE44136C9480527r�r�rrFrFrG�test_7)r�zRFC6979.test_7cCr�)Nڃ0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538rlr�ڃ089C071B419E1C2820962321787258469511958E80582E95D8378E0C2CCDB3CB42BEDE42F50E3FA3C71F5A76724281D31D9C89F0F91FC1BE4918DB1C03A5838D0F9r�)r�r'rsrnrpr�rurrFrFrG�test_84r�zRFC6979.test_8cCr�)Nr�rlr�ڃ0EDF38AFCAAECAB4383358B34D67C9F2216C8382AAEA44A3DAD5FDC9C32575761793FEF24EB0FC276DFC4F6E3EC476752F043CF01415387470BCBD8678ED2C7E1A0r�)r�r'rsrnrprqrurrFrFrG�test_9Cr�zRFC6979.test_9cCr�)Nr�rlr�ڃ16200813020EC986863BEDFC1B121F605C1215645018AEA1A7B215A564DE9EB1B38A67AA1128B80CE391C4FB71187654AAA3431027BFC7F395766CA988C964DC56Dr�)r�r'rsrnrpr�rurrFrFrG�test_10Rr�zRFC6979.test_10N)rCrDrEr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rFrFrFrGr��s$			r�c@r�)�ECDHcCs�||}||}||}
|�t|||�|�|�t|||�|�|�|||||ko<|||ko<||kn�|�t||	|
�|
�dSr})rwr>r_)rdr�rs�dA�x_qA�y_qA�dB�x_qB�y_qB�x_Z�y_Z�qA�qB�ZrFrFrGr�cs
�
���zECDH._doN)rCrDrEr�rFrFrFrGr�br�r�c@s<eZdZdd�Zdd�Zejjdd��Zejjdd��Z	d	S)
�RFC6932c
C�T|jttjtdd�tdd�tdd�tdd�tdd�tdd�tdd�td	d�d
�
dS)N�87C4B7A2C8A4BAD1FBB7D79CC0955DB7C6A4660CA64CC4778159B495Erl�8B104A67A6F6E85E14EC1825E1539E8ECDBBF584922367DD88C6BDCF2�846D782E7FDB5F60CD8404301AC5949C58EDB26BC68BA07695B750A94�863976D4AAE6CD0F6DD18DEFEF55D96569D0507C03E74D6486FFA28FB�82A97089A9296147B71B21A4B574E1278245B536F14D8C2B9D07A874E�89B900D7C77A709A797276B8CA1BA61BB95B546FC29F862E44D59D25B�8312DFD98783F9FB77B9704945A73BEB6DCCBE3B65D0F967DCAB574EB�86F800811D64114B1C48C621AB3357CF93F496E4238696A2A012B3C98�
r�rsr�r�r�r�r�r�r�r�)r�r:r+rsrnrrFrFrG�test_brainpoolP224r1us8��������
�zRFC6932.test_brainpoolP224r1c
Cr�)N�@041EB8B1E2BC681BCE8E39963B2E9FC415B05283313DD1A8BCC055F11AE49699rl�@78028496B5ECAAB3C8B6C12E45DB1E02C9E4D26B4113BC4F015F60C5CCC0D206�@A2AE1762A3831C1D20F03F8D1E3C0C39AFE6F09B4D44BBE80CD100987B05F92B�@06F5240EACDB9837BC96D48274C8AA834B6C87BA9CC3EEDD81F99A16B8D804D3�@8E07E219BA588916C5B06AA30A2F464C2F2ACFC1610A3BE2FB240B635341F0DB�@148EA1D7D1E7E54B9555B6C9AC90629C18B63BEE5D7AA6949EBBF47B24FDE40D�@05E940915549E9F6A4A75693716E37466ABA79B4BF2919877A16DD2CC2E23708�@6BC23B6702BC5A019438CEEA107DAAD8B94232FFBBC350F3B137628FE6FD134Cr��r�r;r,rsrnrrFrFrG�test_brainpoolP256r1��H��������
�zRFC6932.test_brainpoolP256r1c
Cr�)N�`014EC0755B78594BA47FB0A56F6173045B4331E74BA1A6F47322E70D79D828D97E095884CA72B73FDABD5910DF0FA76Arl�`45CB26E4384DAF6FB776885307B9A38B7AD1B5C692E0C32F0125332778F3B8D3F50CA358099B30DEB5EE69A95C058B4E�`8173A1C54AFFA7E781D0E1E1D12C0DC2B74F4DF58E4A4E3AF7026C5D32DC530A2CD89C859BB4B4B768497F49AB8CC859�`6B461CB79BD0EA519A87D6828815D8CE7CD9B3CAA0B5A8262CBCD550A015C90095B976F3529957506E1224A861711D54�`01BF92A92EE4BE8DED1A911125C209B03F99E3161CFCC986DC7711383FC30AF9CE28CA3386D59E2C8D72CE1E7B4666E8�`3289C4A3A4FEE035E39BDB885D509D224A142FF9FBCC5CFE5CCBB30268EE47487ED8044858D31D848F7A95C635A347AC�`04CC4FF3DCCCB07AF24E0ACC529955B36D7C807772B92FCBE48F3AFE9A2F370A1F98D3FA73FD0C0747C632E12F1423EC�`7F465F90BD69AFB8F828A214EB9716D66ABC59F17AF7C75EE7F1DE22AB5D05085F5A01A9382D05BF72D96698FE3FF64Er��r�r<r.rsrnrrFrFrG�test_brainpoolP384r1��H��������
�zRFC6932.test_brainpoolP384r1c
Cr�)Nڀ636B6BE0482A6C1C41AA7AE7B245E983392DB94CECEA2660A379CFE159559E357581825391175FC195D28BAC0CF03A7841A383B95C262B983782874CCE6FE333rlڀ0562E68B9AF7CBFD5565C6B16883B777FF11C199161ECC427A39D17EC2166499389571D6A994977C56AD8252658BA8A1B72AE42F4FB7532151AFC3EF0971CCDAڀA7CA2D8191E21776A89860AFBC1F582FAA308D551C1DC6133AF9F9C3CAD59998D70079548140B90B1F311AFB378AA81F51B275B2BE6B7DEE978EFC7343EA642Eڀ0AF4E7F6D52EDD52907BB8DBAB3992A0BB696EC10DF11892FF205B66D381ECE72314E6A6EA079CEA06961DBA5AE6422EF2E9EE803A1F236FB96A1799B86E5C8Bڀ5A7954E32663DFF11AE24712D87419F26B708AC2B92877D6BFEE2BFC43714D89BBDB6D24D807BBD3AEB7F0C325F862E8BADE4F74636B97EAACE739E11720D323ڀ96D14621A9283A1BED84DE8DD64836B2C0758B11441179DC0C54C0D49A47C03807D171DD544B72CAAEF7B7CE01C7753E2CAD1A861ECA55A71954EE1BA35E04BEڀ1EE8321A4BBF93B9CF8921AB209850EC9B7066D1984EF08C2BB723236208AC8F1A483E79461A00E0D5F6921CE9D360502F85C812BEDEE23AC5B210E5811B191Eڀ2632095B7B936174B41FD2FAF369B1D18DCADEED7E410A7E251F0831097C50D02CFED02607B6A2D5ADB4C0006008562208631875B58B54ECDA5A4F9FE9EAABA6r��r�r=r/rsrnrrFrFrG�test_brainpoolP512r1��H��������
�zRFC6932.test_brainpoolP512r1N)
rCrDrEr�r�rFrGrHr�r�rFrFrFrGr�rs.
.r�c@s4eZdZdd�Zejjdd��Zejjdd��ZdS)�RFC7027c
Cr�)N�@81DB1EE100150FF2EA338D708271BE38300CB54241D79950F77B063039804F1Drl�@44106E913F92BC02A1705D9953A8414DB95E1AAA49E81D9E85F929A8E3100BE5�@8AB4846F11CACCB73CE49CBDD120F5A900A69FD32C272223F789EF10EB089BDC�@55E40BC41E37E3E2AD25C3C6654511FFA8474A91A0032087593852D3E7D76BD3�@8D2D688C6CF93E1160AD04CC4429117DC2C41825E1E9FCA0ADDD34E6F1B39F7B�@990C57520812BE512641E47034832106BC7D3E8DD0E4C7F1136D7006547CEC6A�@89AFC39D41D3B327814B80940B042590F96556EC91E6AE7939BCE31F3A18BF2B�@49C27868F4ECA2179BFD7D59B1E3BF34C1DBDE61AE12931648F43E59632504DEr�r�rrFrFrGr�+	r�zRFC7027.test_brainpoolP256r1c
Cr�)N�`1E20F5E048A5886F1F157C74E91BDE2B98C8B52D58E5003D57053FC4B0BD65D6F15EB5D1EE1610DF870795143627D042rl�`68B665DD91C195800650CDD363C625F4E742E8134667B767B1B476793588F885AB698C852D4A6E77A252D6380FCAF068�`55BC91A39C9EC01DEE36017B7D673A931236D2F1F5C83942D049E3FA20607493E0D038FF2FD30C2AB67D15C85F7FAA59�`032640BC6003C59260F7250C3DB58CE647F98E1260ACCE4ACDA3DD869F74E01F8BA5E0324309DB6A9831497ABAC96670�`4D44326F269A597A5B58BBA565DA5556ED7FD9A8A9EB76C25F46DB69D19DC8CE6AD18E404B15738B2086DF37E71D1EB4�`62D692136DE56CBE93BF5FA3188EF58BC8A3A0EC6C1E151A21038A42E9185329B5B275903D192F8D4E1F32FE9CC78C48�`0BD9D3A7EA0B3D519D09D8E48D0785FB744A6B355E6304BC51C229FBBCE239BBADF6403715C35D4FB2A5444F575D4F42�`0DF213417EBE4D8E40A5F76F66C56470C489A3478D146DECF6DF0D94BAE9E598157290F8756066975F1DB34B2324B7BDr�r�rrFrFrGr�Y	r�zRFC7027.test_brainpoolP384r1c
Cr�)Nڀ16302FF0DBBB5A8D733DAB7141C1B45ACBC8715939677F6A56850A38BD87BD59B09E80279609FF333EB9D4C061231FB26F92EEB04982A5F1D1764CAD57665422rlڀ0A420517E406AAC0ACDCE90FCD71487718D3B953EFD7FBEC5F7F27E28C6149999397E91E029E06457DB2D3E640668B392C2A7E737A7F0BF04436D11640FD09FDڀ72E6882E8DB28AAD36237CD25D580DB23783961C8DC52DFA2EC138AD472A0FCEF3887CF62B623B2A87DE5C588301EA3E5FC269B373B60724F5E82A6AD147FDE7ڀ230E18E1BCC88A362FA54E4EA3902009292F7F8033624FD471B5D8ACE49D12CFABBC19963DAB8E2F1EBA00BFFB29E4D72D13F2224562F405CB80503666B25429ڀ9D45F66DE5D67E2E6DB6E93A59CE0BB48106097FF78A081DE781CDB31FCE8CCBAAEA8DD4320C4119F1E9CD437A2EAB3731FA9668AB268D871DEDA55A5473199Fڀ2FDC313095BCDD5FB3A91636F07A959C8E86B5636A1E930E8396049CB481961D365CC11453A06C719835475B12CB52FC3C383BCE35E27EF194512B71876285FAڀA7927098655F1F9976FA50A9D566865DC530331846381C87256BAF3226244B76D36403C024D7BBF0AA0803EAFF405D3D24F11A9B5C0BEF679FE1454B21C4CD1Fڀ7DB71C3DEF63212841C463E881BDCF055523BD368240E6C3143BD8DEF8B3B3223B95E0F53082FF5E412F4222537A43DF1C6D25729DDB51620A832BE6A26680A2r�r�rrFrFrGr��	r�zRFC7027.test_brainpoolP512r1N)	rCrDrEr�rFrGrHr�r�rFrFrFrGr�(	s.
.r�z$w, gwx, gwy, k, msg, md, r, s, curve�@DC51D3866A15BACDE33D96F992FCA99DA7E6EF0934E7097559C27F1614C88A7F�@2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085E0822CB04235E970�@6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945CDDFE7D509BBFD7D�@9E56F509196784D963D1C0A401510EE7ADA3DCC5DEE04B154BF61AF1D5A6DECEsabc�@CB28E0999B9C7715FD0A80D8E47A77079716CBBF917DD72E97566EA1C066957C�@86FA3BB4E26CAD5BF90B7F81899256CE7594BB1EA0C89212748BFF3B3D5B0315z	ECDSA-256�`0BEB646634BA87735D77AE4809A0EBEA865535DE4C1E1DCB692E84708E81A5AF62E528C38B2A81B35309668D73524D9F�`96281BF8DD5E0525CA049C048D345D3082968D10FEDF5C5ACA0C64E6465A97EA5CE10C9DFEC21797415710721F437922�`447688BA94708EB6E2E4D59F6AB6D7EDFF9301D249FE49C33096655F5D502FAD3D383B91C5E7EDAA2B714CC99D5743CA�`B4B74E44D71A13D568003D7489908D564C7761E229C58CBFA18950096EB7463B854D7FA992F934D927376285E63414FA�`FB017B914E29149432D8BAC29A514640B46F53DDAB2C69948084E2930F1C8F7E08E07C9C63F2D21A07DCB56A6AF56EB3�`B263A1305E057F984D38726A1B46874109F417BCA112674C528262A40A629AF1CBB9F516CE0FA7D2FF630863A00E8B9Fz	ECDSA-384ڄ0065FDA3409451DCAB0A0EAD45495112A3D813C17BFD34BDF8C1209D7DF5849120597779060A7FF9D704ADF78B570FFAD6F062E95C7E0C5D5481C5B153B48B375FA1ڄ0151518F1AF0F563517EDD5485190DF95A4BF57B5CBA4CF2A9A3F6474725A35F7AFE0A6DDEB8BEDBCD6A197E592D40188901CECD650699C9B5E456AEA5ADD19052A8ڄ006F3B142EA1BFFF7E2837AD44C9E4FF6D2D34C73184BBAD90026DD5E6E85317D9DF45CAD7803C6C20035B2F3FF63AFF4E1BA64D1C077577DA3F4286C58F0AEAE643ڄ00C1C2B305419F5A41344D7E4359933D734096F556197A9B244342B8B62F46F9373778F9DE6B6497B1EF825FF24F42F9B4A4BD7382CFC3378A540B1B7F0C1B956C2Fڄ0154FD3836AF92D0DCA57DD5341D3053988534FDE8318FC6AAAAB68E2E6F4339B19F2F281A7E0B22C269D93CF8794A9278880ED7DBB8D9362CAEACEE544320552251ڄ017705A7030290D1CEB605A9A1BB03FF9CDD521E87A696EC926C8C10C8362DF4975367101F67D1CF9BCCBF2F3D239534FA509E70AAC851AE01AAC68D62F866472660z	ECDSA-521c	Cszt�t|�|�}	t�t||�|�}
|	j|
ksJ�|	j||tt|d�d�}|t|�t|�fks1J�|
�|||t	�s;J�dS)Nrl)r7r�rm)
rrbrr
r�r^rrnr`r)�w�gwx�gwyrm�msg�mdr�r�r�r�r�rhrFrFrG�test_RFC4754_vectors�	s<r')t�
__future__rrr�	unittest2�unittest�ImportErrorr�rrMrFrv�binasciirrrp�	functoolsr�
hypothesisrr	�hypothesis.strategies�
strategiesr��sixr
�keysrr
rrr�rrrrrrrrrrrrr9rrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8rAr:r;r<r=�
ellipticcurver>r?r@�	ExceptionrBr��argvrY�TestCaserZrG�parametrizerpr��paramsr�rW�append�paramr�r?r�r�rHr�rKrOrkr�r�r�r�rq�sha384r�r'rFrFrFrG�<module>s��t~�
��



W-@BK7�����;