Xj ddlmZddlZddlZddlmZddlmZddlm Z m Z m Z ddl m Z mZmZmZmZddlmZGd d ZGd d ZGd dZy)) annotationsN)Iterator)Any)get_default_algorithms has_cryptorequires_cryptography)InvalidKeyErrorMissingCryptographyError PyJWKError PyJWKSetError PyJWTError)JWKDictcteZdZdd dZedd dZedd dZed dZed dZ ed dZ y) PyJWKNcF||_|jjdd}|std|j|s6t|jtr|jjdd}|s|jjdd}|dk(r0|dk(s|sd}ny|d k(rd }nq|d k(rd }ni|d k(rd}natd||dk(rd}nK|dk(rd}nC|dk(r0|std|j|dk(rd}ntd|td|t s|t vrt|d||_ t||_ |jj|j|_y#t$rtd|jdwxYw)aA class that represents a `JSON Web Key `_. :param jwk_data: The decoded JWK data. :type jwk_data: dict[str, typing.Any] :param algorithm: The key algorithm. If not specified, the key's ``alg`` will be used. :type algorithm: str or None :raises InvalidKeyError: If the key type (``kty``) is not found or unsupported, or if the curve (``crv``) is not found or unsupported. :raises MissingCryptographyError: If the algorithm requires ``cryptography`` to be installed and it is not available. :raises PyJWKError: If unable to find an algorithm for the key. ktyNzkty is not found: algcrvECzP-256ES256zP-384ES384zP-521ES512 secp256k1ES256KzUnsupported crv: RSARS256octHS256OKPzcrv is not found: Ed25519EdDSAzUnsupported kty: z) requires 'cryptography' to be installed.z%Unable to find an algorithm for key: ) _jwk_datagetr isinstancedictrr r algorithm_namer AlgorithmKeyErrorr from_jwkkey)selfjwk_data algorithmrrs _/mnt/ssd/data/Dropbox/adrian/vault-secondbrain/venv/lib/python3.12/site-packages/jwt/api_jwk.py__init__zPyJWK.__init__s"nn  -!$6t~~6F"GH HZ=**5$7I..$$UD1Cd{'> 'IG^ 'IG^ 'IK' (I),=cU*CDD# # ),>t~~>N*OPP)# 'I),=cU*CDD%(9#&?@@i+@@*+FG ( 35i@DN >>**4>>:  77GH  s E==#F ct||S)a;Creates a :class:`PyJWK` object from a JSON-like dictionary. :param obj: The JWK data, as a dictionary :type obj: dict[str, typing.Any] :param algorithm: The key algorithm. If not specified, the key's ``alg`` will be used. :type algorithm: str or None :rtype: PyJWK )r)objr.s r/ from_dictzPyJWK.from_dictTsS)$$cXtj|}tj||S)aECreate a :class:`PyJWK` object from a JSON string. Implicitly calls :meth:`PyJWK.from_dict()`. :param str data: The JWK data, as a JSON string. :param algorithm: The key algorithm. If not specific, the key's ``alg`` will be used. :type algorithm: str or None :rtype: PyJWK )jsonloadsrr3)datar.r2s r/ from_jsonzPyJWK.from_json`s#jjsI..r4c:|jjddS)zFThe `kty` property from the JWK. :rtype: str or None rNr#r$r,s r/key_typezPyJWK.key_typen ~~!!%..r4c:|jjddS)zFThe `kid` property from the JWK. :rtype: str or None kidNr;r<s r/key_idz PyJWK.key_idvr>r4c:|jjddS)zFThe `use` property from the JWK. :rtype: str or None useNr;r<s r/public_key_usezPyJWK.public_key_use~r>r4N)r-rr. str | NonereturnNone)r2rr.rFrGr)r8strr.rHrGr)rGrF) __name__ __module__ __qualname__r0 staticmethodr3r9propertyr=rArDr4r/rrsl>;@ % % / ///////r4rcHeZdZddZeddZed dZd dZd dZy) PyJWKSetcPg|_|s tdt|ts td|D]'} |jj t |)t|jdk(r tdy#t $r}t|tr|Yd}~nd}~wwxYw)Nz$The JWK Set did not contain any keyszInvalid JWK Set valuerzUThe JWK Set did not contain any usable keys. Perhaps 'cryptography' is not installed?) keysr r%listappendrrr len)r,rSr+errors r/r0zPyJWKSet.__init__s!#  FG G$% 78 8 C    s,  tyy>Q g    e%=>K  s$B B% B  B%c<|jdg}t|S)NrS)r$rQ)r2rSs r/r3zPyJWKSet.from_dictswwvr"~r4cVtj|}tj|SrE)r6r7rQr3)r8r2s r/r9zPyJWKSet.from_jsons!jj!!#&&r4cf|jD]}|j|k(s|cStd|)Nzkeyset has no key for kid: )rSrAr))r,r@r+s r/ __getitem__zPyJWKSet.__getitem__s;99 CzzS   4SE:;;r4c,t|jSrE)iterrSr<s r/__iter__zPyJWKSet.__iter__sDIIr4N)rSz list[JWKDict]rGrH)r2zdict[str, Any]rGrQ)r8rIrGrQ)r@rIrGr)rGzIterator[PyJWK]) rJrKrLr0rMr3r9r[r^rOr4r/rQrQs9.''< r4rQc$eZdZddZddZddZy)PyJWTSetWithTimestampcD||_tj|_yrE)jwk_settime monotonic timestamp)r,rbs r/r0zPyJWTSetWithTimestamp.__init__s )r4c|jSrE)rbr<s r/ get_jwk_setz!PyJWTSetWithTimestamp.get_jwk_sets ||r4c|jSrE)rer<s r/ get_timestampz#PyJWTSetWithTimestamp.get_timestamps ~~r4N)rbrQ)rGrQ)rGfloat)rJrKrLr0rgrirOr4r/r`r`s*r4r`) __future__rr6rccollections.abcrtypingr algorithmsrrr exceptionsr r r r rtypesrrrQr`rOr4r/rqsK" $QQq/q/h))X  r4