U
    ʹh                     @   s  zd dl ZW n ek
r(   d dlZY nX ze W n ek
rJ   eZY nX d dlZd dlZd dlZd dl	Z	ddl
mZmZmZmZ ddlmZmZmZmZmZmZmZ ddlmZmZmZmZmZmZ ddlmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'm(Z( ddl)m*Z* G d	d
 d
ej+Z,G dd dej+Z-G dd dej+Z.G dd dej+Z/dZ0ee0Z1e2e1e3slt4e5e1Z6e6j7Z8dZ9e:e9d d kst4e	; Z;e;<e9 e;= Z>e2e>e3st4e6j?e9edZ@e2e@e3st4e6j?e9edZAe2eAe3st4e6j?e9edZBe2eBd  e3st4g ZCddd fdefdeDfddd fddd fddd fd d!d fd"d#d ffD ]\ZEZFd$eEkrd%d ZGneFZGd&e@ed'd fd(eAed)d fd*eBed+d ffD ]\\ZHZIZJZKd,e8jLe9fd-e8jMe>ffD ]4\ZNZOZPeCQejReIeJeKeFeOePd.SeEeHeNd/ qqqnejTUd0eCd1d2 ZVd3ZWe:eWd4ksJt4g ZXdd5d fdefdeDfdd6d fdd7d fdd8d fd d9d fd"d:d ffD ]\ZEZYeXQejReYeEd/ qejTUd;eXd<d= ZZdZ0ee0Z1e2e1e3st4ejTUd;eXdd> d?d@ Z[dAZ\ejTUd;eXdBdC Z]ejTUd;eXdDdE Z^ejTUd;eXdFdG Z_ejTUd;eXdHdI Z`dJdK ZadLdM ZbdNdO ZcdPdQ ZddRdS ZedS )T    N   )VerifyingKey
SigningKeyMalformedPointErrorBadSignatureError)unpemUnexpectedDERencode_sequence
encode_oidencode_bitstringencode_integerencode_octet_string)sigencode_stringsigencode_dersigencode_stringssigdecode_stringsigdecode_dersigdecode_strings)NIST256pCurveBRAINPOOLP160r1Ed25519Ed448)PointPointJacobiCurveFpINFINITY)generator_brainpoolp160r1c                   @   s   e Zd ZdZedd Zdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TestVerifyingKeyFromStringzc
    Verify that ecdsa.keys.VerifyingKey.from_string() can be used with
    bytes-like objects
    c                 C   s   d| _ t| j | _d S )Ns0   LZ
zϗo8}X!h^pIYxao+Gv)	key_bytesr   from_stringvk)cls r#   5./venv/lib/python3.8/site-packages/ecdsa/test_keys.py
setUpClass2   s    z%TestVerifyingKeyFromString.setUpClassc                 C   sJ   |  | j | | jt | | jjj d | | jjj d d S )Nl   !Xp?|}rIWoWeD l   vq.y[Or~Vh]Ip<#'
)	assertIsNotNoner!   assertIsInstancer   assertEqualpubkeypointxyselfr#   r#   r$   
test_bytes;   s    z%TestVerifyingKeyFromString.test_bytesc                 C   s*   t t| j}| | j |  d S N)r   r    bufferr   r(   r!   	to_stringr.   r!   r#   r#   r$   test_bytes_memoryviewG   s    z0TestVerifyingKeyFromString.test_bytes_memoryviewc                 C   s*   t t| j}| | j |  d S r0   r   r    	bytearrayr   r(   r!   r2   r3   r#   r#   r$   test_bytearrayL   s    z)TestVerifyingKeyFromString.test_bytearrayc                 C   s.   t tt| j}| | j |  d S r0   )r   r    r1   r6   r   r(   r!   r2   r3   r#   r#   r$   test_bytesarray_memoryviewQ   s    z5TestVerifyingKeyFromString.test_bytesarray_memoryviewc                 C   s2   t  d| j}t|}| | j |  d S NBarrayr   r   r    r(   r!   r2   r.   Zarrr!   r#   r#   r$   test_array_array_of_bytesV   s    
z4TestVerifyingKeyFromString.test_array_array_of_bytesc                 C   s6   t  d| j}tt|}| | j |  d S r9   r<   r   r   r    r1   r(   r!   r2   r=   r#   r#   r$   $test_array_array_of_bytes_memoryview\   s    z?TestVerifyingKeyFromString.test_array_array_of_bytes_memoryviewc                 C   s2   t  d| j}t|}| | j |  d S NIr;   r=   r#   r#   r$   test_array_array_of_intsb   s    
z3TestVerifyingKeyFromString.test_array_array_of_intsc                 C   s6   t  d| j}tt|}| | j |  d S rA   r?   r=   r#   r#   r$   #test_array_array_of_ints_memoryviewh   s    z>TestVerifyingKeyFromString.test_array_array_of_ints_memoryviewc                 C   s*   t d| j }| | j |  d S N   r   r    r   r(   r!   r2   r3   r#   r#   r$   test_bytes_uncompressedn   s    z2TestVerifyingKeyFromString.test_bytes_uncompressedc                 C   s.   t td| j }| | j |  d S rE   r5   r3   r#   r#   r$   test_bytearray_uncompresseds   s    z6TestVerifyingKeyFromString.test_bytearray_uncompressedc                 C   s2   t d| jd d  }| | j |  d S N      rG   r3   r#   r#   r$   test_bytes_compressedx   s    z0TestVerifyingKeyFromString.test_bytes_compressedc                 C   s6   t td| jd d  }| | j |  d S rJ   r5   r3   r#   r#   r$   test_bytearray_compressed}   s    z4TestVerifyingKeyFromString.test_bytearray_compressedc              	   C   s&   |  t tdt W 5 Q R X d S )Ns   AAA)assertRaisesr   r   r    r   r-   r#   r#   r$   .test_ed25519_VerifyingKey_from_string_imported   s    zITestVerifyingKeyFromString.test_ed25519_VerifyingKey_from_string_importedN)__name__
__module____qualname____doc__classmethodr%   r/   r4   r7   r8   r>   r@   rC   rD   rH   rI   rM   rN   rP   r#   r#   r#   r$   r   ,   s    
r   c                   @   s,  e Zd ZdZedd Zdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$dBdC Z%dDdE Z&dFdG Z'dHS )ITestVerifyingKeyFromDerza
    Verify that ecdsa.keys.VerifyingKey.from_der() can be used with
    bytes-like objects.
    c                 C   sb   d}d}|| _ t|| _t| jts(tt|| _t	|| _
d}t|| _t	tj| _d S )N-----BEGIN EC PRIVATE KEY-----
MF8CAQEEGF7IQgvW75JSqULpiQQ8op9WH6Uldw6xxaAKBggqhkjOPQMBAaE0AzIA
BLiBd9CE7xf15FY5QIAoNg+fWbSk1yZOYtoGUdzkejWkxbRc9RWTQjqLVXucIJnz
bA==
-----END EC PRIVATE KEY-----
z-----BEGIN PUBLIC KEY-----
MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEuIF30ITvF/XkVjlAgCg2D59ZtKTX
Jk5i2gZR3OR6NaTFtFz1FZNCOotVe5wgmfNs
-----END PUBLIC KEY-----
z-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE4H3iRbG4TSrsSRb/gusPQB/4YcN8
Poqzgjau4kfxBPyZimeRfuY/9g/wMmPuhGl4BUve51DsnKJFRr8psk0ieA==
-----END PUBLIC KEY-----
)key_pemr   r   
isinstancebytesAssertionErrorr   from_pemr!   r   skvk2generatecurvesk2)r"   prv_key_strZkey_strr#   r#   r$   r%      s    
z"TestVerifyingKeyFromDer.setUpClassc                 C   s,   d}t |}t jdtd}| || d S )N  -----BEGIN PUBLIC KEY-----
MIIBSzCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0BAQIhAP////8AAAABAAAA
AAAAAAAAAAAA////////////////MFsEIP////8AAAABAAAAAAAAAAAAAAAA////
///////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMVAMSd
NgiG5wSTamZ44ROdJreBn36QBEEEaxfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5
RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9QIhAP////8AAAAA
//////////+85vqtpxeehPO5ysL8YyVRAgEBA0IABIr1UkgYs5jmbFc7it1/YI2X
T//IlaEjMNZft1owjqpBYH2ErJHk4U5Pp4WvWq1xmHwIZlsH7Ig4KmefCfR6SmU=
-----END PUBLIC KEY-----sA   RHlW;`Oȕ#0_Z0A`}NOZq|f[8*g	zJer`   )r   r\   r    r   r(   )r.   pub_key_strZpkZpk_expr#   r#   r$   &test_load_key_with_explicit_parameters   s    
z>TestVerifyingKeyFromDer.test_load_key_with_explicit_parametersc              	   C   s.   d}|  t tj|dgd W 5 Q R X d S )Nrc   named_curveZvalid_curve_encodings)rO   r   r   r\   )r.   re   r#   r#   r$   2test_load_key_with_explicit_with_explicit_disabled   s     zJTestVerifyingKeyFromDer.test_load_key_with_explicit_with_explicit_disabledc              	   C   s>   |  t}tj| jdgd W 5 Q R X | dt|j d S )Nraw)Zvalid_encodingszenabled (raw) encodings)rO   r   r   from_derr   assertInstr	exceptionr.   er#   r#   r$   "test_load_key_with_disabled_format   s    z:TestVerifyingKeyFromDer.test_load_key_with_disabled_formatc                 C   s$   t | jtj}| |jtj d S r0   )r   rk   r   hashlibsha256assertIsdefault_hashfuncr3   r#   r#   r$   test_custom_hashfunc   s    z,TestVerifyingKeyFromDer.test_custom_hashfuncc                 C   s$   t | jtj}| |jtj d S r0   )r   r\   rX   rr   rs   rt   ru   r3   r#   r#   r$   "test_from_pem_with_custom_hashfunc   s    z:TestVerifyingKeyFromDer.test_from_pem_with_custom_hashfuncc                 C   s&   t | j}| | j |  d S r0   )r   rk   r   r(   r!   r2   r3   r#   r#   r$   r/      s    z"TestVerifyingKeyFromDer.test_bytesc                 C   s*   t t| j}| | j |  d S r0   )r   rk   r1   r   r(   r!   r2   r3   r#   r#   r$   r4      s    z-TestVerifyingKeyFromDer.test_bytes_memoryviewc                 C   s*   t t| j}| | j |  d S r0   )r   rk   r6   r   r(   r!   r2   r3   r#   r#   r$   r7      s    z&TestVerifyingKeyFromDer.test_bytearrayc                 C   s.   t tt| j}| | j |  d S r0   )r   rk   r1   r6   r   r(   r!   r2   r3   r#   r#   r$   r8      s    z2TestVerifyingKeyFromDer.test_bytesarray_memoryviewc                 C   s2   t  d| j}t|}| | j |  d S r9   )r<   r   r   rk   r(   r!   r2   r=   r#   r#   r$   r>      s    
z1TestVerifyingKeyFromDer.test_array_array_of_bytesc                 C   s6   t  d| j}tt|}| | j |  d S r9   )r<   r   r   rk   r1   r(   r!   r2   r=   r#   r#   r$   r@      s    z<TestVerifyingKeyFromDer.test_array_array_of_bytes_memoryviewc                 C   s   |  | j| j k d S r0   )
assertTruer!   r]   Zget_verifying_keyr-   r#   r#   r$   test_equality_on_verifying_keys  s    z7TestVerifyingKeyFromDer.test_equality_on_verifying_keysc                 C   s   |  | j| jk d S r0   )assertFalser!   r^   r-   r#   r#   r$   !test_inequality_on_verifying_keys	  s    z9TestVerifyingKeyFromDer.test_inequality_on_verifying_keysc                 C   s   |  | jd k d S r0   )rz   r!   r-   r#   r#   r$   1test_inequality_on_verifying_keys_not_implemented  s    zITestVerifyingKeyFromDer.test_inequality_on_verifying_keys_not_implementedc                 C   s   |  | j| jj d S r0   )assertNotEqualr!   ra   verifying_keyr-   r#   r#   r$   *test_VerifyingKey_inequality_on_same_curve  s    zBTestVerifyingKeyFromDer.test_VerifyingKey_inequality_on_same_curvec                 C   s   |  | j| j d S r0   )r}   r]   ra   r-   r#   r#   r$   (test_SigningKey_inequality_on_same_curve  s    z@TestVerifyingKeyFromDer.test_SigningKey_inequality_on_same_curvec                 C   s   |  | j| jk d S r0   )rz   r!   r]   r-   r#   r#   r$   test_inequality_on_wrong_types  s    z6TestVerifyingKeyFromDer.test_inequality_on_wrong_typesc                 C   sF   | j jj}t| | | }t|| j j}| 	|| j k d S r0   )
r!   r)   r*   r   r`   r+   r,   r   from_public_pointrx   )r.   Zpjr*   r!   r#   r#   r$   test_from_public_point_old  s    
z2TestVerifyingKeyFromDer.test_from_public_point_oldc                 C   s,   t tj t}t|j}| d| d S )NzVerifyingKey.from_string(bytearray(b'K\x0c\xfbZH\x8e\x8c\x8c\x07\xee\xda\xfb\xe1\x97\xcd\x90\x18\x02\x15h]\xfe\xbe\xcbB\xba\xe6r\x10\xae\xf1P'), Ed25519, None))r   r    r   	generatorto_bytesreprr~   r(   )r.   r]   stringr#   r#   r$    test_ed25519_VerifyingKey_repr__   s    
z8TestVerifyingKeyFromDer.test_ed25519_VerifyingKey_repr__c              	   C   s>   t j}| t}t|t  W 5 Q R X | dt|j d S )Nzincompatible with Edwards)	r   r   rO   
ValueErrorr   r   rl   rm   rn   )r.   r*   rp   r#   r#   r$   test_edwards_from_public_point,  s    z6TestVerifyingKeyFromDer.test_edwards_from_public_pointc                 C   s@   t tj t}|j}t| t}|  | 	|| d S r0   )
r   r    r   r   r   r~   r   r2   
precomputer(   r.   r]   r!   r^   r#   r#   r$   &test_edwards_precompute_no_side_effect3  s
    z>TestVerifyingKeyFromDer.test_edwards_precompute_no_side_effectc              	   C   sb   t t ttj tttj dtdd}| t	}t
| W 5 Q R X | dt|j d S )Nr       ztrailing junk after public key)r	   r
   r   oidr   rZ   r   r   rO   r   r   rk   rl   rm   rn   r.   Zder_strrp   r#   r#   r$   $test_parse_malfomed_eddsa_der_pubkey;  s    z<TestVerifyingKeyFromDer.test_parse_malfomed_eddsa_der_pubkeyc              	   C   s:   |  t}tddt W 5 Q R X | dt|j d S N    zunsupported for Edwards)rO   r   r   Zfrom_public_key_recoveryr   rl   rm   rn   ro   r#   r#   r$   %test_edwards_from_public_key_recoveryG  s    z=TestVerifyingKeyFromDer.test_edwards_from_public_key_recoveryc              	   C   s:   |  t}tddt W 5 Q R X | dt|j d S r   )rO   r   r   Z$from_public_key_recovery_with_digestr   rl   rm   rn   ro   r#   r#   r$   1test_edwards_from_public_key_recovery_with_digestM  s      zITestVerifyingKeyFromDer.test_edwards_from_public_key_recovery_with_digestc                 C   sJ   d}t |}| |jt | |jt d}t |t}| || d S )Nq-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAIwBQ0NZkIiiO41WJfm5BV42u3kQm7lYnvIXmCy8qy2U=
-----END PUBLIC KEY-----
    # Pd"(U~nAWD&V'/*e)	r   r\   r'   r`   r   rt   r   r    r(   )r.   vk_pemr!   vk_strZvk_2r#   r#   r$   test_load_ed25519_from_pemU  s    
z2TestVerifyingKeyFromDer.test_load_ed25519_from_pemc                 C   s(   d}t |t}d}| ||  d S )Nr   sq   -----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAIwBQ0NZkIiiO41WJfm5BV42u3kQm7lYnvIXmCy8qy2U=
-----END PUBLIC KEY-----
)r   r    r   r(   to_pemr.   r   r!   r   r#   r#   r$   test_export_ed255_to_pemj  s    z0TestVerifyingKeyFromDer.test_export_ed255_to_pemc                 C   s(   d}t |t}d}| ||  d S )Nr   sQ   ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICMAUNDWZCIojuNViX5uQVeNrt5EJu5WJ7yF5gsvKstl
)r   r    r   r(   to_ssh)r.   r   r!   Zvk_sshr#   r#   r$   test_export_ed255_to_sshz  s
    z0TestVerifyingKeyFromDer.test_export_ed255_to_sshc                 C   s.   t t}|j}t| }| || d S r0   )r   r_   r   r~   r   r\   r   r(   r   r#   r#   r$   test_ed25519_export_import  s    
z2TestVerifyingKeyFromDer.test_ed25519_export_importc                 C   s,   d}t |}d}d}| ||| d S )Nr      data
s@   dGj3yEl PǏ`u/'ӖXF\P)խF<hMꍨyr   r\   rx   verifyr.   r   r!   datasigr#   r#   r$   test_ed25519_sig_verify  s    
z/TestVerifyingKeyFromDer.test_ed25519_sig_verifyc              	   C   s<   d}t |}d}d}| t ||| W 5 Q R X d S )Nr   r   s@   Gj3yEl PǏ`u/'ӖXF\P)խF<hMꍨy)r   r\   rO   r   r   r   r#   r#   r$   !test_ed25519_sig_verify_malformed  s    
z9TestVerifyingKeyFromDer.test_ed25519_sig_verify_malformedc                 C   sJ   d}t |}| |jt | |jt d}t |t}| || d S )N-----BEGIN PUBLIC KEY-----
MEMwBQYDK2VxAzoAeQtetSu7CMEzE+XWB10Bg47LCA0giNikOxHzdp+tZ/eK/En0
dTdYD2ll94g58MhSnBiBQB9A1MMA
-----END PUBLIC KEY-----
9   y^+3] ؤ;vgIu7Xie9R@@ )	r   r\   r'   r`   r   rt   r   r    r(   )r.   pem_strr!   r   r^   r#   r#   r$   test_ed448_from_pem  s    
z+TestVerifyingKeyFromDer.test_ed448_from_pemc                 C   s(   d}t |t}d}| ||  d S )Nr   s   -----BEGIN PUBLIC KEY-----
MEMwBQYDK2VxAzoAeQtetSu7CMEzE+XWB10Bg47LCA0giNikOxHzdp+tZ/eK/En0dTdYD2ll94g5
8MhSnBiBQB9A1MMA
-----END PUBLIC KEY-----
)r   r    r   r(   r   r   r#   r#   r$   test_ed448_to_pem  s    z)TestVerifyingKeyFromDer.test_ed448_to_pemc                 C   s.   t t}|j}t| }| || d S r0   )r   r_   r   r~   r   r\   r   r(   r   r#   r#   r$   test_ed448_export_import  s    
z0TestVerifyingKeyFromDer.test_ed448_export_importc                 C   s,   d}t |}d}d}| ||| d S )Nr   r   sr   h,p5"5Q3= To0WE>Q`jC_28k	 x{]~1?0/U!L-LbS0fK@Э
 r   )r.   r   r!   r   r   r#   r#   r$   test_ed448_sig_verify  s    
z-TestVerifyingKeyFromDer.test_ed448_sig_verifyN)(rQ   rR   rS   rT   rU   r%   rf   ri   rq   rv   rw   r/   r4   r7   r8   r>   r@   ry   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$   rV      sJ   
rV   c                   @   s   e Zd ZdZedd Zdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8S )9TestSigningKeyz_
    Verify that ecdsa.keys.SigningKey.from_der() can be used with
    bytes-like objects.
    c                 C   s4   d}t || _d}t || _d}t || _d S )NrW   z-----BEGIN PRIVATE KEY-----
MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBheyEIL1u+SUqlC6YkE
PKKfVh+lJXcOscWhNAMyAAS4gXfQhO8X9eRWOUCAKDYPn1m0pNcmTmLaBlHc5Ho1
pMW0XPUVk0I6i1V7nCCZ82w=
-----END PRIVATE KEY-----
z-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIKlL2EAm5NPPZuXwxRf4nXMk0A80y6UUbiQ17be/qFhRoAoGCCqGSM49
AwEHoUQDQgAE4H3iRbG4TSrsSRb/gusPQB/4YcN8Poqzgjau4kfxBPyZimeRfuY/
9g/wMmPuhGl4BUve51DsnKJFRr8psk0ieA==
-----END EC PRIVATE KEY-----
)r   r\   sk1	sk1_pkcs8ra   )r"   rb   r#   r#   r$   r%     s    zTestSigningKey.setUpClassc                 C   s   |  | jjddd d S )Npkcs8formatsq   0o0*H=*H=U0S^BRB<V%wš42 wЄV9@(6Y&NbQz5Ŵ\B:U{ l)r(   r   to_derr-   r#   r#   r$   test_to_der_pkcs8)  s    z TestSigningKey.test_to_der_pkcs8c                 C   s,   d}t |}t jdtd}| || d S )N:  -----BEGIN PRIVATE KEY-----
MIIBeQIBADCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0BAQIhAP////8AAAAB
AAAAAAAAAAAAAAAA////////////////MFsEIP////8AAAABAAAAAAAAAAAAAAAA
///////////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMV
AMSdNgiG5wSTamZ44ROdJreBn36QBEEEaxfR8uEsQkf4vOblY6RA8ncDfYEt6zOg
9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9QIhAP////8A
AAAA//////////+85vqtpxeehPO5ysL8YyVRAgEBBG0wawIBAQQgIXtREfUmR16r
ZbmvDGD2lAEFPZa2DLPyz0czSja58yChRANCAASK9VJIGLOY5mxXO4rdf2CNl0//
yJWhIzDWX7daMI6qQWB9hKyR5OFOT6eFr1qtcZh8CGZbB+yIOCpnnwn0ekpl
-----END PRIVATE KEY-----
s    !{Q&G^e`=G3J6 rd   )r   r\   r    r   r(   )r.   rb   r]   ra   r#   r#   r$   'test_decoding_explicit_curve_parameters4  s    
z6TestSigningKey.test_decoding_explicit_curve_parametersc              	   C   s.   d}|  t tj|dgd W 5 Q R X d S )Nr   rg   rh   )rO   r   r   r\   )r.   rb   r#   r#   r$   >test_decoding_explicit_curve_parameters_with_explicit_disabledM  s     zMTestSigningKey.test_decoding_explicit_curve_parameters_with_explicit_disabledc                 C   s6   t | jjj| jj}| | j| | | j| d S r0   )r   from_secret_exponentr   privkeyZsecret_multiplierr`   r(   r   r.   r]   r#   r#   r$   test_equality_on_signing_keys`  s     z,TestSigningKey.test_equality_on_signing_keysc                 C   s4   | j d}| | | j j}| ||d d S )Nr   )r   signrx   r~   r   r.   r   r!   r#   r#   r$   test_verify_with_empty_messageg  s    
z-TestSigningKey.test_verify_with_empty_messagec                 C   s2   | j d}| j j}|  | ||d d S )N   message)r   r   r~   r   rx   r   r   r#   r#   r$   test_verify_with_precomputep  s    z*TestSigningKey.test_verify_with_precomputec                 C   s(   | j j}|  | jj}| || d S r0   )r   r~   r   r   r(   )r.   Zvk1r^   r#   r#   r$   *test_compare_verifying_key_with_precomputey  s    z9TestSigningKey.test_compare_verifying_key_with_precomputec                 C   s6   | j d}| j j}|jdd | ||d d S )Ns   other messageT)Zlazy)ra   r   r~   r   rx   r   r   r#   r#   r$    test_verify_with_lazy_precompute  s    z/TestSigningKey.test_verify_with_lazy_precomputec                 C   s   |  | j| j d S r0   )r}   r   ra   r-   r#   r#   r$   test_inequality_on_signing_keys  s    z.TestSigningKey.test_inequality_on_signing_keysc                 C   s   |  | jd  d S r0   )r}   r   r-   r#   r#   r$   /test_inequality_on_signing_keys_not_implemented  s    z>TestSigningKey.test_inequality_on_signing_keys_not_implementedc                 C   s*   d}t |}t dt}| || d S )Nw-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIDS6x9FO1PG8T4xIPg8Zd0z8uL6sVGZFEZrX17gHC/XU
-----END PRIVATE KEY-----
    4NOH>wLTfE׸)r   r\   r    r   r(   r.   r   r]   sk_strr#   r#   r$   test_ed25519_from_pem  s    
z$TestSigningKey.test_ed25519_from_pemc              	   C   s^   t tdt ttj tdttd}| t}t	| W 5 Q R X | 
dt|j d S )Nr       AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzNon NULL parametersr	   r   r
   r   r   r   rO   r   r   rk   rl   rm   rn   r   r#   r#   r$   'test_ed25519_from_der_bad_alg_id_params  s    
z6TestSigningKey.test_ed25519_from_der_bad_alg_id_paramsc              	   C   s\   t tdt ttj ttdd }| t}t	| W 5 Q R X | 
dt|j d S )Nr   r      Bz+trailing junk after the encoded private keyr   r   r#   r#   r$   )test_ed25519_from_der_junk_after_priv_key  s     z8TestSigningKey.test_ed25519_from_der_junk_after_priv_keyc                 C   s.   t dt}d}|j|td}| |d d S )Nr   r   Z	sigencodes@   ,v>%~>&
a@|`X@<7%i{}ݱ|
})"+E )r   r    r   r   r   r(   )r.   r   msgr   r#   r#   r$   test_ed25519_sign  s    z TestSigningKey.test_ed25519_signc              	   C   sB   t dt}| t}|d W 5 Q R X | dt|j d S Nr   s   aaaaaaaaaaaaaaaaaaaaMethod unsupported for Edwards)	r   r    r   rO   r   sign_digest_deterministicrl   rm   rn   r.   r   rp   r#   r#   r$   &test_ed25519_sign_digest_deterministic  s    z5TestSigningKey.test_ed25519_sign_digest_deterministicc              	   C   sB   t dt}| t}|d W 5 Q R X | dt|j d S r   )	r   r    r   rO   r   sign_digestrl   rm   rn   r   r#   r#   r$   test_ed25519_sign_digest  s    z'TestSigningKey.test_ed25519_sign_digestc              	   C   sB   t dt}| t}|d W 5 Q R X | dt|j d S )Nr      r   )	r   r    r   rO   r   Zsign_numberrl   rm   rn   r   r#   r#   r$   test_ed25519_sign_number  s    z'TestSigningKey.test_ed25519_sign_numberc              	   C   sF   d}t |}| t}|jdd W 5 Q R X | dt|j d S )Nr   Zssleayr   zOnly PKCS#8 format)r   r\   rO   r   r   rl   rm   rn   )r.   r   r]   rp   r#   r#   r$   test_ed25519_to_der_ssleay  s    
z)TestSigningKey.test_ed25519_to_der_ssleayc                 C   s(   t dt}d}| |jdd| d S )Nr   sw   -----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIDS6x9FO1PG8T4xIPg8Zd0z8uL6sVGZFEZrX17gHC/XU
-----END PRIVATE KEY-----
r   r   )r   r    r   r(   r   r.   r]   r   r#   r#   r$   test_ed25519_to_pem  s    z"TestSigningKey.test_ed25519_to_pemc                 C   s$   t dt}d}| | | d S )Nr   s  -----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZWQyNTUx
OQAAACAjAFDQ1mQiKI7jVYl+bkFXja7eRCbuVie8heYLLyrLZQAAAIgAAAAAAAAAAAAAAAtzc2gt
ZWQyNTUxOQAAACAjAFDQ1mQiKI7jVYl+bkFXja7eRCbuVie8heYLLyrLZQAAAEA0usfRTtTxvE+M
SD4PGXdM/Li+rFRmRRGa19e4Bwv11CMAUNDWZCIojuNViX5uQVeNrt5EJu5WJ7yF5gsvKstlAAAA
AAECAwQF
-----END OPENSSH PRIVATE KEY-----
)r   r    r   r(   r   )r.   r]   Zssh_strr#   r#   r$   test_ed25519_to_ssh  s    
z"TestSigningKey.test_ed25519_to_sshc                 C   s,   t t}t |jdd}| || d S Nr   r   )r   r_   r   r\   r   r(   r.   r]   Zdecodedr#   r#   r$   test_ed25519_to_and_from_pem   s    
z+TestSigningKey.test_ed25519_to_and_from_pemc                 C   s   t jttjd}| | d S )N)Zentropy)r   r_   r   osurandomr&   r   r#   r#   r$   test_ed25519_custom_entropy'  s    z*TestSigningKey.test_ed25519_custom_entropyc              	   C   s:   |  t}tjdtd W 5 Q R X | dt|j d S )NiIrd   z don't support setting the secret)rO   r   r   r   r   rl   rm   rn   ro   r#   r#   r$   !test_ed25519_from_secret_exponent,  s    z0TestSigningKey.test_ed25519_from_secret_exponentc                 C   s*   d}t |}t dt}| || d S )Nz-----BEGIN PRIVATE KEY-----
MEcCAQAwBQYDK2VxBDsEOTyFuXqFLXgJlV8uDqcOw9nG4IqzLiZ/i5NfBDoHPzmP
OP0JMYaLGlTzwovmvCDJ2zLaezu9NLz9aQ==
-----END PRIVATE KEY-----
9   <z-x	_..&_:?98	1T 2{;4i)r   r\   r    r   r(   r   r#   r#   r$   r   2  s    
z"TestSigningKey.test_ed448_from_pemc                 C   s(   t dt}d}| |jdd| d S )Nr   s   -----BEGIN PRIVATE KEY-----
MEcCAQAwBQYDK2VxBDsEOTyFuXqFLXgJlV8uDqcOw9nG4IqzLiZ/i5NfBDoHPzmPOP0JMYaLGlTz
wovmvCDJ2zLaezu9NLz9aQ==
-----END PRIVATE KEY-----
r   r   )r   r    r   r(   r   r   r#   r#   r$   r   E  s    z TestSigningKey.test_ed448_to_pemc                 C   s,   t t}t |jdd}| || d S r   )r   r_   r   r\   r   r(   r   r#   r#   r$   test_ed448_encode_decodeV  s    
z'TestSigningKey.test_ed448_encode_decodeN) rQ   rR   rS   rT   rU   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   r#   r#   r#   r$   r     s:   
			r   c                   @   sH   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dS )TestTrivialCurvec                 C   sJ   t ddd}t|dddddd	}td
||d| _tjd| jtjd| _d S )N   T   :      W   r      T)r   Ztoy_p8)r   r   r      )Zhashfunc)	r   r   r   	toy_curver   r   rr   sha1r]   )r"   r`   genr#   r#   r$   r%   _  s    zTestTrivialCurve.setUpClassc                 C   s    | j j}| ||  t d S r0   )r   r   r(   orderr   )r.   r   r#   r#   r$   test_generator_sanityq  s    z&TestTrivialCurve.test_generator_sanityc                 C   s   |  | jj d d S )Ns   )r(   r]   r~   r2   r-   r#   r#   r$   test_public_key_sanityv  s    z'TestTrivialCurve.test_public_key_sanityc                 C   s2   | j d}| |d | | j j|d d S )Nr   s   -.r]   sign_deterministicr(   rx   r~   r   )r.   r   r#   r#   r$   test_deterministic_signy  s    z(TestTrivialCurve.test_deterministic_signc                 C   s@   t d}| j|}| t|d | | jj|| d S )N    r   )	r   r   r]   r   r(   lenrx   r~   r   r.   r   r   r#   r#   r$   &test_deterministic_sign_random_message  s    
z7TestTrivialCurve.test_deterministic_sign_random_messagec                 C   s6   d}| j |}| |d | | j j|| d S )Ns    Os   6r   r   r#   r#   r$   /test_deterministic_sign_that_rises_R_zero_error  s    z@TestTrivialCurve.test_deterministic_sign_that_rises_R_zero_errorc                 C   s6   d}| j |}| |d | | j j|| d S )Ns   ms   Ilr   r   r#   r#   r$   /test_deterministic_sign_that_rises_S_zero_error  s    z@TestTrivialCurve.test_deterministic_sign_that_rises_S_zero_errorN)rQ   rR   rS   rU   r%   r   r   r   r   r   r  r#   r#   r#   r$   r   ^  s   
r   rW   sd   some string for signingcontents don't really matterbut do include also some crazy values:  	
      r   rZ   c                 C   s   | S r0   r#   r+   r#   r#   r$   <lambda>  r   r  zbytes memoryviewr6   zbytearray memoryviewc                 C   s   t t| S r0   r1   r6   r  r#   r#   r$   r    r   zarray.array of bytesc                 C   s   t  d| S r9   r<   r  r#   r#   r$   r    r   zarray.array of bytes memoryviewc                 C   s   t td| S r9   r1   r<   r  r#   r#   r$   r    r   zarray.array of intsc                 C   s   t  d| S rA   r  r  r#   r#   r$   r    r   zarray.array of ints memoryviewc                 C   s   t td| S rA   r  r  r#   r#   r$   r    r   Zintsc                 C   s   | S r0   r#   r  r#   r#   r$   r    r   rj   c                 C   s   t | S r0   convr  r#   r#   r$   r    r   derc                 C   s   t | S r0   r  r  r#   r#   r$   r    r   stringsc                 C   s   t dd | D S )Nc                 s   s   | ]}t |V  qd S r0   r  ).0ir#   r#   r$   	<genexpr>  s     z<lambda>.<locals>.<genexpr>)tupler  r#   r#   r$   r    r   r   verify_digestz{2}-{0}-{1})idz1signature,decoder,mod_apply,fun,vrf_mthd,vrf_datac                 C   s"   || }|||||dst d S )N)Z	sigdecode)r[   )	signaturedecoder	mod_applyfunvrf_mthdvrf_datar   r#   r#   r$   test_VerifyingKey_verify  s    r  s   ^BRB<V%wrL   c                 C   s   | S r0   r#   r  r#   r#   r$   r    r   c                 C   s   t t| S r0   r  r  r#   r#   r$   r    r   c                 C   s   t  d| S r9   r  r  r#   r#   r$   r    r   c                 C   s   t td| S r9   r  r  r#   r#   r$   r    r   c                 C   s   t  d| S rA   r  r  r#   r#   r$   r    r   c                 C   s   t td| S rA   r  r  r#   r#   r$   r    r   convertc                 C   s&   | t }t|}| t ks"td S r0   )prv_key_bytesr   r    r2   r[   r  keyr]   r#   r#   r$   test_SigningKey_from_string  s    
r  c                 C   s&   | t }t|}| tks"td S r0   )r   r   rk   r2   r  r[   r  r#   r#   r$   test_SigningKey_from_der  s    
r  s   
c                 C   s&   t j| t| td}t|t d S N)extra_entropy)r]   r   r   r!  r!   r   r  r   r#   r#   r$   "test_SigningKey_sign_deterministic  s
     r#  c                 C   s&   t j| t| td}t|t d S r   )r]   r   	data_hashr!  r!   r   r   r"  r#   r#   r$   )test_SigningKey_sign_digest_deterministic(  s
     r%  c                 C   s   t | t}t|t d S r0   )r]   r   r   r!   r   r"  r#   r#   r$   test_SigningKey_sign1  s    r&  c                 C   s   t | t}t|t d S r0   )r]   r   r$  r!   r   r   r"  r#   r#   r$   test_SigningKey_sign_digest8  s    r'  c                  C   s8   t jtjd td} | j}| d}||ds4td S )Nr   rd   s   hello)r   r   r   r   r~   r   r   r[   )r]   r!   r   r#   r#   r$   #test_SigningKey_with_unlikely_value?  s    
r(  c                  C   s`   t } t|  |  |  |  } td|  | d}td|}tdt	}|j
|j
ks\td S )Nr   )
r      $   r)  r)  r      r   r   r      )r   r   r`   r+   r,   r   r   r   r   r   r   r[   )r   r`   r]   ra   r#   r#   r$   +test_SigningKey_with_custom_curve_old_pointF  s     r-  c                  C   s,   t dt} t dt}| j|jkr(td S )Nr   )r   r   r   r   r~   r[   r   ra   r#   r#   r$   2test_VerifyingKey_inequality_with_different_curves]  s    r/  c                  C   s,   t dt} t dt}| j|jkr(td S )Nr   r)  )r   r   r   r~   r[   r.  r#   r#   r$   9test_VerifyingKey_inequality_with_different_secret_pointsd  s    r0  c                  C   s    d} t | }|jtkstd S )Nz-----BEGIN PRIVATE KEY-----
    MFMCAQEwBQYDK2VwBCIEICc2F2ag1n1QP0jY+g9qWx5sDkx0s/HdNi3cSRHw+zsI
    oSMDIQA+HQ2xCif8a/LMWR2m5HaCm5I2pKe/cc8OiRANMHxjKQ==
    -----END PRIVATE KEY-----)r   r\   r`   r   r[   )Zpemr]   r#   r#   r$   &test_SigningKey_from_pem_pkcs8v2_EdDSAk  s    
r1  )fZ	unittest2ZunittestImportErrorr1   	NameError
memoryviewr   r<   Zpytestrr   keysr   r   r   r   r
  r   r   r	   r
   r   r   r   utilr   r   r   r   r   r   Zcurvesr   r   r   r   r   Zellipticcurver   r   r   r   Zecdsar   ZTestCaser   rV   r   r   rb   r   rY   rZ   r[   rk   r]   r~   r!   r   r   r   updateZdigestr$  r   Zsig_rawZsig_derZsig_stringsZ	verifiersr6   modifierr  r	  Z
sig_formatr  r  r  r   r  Zmethod_namer  r  appendZparamr   ZmarkZparametrizer  r  Z
convertersr  r  r  r!  r#  r%  r&  r'  r(  r-  r/  r0  r1  r#   r#   r#   r$   <module>   s   
$	 [     Z9












 









	

	


