From 403597334237e1d2e4fd19ffa67ca09aa8a76e43 Mon Sep 17 00:00:00 2001 From: Jonathan Dung Date: Tue, 12 May 2026 21:02:09 +0800 Subject: [PATCH 1/5] Add __hash__ to jwcrypto.jwk.JWK --- stubs/jwcrypto/jwcrypto/jwk.pyi | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/stubs/jwcrypto/jwcrypto/jwk.pyi b/stubs/jwcrypto/jwcrypto/jwk.pyi index a6c6dba85d53..8c9c219964fb 100644 --- a/stubs/jwcrypto/jwcrypto/jwk.pyi +++ b/stubs/jwcrypto/jwcrypto/jwk.pyi @@ -104,10 +104,23 @@ class InvalidJWKValue(JWException): ... class JWK(dict[str, Any]): unsafe_skip_rsa_key_validation: bool + @overload + def __init__( + self, + *, + generate: Literal["RSA"], + public_exponent: int | None = None, + size: int | None = None, + kid: str | None = None, + alg: str | None = None, + use: _JWKUseSupported | None = None, + key_ops: list[_JWKOperationSupported] | None = None + ) -> Self: ... + @overload + def __init__(self, *, generate: _JWKKeyTypeSupported, **kwargs) -> None: ... + @overload def __init__(self, **kwargs) -> None: ... - # `kty` and the other keyword arguments are passed as `params` to the called generator - # function. The possible arguments depend on the value of `kty`. - # TODO: Add overloads for the individual `kty` values. + # TODO: __init__ may not be typed adequately because keyword arguments depend on the value of generate @classmethod @overload def generate( @@ -230,6 +243,8 @@ class JWK(dict[str, Any]): @classmethod def from_password(cls, password: str) -> Self: ... def setdefault(self, key: str, default: _T | None = None) -> _T: ... + def __hash__(self) -> int: ... + def __eq__(self, other: JWK) -> bool: ... class JWKSet(dict[Literal["keys"], set[JWK]]): @overload From 46d59c44d03b179d2b73d95dde8176bc58cf57e5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 13:04:58 +0000 Subject: [PATCH 2/5] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/jwcrypto/jwcrypto/jwk.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/jwcrypto/jwcrypto/jwk.pyi b/stubs/jwcrypto/jwcrypto/jwk.pyi index 8c9c219964fb..bf06f66c3904 100644 --- a/stubs/jwcrypto/jwcrypto/jwk.pyi +++ b/stubs/jwcrypto/jwcrypto/jwk.pyi @@ -114,7 +114,7 @@ class JWK(dict[str, Any]): kid: str | None = None, alg: str | None = None, use: _JWKUseSupported | None = None, - key_ops: list[_JWKOperationSupported] | None = None + key_ops: list[_JWKOperationSupported] | None = None, ) -> Self: ... @overload def __init__(self, *, generate: _JWKKeyTypeSupported, **kwargs) -> None: ... From 3c319ff177d677885476f046ebfce302275f6883 Mon Sep 17 00:00:00 2001 From: Jonathan Dung Date: Tue, 12 May 2026 21:11:26 +0800 Subject: [PATCH 3/5] fix --- stubs/jwcrypto/jwcrypto/jwk.pyi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stubs/jwcrypto/jwcrypto/jwk.pyi b/stubs/jwcrypto/jwcrypto/jwk.pyi index bf06f66c3904..0d2fae6e29b1 100644 --- a/stubs/jwcrypto/jwcrypto/jwk.pyi +++ b/stubs/jwcrypto/jwcrypto/jwk.pyi @@ -115,9 +115,9 @@ class JWK(dict[str, Any]): alg: str | None = None, use: _JWKUseSupported | None = None, key_ops: list[_JWKOperationSupported] | None = None, - ) -> Self: ... + ) -> None: ... @overload - def __init__(self, *, generate: _JWKKeyTypeSupported, **kwargs) -> None: ... + def __init__(self, *, generate: Literal["oct", "EC", "OKP"], **kwargs) -> None: ... @overload def __init__(self, **kwargs) -> None: ... # TODO: __init__ may not be typed adequately because keyword arguments depend on the value of generate @@ -244,7 +244,7 @@ class JWK(dict[str, Any]): def from_password(cls, password: str) -> Self: ... def setdefault(self, key: str, default: _T | None = None) -> _T: ... def __hash__(self) -> int: ... - def __eq__(self, other: JWK) -> bool: ... + def __eq__(self, other: object, /) -> bool: ... class JWKSet(dict[Literal["keys"], set[JWK]]): @overload From 7c345bb28859d15621e218b87c1b0c441245855b Mon Sep 17 00:00:00 2001 From: Jonathan Dung Date: Tue, 12 May 2026 22:00:14 +0800 Subject: [PATCH 4/5] fix mypy error --- stubs/jwcrypto/jwcrypto/jwk.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/jwcrypto/jwcrypto/jwk.pyi b/stubs/jwcrypto/jwcrypto/jwk.pyi index 0d2fae6e29b1..8ba64976479a 100644 --- a/stubs/jwcrypto/jwcrypto/jwk.pyi +++ b/stubs/jwcrypto/jwcrypto/jwk.pyi @@ -243,7 +243,7 @@ class JWK(dict[str, Any]): @classmethod def from_password(cls, password: str) -> Self: ... def setdefault(self, key: str, default: _T | None = None) -> _T: ... - def __hash__(self) -> int: ... + def __hash__(self) -> int: ... # type: ignore[override] def __eq__(self, other: object, /) -> bool: ... class JWKSet(dict[Literal["keys"], set[JWK]]): From a04f42fc580e90944fbd9e043d14a8a43ab2a794 Mon Sep 17 00:00:00 2001 From: Jonathan Dung Date: Wed, 13 May 2026 07:50:29 +0800 Subject: [PATCH 5/5] commit --- stubs/jwcrypto/jwcrypto/jwk.pyi | 1 - 1 file changed, 1 deletion(-) diff --git a/stubs/jwcrypto/jwcrypto/jwk.pyi b/stubs/jwcrypto/jwcrypto/jwk.pyi index 8ba64976479a..5fee679f4264 100644 --- a/stubs/jwcrypto/jwcrypto/jwk.pyi +++ b/stubs/jwcrypto/jwcrypto/jwk.pyi @@ -244,7 +244,6 @@ class JWK(dict[str, Any]): def from_password(cls, password: str) -> Self: ... def setdefault(self, key: str, default: _T | None = None) -> _T: ... def __hash__(self) -> int: ... # type: ignore[override] - def __eq__(self, other: object, /) -> bool: ... class JWKSet(dict[Literal["keys"], set[JWK]]): @overload