U
    éÀMf  ã                	   @   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éA   )Ú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-8dj3wjqf/autobahn/xbr/_eip712_member_register.pyÚ_create_eip712_member_register!   s\    þþûþþþþþþëõ&þúÔ6r    )Ú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 || ¡}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   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 
|¡žŽ }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)Úbinasciir   Zpy_eth_sig_utilsr   r#   r   r   r   Údictr    r&   r(   r   r   r   r   Ú<module>   s&     ÿL   ÿ&   ÿ