JFIF$        dd7 

Viewing File: /usr/lib/python3.9/site-packages/josepy/__pycache__/jwk.cpython-39.opt-1.pyc

a

�Bg�6�@sdZddlZddlZddlZddlZddlmZmZmZm	Z	m
Z
mZmZm
Z
mZddlZddlmZddlmZmZddlmZmZddlZddlmZmZmZe�e�Z Gdd	�d	ej!ej"d
�Z#e#j$Gdd�de#��Z%e#j$Gd
d�de#��Z&e#j$Gdd�de#��Z'dS)�
JSON Web Key.�N)	�Any�Callable�Dict�Mapping�Optional�Sequence�Tuple�Type�Union)�default_backend)�hashes�
serialization)�ec�rsa)�errors�	json_util�utilc@seZdZUdZdZiZeeedfe	d<dZ
eeedfe	d<e
Zeee	d<dd	d
d�Zeeeeeeeeffe	d<ee	d
<ejfegejfed�dd�Zejdd�dd��Zedeeeeeed�dd��Zedeeeeedd�dd��Z dS)�JWKrZkty�TYPES�.�cryptography_key_types�requiredN)�,�:T)�indentZ
separatorsZ	sort_keys�_thumbprint_json_dumps_params�key)�
hash_function�returncsNtj|�t�d�}|�tj�fdd������D�fi�j���	��|�
�S)zgCompute JWK Thumbprint.

        https://tools.ietf.org/html/rfc7638

        :returns: bytes

        )�backendcs i|]\}}|�jvr||�qSr)r)�.0�k�v��selfr�./usr/lib/python3.9/site-packages/josepy/jwk.py�
<dictcomp>@�z"JWK.thumbprint.<locals>.<dictcomp>)r
ZHashr�update�json�dumpsZto_json�itemsr�encode�finalize)r%rZdigestrr$r&�
thumbprint3s
���zJWK.thumbprint�rcCs
t��dS)ziGenerate JWK with public key.

        For symmetric cryptosystems, this would return ``self``.

        N)�NotImplementedErrorr$rrr&�
public_keyFszJWK.public_key)�data�passwordr rcCs�|durt�n|}i}tjtjfD]R}z||||�WStttjjfyr}z||t	|�<WYd}~q"d}~00q"tj
tjfD]N}z|||�WSttjjfy�}z||t	|�<WYd}~q�d}~00q�t�
d�|���dS)NzUnable to deserialize key: {0})rrZload_pem_private_keyZload_der_private_key�
ValueError�	TypeError�cryptography�
exceptionsZUnsupportedAlgorithm�strZload_pem_public_keyZload_der_public_keyr�Error�format)�clsr3r4r r8Zloader_private�errorZ
loader_publicrrr&�_load_cryptography_keyOs�$$zJWK._load_cryptography_keyc
Cs�z|�|||�}Wn<tjyN}z"t�d|�t|d�WYd}~Sd}~00|jtur|t||j	�s|t�d�
|j|j���|j�
�D]}t||j	�r�||d�Sq�t�d�
|j���dS)a�Load serialized key as JWK.

        :param str data: Public or private key serialized as PEM or DER.
        :param str password: Optional password.
        :param backend: A `.PEMSerializationBackend` and
            `.DERSerializationBackend` provider.

        :raises errors.Error: if unable to deserialize, or unsupported
            JWK algorithm

        :returns: JWK of an appropriate type.
        :rtype: `JWK`

        z,Loading symmetric key, asymmetric failed: %s�rNz"Unable to deserialize {0} into {1}zUnsupported algorithm: {0})r>rr:�logger�debug�JWKOct�typ�NotImplemented�
isinstancerr;�	__class__r�values)r<r3r4r rr=Zjwk_clsrrr&�loadls �zJWK.load)NN)NN)!�__name__�
__module__�__qualname__�__doc__�type_field_namerrr9r
�__annotations__rr	rrDrrrrr�int�boolr
ZSHA256rZ
HashAlgorithm�bytesr/�abc�abstractmethodr2�classmethodr>rHrrrr&rs:
�(	������r)�	metaclassc@sleZdZUdZdZdZdejfZe	e
d<eeefd�dd�Z
eeeefdd	�d
d��Zdd�dd
�ZdS)rBzSymmetric JWK.�octr?r"rr0cCsdt�|j�iS)Nr")r�encode_b64joserr$rrr&�fields_to_partial_json�szJWKOct.fields_to_partial_json��jobjrcCs|t�|d�d�S)Nr"r?)r�decode_b64jose�r<rZrrr&�fields_from_json�szJWKOct.fields_from_jsoncCs|S�Nrr$rrr&r2�szJWKOct.public_keyN)rIrJrKrLrC�	__slots__rrMrrQrNrr9rXrTrrr]r2rrrr&rB�s

rBcs�eZdZUdZdZejejfZdZ	de
jdfZe
jjed<eedd��fd	d
�Zeeed�dd
��Zeeed�dd��Zdd�dd�Zeeeefdd�dd��Zeeefd�dd�Z�ZS)�JWKRSAz�RSA JWK.

    :ivar key: :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey`
        or :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey` wrapped
        in :class:`~josepy.util.ComparableRSAKey`

    ZRSAr?�e�nrN��args�kwargsrcs@d|vr*t|dtj�s*t�|d�|d<t�j|i|��dS�Nr)rEr�ComparableRSAKey�super�__init__�r%rdre�rFrr&ri�szJWKRSA.__init__)r3rcCs0t|��d�}t�|d�}t�|jd|d��S)zOEncode Base64urlUInt.
        :type data: long
        :rtype: unicode
        ��big��	byteorder�length)�max�
bit_length�mathZceilrrW�to_bytes�r<r3rprrr&�
_encode_param�szJWKRSA._encode_paramcCsFz&t�|�}|st���tj|dd�WSty@t���Yn0dS)�Decode Base64urlUInt.rm�roN)rr[r�DeserializationErrorrO�
from_bytesr5)r<r3�binaryrrr&�
_decode_param�s
zJWKRSA._decode_paramr0cCst|�|j��d�S)Nr?)�typerr2r$rrr&r2�szJWKRSA.public_keyrYc
	sD��fdd�dD�\}}tj||d�}d�vr@�|�t��d�S���d�}d�vs~d�vs~d	�vs~d
�vs~d�vs~d�vr�t�fd
d�dD��\}}}}	}
}tdd�|D��r�t�d�|���t�fdd�|D��\}}}}	}
n6t�	|||�\}}t�
||�}t�||�}	t�||�}
t�
|||||	|
|��t��}�|d�S)Nc3s|]}���|�VqdSr^�r|�r!�xr\rr&�	<genexpr>�r(z*JWKRSA.fields_from_json.<locals>.<genexpr>�rbra)rarb�dr?�p�q�dp�dq�qiZothc3s|]}��|�VqdSr^)�getr)rZrr&r��r()r�r�r�r�r�css|]}|dur|VqdSr^r)r!Zparamrrr&r��r(z(Some private parameters are missing: {0}c3s|]}��t|��VqdSr^)r|r9r)r<rr&r��r()rZRSAPublicNumbersr2rr|�tuplerr:r;Zrsa_recover_prime_factorsZrsa_crt_dmp1Zrsa_crt_dmq1Zrsa_crt_iqmpZRSAPrivateNumbers�private_key)
r<rZrbra�public_numbersr�r�r�r�r�r��
all_paramsrrr\r&r]�sH�������"�zJWKRSA.fields_from_jsonc	s~t�jjtj�r*�j��}|j|jd�}n>�j��}�j�	���}|j|j|j
|j|j|j
|j|jd�}�fdd�|��D�S)Nr�)rbrar�r�r�r�r�r�csi|]\}}|��|��qSr)rv�r!r�valuer$rr&r'r(z1JWKRSA.fields_to_partial_json.<locals>.<dictcomp>)rEr�_wrappedr�RSAPublicKeyr�rbra�private_numbersr2r�r�r�Zdmp1Zdmq1Ziqmpr,)r%Znumbers�params�private�publicrr$r&rXs"
�
�
zJWKRSA.fields_to_partial_json)rIrJrKrLrCrr�Z
RSAPrivateKeyrr_rrMr�josepyrrgrNrrirTrOr9rvr|r2rr]rrX�
__classcell__rrrkr&r`�s
	
0r`cseZdZUdZdZdZejejfZ	de
jddfZe
jjed<eedd	��fd
d�Zeeeed�d
d��Zeeeeed�dd��Zeeed�dd��Zeeejd�dd��Zeejed�dd��Zeeefd�dd�Zeeeefdd�dd ��Zdd�d!d"�Z �Z!S)#�JWKECz�EC JWK.

    :ivar key: :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey`
        or :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey` wrapped
        in :class:`~josepy.util.ComparableECKey`

    ZECr?�crvr��yrNrccs@d|vr*t|dtj�s*t�|d�|d<t�j|i|��dSrf)rEr�ComparableECKeyrhrirjrkrr&ri+szJWKEC.__init__)r3rprcCst�|jd|d��S)zlEncode Base64urlUInt.
        :type data: long
        :type key_size: long
        :rtype: unicode
        rmrn)rrWrtrurrr&rv0szJWKEC._encode_param)r3�name�valid_lengthrc	CshzHt�|�}t|�|kr:t�d|�d|�dt|��d���tj|dd�WStybt���Yn0dS)rwzExpected parameter "z" to be z" bytes after base64-decoding; got z bytes insteadrmrxN)rr[�lenrryrOrzr5)r<r3r�r�r{rrr&r|9s
��zJWKEC._decode_param)�
curve_namercCs0|dkrdS|dkrdS|dkr$dSt���dS)NZ	secp256r1�P-256Z	secp384r1�P-384Z	secp521r1�P-521)r�SerializationError)r<r�rrr&�_curve_name_to_crvGszJWKEC._curve_name_to_crv)r�rcCs<|dkrt��S|dkr t��S|dkr0t��St���dS)Nr�r�r�)r�	SECP256R1�	SECP384R1�	SECP521R1rry)r<r�rrr&�
_crv_to_curveQszJWKEC._crv_to_curve)�curvercCsBt|tj�rdSt|tj�r dSt|tj�r0dStd|����dS)N� �0�BzUnexpected curve: )rErr�r�r�r5)r<r�rrr&�expected_length_for_curve\szJWKEC.expected_length_for_curver0cs�i}t�jjtj�r �j���n>t�jjtj�rT�j��}�j�����|j	|d<n
t
�d���j|d<�j
|d<��fdd�|��D�}���jj�|d<|S)Nr�zRSupplied key is neither of type EllipticCurvePublicKey nor EllipticCurvePrivateKeyr�r�c	s&i|]\}}|��|���j���qSr)rvr�r�r��r�r%rr&r'us�z0JWKEC.fields_to_partial_json.<locals>.<dictcomp>r�)rErr�r�EllipticCurvePublicKeyr��EllipticCurvePrivateKeyr�r2Z
private_valuerr�r�r�r,r�r�r�)r%r�r�rr�r&rXfs"
�

�zJWKEC.fields_to_partial_jsonrYcs����d�}��|�����fdd�dD�\}}tj|||d�}d�vr\�|�t��d�S���dd��}t�||��t��}�|d�S)Nr�c3s |]}���||��VqdSr^r~)r!rb�r<Zexpected_lengthrZrr&r��r(z)JWKEC.fields_from_json.<locals>.<genexpr>)r�r�)r�r�r�r�r?)	r�r�rZEllipticCurvePublicNumbersr2rr|ZEllipticCurvePrivateNumbersr�)r<rZr�r�r�r�r�rrr�r&r]|s
zJWKEC.fields_from_jsoncCs8t|jd�r|j��}n|j���t��}t|�|d�S)Nr2r?)�hasattrrr2r�rr})r%rrrr&r2�szJWKEC.public_key)"rIrJrKrLrCr_rr�r�rrrMrr�rr�rNrrirTrOr9rvr|r�Z
EllipticCurver�r�rrXrr]r2r�rrrkr&r�s*

	
	r�)(rLrRr*Zloggingrs�typingrrrrrrr	r
rZcryptography.exceptionsr7Zcryptography.hazmat.backendsrZcryptography.hazmat.primitivesr
rZ)cryptography.hazmat.primitives.asymmetricrrZjosepy.utilr�rrrZ	getLoggerrIr@ZTypedJSONObjectWithFields�ABCMetar�registerrBr`r�rrrr&�<module>s&,
qt
Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg