o
    im                     @   sf   d dl Z d dlmZ d dlmZ d dlmZmZ d dlm	Z	 d dl
mZ d dlmZ G dd	 d	ZdS )
    N)Optional)x509)hashesserialization)padding)RSAPrivateKey)default_backendc                   @   st   e Zd ZdZddedee ddfddZedefdd	Z	edefd
dZ
dedefddZdedefddZdS )AadClientCertificatea  Wraps 'cryptography' to provide the crypto operations AadClient requires for certificate authentication.

    :param bytes pem_bytes: bytes of a a PEM-encoded certificate including the (RSA) private key
    :param bytes password: (optional) the certificate's password
    N	pem_bytespasswordreturnc                 C   s|   t j||t d}t|tstd|| _t|t }|	t
 }|	t
 }t|d| _t|d| _d S )N)r   backendzNThe certificate must have an RSA private key because RS256 is used for signingzutf-8)r   Zload_pem_private_keyr   
isinstancer   
ValueError_private_keyr   Zload_pem_x509_certificatefingerprintr   SHA1SHA256base64urlsafe_b64encodedecode_thumbprint_sha256_thumbprint)selfr
   r   Zprivate_keycertr   Zsha256_fingerprint r   e/home/app/Keep/.python/lib/python3.10/site-packages/azure/identity/_internal/aadclient_certificate.py__init__   s   
zAadClientCertificate.__init__c                 C      | j S )z^The certificate's SHA1 thumbprint as a base64url-encoded string.

        :rtype: str
        )r   r   r   r   r   
thumbprint!      zAadClientCertificate.thumbprintc                 C   r   )z`The certificate's SHA256 thumbprint as a base64url-encoded string.

        :rtype: str
        )r   r   r   r   r   sha256_thumbprint)   r!   z&AadClientCertificate.sha256_thumbprint	plaintextc                 C   s   | j |t t S )zSign bytes using RS256.

        :param bytes plaintext: Bytes to sign.
        :return: The signature.
        :rtype: bytes
        )r   signr   ZPKCS1v15r   r   )r   r#   r   r   r   
sign_rs2561   s   zAadClientCertificate.sign_rs256c                 C   s*   t  }| j|tjt||jd|S )zSign bytes using PS256.

        :param bytes plaintext: Bytes to sign.
        :return: The signature.
        :rtype: bytes
        )ZmgfZsalt_length)r   r   r   r$   r   ZPSSZMGF1digest_size)r   r#   Zhash_algr   r   r   
sign_ps256<   s   zAadClientCertificate.sign_ps256)N)__name__
__module____qualname____doc__bytesr   r   propertystrr    r"   r%   r'   r   r   r   r   r	      s    r	   )r   typingr   Zcryptographyr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr   Z-cryptography.hazmat.primitives.asymmetric.rsar   Zcryptography.hazmat.backendsr   r	   r   r   r   r   <module>   s   