11from __future__ import annotations
22import typing as t
3- import warnings
43from ._keys import (
54 JWKRegistry ,
65 KeySet ,
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 ]
4853KeyCallable = t .Callable [[GuestProtocol ], KeyBase ]
4954KeyFlexible = 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
9889def import_key (data : AnyKey , key_type : str | None = None , parameters : KeyParameters | None = None ) -> Key :
0 commit comments