11from __future__ import annotations
2- from typing import overload
2+ from typing import cast , overload , Union
33from collections .abc import Collection
44from ._rfc7516 .types import (
55 GeneralJSONSerialization ,
@@ -236,12 +236,12 @@ def decrypt_json(
236236
237237 reject_unprotected_crit_header (data .get ("unprotected" ))
238238 if "recipients" in data :
239- general_obj = extract_general_json (data , registry ) # type: ignore[arg-type]
239+ general_obj = extract_general_json (cast ( GeneralJSONSerialization , data ) , registry )
240240 _attach_recipient_keys (general_obj .recipients , private_key , sender_key )
241241 perform_decrypt (general_obj , registry )
242242 return general_obj
243243 else :
244- flattened_obj = extract_flattened_json (data , registry ) # type: ignore[arg-type]
244+ flattened_obj = extract_flattened_json (cast ( FlattenedJSONSerialization , data ) , registry )
245245 _attach_recipient_keys (flattened_obj .recipients , private_key , sender_key )
246246 perform_decrypt (flattened_obj , registry )
247247 return flattened_obj
@@ -261,15 +261,18 @@ def _attach_recipient_keys(
261261def _guess_sender_key (
262262 recipient : Recipient [Key ], key : ECKey | OKPKey | KeySet , use_random : bool = False
263263) -> ECKey | OKPKey :
264- if isinstance (key , KeySet ):
265- headers = recipient .headers ()
266- skid = headers .get ("skid" )
267- if skid :
268- return key .get_by_kid (skid ) # type: ignore[return-value]
269- if use_random :
270- skey = key .pick_random_key (headers ["alg" ])
271- if skey is not None :
272- recipient .add_header ("skid" , skey .kid )
273- return skey # type: ignore[return-value]
274- raise ValueError ("Invalid key" )
275- return key
264+ if not isinstance (key , KeySet ):
265+ return key
266+
267+ headers = recipient .headers ()
268+ skid = headers .get ("skid" )
269+ if skid :
270+ skey = cast (Union [ECKey , OKPKey ], key .get_by_kid (skid ))
271+ return skey
272+
273+ if use_random :
274+ skey = cast (Union [ECKey , OKPKey ], key .pick_random_key (headers ["alg" ]))
275+ if skey is not None :
276+ recipient .add_header ("skid" , skey .kid )
277+ return skey
278+ raise ValueError ("Invalid key" )
0 commit comments