Skip to content

aiohttp-signer

See bovine-actor for further usage examples.

Sample usage

import aiohttp
import pytest

from . import Rfc9421Signer
from .rfc9421.test_rfc9421 import ed25519_signer, key_id
from .test_server import *  # noqa


@pytest.mark.timeout(5)
async def test_signature(post_url, headers_future):
    async with aiohttp.ClientSession() as session:
        await session.post(
            post_url,
            json={"cows": "good"},
            headers={
                "content-type": "application/json",
                "content-length": "18",
                "host": "example.com",
                "date": "Tue, 20 Apr 2021 02:07:55 GMT",
            },
            middlewares=[
                Rfc9421Signer(
                    key_id=key_id,
                    signer=ed25519_signer,
                    params=[
                        "date",
                        "@method",
                        "@path",
                        "@authority",
                        "content-type",
                        "content-length",
                    ],
                    name="sig-b26",
                    created_maker=lambda: 1618884473,
                ),
            ],
        )

        result = await headers_future

        assert (
            result.get("Signature-Input")
            == 'sig-b26=("date" "@method" "@path" "@authority" "content-type" "content-length");created=1618884473;keyid="test-key-ed25519"'
        )
        assert (
            result.get("Signature")
            == "sig-b26=:wqcAqbmYJ2ji2glfAMaRy4gruYYnx2nEFN2HN6jrnDnQCK1u02Gb04v9EDgwUPiu4A0w6vuQv5lIp5WPpBKRCw==:"
        )