from typing import Any, Optional, Union

import aiohttp.web
from cryptography.hazmat.primitives.asymmetric import rsa

from .abc import AbstractIdentityPolicy, Identity

AUTH_HEADER_NAME: str
AUTH_SCHEME: str

class JWTIdentityPolicy(AbstractIdentityPolicy):
    secret: Union[str, bytes, rsa.RSAPublicKey, rsa.RSAPrivateKey] = ...
    algorithm: str = ...
    def __init__(self, secret: Union[str, bytes, rsa.RSAPublicKey, rsa.RSAPrivateKey], algorithm: str = ...) -> None: ...
    async def identify(self, request: aiohttp.web.Request) -> Optional[Identity]: ...
    async def remember(self, *args: Any, **kwargs: Any) -> None: ...
    async def forget(self, request: aiohttp.web.Request, response: aiohttp.web.StreamResponse) -> None: ...