
    8'h_                     d    d dl mZ d dlZd dlZd dlmZ dZd Zd Zd Z	d Z
dd	Zd
 ZddZd Zy)    )a2b_hexN)signingA   c                 .   | 1t        |       t        k(  sJ dj                  t        |                    | r?t        |       t        k(  r-t        |       dk(  sJ dj                  t        |                    | rt        j
                  j                  |       S y)Ndata must by bytes, was {}   z)data must be bytes[16], but was bytes[{}]r   )typebytesformatlenweb3Web3toIntdatas    N/var/www/html/trade_iq/venv/lib/python3.12/site-packages/autobahn/xbr/_util.pyunpack_uint128r   $   s    <4:._0L0S0STXY]T^0__.T
e#4yB] K R RSVW[S\ ]]yyt$$    c                     | !t        |       t        k(  r| dk\  r| ddz  k  sJ | r3t        j                  j	                  |       }ddt        |      z
  z  |z   S y)Nr             r   s                   )r	   intr   r   toBytesr   valuer   s     r   pack_uint128r   /   sZ    =T%[C/EQJ51c6>RRyy  '"s4y.)D00r   c                 @   | 1t        |       t        k(  sJ dj                  t        |                    | r?t        |       t        k(  r-t        |       dk(  sJ dj                  t        |                    | r(t	        t
        j                  j                  |             S y)Nr       z)data must be bytes[32], but was bytes[{}]r   )r	   r
   r   r   r   r   r   r   r   s    r   unpack_uint256r    ;   s    <4:._0L0S0STXY]T^0__.T
e#4yB] K R RSVW[S\ ]]499??4())r   c                     | 5t        |       t        k(  r| dk\  r| ddz  k  sJ dj                  |              | r3t        j                  j                  |       }ddt        |      z
  z  |z   S y)Nr   r      z!value must be uint256, but was {}r   r   s                                    )r	   r   r   r   r   r   r   r   s     r   pack_uint256r#   F   sz    =T%[C/EQJ51c6>  FTwT~T~  @E  UF  FRyy  '"s4y.)D00r   c                 t    t        | t              sdj                  |       } t        j                  | ||      S )Nz{})fgbold)
isinstancestrr   clickstyle)textr&   colors      r   hlr-   P   s-    dC {{4 ;;tD11r   c                 n   t        |       t        k(  rt        |       dk(  sJ t        |      t        k(  rt        |      dk(  sJ t        |      t        k(  sJ t        |      t        k(  sJ t        |      t        k(  sJ ddddddddddd	dgd
d	ddddddddddgddddd| d||||dd}|S )N   namestring)r0   r	   versionchainIduint256verifyingContractaddresschannel_adrchannel_sequint32balanceis_finalbool)EIP712DomainChannelCloser>   XBR1   )r0   r2   r3   r5   )r7   r8   r:   r;   )typesprimaryTypedomainmessage)r	   r
   r   r   r<   )verifying_adrr7   r8   r:   r;   r   s         r   _create_eip712_datarG   V   s   %'C,>",DDD%#k*:b*@@@###=C>T!!!
  2"H5"I6,i@	 '	: '9 #I6 $V4
* &!.	
 '& 	
;#DJ Kr   c                    t        |       t        k(  rt        |       dk(  sJ t        |      t        k(  rt        |      dk(  sJ t        |      t        k(  r|dkD  sJ t        |      t        k(  r|dk\  sJ t        |      t        k(  sJ t        ddd       }t        |||||      }t        j                  ||       }t        j                  | }t        |      t        k(  sJ |S )ai  

    :param eth_privkey: Ethereum address of buyer (a raw 20 bytes Ethereum address).
    :type eth_privkey: bytes

    :param channel_adr: Channel contract address.
    :type channel_adr: bytes

    :param channel_seq: Payment channel off-chain transaction sequence number.
    :type channel_seq: int

    :param balance: Balance remaining in the payment/paying channel after buying/selling the key.
    :type balance: int

    :param is_final: Flag to indicate the transaction is considered final.
    :type is_final: bool

    :return: The signature according to EIP712 (32+32+1 raw bytes).
    :rtype: bytes
    r   r/   r   *0x254dffcd3277C0b1660F6d42EFbB754edaBAbC2Br   N)r	   r
   r   r   r<   r   rG   r   sign_typed_datav_r_s_to_signature_EIP712_SIG_LEN)	eth_privkeyr7   r8   r:   r;   rF   r   _args	signatures	            r   sign_eip712_datarP      s    * %#k*:b*@@@%#k*:b*@@@#a77=CGqL00>T!!!HLMM }k;QYZD ##D+6E**E2Iy>_,,,r   c                    t        |       t        k(  rt        |       dk(  sJ t        |      t        k(  sJ t        |      t        k(  sJ t        |      t        k(  sJ t        |      t        k(  rt        |      t
        k(  sJ t        ddd       }t        || |||      }t        j                  |gt        j                  |       }t        |dd       S )a  
    Recover the signer address the given EIP712 signature was signed with.

    :param channel_adr: Channel contract address.
    :type channel_adr: bytes

    :param channel_seq: Payment channel off-chain transaction sequence number.
    :type channel_seq: int

    :param balance: Balance remaining in the payment/paying channel after buying/selling the key.
    :type balance: int

    :param is_final: Flag to indicate the transaction is considered final.
    :type is_final: bool

    :param signature: The EIP712 (32+32+1 raw bytes) signature to verify.
    :type signature: bytes

    :return: The (computed) signer address the signature was signed with.
    :rtype: bytes
    r/   rI   r   N)r	   r
   r   r   r<   rL   r   rG   r   recover_typed_datasignature_to_v_r_s)r7   r8   r:   r;   rO   rF   r   signer_addresss           r   recover_eip712_signerrU      s    , %#k*:b*@@@###=C>T!!!	?e#I/(IIIHLMM }k;QYZD //]w7Q7QR[7\]N>!"%&&r   )Tyellow)F)binasciir   r)   r   py_eth_sig_utilsr   rL   r   r   r    r#   r-   rG   rP   rU    r   r   <module>rZ      sB   6    $2,^.b$'r   