7)c)ddlmZddlZddlZddlZddlmZmZddlm Z m Z m Z m Z ddl mZmZmZmZddlmZmZddlmZGd d ZeZejZejZejZejZejZejZejZdS) ) annotationsN)AnyType) Algorithmget_default_algorithms has_cryptorequires_cryptography) DecodeErrorInvalidAlgorithmErrorInvalidSignatureErrorInvalidTokenError)base64url_decodebase64url_encode)RemovedInPyjwt3WarningceZdZdZd6d7dZed8dZd9d Zd:d Zd;dZ ddZ d?d@d(Z d?dAd)Z dBd,ZdCd.Z dDdEd2ZdFd3ZdGd5ZdS)HPyJWSJWTNreturnNonec6t|_|t|nt|j|_t |jD]}||jvr|j|=|i}i|||_dS)N)r _algorithmsset _valid_algslistkeys_get_default_optionsoptions)self algorithmsrkeys -/usr/lib/python3/dist-packages/jwt/api_jws.py__init__zPyJWS.__init__s133)5C OOO3t?O;P;P  (--//00 * *C$***$S) ?GA$3355AA dict[str, bool]c ddiS)Nverify_signatureTr(r$r"rzPyJWS._get_default_options*s "D))r$alg_idstralg_objrc||jvrtdt|tst d||j|<|j|dS)zW Registers a new Algorithm for use when creating and verifying tokens. z Algorithm already has a handler.z!Object is not of type `Algorithm`N)r ValueError isinstancer TypeErrorradd)rr)r+s r"register_algorithmzPyJWS.register_algorithm.sm T% % %?@@ @'9-- A?@@ @#*  V$$$$$r$cz||jvrtd|j|=|j|dS)z Unregisters an Algorithm for use when creating and verifying tokens Throws KeyError if algorithm is not registered. zJThe specified algorithm could not be removed because it is not registered.N)rKeyErrorrremove)rr)s r"unregister_algorithmzPyJWS.unregister_algorithm;sS ) ) )1   V $ '''''r$ list[str]c*t|jS)zM Returns a list of supported values for the 'alg' parameter. )rr)rs r"get_algorithmszPyJWS.get_algorithmsIsD$%%%r$alg_namec |j|S#t$r9}ts|tvrt d|d|t d|d}~wwxYw)z For a given string name, return the matching Algorithm object. Example usage: >>> jws_obj.get_algorithm_by_name("RS256") z Algorithm 'z9' could not be found. Do you have cryptography installed?Algorithm not supportedN)rr3r r NotImplementedError)rr9es r"get_algorithm_by_namezPyJWS.get_algorithm_by_nameOs H#H- - H H H (.C"C"C)e(eee&&?@@a G  Hs  A4A  AHS256Fpayloadbytesr! algorithm str | Noneheadersdict[str, Any] | None json_encoderType[json.JSONEncoder] | Noneis_payload_detachedboolcdg}||nd}|r:|d} | r|d}|d} | durd}|j|d} |r*||| || ds| d=|rd| d<nd| vr| d=t j| d|d } |t| |r|} nt|} || d |}| |}| |}| ||}|t||rd |d <d |}| d S)Nnonealgb64FT)typrLrN),:) separatorscls sort_keys.r$rutf-8)get header_typ_validate_headersupdatejsondumpsencodeappendrjoinr> prepare_keysigndecode)rr@r!rBrDrFrHsegments algorithm_ headers_alg headers_b64header json_header msg_payload signing_inputr+ signatureencoded_strings r"r\z PyJWS.encode`s(1'<))&   +!++e,,K ,$U^ !++e,,Ke##&*#*.!L!L  #  " "7 + + + MM' " " "e} u  !F5MM f__u j z|t   &((  (55666  4!KK*733K $$$ (++ ,,Z88!!#&&LL44 (33444  HQK8,,$$W---r$jwtr list[str] | Nonerdetached_payload bytes | Nonedict[str, Any]c |r',V[[]]';';>>'     ?G4DL4G4)*<=  J n 59JJsOO1 ::eT " "e + +'!Z'G II}';';D!'D'DQ'G&QRRM  V  " "=&)S* U U U"   r$c |r',V[[]]';';>>'     && j',/JJtQ,?,? )M>.;.A.A$.J.J +NOO > > >344# = > A*>::KK8>* A A A677S @ A DZ ,,FF D D D;;;<* B B B788c A B A(88II8>* A A A677S @ A ::sx2B B*B%%B*.B>>C)C$$C)-D D$ DD$ EF2FF FG1GGrirfrjcF|d}|r|||vrtd ||}n"#t$r}td|d}~wwxYw||}||||st ddS)NrLz&The specified alg value is not allowedr;zSignature verification failed)rVr r>r<r_verifyr ) rrirfrjr!r rLr+r=s r"rxzPyJWS._verify_signaturesjj Rz-#Z2G2G'(PQQ Q J0055GG" J J J'(ABB I J!!#&&~~mS)<< I'(GHH H I IsA A#AA#cHd|vr||ddSdS)Nkid) _validate_kid)rrDs r"rXzPyJWS._validate_headers/s3 G     wu~ . . . . .  r$rcNt|tstddS)Nz(Key ID header parameter must be a string)r.r*r)rrs r"rzPyJWS._validate_kid3s0#s## P#$NOO O P Pr$)NN)rr)rr%)r)r*r+rrr)r)r*rr)rr6)r9r*rr)r?NNF)r@rAr!r*rBrCrDrErFrGrHrIrr*)rlNNN) rmr*r!r*r rnrrErorprrq) rmr*r!r*r rnrrErorprr*)rmr~rr)rmr~rr)rlN) rirArfrrjrAr!r*r rnrr)rDrqrr)rr*rr)__name__ __module__ __qualname__rWr# staticmethodrr1r5r8r>r\r{rarrvrxrXrr(r$r"rrsJ B B B B B***\* % % % % ( ( ( (&&&& HHHH*!()-6:$)C.C.C.C.C.P'+)-)- + + + + + `'+)-)- """""*    $;$;$;$;V'+ IIIII.////PPPPPPr$r) __future__rrrZrstypingrrr rrr r exceptionsr r r rutilsrrrr_jws_global_objr\r{rar1r5r>rr(r$r"rsv""""""   65555555,,,,,,]P]P]P]P]P]P]P]P@ %''  !1  $7&;'='=r$