o
    6h                     @   s  zd dl ZW n ey   d dlZY nw ze W n ey#   eZY nw 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sJ 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 ]W\ZDZEd$eDv r>d%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 ]\ZMZNZOeBPejQeHeIeJeEeNeOd.ReDeGeMd/ qiqWq0ejSTd0eBd1d2 ZUd3ZVe9eVd4ksJ 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#   c/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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   *   t t| j}| | j |  d S N)r   r    bufferr   r(   r!   	to_stringr.   r!   r#   r#   r$   test_bytes_memoryviewG      z0TestVerifyingKeyFromString.test_bytes_memoryviewc                 C   r0   r1   r   r    	bytearrayr   r(   r!   r3   r4   r#   r#   r$   test_bytearrayL   r6   z)TestVerifyingKeyFromString.test_bytearrayc                 C   .   t tt| j}| | j |  d S r1   )r   r    r2   r8   r   r(   r!   r3   r4   r#   r#   r$   test_bytesarray_memoryviewQ      z5TestVerifyingKeyFromString.test_bytesarray_memoryviewc                 C   2   t  d| j}t|}| | j |  d S NBarrayr   r   r    r(   r!   r3   r.   arrr!   r#   r#   r$   test_array_array_of_bytesV      
z4TestVerifyingKeyFromString.test_array_array_of_bytesc                 C   6   t  d| j}tt|}| | j |  d S r>   rA   r   r   r    r2   r(   r!   r3   rB   r#   r#   r$   $test_array_array_of_bytes_memoryview\      z?TestVerifyingKeyFromString.test_array_array_of_bytes_memoryviewc                 C   r=   NIr@   rB   r#   r#   r$   test_array_array_of_intsb   rE   z3TestVerifyingKeyFromString.test_array_array_of_intsc                 C   rF   rJ   rG   rB   r#   r#   r$   #test_array_array_of_ints_memoryviewh   rI   z>TestVerifyingKeyFromString.test_array_array_of_ints_memoryviewc                 C   s*   t d| j }| | j |  d S N   r   r    r   r(   r!   r3   r4   r#   r#   r$   test_bytes_uncompressedn   r6   z2TestVerifyingKeyFromString.test_bytes_uncompressedc                 C   s.   t td| j }| | j |  d S rN   r7   r4   r#   r#   r$   test_bytearray_uncompresseds   r<   z6TestVerifyingKeyFromString.test_bytearray_uncompressedc                 C   s2   t d| jd d  }| | j |  d S N      rP   r4   r#   r#   r$   test_bytes_compressedx   s   z0TestVerifyingKeyFromString.test_bytes_compressedc                 C   s6   t td| jd d  }| | j |  d S rS   r7   r4   r#   r#   r$   test_bytearray_compressed}   s   z4TestVerifyingKeyFromString.test_bytearray_compressedc                 C   s<   |  t tdt W d    d S 1 sw   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/   r5   r9   r;   rD   rH   rL   rM   rQ   rR   rV   rW   rY   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_strkey_strr#   r#   r$   r%      s   
z"TestVerifyingKeyFromDer.setUpClassc                 C   ,   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rh   )r   rd   r    r   r(   )r.   pub_key_strpkpk_expr#   r#   r$   &test_load_key_with_explicit_parameters   s   
z>TestVerifyingKeyFromDer.test_load_key_with_explicit_parametersc                 C   D   d}|  t tj|dgd W d    d S 1 sw   Y  d S )Nrm   named_curvevalid_curve_encodings)rX   r   r   rd   )r.   ro   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 sw   Y  | dt|j d S )Nraw)valid_encodingszenabled (raw) encodings)rX   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   $   t | jtj}| |jtj d S r1   )r   rz   r   hashlibsha256assertIsdefault_hashfuncr4   r#   r#   r$   test_custom_hashfunc      z,TestVerifyingKeyFromDer.test_custom_hashfuncc                 C   r   r1   )r   rd   ra   r   r   r   r   r4   r#   r#   r$   "test_from_pem_with_custom_hashfunc   r   z:TestVerifyingKeyFromDer.test_from_pem_with_custom_hashfuncc                 C   s&   t | j}| | j |  d S r1   )r   rz   r   r(   r!   r3   r4   r#   r#   r$   r/      s   z"TestVerifyingKeyFromDer.test_bytesc                 C   r0   r1   )r   rz   r2   r   r(   r!   r3   r4   r#   r#   r$   r5      r6   z-TestVerifyingKeyFromDer.test_bytes_memoryviewc                 C   r0   r1   )r   rz   r8   r   r(   r!   r3   r4   r#   r#   r$   r9      r6   z&TestVerifyingKeyFromDer.test_bytearrayc                 C   r:   r1   )r   rz   r2   r8   r   r(   r!   r3   r4   r#   r#   r$   r;      r<   z2TestVerifyingKeyFromDer.test_bytesarray_memoryviewc                 C   r=   r>   )rA   r   r   rz   r(   r!   r3   rB   r#   r#   r$   rD      rE   z1TestVerifyingKeyFromDer.test_array_array_of_bytesc                 C   rF   r>   )rA   r   r   rz   r2   r(   r!   r3   rB   r#   r#   r$   rH      rI   z<TestVerifyingKeyFromDer.test_array_array_of_bytes_memoryviewc                 C   s   |  | j| j k d S r1   )
assertTruer!   re   get_verifying_keyr-   r#   r#   r$   test_equality_on_verifying_keys  s   z7TestVerifyingKeyFromDer.test_equality_on_verifying_keysc                 C      |  | j| jk d S r1   )assertFalser!   rf   r-   r#   r#   r$   !test_inequality_on_verifying_keys	     z9TestVerifyingKeyFromDer.test_inequality_on_verifying_keysc                 C   s   |  | jd k d S r1   )r   r!   r-   r#   r#   r$   1test_inequality_on_verifying_keys_not_implemented     zITestVerifyingKeyFromDer.test_inequality_on_verifying_keys_not_implementedc                 C   s   |  | j| jj d S r1   )assertNotEqualr!   ri   verifying_keyr-   r#   r#   r$   *test_VerifyingKey_inequality_on_same_curve  r   zBTestVerifyingKeyFromDer.test_VerifyingKey_inequality_on_same_curvec                 C      |  | j| j d S r1   )r   re   ri   r-   r#   r#   r$   (test_SigningKey_inequality_on_same_curve  r   z@TestVerifyingKeyFromDer.test_SigningKey_inequality_on_same_curvec                 C   r   r1   )r   r!   re   r-   r#   r#   r$   test_inequality_on_wrong_types  r   z6TestVerifyingKeyFromDer.test_inequality_on_wrong_typesc                 C   sF   | j jj}t| | | }t|| j j}| 	|| j k d S r1   )
r!   r)   r*   r   rh   r+   r,   r   from_public_pointr   )r.   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.   re   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 sw   Y  | dt|j d S )Nzincompatible with Edwards)	r   r   rX   
ValueErrorr   r   r{   r|   r}   )r.   r*   r   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 r1   )
r   r    r   r   r   r   r   r3   
precomputer(   r.   re   r!   rf   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 s+w   Y  | dt|j d S )Nr       ztrailing junk after public key)r	   r
   r   oidr   rc   r   r   rX   r   r   rz   r{   r|   r}   r.   der_strr   r#   r#   r$   $test_parse_malfomed_eddsa_der_pubkey;  s   z<TestVerifyingKeyFromDer.test_parse_malfomed_eddsa_der_pubkeyc                 C   N   |  t}tddt W d    n1 sw   Y  | dt|j d S N    zunsupported for Edwards)rX   r   r   from_public_key_recoveryr   r{   r|   r}   r~   r#   r#   r$   %test_edwards_from_public_key_recoveryG     z=TestVerifyingKeyFromDer.test_edwards_from_public_key_recoveryc                 C   r   r   )rX   r   r   $from_public_key_recovery_with_digestr   r{   r|   r}   r~   r#   r#   r$   1test_edwards_from_public_key_recovery_with_digestM  s   zITestVerifyingKeyFromDer.test_edwards_from_public_key_recovery_with_digestc                 C   J   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   rd   r'   rh   r   r   r   r    r(   )r.   vk_pemr!   vk_strvk_2r#   r#   r$   test_load_ed25519_from_pemU  s   
z2TestVerifyingKeyFromDer.test_load_ed25519_from_pemc                 C   (   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   r   )Nr   sQ   ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICMAUNDWZCIojuNViX5uQVeNrt5EJu5WJ7yF5gsvKstl
)r   r    r   r(   to_ssh)r.   r   r!   vk_sshr#   r#   r$   test_export_ed255_to_sshz  s
   z0TestVerifyingKeyFromDer.test_export_ed255_to_sshc                 C   .   t t}|j}t| }| || d S r1   )r   rg   r   r   r   rd   r   r(   r   r#   r#   r$   test_ed25519_export_import     
z2TestVerifyingKeyFromDer.test_ed25519_export_importc                 C   ,   d}t |}d}d}| ||| d S )Nr      data
s@   dGj3yEl PǏ`u/'ӖXF\P)խF<hMꍨyr   rd   r   verifyr.   r   r!   datasigr#   r#   r$   test_ed25519_sig_verify  s   
z/TestVerifyingKeyFromDer.test_ed25519_sig_verifyc                 C   sR   d}t |}d}d}| t ||| W d    d S 1 s"w   Y  d S )Nr   r   s@   Gj3yEl PǏ`u/'ӖXF\P)խF<hMꍨy)r   rd   rX   r   r   r   r#   r#   r$   !test_ed25519_sig_verify_malformed  s   
"z9TestVerifyingKeyFromDer.test_ed25519_sig_verify_malformedc                 C   r   )N-----BEGIN PUBLIC KEY-----
MEMwBQYDK2VxAzoAeQtetSu7CMEzE+XWB10Bg47LCA0giNikOxHzdp+tZ/eK/En0
dTdYD2ll94g58MhSnBiBQB9A1MMA
-----END PUBLIC KEY-----
9   y^+3] ؤ;vgIu7Xie9R@@ )	r   rd   r'   rh   r   r   r   r    r(   )r.   pem_strr!   r   rf   r#   r#   r$   test_ed448_from_pem  s   
z+TestVerifyingKeyFromDer.test_ed448_from_pemc                 C   r   )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   r   r1   )r   rg   r   r   r   rd   r   r(   r   r#   r#   r$   test_ed448_export_import  r   z0TestVerifyingKeyFromDer.test_ed448_export_importc                 C   r   )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)(rZ   r[   r\   r]   r^   r%   rr   rw   r   r   r   r/   r5   r9   r;   rD   rH   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_      sL    
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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 )Nr`   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   rd   sk1	sk1_pkcs8ri   )r"   rj   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   rl   )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 rn   )r   rd   r    r   r(   )r.   rj   re   ri   r#   r#   r$   'test_decoding_explicit_curve_parameters4  s   
z6TestSigningKey.test_decoding_explicit_curve_parametersc                 C   rs   )Nr   rt   ru   )rX   r   r   rd   )r.   rj   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 r1   )r   from_secret_exponentr   privkeysecret_multiplierrh   r(   r   r.   re   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   signr   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   r   r   r   r#   r#   r$   test_verify_with_precomputep  s   z*TestSigningKey.test_verify_with_precomputec                 C   s(   | j j}|  | jj}| || d S r1   )r   r   r   r   r(   )r.   vk1rf   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)lazy)ri   r   r   r   r   r   r   r#   r#   r$    test_verify_with_lazy_precompute  s   z/TestSigningKey.test_verify_with_lazy_precomputec                 C   r   r1   )r   r   ri   r-   r#   r#   r$   test_inequality_on_signing_keys  r   z.TestSigningKey.test_inequality_on_signing_keysc                 C   s   |  | jd  d S r1   )r   r   r-   r#   r#   r$   /test_inequality_on_signing_keys_not_implemented  s   z>TestSigningKey.test_inequality_on_signing_keys_not_implementedc                 C   *   d}t |}t dt}| || d S )Nw-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIDS6x9FO1PG8T4xIPg8Zd0z8uL6sVGZFEZrX17gHC/XU
-----END PRIVATE KEY-----
    4NOH>wLTfE׸)r   rd   r    r   r(   r.   r   re   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 s)w   Y  | 
dt|j d S )Nr       AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzNon NULL parametersr	   r   r
   r   r   r   rX   r   r   rz   r{   r|   r}   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 s(w   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   	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   V   t dt}| t}|d W d    n1 sw   Y  | dt|j d S Nr   s   aaaaaaaaaaaaaaaaaaaaMethod unsupported for Edwards)	r   r    r   rX   r   sign_digest_deterministicr{   r|   r}   r.   r   r   r#   r#   r$   &test_ed25519_sign_digest_deterministic     z5TestSigningKey.test_ed25519_sign_digest_deterministicc                 C   r   r   )	r   r    r   rX   r   sign_digestr{   r|   r}   r  r#   r#   r$   test_ed25519_sign_digest  r  z'TestSigningKey.test_ed25519_sign_digestc                 C   r   )Nr      r   )	r   r    r   rX   r   sign_numberr{   r|   r}   r  r#   r#   r$   test_ed25519_sign_number  r  z'TestSigningKey.test_ed25519_sign_numberc                 C   sZ   d}t |}| t}|jdd W d    n1 sw   Y  | dt|j d S )Nr   ssleayr   zOnly PKCS#8 format)r   rd   rX   r   r   r{   r|   r}   )r.   r   re   r   r#   r#   r$   test_ed25519_to_der_ssleay  s   
z)TestSigningKey.test_ed25519_to_der_ssleayc                 C   (   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.   re   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.   re   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   rg   r   rd   r   r(   r.   re   decodedr#   r#   r$   test_ed25519_to_and_from_pem      
z+TestSigningKey.test_ed25519_to_and_from_pemc                 C   s   t jttjd}| | d S )N)entropy)r   rg   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w   Y  | dt|j d S )NiIrn   z don't support setting the secret)rX   r   r   r   r   r{   r|   r}   r~   r#   r#   r$   !test_ed25519_from_secret_exponent,  r   z0TestSigningKey.test_ed25519_from_secret_exponentc                 C   r   )Nz-----BEGIN PRIVATE KEY-----
MEcCAQAwBQYDK2VxBDsEOTyFuXqFLXgJlV8uDqcOw9nG4IqzLiZ/i5NfBDoHPzmP
OP0JMYaLGlTzwovmvCDJ2zLaezu9NLz9aQ==
-----END PRIVATE KEY-----
9   <z-x	_..&_:?98	1T 2{;4i)r   rd   r    r   r(   r   r#   r#   r$   r   2  s   
z"TestSigningKey.test_ed448_from_pemc                 C   r  )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   rg   r   rd   r   r(   r  r#   r#   r$   test_ed448_encode_decodeV  r  z'TestSigningKey.test_ed448_encode_decodeN) rZ   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#   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   toy_p8)r   r   r      )hashfunc)	r   r   r   	toy_curver   r   r   sha1re   )r"   rh   genr#   r#   r$   r%   _  s   zTestTrivialCurve.setUpClassc                 C   s    | j j}| ||  t d S r1   )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(   re   r   r3   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   -.re   sign_deterministicr(   r   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  re   r-  r(   lenr   r   r   r.   r   r   r#   r#   r$   &test_deterministic_sign_random_message  s   
z7TestTrivialCurve.test_deterministic_sign_random_messagec                 C   6   d}| j |}| |d | | j j|| d S )Ns    Os   6r,  r1  r#   r#   r$   /test_deterministic_sign_that_rises_R_zero_error  s   z@TestTrivialCurve.test_deterministic_sign_that_rises_R_zero_errorc                 C   r3  )Ns   ms   Ilr,  r1  r#   r#   r$   /test_deterministic_sign_that_rises_S_zero_error  s   z@TestTrivialCurve.test_deterministic_sign_that_rises_S_zero_errorN)rZ   r[   r\   r^   r%   r*  r+  r.  r2  r4  r5  r#   r#   r#   r$   r  ^  s    
r  r`   sd   some string for signingcontents don't really matterbut do include also some crazy values:  	
      r   rc   c                 C      | S r1   r#   r+   r#   r#   r$   <lambda>      r9  zbytes memoryviewr8   zbytearray memoryviewc                 C      t t| S r1   r2   r8   r8  r#   r#   r$   r9        zarray.array of bytesc                 C      t  d| S r>   rA   r8  r#   r#   r$   r9    r=  zarray.array of bytes memoryviewc                 C      t td| S r>   r2   rA   r8  r#   r#   r$   r9        zarray.array of intsc                 C   r>  rJ   r?  r8  r#   r#   r$   r9    r=  zarray.array of ints memoryviewc                 C   r@  rJ   rA  r8  r#   r#   r$   r9    rB  intsc                 C   r7  r1   r#   r8  r#   r#   r$   r9    r:  rx   c                 C      t | S r1   convr8  r#   r#   r$   r9        derc                 C   rD  r1   rE  r8  r#   r#   r$   r9    rG  stringsc                 C   s   t dd | D S )Nc                 s   s    | ]}t |V  qd S r1   rE  ).0ir#   r#   r$   	<genexpr>  s    z<lambda>.<locals>.<genexpr>)tupler8  r#   r#   r$   r9    s    r   verify_digestz{2}-{0}-{1})idz1signature,decoder,mod_apply,fun,vrf_mthd,vrf_datac                 C   s"   || }|||||dsJ d S )N)	sigdecoder#   )	signaturedecoder	mod_applyfunvrf_mthdvrf_datar   r#   r#   r$   test_VerifyingKey_verify  s   rW  s   ^BRB<V%wrU   c                 C   r7  r1   r#   r8  r#   r#   r$   r9    r:  c                 C   r;  r1   r<  r8  r#   r#   r$   r9    r=  c                 C   r>  r>   r?  r8  r#   r#   r$   r9    r=  c                 C   r@  r>   rA  r8  r#   r#   r$   r9    rB  c                 C   r>  rJ   r?  r8  r#   r#   r$   r9    r=  c                 C   r@  rJ   rA  r8  r#   r#   r$   r9    rB  convertc                 C   s&   | t }t|}| t ksJ d S r1   )prv_key_bytesr   r    r3   rX  keyre   r#   r#   r$   test_SigningKey_from_string     
r\  c                 C   s&   | t }t|}| tksJ d S r1   )r   r   rz   r3   rY  rZ  r#   r#   r$   test_SigningKey_from_der  r]  r_  s   
c                 C   s&   t j| t| td}t|t d S N)extra_entropy)re   r-  r   ra  r!   r   rX  r   r#   r#   r$   "test_SigningKey_sign_deterministic     rc  c                 C   s&   t j| t| td}t|t d S r`  )re   r   	data_hashra  r!   r   r   rb  r#   r#   r$   )test_SigningKey_sign_digest_deterministic(  rd  rf  c                 C   s   t | t}t|t d S r1   )re   r   r   r!   r   rb  r#   r#   r$   test_SigningKey_sign1     rg  c                 C   s   t | t}t|t d S r1   )re   r  re  r!   r   r   rb  r#   r#   r$   test_SigningKey_sign_digest8  rh  ri  c                  C   s8   t jtjd td} | j}| d}||dsJ d S )Nr   rn   s   hello)r   r   r   r)  r   r   r   )re   r!   r   r#   r#   r$   #test_SigningKey_with_unlikely_value?  s   
rj  c                  C   s`   t } t|  |  |  |  } td|  | d}td|}tdt	}|j
|j
ks.J d S )Nr   )
r      $   rk  rk  r      r   r   r      )r   r   rh   r+   r,   r)  r   r   r   r   r   )r   rh   re   ri   r#   r#   r$   +test_SigningKey_with_custom_curve_old_pointF  s    ro  c                  C   s,   t dt} t dt}| j|jkrJ d S )Nr   )r   r   r   r   r   r   ri   r#   r#   r$   2test_VerifyingKey_inequality_with_different_curves]     rq  c                  C   s,   t dt} t dt}| j|jkrJ d S )Nr   rk  )r   r   r   r   rp  r#   r#   r$   9test_VerifyingKey_inequality_with_different_secret_pointsd  rr  rs  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   rd   rh   r   )pemre   r#   r#   r$   &test_SigningKey_from_pem_pkcs8v2_EdDSAk  s   
ru  )e	unittest2unittestImportErrorr2   	NameError
memoryviewr  rA   pytestr   keysr   r   r   r   rH  r   r   r	   r
   r   r   r   utilr   r   r   r   r   r   curvesr   r   r   r   r   ellipticcurver   r   r   r   ecdsar   TestCaser   r_   r   r  rj   r   rb   rc   rz   re   r   r!   r   r0  r'  updatedigestre  r   sig_rawsig_dersig_strings	verifiersr8   modifierrT  rF  
sig_formatrQ  rR  rS  r   rN  method_namerU  rV  appendparamr   markparametrizerW  rY  
convertersrX  r\  r_  ra  rc  rf  rg  ri  rj  ro  rq  rs  ru  r#   r#   r#   r$   <module>   s    $ 	[     Z9










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