XjAddlmZddlZddlZddlZddlmZddlmZm Z ddl m Z m Z m Z mZddlmZddlmZmZmZmZmZdd lmZmZdd lmZmZerdd l mZmZdd lmZe Z!Gd dZ"e"Z#e#jHZ$e#jJZ%e#jLZ&e#jNZ'e#jPZ(e#jRZ)e#jTZ*y)) annotationsN)Sequence) TYPE_CHECKINGAny) Algorithmget_default_algorithms has_cryptorequires_cryptography)PyJWK) DecodeErrorInvalidAlgorithmErrorInvalidKeyErrorInvalidSignatureErrorInvalidTokenError)base64url_decodebase64url_encode)InsecureKeyLengthWarningRemovedInPyjwt3Warning)AllowedPrivateKeysAllowedPublicKeys) SigOptionscXeZdZUdZ d ddZeddZddZddZddZ ddZ e ddd d f dd Z d d!d Z d d"d Zd#dZd$dZ d% d&dZdhZded<d d d'dZd(dZd)dZy)*PyJWSJWTNcRt|_| t|nt|j|_t |jj D]}||jvs|j|= |j |_|i|j||_yy)N)r _algorithmsset _valid_algslistkeys_get_default_optionsoptions)self algorithmsr#keys _/mnt/ssd/data/Dropbox/adrian/vault-secondbrain/venv/lib/python3.12/site-packages/jwt/api_jws.py__init__zPyJWS.__init__$s 23)5C O3t?O?O;P  ((--/0 *C$***$$S) *$(#<#<#>  6dll6g6DL c dddS)NTF)verify_signatureenforce_minimum_key_lengthr-r)r'r"zPyJWS._get_default_options7s $(NNr)c||jvr tdt|ts t d||j|<|j j |y)z Registers a new Algorithm for use when creating and verifying tokens. :param str alg_id: the ID of the Algorithm :param alg_obj: the Algorithm object :type alg_obj: Algorithm z Algorithm already has a handler.z!Object is not of type `Algorithm`N)r ValueError isinstancer TypeErrorradd)r$alg_idalg_objs r'register_algorithmzPyJWS.register_algorithm;sX T%% %?@ @'9-?@ @#*  V$r)c||jvr td|j|=|jj|y)z Unregisters an Algorithm for use when creating and verifying tokens :param str alg_id: the ID of the Algorithm :raises KeyError: if algorithm is not registered. zJThe specified algorithm could not be removed because it is not registered.N)rKeyErrorrremove)r$r3s r'unregister_algorithmzPyJWS.unregister_algorithmLsH )) )1    V $ 'r)c,t|jS)zh Returns a list of supported values for the `alg` parameter. :rtype: list[str] )r r)r$s r'get_algorithmszPyJWS.get_algorithms[s D$$%%r)c |j|S#t$r/}ts|tvrt d|d|t d|d}~wwxYw)a/ For a given string name, return the matching Algorithm object. Example usage: >>> jws_obj = PyJWS() >>> jws_obj.get_algorithm_by_name("RS256") :param alg_name: The name of the algorithm to retrieve :type alg_name: str :rtype: Algorithm z Algorithm 'z9' could not be found. Do you have cryptography installed?Algorithm not supportedN)rr7r r NotImplementedError)r$alg_namees r'get_algorithm_by_namezPyJWS.get_algorithm_by_namecsc H##H- - H(.C"C)!(+de&&?@a G  Hs A *AA FTcg}|tur t|tr |j} n'd} n$| t|tr |j} nd} n|} |r/|j d} | r|d} |j d} | durd}|j | d} |r$|j |d| j|| d s| d =|r@d| d<| j d g} t| ts td d| vrg| d| d <nd| vr| d=tj| d || j}|jt||r|}n t|}|j|dj|}|j!| }t|tr |j"}|j%|}|j'|}|rC|j(j ddr t+|t-j.|t0d|j3||}|jt||rd|d<dj|}|j5dS)NHS256nonealgb64FT)typrEencodingrGcritz%Invalid 'crit' header: must be a list),:) separatorscls sort_keys.r, stacklevelr)rutf-8)_ALGORITHM_UNSETr0r algorithm_nameget header_typ_validate_headersupdater rjsondumpsencodeappendrjoinrAr& prepare_keycheck_key_lengthr#rwarningswarnrsigndecode)r$payloadr& algorithmheaders json_encoderis_payload_detached sort_headerssegments algorithm_ headers_alg headers_b64header existing_crit json_header msg_payload signing_inputr4key_length_msg signatureencoded_strings r'r]z PyJWS.encodexsU!# ( (#u% // $  #u% // # "J !++e,K$U^ !++e,Ke#&*#*.!L   " "7T " : MM' "e}u !F5M #JJvr2MmT2'(OPPM)!8=!8%!8v f_u jj z|| &(  (56 !K*73K $ (+ ,,Z8 c5 !''C!!#& 11#6 || '   ?!\\N8 88N)*<= Jz#u7Mn 59JJsO1  v& ::eT "e +::f%+DdD)U$->'W '!Z'G II}';';D!'DQ'G&QRM   " "& # "  r)c |r6tjdt|jtd|j |||||}|dS)Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: rQrR)r~rf)rbrcryr!rr)r$r}r&r%r#r~rdecodeds r'rez PyJWS.decodesf  MM'',V[[]';&<>'  && j's c3 **W%C#u% DUGLM M >,/JJtQ,? )M>.;.A.A$.J +NO A*>:K D%)ZZ %34# = > 8>>* A67S @ A  D 7s;>* A67S @ Asx*C.0 D <D8 E F. D7 DD D5$ D00D58 EEEF1 E==FF/ F**F/c||n |j}|t|tr |jg} |d}|r|||vr t dt|trC||jk7rt d|d|j|j } |j} n# |j|} | j|} | j| } | r9|jddr t| tj| t d | j#|| |s t%d y#t$r t ddwxYw#t$r} t d| d} ~ wwxYw) NrEzAlgorithm not specifiedz&The specified alg value is not allowedzToken algorithm z$ does not match the key's algorithm r=r,FrRzSignature verification failed)r#r0r rVr7rrr&rAr>r`rarWrrbrcrverifyr) r$rtrprvr&r%r#effective_optionsrEr4 prepared_keyr@rus r'r|zPyJWS._verify_signatureps(/':G   *S%"8,,-J M-Cz-#Z2G'(PQ Q c5 ! c(((+&sg.!!$!3!3 68mmG77L N44S9#..s3L 11,?  $$%A5I%n55 n.FSTU~~m\9E'(GH HFC M'(AB L M,' N+,EFAM Ns#D*E*E E EErFzset[str]_supported_critrHcfd|vr|j|d|sd|vr|j|yyy)NkidrJ) _validate_kid_validate_crit)r$rhrIs r'rYzPyJWS._validate_headerss= G    wu~ .Fg-    (.xr)c:t|ts tdy)Nz(Key ID header parameter must be a string)r0rr)r$rs r'rzPyJWS._validate_kids#s##$NO O$r)c|d}t|trt|dk(r td|D]L}t|ts td||j vrtd|||vs?td|dy)NrJrz/Invalid 'crit' header: must be a non-empty listz-Invalid 'crit' header: values must be stringsz Unsupported critical extension: zCritical extension 'z' is missing from headers)r0r lenrrr)r$rhrJexts r'rzPyJWS._validate_critsv$%Ta#$UV V Cc3''(WXX$...'*J3%(PQQ'!'*3%/HI  r))NN)r%Sequence[str] | Noner#SigOptions | NonereturnNone)rr)r3rr4rrr)r3rrr)rz list[str])r?rrr)rfrr&z(AllowedPrivateKeys | PyJWK | str | bytesrgz str | Nonerhzdict[str, Any] | Noneriztype[json.JSONEncoder] | Nonerjboolrkrrr)NNN)r} str | bytesr&'AllowedPublicKeys | PyJWK | str | bytesr%rr#rr~ bytes | Nonerdict[str, Any]rr)r}rr&rr%rr#rr~rrrrr)r}rrr)r}rrz*tuple[bytes, bytes, dict[str, Any], bytes])rNN)rtrrprrvrr&rr%rr#rrr)rhrrIrrr)rrrr)rhrrr)__name__ __module__ __qualname__rXr( staticmethodr"r5r9r;rArUr]rrerrzr|r__annotations__rYrrr-r)r'rr!s$J,0%)7(7#7  7&OO%" (&H2!1)-6:$)!a.a.6a. a. ' a. 4 a."a.a. a.L8:+/%))- @ @ 5@ ) @ # @ ' @ !@  @ J8:+/%))- " "5") " # " ' "!" ", 0;n8:+/%)1I1I1I 1I 5 1I ) 1I#1I 1Ih"'OX'rs" $% 6FA!8]]@ '   !11   $77&;;'=='==r)