diff --git a/autobahn/xbr/__init__.py b/autobahn/xbr/__init__.py index c118ef55c..bc6499498 100644 --- a/autobahn/xbr/__init__.py +++ b/autobahn/xbr/__init__.py @@ -48,6 +48,10 @@ from autobahn.xbr._eip712_consent import sign_eip712_consent, recover_eip712_consent # noqa from autobahn.xbr._eip712_channel_open import sign_eip712_channel_open, recover_eip712_channel_open # noqa from autobahn.xbr._eip712_channel_close import sign_eip712_channel_close, recover_eip712_channel_close # noqa + from autobahn.xbr._eip712_market_member_login import sign_eip712_market_member_login, \ + recover_eip712_market_member_login # noqa + from autobahn.xbr._eip712_base import is_address, is_chain_id, is_block_number, is_signature, \ + is_cs_pubkey, is_bytes16, is_eth_privkey # noqa from autobahn.xbr._blockchain import SimpleBlockchain # noqa from autobahn.xbr._seller import SimpleSeller, KeySeries # noqa @@ -296,6 +300,16 @@ def account_from_seedphrase(seephrase, index=0): 'recover_eip712_channel_open', 'sign_eip712_channel_close', 'recover_eip712_channel_close', + 'sign_eip712_market_member_login', + 'recover_eip712_market_member_login', + + 'is_bytes16', + 'is_cs_pubkey', + 'is_signature', + 'is_chain_id', + 'is_eth_privkey', + 'is_block_number', + 'is_address', 'load_or_create_profile', 'UserConfig', diff --git a/autobahn/xbr/_eip712_market_member_login.py b/autobahn/xbr/_eip712_market_member_login.py new file mode 100644 index 000000000..f7c28277a --- /dev/null +++ b/autobahn/xbr/_eip712_market_member_login.py @@ -0,0 +1,85 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from ._eip712_base import sign, recover, is_address, is_eth_privkey, \ + is_signature, is_cs_pubkey + + +def _create_eip712_market_member_login(member: bytes, client_pubkey: bytes) -> dict: + assert is_address(member) + assert is_cs_pubkey(client_pubkey) + + data = { + 'types': { + 'EIP712Domain': [ + { + 'name': 'name', + 'type': 'string' + }, + { + 'name': 'version', + 'type': 'string' + }, + ], + 'EIP712MarketMemberLogin': [ + { + 'name': 'member', + 'type': 'address' + }, + { + 'name': 'client_pubkey', + 'type': 'bytes32', + }, + ] + }, + 'primaryType': 'EIP712MarketMemberLogin', + 'domain': { + 'name': 'XBR', + 'version': '1', + }, + 'message': { + 'member': member, + 'client_pubkey': client_pubkey, + } + } + + return data + + +def sign_eip712_market_member_login(eth_privkey: bytes, member: bytes, client_pubkey: bytes) -> bytes: + assert is_eth_privkey(eth_privkey) + + data = _create_eip712_market_member_login(member, client_pubkey) + + return sign(eth_privkey, data) + + +def recover_eip712_market_member_login(member: bytes, client_pubkey: bytes, signature: bytes) -> bytes: + assert is_signature(signature) + + data = _create_eip712_market_member_login(member, client_pubkey) + + return recover(data, signature)