1 from datetime import datetime
2 from typing import IO, Any, Callable, Generator, Mapping, MutableMapping, Text
4 _serializer = Any # must be an object that has "dumps" and "loads" attributes (e.g. the json module)
6 def want_bytes(s: Text | bytes, encoding: Text = ..., errors: Text = ...) -> bytes: ...
8 class BadData(Exception):
10 def __init__(self, message: str) -> None: ...
12 class BadPayload(BadData):
13 original_error: Exception | None
14 def __init__(self, message: str, original_error: Exception | None = ...) -> None: ...
16 class BadSignature(BadData):
18 def __init__(self, message: str, payload: Any | None = ...) -> None: ...
20 class BadTimeSignature(BadSignature):
21 date_signed: int | None
22 def __init__(self, message: str, payload: Any | None = ..., date_signed: int | None = ...) -> None: ...
24 class BadHeader(BadSignature):
28 self, message: str, payload: Any | None = ..., header: Any | None = ..., original_error: Any | None = ...
31 class SignatureExpired(BadTimeSignature): ...
33 def base64_encode(string: Text | bytes) -> bytes: ...
34 def base64_decode(string: Text | bytes) -> bytes: ...
36 class SigningAlgorithm(object):
37 def get_signature(self, key: bytes, value: bytes) -> bytes: ...
38 def verify_signature(self, key: bytes, value: bytes, sig: bytes) -> bool: ...
40 class NoneAlgorithm(SigningAlgorithm):
41 def get_signature(self, key: bytes, value: bytes) -> bytes: ...
43 class HMACAlgorithm(SigningAlgorithm):
44 default_digest_method: Callable[..., Any]
45 digest_method: Callable[..., Any]
46 def __init__(self, digest_method: Callable[..., Any] | None = ...) -> None: ...
47 def get_signature(self, key: bytes, value: bytes) -> bytes: ...
50 default_digest_method: Callable[..., Any] = ...
51 default_key_derivation: str = ...
57 digest_method: Callable[..., Any]
58 algorithm: SigningAlgorithm
61 secret_key: Text | bytes,
62 salt: Text | bytes | None = ...,
63 sep: Text | bytes | None = ...,
64 key_derivation: str | None = ...,
65 digest_method: Callable[..., Any] | None = ...,
66 algorithm: SigningAlgorithm | None = ...,
68 def derive_key(self) -> bytes: ...
69 def get_signature(self, value: Text | bytes) -> bytes: ...
70 def sign(self, value: Text | bytes) -> bytes: ...
71 def verify_signature(self, value: bytes, sig: Text | bytes) -> bool: ...
72 def unsign(self, signed_value: Text | bytes) -> bytes: ...
73 def validate(self, signed_value: Text | bytes) -> bool: ...
75 class TimestampSigner(Signer):
76 def get_timestamp(self) -> int: ...
77 def timestamp_to_datetime(self, ts: float) -> datetime: ...
78 def sign(self, value: Text | bytes) -> bytes: ...
80 self, value: Text | bytes, max_age: int | None = ..., return_timestamp: bool = ...
81 ) -> Any: ... # morally -> bytes | Tuple[bytes, datetime]
82 def validate(self, signed_value: Text | bytes, max_age: int | None = ...) -> bool: ...
84 class Serializer(object):
85 default_serializer: _serializer = ...
86 default_signer: Callable[..., Signer] = ...
90 serializer: _serializer
91 is_text_serializer: bool
92 signer: Callable[..., Signer]
93 signer_kwargs: MutableMapping[str, Any]
96 secret_key: Text | bytes,
97 salt: Text | bytes | None = ...,
98 serializer: _serializer | None = ...,
99 signer: Callable[..., Signer] | None = ...,
100 signer_kwargs: MutableMapping[str, Any] | None = ...,
102 def load_payload(self, payload: bytes, serializer: _serializer | None = ...) -> Any: ...
103 def dump_payload(self, obj: Any) -> bytes: ...
104 def make_signer(self, salt: Text | bytes | None = ...) -> Signer: ...
105 def iter_unsigners(self, salt: Text | bytes | None = ...) -> Generator[Any, None, None]: ...
106 def dumps(self, obj: Any, salt: Text | bytes | None = ...) -> Any: ... # morally -> str | bytes
107 def dump(self, obj: Any, f: IO[Any], salt: Text | bytes | None = ...) -> None: ...
108 def loads(self, s: Text | bytes, salt: Text | bytes | None = ...) -> Any: ...
109 def load(self, f: IO[Any], salt: Text | bytes | None = ...) -> Any: ...
110 def loads_unsafe(self, s: Text | bytes, salt: Text | bytes | None = ...) -> tuple[bool, Any | None]: ...
111 def load_unsafe(self, f: IO[Any], salt: Text | bytes | None = ...) -> tuple[bool, Any | None]: ...
113 class TimedSerializer(Serializer):
115 self, s: Text | bytes, salt: Text | bytes | None = ..., max_age: int | None = ..., return_timestamp: bool = ...
116 ) -> Any: ... # morally -> Any | Tuple[Any, datetime]
117 def loads_unsafe(self, s: Text | bytes, salt: Text | bytes | None = ..., max_age: int | None = ...) -> tuple[bool, Any]: ...
119 class JSONWebSignatureSerializer(Serializer):
120 jws_algorithms: MutableMapping[Text, SigningAlgorithm] = ...
121 default_algorithm: Text = ...
122 default_serializer: Any = ...
125 algorithm: SigningAlgorithm
128 secret_key: Text | bytes,
129 salt: Text | bytes | None = ...,
130 serializer: _serializer | None = ...,
131 signer: Callable[..., Signer] | None = ...,
132 signer_kwargs: MutableMapping[str, Any] | None = ...,
133 algorithm_name: Text | None = ...,
136 self, payload: Text | bytes, serializer: _serializer | None = ..., return_header: bool = ...
137 ) -> Any: ... # morally -> Any | Tuple[Any, MutableMapping[str, Any]]
138 def dump_payload(self, header: Mapping[str, Any], obj: Any) -> bytes: ... # type: ignore
139 def make_algorithm(self, algorithm_name: Text) -> SigningAlgorithm: ...
140 def make_signer(self, salt: Text | bytes | None = ..., algorithm: SigningAlgorithm = ...) -> Signer: ...
141 def make_header(self, header_fields: Mapping[str, Any] | None) -> MutableMapping[str, Any]: ...
142 def dumps(self, obj: Any, salt: Text | bytes | None = ..., header_fields: Mapping[str, Any] | None = ...) -> bytes: ...
144 self, s: Text | bytes, salt: Text | bytes | None = ..., return_header: bool = ...
145 ) -> Any: ... # morally -> Any | Tuple[Any, MutableMapping[str, Any]]
146 def loads_unsafe(self, s: Text | bytes, salt: Text | bytes | None = ..., return_header: bool = ...) -> tuple[bool, Any]: ...
148 class TimedJSONWebSignatureSerializer(JSONWebSignatureSerializer):
149 DEFAULT_EXPIRES_IN: int = ...
153 secret_key: Text | bytes,
154 expires_in: int | None = ...,
155 salt: Text | bytes | None = ...,
156 serializer: _serializer | None = ...,
157 signer: Callable[..., Signer] | None = ...,
158 signer_kwargs: MutableMapping[str, Any] | None = ...,
159 algorithm_name: Text | None = ...,
161 def make_header(self, header_fields: Mapping[str, Any] | None) -> MutableMapping[str, Any]: ...
163 self, s: Text | bytes, salt: Text | bytes | None = ..., return_header: bool = ...
164 ) -> Any: ... # morally -> Any | Tuple[Any, MutableMapping[str, Any]]
165 def get_issue_date(self, header: Mapping[str, Any]) -> datetime | None: ...
166 def now(self) -> int: ...
168 class _URLSafeSerializerMixin(object):
169 default_serializer: _serializer = ...
170 def load_payload(self, payload: bytes, serializer: _serializer | None = ...) -> Any: ...
171 def dump_payload(self, obj: Any) -> bytes: ...
173 class URLSafeSerializer(_URLSafeSerializerMixin, Serializer): ...
174 class URLSafeTimedSerializer(_URLSafeSerializerMixin, TimedSerializer): ...