U
    Yùâc‰s  ã                   @   s|  d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ erÈerÈd dlmZ d d	lmZmZ d d
lmZ d dlmZmZ d dlmZ d dlmZ d dlmZ de jkoâee jd ƒd kZej j!dkZ"ee j #dd¡ dƒee dƒee�oe dƒG dd„ deƒƒƒƒZ$ee j #dd¡ dƒee dƒee�o\e dƒG dd„ deƒƒƒƒZ%dS )é    N)Úa2b_hexÚb2a_hex)ÚskipIf)ÚinlineCallbacks)ÚTestCase)ÚHAS_CRYPTOSIGN)ÚHAS_XBR)ÚCryptosignKey)Úmake_w3ÚEthereumKey)ÚSecurityModuleMemory)Ú"create_eip712_delegate_certificateÚ#create_eip712_authority_certificate)ÚEIP712DelegateCertificate)ÚEIP712AuthorityCertificate)Úparse_certificate_chainÚWEB3_INFURA_PROJECT_IDé
   ZUSE_TWISTEDFzonly for Twistedz*env var WEB3_INFURA_PROJECT_ID not definedz.package autobahn[encryption,xbr] not installedc                   @   s,   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdS )ÚTestEip712Certificatec                 C   sB   dt j dd¡ddœ| _t| jƒ| _d| _tj| jddd�| _	d S )	NÚinfurar   Ú Úmainnet©ÚtypeÚkeyZnetworkúMavocado style uncover thrive same grace crunch want essay reduce current edgeé   ©Znum_eth_keysZnum_cs_keys)
ÚosÚenvironÚgetÚ
_gw_configr
   Ú_w3Ú_seedphraser   Úfrom_seedphraseÚ_sm©Úself© r(   úlc:\users\psant\downloads\hotstarbackend\school\venv38\Lib\site-packages\autobahn\xbr\test\test_xbr_eip712.pyÚsetUp<   s    ý
ÿzTestEip712Certificate.setUpc              	   c   sš   | j  ¡ V  | j d }| j d }d}tddd … ƒ}d}|jdd�}|jdd�}d}d	}	t|||||||	d
�}
|j|
dd�V }|  |d¡ | j  ¡ V  d S )Né   é   Ú*0xf766Dc789CF04CD18aE75af2c5fAf2DA6650Ff57é   é Ææ T©Úbinaryl   6u„lB8 Ú.Qme7ss3ARVgxv6rXqVPiikMJ8u2NLgmgszg13pYrDKEoiu©ÚchainIdÚverifyingContractÚ	validFromÚdelegateÚcsPubKeyÚbootedAtÚmetaFZ‚2bd697b2bdb9bc2c2494e53e9440ddb3e8a596eedaad717f8ecdb732d091a7de48d72d9a26d7e092ec55c074979ab039f8e003acf80224819ff396c9529eb1d11b)	r%   Úopenr   ÚaddressÚ
public_keyr   Úsign_typed_dataÚassertEqualÚclose)r'   Údelegate_eth_keyÚdelegate_cs_keyr4   r5   r6   r7   r8   r9   r:   Ú	cert_dataÚcert_sigr(   r(   r)   Ú test_eip712_delegate_certificateH   s,    

   þÿz6TestEip712Certificate.test_eip712_delegate_certificatec              
   c   s¬   | j  ¡ V  | j d }| j d }d}tddd … ƒ}d}|jdd�}|jdd�}tddd … ƒ}d	}	d
}
t|||||||	|
d�}|j|dd�V }|  |d¡ | j  ¡ V  d S )Nr   r+   r-   r.   r/   Tr0   Ú*0xA6e693CC4A2b4F1400391a728D26369D9b82ef96é   r2   ©r4   r5   r6   ÚissuerÚsubjectÚrealmÚcapabilitiesr:   FZ‚83590d4304cc5f6024d6a85ed2c511a60e804d609e4f498c8af777d5102c6d22657673e7b68876795e3c72f857b68e13cf616ee4c2ea559bceb344021bf977b61c)r%   r;   r   r<   r   r>   r?   r@   )r'   Útrustroot_eth_keyrA   r4   r5   r6   rI   rJ   rK   rL   r:   rC   rD   r(   r(   r)   Ú!test_eip712_authority_certificated   s0    

    þÿz7TestEip712Certificate.test_eip712_authority_certificateN)Ú__name__Ú
__module__Ú__qualname__r*   r   rE   rN   r(   r(   r(   r)   r   7   s
   
r   c                   @   sN   e Zd Zdd„ Zeddƒedd„ ƒƒZedd„ ƒZed	d
„ ƒZedd„ ƒZ	dS )ÚTestEip712CertificateChainc                 C   s¾  dt j dd¡ddœ| _t| jƒ| _d| _tj| jddd�| _	d d	d
dœddddddddœddddœdddœdddœdddœdddœdddœd d!dœgd"d!dœd#d!dœgd$œd%œd&fd d	d
dœd'ddd(d)dddd*œd+dddœdddœdddœd,ddœd-ddœd.ddœd/ddœd d!dœgd"d!dœd#d!dœgd0œd%œd1fd d	d
dœd2ddd(d)dddd*œd+dddœdddœdddœd,ddœd-ddœd.ddœd/ddœd d!dœgd"d!dœd#d!dœgd0œd%œd3fg| _
d S )4Nr   r   r   r   r   r   r   r   ZWMPÚ1)ÚnameÚversionì   ‡])EÇ8 r+   Z@12ae0184b180e9a9c5e45be4a1afbce3c6491320063701cd9c4011a777d04089Z*0xf5173a6111B2A6B3C20fceD53B2A8405EC142bF6r2   é’ç r-   )r9   r4   r8   r7   r:   r6   r5   r   r4   Zuint256)rT   r   r5   r<   r6   r7   r8   Zbytes32r9   Zuint64r:   ÚstringrT   rU   )r   ÚEIP712Domain)ÚdomainÚmessageÚprimaryTypeÚtypesZ‚70726dda677cac8f21366f8023d17203b2f4f9099e954f9bebb2134086e2ac291d80ce038a1342a7748d4b0750f06b8de491561d581c90c99f1c09c91cfa7e191cé   Ú.QmNbMM6TMLAgqBKzY69mJKk5VKvpcTtAtwAaLC2FV4zC3GrF   )rL   r4   rI   r:   rK   rJ   r6   r5   r   rI   rJ   rK   rL   )r   rY   Z‚f031b2625ae7e32e7eec3a8fa09f4db3a43217f282b7695e5b09dd2e13c25dc679c1f3ce27b94a3074786f7f12183a2a275a00aea5a66b83c431281f1069bd841cé?   Z‚c3bcd7a3c3c45ae45a24cd7745db3b39c4113e6b71a4220f943f0969282246b4083ef61277bd7ba9e92c9a07b79869ce63bc6206986480f9c5daddb27b91bebe1b)r   r   r    r!   r
   r"   r#   r   r$   r%   Ú_certs_expected1r&   r(   r(   r)   r*   ‡   s   ý
ÿúÿÿÿÿÿÿôÿó÷çùÿÿÿÿÿÿÿòÿñöäùÿÿÿÿÿÿÿòÿñöäÉz TestEip712CertificateChain.setUpTz]FIXME: builtins.TypeError: to_checksum_address() takes 1 positional argument but 2 were givenc              
   c   s¾  | j  ¡ V  | j d }| j d }| j d }d}tddd … ƒ}d}|jdd�}|jdd�}d	}	d
}
|jdd�}|}tddd … ƒ}tjtjB }d}|jdd�}|}tddd … ƒ}tjtj	B tjB tjB tj
B tjB }d}t||||||	|
d�}|j|dd�V }t|d d ƒ ¡ |d d< | j |d d ¡|d d< | j |d d ¡|d d< t||||||||d�}|j|dd�V }| j |d d ¡|d d< | j |d d ¡|d d< | j |d d ¡|d d< | j |d d ¡|d d< t||||||||d�}|j|dd�V }| j |d d ¡|d d< | j |d d ¡|d d< | j |d d ¡|d d< | j |d d ¡|d d< d ||fd ||fd ||fg}|  || j¡ | j  ¡ V  d S )Nr   r+   r,   r-   r.   rW   Tr0   rV   r2   rF   r_   r3   Fr[   r8   r7   r5   rH   rI   rJ   rK   )r%   r;   r   r<   r=   r   ÚCAPABILITY_PUBLIC_RELAYÚCAPABILITY_PRIVATE_RELAYÚCAPABILITY_ROOT_CAÚCAPABILITY_INTERMEDIATE_CAÚCAPABILITY_PROVIDERÚCAPABILITY_CONSUMERr   r>   r   Údecoder"   ZtoChecksumAddressr   Úprintr?   ra   r@   )r'   rM   rA   rB   r4   r5   r6   r7   r8   r9   ZdelegateMetaZissuer_cert2Zsubject_cert2Zrealm_cert2Zcapabilities_cert2Z
meta_cert2Zissuer_cert3Zsubject_cert3Zrealm_cert3Zcapabilities_cert3Z
meta_cert3Z
cert1_dataZ	cert1_sigZ
cert2_dataZ	cert2_sigZ
cert3_dataZ	cert3_sigÚcertificatesr(   r(   r)   Ú+test_eip712_create_certificate_chain_manualê   s†    


$   þ
ÿ  ü
ÿ  ü
ÿ
zFTestEip712CertificateChain.test_eip712_create_certificate_chain_manualc              
   c   sT  | j  ¡ V  | j d }d}tddd … ƒ}d}|jdd�}|}tddd … ƒ}tjtjB tjB tjB tj	B tj
B }d	}	t||||||||	d
�}
|j|
dd�V }t||||||||	d
�}| |¡V }t | ¡ ¡}| |¡V }|  ||¡ |  ||¡ |  |d¡ t ¡ �6}| |j¡ t |j¡}| |¡V }|  ||¡ W 5 Q R X | j  ¡ V  d S )Nr   r+   r-   r.   i*,
 Tr0   rF   r   rH   FZ‚d9e679753e1120a8ba8edea4895d2e056ba98eaa1acbe11bf6210f3a48a56de830aa6a566cc4920c74a284ffcd9f7d1af5fe229268a44030522db19d5a75f4131c)r%   r;   r   r<   r   rd   re   rb   rc   rf   rg   r   r>   ÚsignÚparseÚmarshalr?   ÚtempfileÚNamedTemporaryFileÚsaverT   Úloadr@   )r'   Zca_keyZca_cert_chainIdZca_cert_verifyingContractZca_cert_validFromZca_cert_issuerZca_cert_subjectZca_cert_realmZca_cert_capabilitiesZca_cert_metaZca_cert_dataZca_cert_sigZca_certZca_cert_sig2Zca_cert2Zca_cert_sig3ÚfdZca_cert3Zca_cert_sig4r(   r(   r)   Ú.test_eip712_create_certificate_chain_highlevelN  sR    
$   üù
zITestEip712CertificateChain.test_eip712_create_certificate_chain_highlevelc                 c   s.  | j  ¡ V  | j d }| j d }| j d }g }g }| jD ]²\}}}|  d|¡ |  d|¡ |  d|¡ |  d|¡ |  |d |d ¡ |  |d dd	g¡ |d dkr²t |¡}	n$|d d	krÊt |¡}	nd
sÖtdƒ‚| |	¡ | |¡ q8|  	t
|ƒd¡ |  	|d j|jdd�¡ |  	|d j|jdd�¡ |  	|d j|jdd�¡ |  	|d j|jdd�¡ |  |d t¡ dt
|ƒd fD ]}
|  ||
 t¡ �q„|d j}|d j}|D ]"}	|  	|	j|¡ |  	|	j|¡ �q´|d j}|dd … D ]}	|  	|	j|¡ �qî|  	|d j|d j¡ |  	|d j|d j¡ |  |d j|d j¡ |  |d j|d j|d jB k¡ |  	|d j|d j¡ |  |d j|d j¡ |d  t|d ƒ¡}|  	||jdd�¡ |d  t|d ƒ¡}|  	||jdd�¡ |d  t|d ƒ¡}|  	||jdd�¡ | j  ¡ V  d S )Nr   r+   r,   rZ   r[   r\   r]   r   r   Fzshould not arrive hererG   Tr0   r.   )r%   r;   ra   ÚassertInr   rm   r   ÚAssertionErrorÚappendr?   Úlenr7   r<   r8   r=   rI   ÚassertIsInstancer4   r5   rK   rJ   ÚassertLessEqualr6   Ú
assertTruerL   Zrecoverr   r@   )r'   rM   rA   rB   Z
cert_chainZ	cert_sigsZ	cert_hashrC   rD   ÚcertÚir4   r5   rK   Z_issuerr(   r(   r)   Ú+test_eip712_verify_certificate_chain_manualŒ  sb    






$zFTestEip712CertificateChain.test_eip712_verify_certificate_chain_manualc                 c   s’   | j  ¡ V  | j d }| j d }| j d }t| jƒ}|  |d j|jdd�¡ |  |d j|jdd�¡ |  |d j|j	dd�¡ | j  
¡ V  d S )Nr   r+   r,   r.   Tr0   )r%   r;   r   ra   r?   rI   r<   r7   r8   r=   r@   )r'   rM   rA   rB   rj   r(   r(   r)   Ú.test_eip712_verify_certificate_chain_highlevelï  s    



zITestEip712CertificateChain.test_eip712_verify_certificate_chain_highlevelN)
rO   rP   rQ   r*   r   r   rk   rt   r~   r   r(   r(   r(   r)   rR   ‚   s   cb
=
brR   )&r   Úsysro   Úbinasciir   r   Úunittestr   Ztwisted.internet.deferr   Ztwisted.trial.unittestr   Zautobahn.wamp.cryptosignr   Zautobahn.xbrr   r	   r
   r   Zautobahn.xbr._secmodr   r   r   Z)autobahn.xbr._eip712_delegate_certificater   Z*autobahn.xbr._eip712_authority_certificater   Z&autobahn.xbr._eip712_certificate_chainr   r   rx   Z
HAS_INFURAÚversion_infoÚminorZ
IS_CPY_310r    r   rR   r(   r(   r(   r)   Ú<module>   s4   
H
