o
    >hxK                     @   s>  d dl Zd dlZd dlmZ d dlmZmZmZm	Z	 d dl
Z
d dlZd dlmZ d dlmZ d dlmZ ddlmZmZmZmZmZmZmZ dd	lmZ d
ededededededededefddZ ded
ededededededededefddZ!d
edededededededededefddZ"G dd deZ#dS )    N)a2b_hex)DictAnyOptionalList)encode_typed_data)_URI_PAT_REALM_NAME_ETH)EthereumKey   )signrecoveris_chain_id
is_addressis_block_numberis_signatureis_eth_privkey)EIP712CertificatechainIdverifyingContract	validFromissuersubjectrealmcapabilitiesmetareturnc           	      C   s  t | sJ t|sJ t|sJ t|sJ t|sJ t|s$J t|tkr6d|  kr5dks8J  J |du sDt|tksDJ ddddddg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| |||||||pddd}|S )z
    Authority certificate: long-lived, on-chain L2.

    :param chainId:
    :param verifyingContract:
    :param validFrom:
    :param issuer:
    :param subject:
    :param realm:
    :param capabilities:
    :param meta:
    :return:
    r   l          Nnamestring)r   typeversionr   uint256r   addressr   r   r   r   r   uint64r   )EIP712DomainEIP712AuthorityCertificater$   WMP1)r   r    r   r   r   r   r   r   r   r   )typesprimaryTypedomainmessage)r   r   r   r   intstr)	r   r   r   r   r   r   r   r   data r0   /var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/autobahn/xbr/_eip712_authority_certificate.py#create_eip712_authority_certificate+   sp   (.@r2   eth_privkeyc	           
   	   C   s,   t | sJ t||||||||}	t| |	S )a,  
    Sign the given data using a EIP712 based signature with the provided private key.

    :param eth_privkey:
    :param chainId:
    :param verifyingContract:
    :param validFrom:
    :param issuer:
    :param subject:
    :param realm:
    :param capabilities:
    :param meta:
    :return:
    )r   r2   r   )
r3   r   r   r   r   r   r   r   r   r/   r0   r0   r1   !sign_eip712_authority_certificate   
   

r4   	signaturec	           
   	   C   s,   t |sJ t| |||||||}	t|	|S )a\  
    Recover the signer address the given EIP712 signature was signed with.

    :param chainId:
    :param verifyingContract:
    :param validFrom:
    :param issuer:
    :param subject:
    :param realm:
    :param capabilities:
    :param meta:
    :param signature:
    :return: The (computed) signer address the signature was signed with.
    )r   r2   r   )
r   r   r   r   r   r   r   r   r6   r/   r0   r0   r1   $recover_eip712_authority_certificate   r5   r7   c                       s  e Zd ZdZdZdZdZdZdZdZ		d-d	e
d
ede
dededede
dedeee  f fddZdedefddZdedefddZdefddZd.dededefdd Zd!edefd"d#Zd.dedeeef fd$d%Zed.dedd fd&d'Zd(ede
fd)d*Zed/d+d,Z  ZS )0r$   r
                   )
r   r   r   r   r   r   r   r   
signatureshashNr   r   r   r   r   r   r   r   r=   c
              	      sX   t  ||| || _|| _|| _|| _|| _|	| _t||||||||}
t	|
| _
d S N)super__init__r   r   r   r   r   r=   r2   r   r>   )selfr   r   r   r   r   r   r   r   r=   eip712	__class__r0   r1   rA      s"   z#EIP712AuthorityCertificate.__init__otherr   c                 C   s   t || jsdS t| |sdS |j| jkrdS |j| jkr dS |j| jkr(dS |j| jkr0dS |j| jkr8dS |j	| j	kr@dS |j
| j
krHdS |j| jkrPdS |j| jkrXdS |j| jkr`dS dS )NFT)
isinstancerE   r$   __eq__r   r   r   r   r   r   r   r   r=   r>   rB   rF   r0   r0   r1   rH      s2   z!EIP712AuthorityCertificate.__eq__c                 C   s   |  | S r?   )rH   rI   r0   r0   r1   __ne__  s   z!EIP712AuthorityCertificate.__ne__c                 C   s   t |  S r?   )pprintpformatmarshal)rB   r0   r0   r1   __str__  s   z"EIP712AuthorityCertificate.__str__Fkeybinaryc              	   C   s4   t | j| j| j| j| j| j| j| j}|j	||dS )NrP   )
r2   r   r   r   r   r   r   r   r   sign_typed_data)rB   rO   rP   rC   r0   r0   r1   r     s   zEIP712AuthorityCertificate.signr6   c              
   C   s(   t | j| j| j| j| j| j| j| j|	S r?   )	r7   r   r   r   r   r   r   r   r   )rB   r6   r0   r0   r1   r      s   z"EIP712AuthorityCertificate.recoverc              
   C   s   t | j| j| j| j| j| j| j| jd}|sn|d d r&t	j
|d d nd |d d< |d d r<t	j
|d d nd |d d< |d d rRt	j
|d d nd |d d< |d d rht	j
|d d nd |d d< |S )Nr(   r,   r   r   r   r   )r2   r   r   r   r   r   r   r   r   web3Web3toChecksumAddress)rB   rP   objr0   r0   r1   rM   +  s   ,,,,z"EIP712AuthorityCertificate.marshalc              
   C   sn  t | tkrtdt | | dd }|dkr td|| dd }t |tkr5tdt ||D ]}|dvrDtd|q7|d	d }|rX|dkrXtd
||dd }|d u rftdt |tkrutdt ||dd }|d u rtd|rt |tkrtdt |t|dkrtdt|n#t |tkrtdt |t	
|std|t|dd  }|dd }|d u rtdt |tkrtdt ||dd }	|	d u rtd|rt |	tkrtdt |	t|	dkrtdt|	n%t |	tkr&tdt |	t	
|	s3td|	t|	dd  }	|dd }
|
d u rJtd|rnt |
tkr]tdt |
t|
dkrmtdt|
n%t |
tkr~tdt |
t	
|
std |
t|
dd  }
|d!d }|d u rtd"|rt |tkrtd#t |t|dkrtd$t|n%t |tkrtd#t |t	
|std%|t|dd  }|d&d }|d u rtd't |tkr
td(t ||d)d }|d u rtd*t |tkr)td+t |t||||	|
|||d,} | S )-Nz>invalid type {} for object in EIP712AuthorityCertificate.parser*   r$   z@invalid primaryType "{}" - expected "EIP712AuthorityCertificate"r,   z.invalid type {} for EIP712AuthorityCertificate)	r   r   r   r   r   r   r   r   r   z4invalid attribute "{}" in EIP712AuthorityCertificater   z2unexpected type "{}" in EIP712AuthorityCertificater   z-missing chainId in EIP712AuthorityCertificatez9invalid type {} for chainId in EIP712AuthorityCertificater   z7missing verifyingContract in EIP712AuthorityCertificatezCinvalid type {} for verifyingContract in EIP712AuthorityCertificate   z,invalid value length {} of verifyingContractzFinvalid value "{}" for verifyingContract in EIP712AuthorityCertificater8   r   z/missing validFrom in EIP712AuthorityCertificatez;invalid type {} for validFrom in EIP712AuthorityCertificater   z,missing issuer in EIP712AuthorityCertificatez8invalid type {} for issuer in EIP712AuthorityCertificatez!invalid value length {} of issuerz;invalid value "{}" for issuer in EIP712AuthorityCertificater   z-missing subject in EIP712AuthorityCertificatez9invalid type {} for subject in EIP712AuthorityCertificatez<invalid value "{}" for subject in EIP712AuthorityCertificater   z+missing realm in EIP712AuthorityCertificatez7invalid type {} for realm in EIP712AuthorityCertificatez invalid value length {} of realmz:invalid value "{}" for realm in EIP712AuthorityCertificater   z2missing capabilities in EIP712AuthorityCertificatez>invalid type {} for capabilities in EIP712AuthorityCertificater   z*missing meta in EIP712AuthorityCertificatez6invalid type {} for meta in EIP712AuthorityCertificater(   )r   dict
ValueErrorformatgetr-   byteslenr.   r   matchr   r$   )rV   rP   r*   r/   k_typer   r   r   r   r   r   r   r   r0   r0   r1   parse;  s   





z EIP712AuthorityCertificate.parsefilenamec                 C   sf   | j | jdd| jpg g}t|d}t|}|| W d   t|S 1 s*w   Y  t|S )z
        Save certificate to file. File format (serialized as CBOR):

            [cert_hash: bytes, cert_eip712: Dict[str, Any], cert_signatures: List[bytes]]

        :param filename:
        :return:
        TrQ   wbN)r>   rM   r=   opencbor2dumpswriter]   )rB   rb   cert_objfr/   r0   r0   r1   save  s   	

zEIP712AuthorityCertificate.savec                 C   s   t j| std| t| d%}t| \}}}t	j
|dd}||jks+J ||_|W  d   S 1 s:w   Y  dS )zX
        Load certificate from file.

        :param filename:
        :return:
        zGcannot create EIP712AuthorityCertificate from filename "{}": not a filerbTrQ   N)ospathisfileRuntimeErrorrZ   rd   re   loadsreadr$   ra   r>   r=   )rb   ri   	cert_hashcert_eip712cert_signaturescertr0   r0   r1   load  s   $zEIP712AuthorityCertificate.loadr?   )F)r   r$   )__name__
__module____qualname__CAPABILITY_ROOT_CACAPABILITY_INTERMEDIATE_CACAPABILITY_PUBLIC_RELAYCAPABILITY_PRIVATE_RELAYCAPABILITY_PROVIDERCAPABILITY_CONSUMER	__slots__r-   r\   r.   r   r   rA   r   boolrH   rJ   rN   r	   r   r   r   rM   staticmethodra   rj   rv   __classcell__r0   r0   rD   r1   r$      s:    
tr$   )$os.pathrl   rK   binasciir   typingr   r   r   r   rS   re   py_eth_sig_utils.eip712r   autobahn.wamp.messager   autobahn.xbr._secmodr	   _eip712_baser   r   r   r   r   r   r   _eip712_certificater   r-   r\   r.   rX   r2   r4   r7   r$   r0   r0   r0   r1   <module>   s   $
a

