o
    èó·i‰s  ã                   @   sx  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rderdd 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v oqe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ÚkeyÚ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)   úgC:\Users\psant\Downloads\PAF backend\school\venv\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_keyr5   r6   r7   r8   r9   r:   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/   r0   Tr1   Ú*0xA6e693CC4A2b4F1400391a728D26369D9b82ef96é   r3   ©r5   r6   r7   ÚissuerÚsubjectÚrealmÚcapabilitiesr;   FZ‚83590d4304cc5f6024d6a85ed2c511a60e804d609e4f498c8af777d5102c6d22657673e7b68876795e3c72f857b68e13cf616ee4c2ea559bceb344021bf977b61c)r&   r<   r   r=   r   r?   r@   rA   )r(   Útrustroot_eth_keyrB   r5   r6   r7   rJ   rK   rL   rM   r;   rD   rE   r)   r)   r*   Ú!test_eip712_authority_certificated   s*   €

þÿz7TestEip712Certificate.test_eip712_authority_certificateN)Ú__name__Ú
__module__Ú__qualname__r+   r   rF   rO   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*0xf5173a6111B2A6B3C20fceD53B2A8405EC142bF6r3   é’ç r.   )r:   r5   r9   r8   r;   r7   r6   r   r5   Zuint256)rU   r   r6   r=   r7   r8   r9   Zbytes32r:   Zuint64r;   ÚstringrU   rV   )r   ÚEIP712Domain)ÚdomainÚmessageÚprimaryTypeÚtypesZ‚70726dda677cac8f21366f8023d17203b2f4f9099e954f9bebb2134086e2ac291d80ce038a1342a7748d4b0750f06b8de491561d581c90c99f1c09c91cfa7e191cé   Ú.QmNbMM6TMLAgqBKzY69mJKk5VKvpcTtAtwAaLC2FV4zC3GrG   )rM   r5   rJ   r;   rL   rK   r7   r6   r   rJ   rK   rL   rM   )r   rZ   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/   rX   Tr1   rW   r3   rG   r`   r4   Fr\   r9   r8   r6   rI   rJ   rK   rL   )Úpprint)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   rc   Úprintr@   rb   rA   )r(   rN   rB   rC   r5   r6   r7   r8   r9   r:   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Úcertificatesrc   r)   r)   r*   Ú+test_eip712_create_certificate_chain_manualê   s|   €


$þ
ÿü
ÿü
ÿzFTestEip712CertificateChain.test_eip712_create_certificate_chain_manualc              
   c   sj  � | 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 ¡ � }| |j¡ t |j¡}| |¡V }|  ||¡ W d   ƒ n1 s¨w   Y  | j  ¡ V  d S )Nr   r,   r.   r/   i*,
 Tr1   rG   r   rI   FZ‚d9e679753e1120a8ba8edea4895d2e056ba98eaa1acbe11bf6210f3a48a56de830aa6a566cc4920c74a284ffcd9f7d1af5fe229268a44030522db19d5a75f4131c)r&   r<   r   r=   r   rf   rg   rd   re   rh   ri   r   r?   ÚsignÚparseÚmarshalr@   ÚtempfileÚNamedTemporaryFileÚsaverU   ÚloadrA   )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_metaÚ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  sP   €
$üù
÷zITestEip712CertificateChain.test_eip712_create_certificate_chain_highlevelc                 c   s&  � | j  ¡ V  | j d }| j d }| j d }g }g }| jD ]W\}}}|  d|¡ |  d|¡ |  d|¡ |  d|¡ |  |d |d ¡ |  |d dd	g¡ |d dkrZt |¡}	n|d d	krft |¡}	nJ dƒ‚| |	¡ | |¡ q|  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-   r[   r\   r]   r^   r   r   Fzshould not arrive hererH   Tr1   r/   )r&   r<   rb   ZassertInr   ro   r   Úappendr@   Úlenr8   r=   r9   r>   rJ   ZassertIsInstancer5   r6   rL   rK   ZassertLessEqualr7   Ú
assertTruerM   Zrecoverr   rA   )r(   rN   rB   rC   Z
cert_chainZ	cert_sigsZ	cert_hashrD   rE   ÚcertÚir5   r6   rL   Z_issuerr)   r)   r*   Ú+test_eip712_verify_certificate_chain_manualŒ  sd   €






$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/   Tr1   )r&   r<   r   rb   r@   rJ   r=   r8   r9   r>   rA   )r(   rN   rB   rC   rl   r)   r)   r*   Ú.test_eip712_verify_certificate_chain_highlevelï  s   €



zITestEip712CertificateChain.test_eip712_verify_certificate_chain_highlevelN)
rP   rQ   rR   r+   r   r   rm   rw   r}   r~   r)   r)   r)   r*   rS   ‚   s    cb
=
brS   )&r   Úsysrq   Úbinasciir   r   Z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    ry   Z
HAS_INFURAÚversion_infoÚminorZ
IS_CPY_310r!   r   rS   r)   r)   r)   r*   Ú<module>   s6   
H
