a
    _mg                     @   s  zd dl ZW n ey&   d dlZY n0 ze W n eyF   eZY n0 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shJ e4e1Z5e5j6Z7dZ8e9e8d d ksJ e	: Z:e:;e8 e:< Z=e2e=e3sJ e5j>e8edZ?e2e?e3sJ e5j>e8edZ@e2e@e3sJ e5j>e8edZAe2eAd  e3sJ g ZBddd fdefdeCfddd fddd fddd fd d!d fd"d#d ffD ]\ZDZEd$eDv rd%d ZFneEZFd&e?ed'd fd(e@ed)d fd*eAed+d ffD ]\\ZGZHZIZJd,e7jKe8fd-e7jLe=ffD ]4\ZMZNZOeBPejQeHeIeJeEeNeOd.ReDeGeMd/ qܐqqjejSTd0eBd1d2 ZUd3ZVe9eVd4ksFJ g ZWdd5d fdefdeCfdd6d fdd7d fdd8d fd d9d fd"d:d ffD ]\ZDZXeWPejQeXeDd/ qejSTd;eWd<d= ZYdZ0ee0Z1e2e1e3sJ ejSTd;eWdd> d?d@ ZZdAZ[ejSTd;eWdBdC Z\ejSTd;eWdDdE Z]ejSTd;eWdFdG Z^ejSTd;eWdHdI Z_dJdK Z`dLdM ZadNdO ZbdPdQ ZcdRdS Zdd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#   F/var/www/html/idle/venv/lib/python3.9/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 d    n1 s,0    Y  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(J 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bytesr   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_strpkZpk_expr#   r#   r$   &test_load_key_with_explicit_parameters   s    
z>TestVerifyingKeyFromDer.test_load_key_with_explicit_parametersc                 C   sB   d}|  t  tj|dgd W d    n1 s40    Y  d S )Nrb   named_curveZvalid_curve_encodings)rO   r   r   r[   )r.   rd   r#   r#   r$   2test_load_key_with_explicit_with_explicit_disabled   s    zJTestVerifyingKeyFromDer.test_load_key_with_explicit_with_explicit_disabledc                 C   sR   |  t"}tj| jdgd W d    n1 s20    Y  | 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    0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!   r`   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\   r`   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   sR   t j}| t}t|t  W d    n1 s20    Y  | 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   sv   t t ttj tttj dtdd}| t	}t
| W d    n1 sV0    Y  | 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   sN   |  t}tddt W d    n1 s.0    Y  | 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   sN   |  t}tddt W d    n1 s.0    Y  | 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   sP   d}t |}d}d}| t ||| W d    n1 sB0    Y  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_pkcs8r`   )r"   ra   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 rc   )r   r[   r    r   r(   )r.   ra   r\   r`   r#   r#   r$   'test_decoding_explicit_curve_parameters4  s    
z6TestSigningKey.test_decoding_explicit_curve_parametersc                 C   sB   d}|  t  tj|dgd W d    n1 s40    Y  d S )Nr   rg   rh   )rO   r   r   r[   )r.   ra   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)r`   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   r`   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   sr   t tdt ttj tdttd}| t}t	| W d    n1 sR0    Y  | 
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   sp   t tdt ttj ttdd }| t}t	| W d    n1 sP0    Y  | 
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   sV   t dt}| t}|d W d    n1 s60    Y  | 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   sV   t dt}| t}|d W d    n1 s60    Y  | 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   sV   t dt}| t}|d W d    n1 s60    Y  | 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   sZ   d}t |}| t}|jdd W d    n1 s:0    Y  | 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\   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   sN   |  t}tjdtd W d    n1 s.0    Y  | dt|j d S )NiIrc   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      )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>  r   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J d S )N)Z	sigdecoder#   )	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"J d S r0   )prv_key_bytesr   r    r2   r  keyr\   r#   r#   r$   test_SigningKey_from_string  s    
r  c                 C   s&   | t }t|}| tks"J d S r0   )r   r   rk   r2   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s4J d S )Nr   rc   s   hello)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\J 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`   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(J d S )Nr   )r   r   r   r   r~   r   r`   r#   r#   r$   2test_VerifyingKey_inequality_with_different_curves]  s    r1  c                  C   s,   t dt} t dt}| j|jkr(J d S )Nr   r+  )r   r   r   r~   r0  r#   r#   r$   9test_VerifyingKey_inequality_with_different_secret_pointsd  s    r2  c                  C   s    d} t | }|jtksJ d S )Nz-----BEGIN PRIVATE KEY-----
    MFMCAQEwBQYDK2VwBCIEICc2F2ag1n1QP0jY+g9qWx5sDkx0s/HdNi3cSRHw+zsI
    oSMDIQA+HQ2xCif8a/LMWR2m5HaCm5I2pKe/cc8OiRANMHxjKQ==
    -----END PRIVATE KEY-----)r   r[   r_   r   )Zpemr\   r#   r#   r$   &test_SigningKey_from_pem_pkcs8v2_EdDSAk  s    
r3  )eZ	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   ra   r   rY   rZ   rk   r\   r~   r!   r   r   r   updatedigestr&  r   Zsig_rawZsig_derZsig_stringsZ	verifiersr6   modifierr  r  Z
sig_formatr  r  r  r   r  method_namer  r  appendparamr   markZparametrizer  r  
convertersr  r  r!  r#  r%  r'  r(  r)  r*  r/  r1  r2  r3  r#   r#   r#   r$   <module>   s   
$	 [     Z9









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

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