예제 #1
0
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)
예제 #2
0
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
예제 #3
0
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"
    )
예제 #4
0
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"
    )
예제 #5
0
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)