Skip to content

Commit fc343d5

Browse files
committed
fix!: remove deprecated guessing key from bytes and string
1 parent 2966ddd commit fc343d5

5 files changed

Lines changed: 54 additions & 71 deletions

File tree

src/joserfc/jwe.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,26 @@
3232
from .registry import Header
3333

3434
__all__ = [
35+
# types
36+
"GeneralJSONSerialization",
37+
"FlattenedJSONSerialization",
38+
39+
# modules
3540
"JWERegistry",
3641
"JWEEncModel",
3742
"JWEZipModel",
3843
"Recipient",
3944
"CompactEncryption",
4045
"GeneralJSONEncryption",
4146
"FlattenedJSONEncryption",
47+
48+
# methods
4249
"encrypt_compact",
4350
"decrypt_compact",
4451
"encrypt_json",
4552
"decrypt_json",
53+
54+
# consts
4655
"default_registry",
4756
"JWE_ALG_MODELS",
4857
"JWE_ENC_MODELS",

src/joserfc/jwk.py

Lines changed: 23 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from __future__ import annotations
22
import typing as t
3-
import warnings
43
from ._keys import (
54
JWKRegistry,
65
KeySet,
@@ -17,19 +16,25 @@
1716

1817

1918
__all__ = [
20-
"JWKRegistry",
19+
# types
2120
"Key",
2221
"DictKey",
22+
"KeyParameters",
2323
"KeyCallable",
2424
"KeyFlexible",
2525
"KeySetSerialization",
26+
"KeyBase",
27+
"GuestProtocol",
28+
29+
# modules
30+
"JWKRegistry",
2631
"OctKey",
2732
"RSAKey",
2833
"ECKey",
2934
"OKPKey",
3035
"KeySet",
31-
"KeyBase",
32-
"GuestProtocol",
36+
37+
# methods
3338
"guess_key",
3439
"import_key",
3540
"generate_key",
@@ -44,7 +49,7 @@ def headers(self) -> Header: ...
4449
def set_kid(self, kid: str) -> None: ...
4550

4651

47-
KeyBase = t.Union[str, bytes, Key, KeySet]
52+
KeyBase = t.Union[Key, KeySet]
4853
KeyCallable = t.Callable[[GuestProtocol], KeyBase]
4954
KeyFlexible = t.Union[KeyBase, KeyCallable]
5055

@@ -56,43 +61,29 @@ def guess_key(key: KeyFlexible, obj: GuestProtocol, use_random: bool = False) ->
5661
:param obj: a protocol that has ``headers`` and ``set_kid`` methods
5762
:param use_random: pick a random key from key set
5863
"""
59-
60-
_norm_key: t.Union[Key, KeySet]
64+
resolved_key: KeyBase
6165
if callable(key):
62-
_norm_key = _normalize_key(key(obj))
66+
resolved_key = key(obj)
6367
else:
64-
_norm_key = _normalize_key(key)
68+
resolved_key = key
6569

66-
rv_key: Key
67-
if isinstance(_norm_key, KeySet):
70+
if isinstance(resolved_key, (OctKey, RSAKey, ECKey, OKPKey)):
71+
return resolved_key
72+
elif isinstance(resolved_key, KeySet):
6873
headers = obj.headers()
69-
kid = headers.get("kid")
74+
kid: str | None = headers.get("kid")
7075
if not kid and use_random:
7176
# choose one key by random
72-
rv_key = _norm_key.pick_random_key(headers["alg"]) # type: ignore[assignment]
73-
if rv_key is None:
77+
return_key = resolved_key.pick_random_key(headers["alg"])
78+
if return_key is None:
7479
raise ValueError("Invalid key")
75-
rv_key.ensure_kid()
76-
assert rv_key.kid is not None # for mypy
77-
obj.set_kid(rv_key.kid)
80+
return_key.ensure_kid()
81+
obj.set_kid(t.cast(str, return_key.kid))
7882
else:
79-
rv_key = _norm_key.get_by_kid(kid)
80-
elif isinstance(_norm_key, (OctKey, RSAKey, ECKey, OKPKey)):
81-
rv_key = _norm_key
83+
return_key = resolved_key.get_by_kid(kid)
84+
return return_key
8285
else:
8386
raise ValueError("Invalid key")
84-
return rv_key
85-
86-
87-
def _normalize_key(key: KeyBase) -> Key | KeySet:
88-
if isinstance(key, (str, bytes)): # pragma: no cover
89-
warnings.warn(
90-
"Please use a Key object instead of bytes or string.",
91-
DeprecationWarning,
92-
stacklevel=2,
93-
)
94-
return OctKey.import_key(key)
95-
return key
9687

9788

9889
def import_key(data: AnyKey, key_type: str | None = None, parameters: KeyParameters | None = None) -> Key:

src/joserfc/jws.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,20 @@
4747
from .registry import Header
4848

4949
__all__ = [
50+
# types
51+
"HeaderDict",
52+
"GeneralJSONSerialization",
53+
"FlattenedJSONSerialization",
54+
55+
# modules
5056
"JWSAlgModel",
5157
"JWSRegistry",
52-
"HeaderDict",
5358
"HeaderMember",
5459
"CompactSignature",
5560
"GeneralJSONSignature",
5661
"FlattenedJSONSignature",
57-
"GeneralJSONSerialization",
58-
"FlattenedJSONSerialization",
62+
63+
# methods
5964
"serialize_compact",
6065
"deserialize_compact",
6166
"extract_compact",

src/joserfc/jwt.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,16 @@
2828
from .registry import Header
2929

3030
__all__ = [
31+
# types
3132
"Claims",
32-
"Token",
3333
"ClaimsOption",
34+
35+
# modules
3436
"ClaimsRegistry",
3537
"JWTClaimsRegistry",
38+
"Token",
39+
40+
# methods
3641
"encode",
3742
"decode",
3843
"check_sensitive_data",

tests/jwk/test_key_methods.py

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from unittest import TestCase
2-
from joserfc.jws import register_key_set
2+
# trigger register_key_set
3+
import joserfc.jws # noqa: F401
34
from joserfc.jwk import guess_key, import_key, generate_key
45
from joserfc.jwk import KeySet, OctKey, RSAKey, ECKey, OKPKey
56
from joserfc.errors import (
@@ -11,8 +12,6 @@
1112
InvalidKeyIdError,
1213
)
1314

14-
register_key_set()
15-
1615

1716
class Guest:
1817
def __init__(self):
@@ -26,49 +25,23 @@ def set_kid(self, kid):
2625

2726

2827
class TestKeyMethods(TestCase):
29-
def test_guess_str_key(self):
30-
self.assertRaises(
31-
DeprecationWarning,
32-
guess_key,
33-
"key",
34-
Guest(),
35-
)
36-
37-
def test_guess_bytes_key(self):
38-
self.assertRaises(
39-
DeprecationWarning,
40-
guess_key,
41-
b"key",
42-
Guest(),
43-
)
44-
4528
def test_guess_callable_key(self):
4629
oct_key = OctKey.generate_key(parameters={"kid": "1"})
4730
rsa_key = RSAKey.generate_key(parameters={"kid": "2"})
4831

49-
def key_func1(obj):
50-
return "key"
51-
52-
def key_func2(obj):
32+
def rsa_key_func(obj):
5333
return rsa_key
5434

55-
def key_func3(obj):
35+
def key_set_func(obj):
5636
return KeySet([oct_key, rsa_key])
5737

58-
self.assertRaises(
59-
DeprecationWarning,
60-
guess_key,
61-
key_func1,
62-
Guest(),
63-
)
64-
65-
key2 = guess_key(key_func2, Guest())
66-
self.assertIsInstance(key2, RSAKey)
38+
key = guess_key(rsa_key_func, Guest())
39+
self.assertIsInstance(key, RSAKey)
6740

6841
guest = Guest()
6942
guest.set_kid("2")
70-
key3 = guess_key(key_func3, guest)
71-
self.assertIsInstance(key3, RSAKey)
43+
key = guess_key(key_set_func, guest)
44+
self.assertIsInstance(key, RSAKey)
7245

7346
def test_guess_key_set(self):
7447
key_set = KeySet([OctKey.generate_key(), RSAKey.generate_key()])

0 commit comments

Comments
 (0)