
    hxK                     >   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Z ded
ededededededededefdZ!d
edededededededededefdZ" G d de      Z#y)    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                    t        |       sJ t        |      sJ t        |      sJ t        |      sJ t        |      sJ t        |      sJ t        |      t        k(  rd|cxk  rdk  sJ  J |t        |      t
        k(  sJ 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| |||||||xs 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          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   datas	            f/var/www/Befach/backend/env/lib/python3.12/site-packages/autobahn/xbr/_eip712_authority_certificate.py#create_eip712_authority_certificater3   +   sl   * w'(((9%%%fge$l)Eg)EEE)EEE<4:,,, #$
 &$	 &%
 0%
 (%
 %%
 &%
 $%
 +$
 #$;!+-
\ 4

 !2"(JB	
i>D@ K    eth_privkeyc	           
      X    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   r3   r   )
r5   r   r   r   r   r   r   r   r   r1   s
             r2   !sign_eip712_authority_certificater7      s=    . +&&&.w8I9V\/6|TSDT""r4   	signaturec	           
      X    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   r3   r   )
r   r   r   r   r   r   r   r   r8   r1   s
             r2   $recover_eip712_authority_certificater:      s=    . 	""".w8I9V\/6|TSD4##r4   c                       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ZdedefdZdedefdZdefdZd"dededefdZdedefdZd"dedeeef   fdZed"dedd fd       Zdede
fdZed#d        Z xZS )$r&   r                   )
r   r   r   r   r   r   r   r   
signatureshashr   r   r   r   r   r   r   r   rA   c
           
          t         |   |||       || _        || _        || _        || _        || _        |	| _        t        ||||||||      }
t        |
      | _
        y N)super__init__r   r   r   r   r   rA   r3   r   rB   )selfr   r   r   r   r   r   r   r   rA   eip712	__class__s              r2   rF   z#EIP712AuthorityCertificate.__init__   sq     	"3Y?
(	$4W5F5>5;5<5:5A59; &f-	r4   otherr   c                 h   t        || j                        syt        j                  | |      sy|j                  | j                  k7  ry|j
                  | j
                  k7  ry|j                  | j                  k7  ry|j                  | j                  k7  ry|j                  | j                  k7  ry|j                  | j                  k7  ry|j                  | j                  k7  ry|j                  | j                  k7  ry|j                  | j                  k7  ry|j                  | j                  k7  ryy)NFT)
isinstancerI   r&   __eq__r   r   r   r   r   r   r   r   rA   rB   rG   rJ   s     r2   rM   z!EIP712AuthorityCertificate.__eq__   s    %0)00u===DLL(""d&<&<<??dnn,<<4;;&==DLL(;;$**$!2!22::"t.::"r4   c                 &    | j                  |       S rD   )rM   rN   s     r2   __ne__z!EIP712AuthorityCertificate.__ne__  s    ;;u%%%r4   c                 H    t        j                  | j                               S rD   )pprintpformatmarshal)rG   s    r2   __str__z"EIP712AuthorityCertificate.__str__  s    ~~dlln--r4   keybinaryc           
          t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                        }|j                  ||      S )NrW   )
r3   r   r   r   r   r   r   r   r   sign_typed_data)rG   rV   rW   rH   s       r2   r   zEIP712AuthorityCertificate.sign  s`    4T\\595K5K59^^59[[59\\59ZZ595F5F59YY@ ""6&"99r4   r8   c                     t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  |	      S rD   )	r:   r   r   r   r   r   r   r   r   )rG   r8   s     r2   r   z"EIP712AuthorityCertificate.recover   sM    3DLL484J4J48NN48KK48LL48JJ484E4E48II4=? 	?r4   c           
      x   t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                        }|s|d   d   r%t        j                  j                  |d   d         nd |d   d<   |d   d   r%t        j                  j                  |d   d         nd |d   d<   |d   d   r%t        j                  j                  |d   d         nd |d   d<   |d   d   r%t        j                  j                  |d   d         nd |d   d<   |S )Nr*   r.   r   r   r   r   )r3   r   r   r   r   r   r   r   r   web3Web3toChecksumAddress)rG   rW   objs      r2   rT   z"EIP712AuthorityCertificate.marshal+  sP   1$,,DHDZDZ<@NN9=:>,,8<

?C?P?P7;yyB vy  {D  wE  FY  wZ$))2M2McR[n]pNq2r  `dC	N./`cdm`now`xtyy'B'B3y>RZC['\  CC	N8$befobpqzb{		(C(CC	NS\D](^  BFC	N9%^abk^lmt^udii&A&A#i.QXBY&Z{C	N7#
r4   c           
         t        |       t        k7  r#t        dj                  t        |                   | j	                  dd       }|dk7  rt        dj                  |            | j	                  dd       }t        |      t        k7  r#t        dj                  t        |                  |D ]   }|dvst        dj                  |             |j	                  d	d       }|r|dk7  rt        d
j                  |            |j	                  dd       }|t        d      t        |      t
        k7  r#t        dj                  t        |                  |j	                  dd       }|t        d      |rft        |      t        k7  r#t        dj                  t        |                  t        |      dk7  rt        dj                  t        |                  t        |      t        k7  r#t        dj                  t        |                  t        j                  |      st        dj                  |            t        |dd        }|j	                  dd       }|t        d      t        |      t
        k7  r#t        dj                  t        |                  |j	                  dd       }	|	t        d      |rft        |	      t        k7  r#t        dj                  t        |	                  t        |	      dk7  rt        dj                  t        |	                  t        |	      t        k7  r#t        dj                  t        |	                  t        j                  |	      st        dj                  |	            t        |	dd        }	|j	                  dd       }
|
t        d      |rft        |
      t        k7  r#t        dj                  t        |
                  t        |
      dk7  rt        dj                  t        |
                  t        |
      t        k7  r#t        dj                  t        |
                  t        j                  |
      st        d j                  |
            t        |
dd        }
|j	                  d!d       }|t        d"      |rft        |      t        k7  r#t        d#j                  t        |                  t        |      dk7  rt        d$j                  t        |                  t        |      t        k7  r#t        d#j                  t        |                  t        j                  |      st        d%j                  |            t        |dd        }|j	                  d&d       }|t        d'      t        |      t
        k7  r#t        d(j                  t        |                  |j	                  d)d       }|t        d*      t        |      t        k7  r#t        d+j                  t        |                  t        ||||	|
|||,      } | 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 EIP712AuthorityCertificater<   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lenr0   r	   matchr   r&   )r`   rW   r,   r1   k_typer   r   r   r   r   r   r   r   s                 r2   parsez EIP712AuthorityCertificate.parse;  s   9]ddeijmenoppggmT266_ffgrstt wwy$':MTTUYZ^U_`aaA : : !W!^!^_`!abb 
 &U::QXXY^_``((9d+?LMM=CX__`del`mnoo HH%8$?$VWW%&%/ Y``aefwaxy{ {$%+ !O!V!VWZ[lWm!noo%&#- Y``aefwaxy{ {*001BC \ccduvx x '(9!"(= >HH[$/	NOO	?c!Zaabfgpbqrss(D)>KLLF|u$ NUUVZ[aVbce e6{b  !D!K!KCPVK!XYYF|s" ![!b!bcghnco!pqq*008 !^!e!efl!mnnVABZ(F((9d+?LMMG}% OVVW[\cWdeg g7|r! !O!V!VWZ[bWc!deeG}# !\!c!cdhipdq!rss*009 !_!f!fgn!oppgabk*G$'=JKKE{e# MTTUYZ_U`ac c5zR !C!J!J3u:!VWWE{c! !Z!a!abfglbm!noo*007 !]!d!dej!kllE!"I&Exx5QRR$]ddeijvewxyyxx%<IJJ:U\\]abf]ghii(L]ir06ucovz|
r4   filenamec                    | j                   | j                  d      | j                  xs g g}t        |d      5 }t	        j
                  |      }|j                  |       ddd       t        |      S # 1 sw Y   t              S xY w)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:
        TrY   wbN)rB   rT   rA   opencbor2dumpswriterh   )rG   rm   cert_objfr1   s        r2   savezEIP712AuthorityCertificate.save  su     IIt||4|8$//:ORP(D! 	Q;;x(DGGDM	 4y	 4ys   'A44Bc                 h   t         j                  j                  |       st        dj	                  |             t        | d      5 }t        j                  |j                               \  }}}t        j                  |d      }||j                  k(  sJ ||_        |cddd       S # 1 sw Y   yxY w)zX
        Load certificate from file.

        :param filename:
        :return:
        zGcannot create EIP712AuthorityCertificate from filename "{}": not a filerbTrY   N)ospathisfileRuntimeErrorre   rp   rq   loadsreadr&   rl   rB   rA   )rm   ru   	cert_hashcert_eip712cert_signaturescerts         r2   loadzEIP712AuthorityCertificate.load  s     ww~~h'hoopxyzz(D! 	Q6;kk!&&(6K3I{O-33K3MD		)))-DO	 	 	s   AB((B1rD   )F)r   r&   )__name__
__module____qualname__CAPABILITY_ROOT_CACAPABILITY_INTERMEDIATE_CACAPABILITY_PUBLIC_RELAYCAPABILITY_PRIVATE_RELAYCAPABILITY_PROVIDERCAPABILITY_CONSUMER	__slots__r/   rg   r0   r   r   rF   r   boolrM   rP   rU   r
   r   r   r   rT   staticmethodrl   rv   r   __classcell__)rI   s   @r2   r&   r&      sO   !" I$ 6:. . .# .W\ .gl ..-0.8;.%d5k2.(C D 6&C &D &. .	: 	:T 	:e 	:	? 	?5 	?d tCH~   r4 r,H r rhS S   r4   r&   )$os.pathry   rR   binasciir   typingr   r   r   r   r]   rq   py_eth_sig_utils.eip712r   autobahn.wamp.messager	   autobahn.xbr._secmodr
   _eip712_baser   r   r   r   r   r   r   _eip712_certificater   r/   rg   r0   rc   r3   r7   r:   r&    r4   r2   <module>r      sh  4    , ,   5 9 , o o o 2^ ^;@^36^ 16^ 27	^
 05^ 7:^ /2^ 7;^B#5 #/2#9># 25# /4	#
 05# .3# 58# -0# 5:#<$# $<A$47$ 27$ 38	$
 16$ 8;$ 03$ 5:$ ?D$<F!2 Fr4   