async def send_request_json( diem_client: AsyncClient, sender_account: LocalAccount, sender_address: Optional[str], receiver_address: str, request_json: str, hrp: str, x_request_id: Optional[str] = str(uuid.uuid4()), request_body: Optional[bytes] = None, ) -> Tuple[int, offchain.CommandResponseObject]: headers = {} if x_request_id: headers[offchain.http_header.X_REQUEST_ID] = x_request_id if sender_address: headers[offchain.http_header.X_REQUEST_SENDER_ADDRESS] = sender_address account_address, _ = identifier.decode_account(receiver_address, hrp) base_url, public_key = await diem_client.get_base_url_and_compliance_key( account_address) if request_body is None: request_body = jws.encode(request_json, sender_account.compliance_key.sign) url = f"{base_url.rstrip('/')}/v2/command" async with diem_client._session.post(url, data=request_body, headers=headers) as resp: cmd_resp_obj = offchain.jws.deserialize(await resp.read(), offchain.CommandResponseObject, public_key.verify) return (resp.status, cmd_resp_obj)
def test_encode_example_jws(): example = "eyJhbGciOiJFZERTQSJ9.U2FtcGxlIHNpZ25lZCBwYXlsb2FkLg.dZvbycl2Jkl3H7NmQzL6P0_lDEW42s9FrZ8z-hXkLqYyxNq8yOlDjlP9wh3wyop5MU2sIOYvay-laBmpdW6OBQ" private_key = "bcbb56781ee4b7b7dc30f964d351a11a6a566131d8aa719165450def6013d4ae" key = Ed25519PrivateKey.from_private_bytes(bytes.fromhex(private_key)) msg = jws.encode("Sample signed payload.", key.sign) assert msg.decode("utf-8") == example
def test_encode_decode_message_with_headers_and_content_detached(): sig = jws.encode(MSG, KEY.sign, headers=HEADERS, content_detached=True) headers, body = jws.decode(sig, PUBLIC_KEY.verify, detached_content=b"msg") assert headers == HEADERS assert body == MSG assert ( sig == b"eyJrZXlJZCI6ImhlbGxvIiwiYWxnIjoiRWREU0EifQ..UrP61njLyFIZvjPxw6PAiut_NVk37ULy609PqI-7Vc3HWg4omcSDG95MHbGuif2-2YxHUkxmaWvleZ1BNlEaAQ" )
def test_encode_decode_message(): sig = jws.encode(MSG, KEY.sign) headers, body = jws.decode(sig, PUBLIC_KEY.verify) assert headers == {"alg": "EdDSA"} assert body == MSG assert ( sig == b"eyJhbGciOiJFZERTQSJ9.bXNn.xtWbB8A-Jp-UYspmnYYrVGgfGRzV9TCTZ5j5z7Z_y-FtsI116Jkp81_n7OkkPInOk4P9Df2X11paOXaSs_0QCQ" )
def test_decode_error_with_different_public_key(): sig = jws.encode(MSG, KEY.sign) diff_key = Ed25519PrivateKey.generate().public_key() with pytest.raises(InvalidSignature): jws.decode(sig, diff_key.verify)