HEX
Server: Apache
System: Linux srv1.prosuiteplus.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: prosuiteplus (1001)
PHP: 8.3.20
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/josepy/__pycache__/jwk.cpython-38.pyc
U

��]�$�@s�dZddlZddlZddlZddlZddlZddlZddlm	Z	ddl
mZddl
mZddl
mZddl
mZddlmZmZmZe�e�ZGd	d
�d
ej�ZejGdd�de��ZejGd
d�de��ZejGdd�de��ZdS)�
JSON Web Key.�N)�default_backend)�hashes)�
serialization)�ec)�rsa)�errors�	json_util�utilc@sdeZdZdZdZiZdZeZdddd�Z	e
jfdd	�Ze
jd
d��Zeddd
��Zeddd��ZdS)�JWKrZkty�N)�,�:T)�indentZ
separatorsZ	sort_keysc	sPtj|�t�d�}|�tjt�fdd�t���	��D��f�j
����|��S)zgCompute JWK Thumbprint.

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

        :returns: bytes

        )�backendc3s$|]\}}|�jkr||fVqdS�N)�required)�.0�k�v��selfr�,/usr/lib/python3/dist-packages/josepy/jwk.py�	<genexpr>3s
�z!JWK.thumbprint.<locals>.<genexpr>)
rZHashr�update�json�dumps�dict�six�	iteritemsZto_json�_thumbprint_json_dumps_params�encode�finalize)rZ
hash_functionZdigestrrr�
thumbprint)s��
zJWK.thumbprintcCs
t��dS)ziGenerate JWK with public key.

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

        N��NotImplementedErrorrrrr�
public_key8szJWK.public_keycCs�|dkrt�n|}i}tjtjfD]L}z||||�WStttjjfk
rl}z|||<W5d}~XYq"Xq"tj	tj
fD]H}z|||�WSttjjfk
r�}z|||<W5d}~XYq|Xq|t�d�
|���dS)NzUnable to deserialize key: {0})rrZload_pem_private_keyZload_der_private_key�
ValueError�	TypeError�cryptography�
exceptionsZUnsupportedAlgorithmZload_pem_public_keyZload_der_public_keyr�Error�format)�cls�data�passwordrr*�loader�errorrrr�_load_cryptography_keyAs*����zJWK._load_cryptography_keyc
Cs�z|�|||�}Wn>tjk
rP}zt�d|�t|d�WY�Sd}~XYnX|jtk	r~t||j	�s~t�d�
|j|j���t�
|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��keyNz"Unable to deserialize {0} into {1}zUnsupported algorithm: {0})r2rr+�logger�debug�JWKOct�typ�NotImplemented�
isinstance�cryptography_key_typesr,�	__class__rZ
itervalues�TYPES)r-r.r/rr4r1Zjwk_clsrrr�load[s" ��zJWK.load)NN)NN)�__name__�
__module__�__qualname__�__doc__�type_field_namer=r;r9rr rZSHA256r#�abc�abstractmethodr&�classmethodr2r>rrrrrs �

rc@sJeZdZdZdZejejfZde	j
ddfZdd�Ze
dd	��Zd
d�ZdS)
�JWKESz<ES JWK.

    .. warning:: This is not yet implemented!

    ZESZcrv�x�ycCs
t��dSrr$rrrr�fields_to_partial_json�szJWKES.fields_to_partial_jsoncCs
t��dSrr$�r-�jobjrrr�fields_from_json�szJWKES.fields_from_jsoncCs
t��dSrr$rrrrr&�szJWKES.public_keyN)r?r@rArBr8rZEllipticCurvePublicKeyZEllipticCurvePrivateKeyr;rrCrrJrFrMr&rrrrrG{s�
rGc@s>eZdZdZdZdZdejfZdd�Z	e
dd��Zd	d
�ZdS)r7zSymmetric JWK.�octr3rcCsdt�|j�iS)Nr)r	�encode_b64joser4rrrrrJ�szJWKOct.fields_to_partial_jsoncCs|t�|d�d�S)Nrr3)r	�decode_b64joserKrrrrM�szJWKOct.fields_from_jsoncCs|Srrrrrrr&�szJWKOct.public_keyN)
r?r@rArBr8�	__slots__rrCrrJrFrMr&rrrrr7�s

r7csteZdZdZdZejejfZdZ	de
jdfZ�fdd�Z
edd	��Zed
d��Zdd
�Zedd��Zdd�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`

    ZRSAr3�e�ncs@d|kr*t|dtj�s*t�|d�|d<tt|�j||�dS)Nr4)r:r
ZComparableRSAKey�superrR�__init__)r�args�kwargs�r<rrrV�s
�zJWKRSA.__init__cCs.dd�}t�t�|t|�dd��d����S)zQEncode Base64urlUInt.

        :type data: long
        :rtype: unicode

        cSst|�drd|S|S)N��0)�len)�argrrr�_leading_zeros�sz,JWKRSA._encode_param.<locals>._leading_zerosrZN�L)r	rO�binasciiZ	unhexlify�hex�rstrip)r-r.r^rrr�
_encode_param�s�zJWKRSA._encode_paramcCs:ztt�t�|��d�WStk
r4t���YnXdS)zDecode Base64urlUInt.�N)�intr`Zhexlifyr	rPr'rZDeserializationError)r-r.rrr�
_decode_param�szJWKRSA._decode_paramcCst|�|j��d�S)Nr3)�typer4r&rrrrr&�szJWKRSA.public_keyc
	s@��fdd�dD�\}}tj||d�}d�kr<|�t��}n����d�}d�kszd�kszd�kszd	�kszd
�kszd�kr�t�fdd�d
D��\}}}	}
}}tdd�|D��r�t�d�|���t�fdd�|D��\}}}	}
}n6t�	|||�\}}t�
||�}	t�||�}
t�||�}t�
||||	|
||��t��}�|d�S)Nc3s|]}���|�VqdSr�rf�rrHrKrrr�sz*JWKRSA.fields_from_json.<locals>.<genexpr>�rTrS)rSrT�d�p�q�dp�dq�qiZothc3s|]}��|�VqdSr)�getri)rLrrr�s)rlrmrnrorpcss|]}|dkr|VqdSrr)rZparamrrrr�sz(Some private parameters are missing: {0}c3s|]}��|�VqdSrrhri)r-rrr�sr3)rZRSAPublicNumbersr&rrf�tuplerr+r,Zrsa_recover_prime_factorsZrsa_crt_dmp1Zrsa_crt_dmq1Zrsa_crt_iqmpZRSAPrivateNumbersZprivate_key)
r-rLrTrS�public_numbersr4rkrlrmrnrorpZ
all_paramsrrKrrM�sP���������zJWKRSA.fields_from_jsonc	s�t�jjtj�r*�j��}|j|jd�}n>�j��}�j�	���}|j|j|j
|j|j|j
|j|jd�}t�fdd�t�|�D��S)Nrj)rTrSrkrlrmrnrorpc3s |]\}}|��|�fVqdSr)rc)rr4�valuerrrrs�z0JWKRSA.fields_to_partial_json.<locals>.<genexpr>)r:r4Z_wrappedr�RSAPublicKeyrsrTrSZprivate_numbersr&rkrlrmZdmp1Zdmq1Ziqmprrr)rZnumbersZparamsZprivateZpublicrrrrJ�s&
�
�
�zJWKRSA.fields_to_partial_json)r?r@rArBr8rruZ
RSAPrivateKeyr;rQrrCrrVrFrcrfr&rMrJ�
__classcell__rrrYrrR�s


&rR)rBrDr`rZloggingZcryptography.exceptionsr)rZcryptography.hazmat.backendsrZcryptography.hazmat.primitivesrrZ)cryptography.hazmat.primitives.asymmetricrrZjosepyrr	r
Z	getLoggerr?r5ZTypedJSONObjectWithFieldsr�registerrGr7rRrrrr�<module>s(
g