3
¥K´^  ã            	   @   sr   d dl mZ d dlmZ dZeeeeeeedœdd„Z	eeeeeeeedœd	d
„Z
eeeeeeeedœdd„ZdS )é    )Úa2b_hex)Úsigningé    é   )ÚchainIdÚverifyingContractÚmemberÚ
registeredÚeulaÚprofileÚreturnc          
   C   sð   t | ƒtkst‚t |ƒtkr(t|ƒdks,t‚t |ƒtkrDt|ƒdksHt‚t |ƒtksXt‚t |ƒtksht‚|dks€t |ƒtks€t‚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œgdœddddœ| |||||pâddœdœ}|S )z”

    :param chainId:
    :param verifyingContract:
    :param member:
    :param registered:
    :param eula:
    :param profile:
    :return:
    é   NÚnameÚstring)r   ÚtypeÚversionr   Zuint256r   Úaddressr   r	   r
   r   )ZEIP712DomainÚEIP712MemberRegisterr   ZXBRÚ1)r   r   Ú )r   r   r   r	   r
   r   )ÚtypesZprimaryTypeÚdomainÚmessage)r   ÚintÚAssertionErrorÚbytesÚlenÚstr)r   r   r   r	   r
   r   Údata© r   úH/tmp/pip-unpacked-wheel-p9ga6z5n/autobahn/xbr/_eip712_member_register.pyÚ_create_eip712_member_register!   s@    r!   )Úeth_privkeyr   r   r   r	   r
   r   r   c       
      C   sØ   t | ƒtkrt| ƒdkst‚t |ƒtks,t‚t |ƒtkrDt|ƒdksHt‚t |ƒtkr`t|ƒdksdt‚t |ƒtkstt‚t |ƒtks„t‚|dksœt |ƒtksœt‚t||||||ƒ}tj|| ƒ}tj	|Ž }	t|	ƒt
ksÔt‚|	S )zÏ

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

    :return: The signature according to EIP712 (32+32+1 raw bytes).
    :rtype: bytes
    r   r   N)r   r   r   r   r   r   r!   r   Zsign_typed_dataZv_r_s_to_signatureÚ_EIP712_SIG_LEN)
r"   r   r   r   r	   r
   r   r   Ú_argsÚ	signaturer   r   r    Úsign_eip712_member_registerm   s    


r&   )r   r   r   r	   r
   r   r%   r   c       	      C   sÔ   t | ƒtkst‚t |ƒtkr(t|ƒdks,t‚t |ƒtkrDt|ƒdksHt‚t |ƒtksXt‚t |ƒtksht‚|dks€t |ƒtks€t‚t |ƒtkr˜t|ƒtksœt‚t| |||||ƒ}tj	|ftj
|ƒžŽ }t|dd… ƒS )z­
    Recover the signer address the given EIP712 signature was signed with.

    :return: The (computed) signer address the signature was signed with.
    :rtype: bytes
    r   Né   )r   r   r   r   r   r   r#   r!   r   Zrecover_typed_dataZsignature_to_v_r_sr   )	r   r   r   r	   r
   r   r%   r   Zsigner_addressr   r   r    Úrecover_eip712_member_register“   s    r(   Né@   éA   )Úbinasciir   Zpy_eth_sig_utilsr   r#   r   r   r   Údictr!   r&   r(   r   r   r   r    Ú<module>   s   K%