a
    w=ic                     @   s   d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddl	mZ dd	lmZ dd
lmZ ddlZddlmZ ddlmZ dZe Ze ZG dd dejZG dd dejejZdS )zIECDSA (ES256) verifier and signer that use the ``cryptography`` library.
    )utilsN)backends)hashes)serialization)ec)padding)decode_dss_signature)encode_dss_signature)_helpers)bases   -----BEGIN CERTIFICATE-----c                   @   s8   e Zd ZdZdd Zeejdd Z	e
dd ZdS )	ES256VerifierzVerifies ECDSA cryptographic signatures using public keys.

    Args:
        public_key (
                cryptography.hazmat.primitives.asymmetric.ec.ECDSAPublicKey):
            The public key used to verify signatures.
    c                 C   s
   || _ d S N)_pubkey)self
public_key r   h/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/google/auth/crypt/es256.py__init__/   s    zES256Verifier.__init__c              	   C   s   t |}t|dkrdS t  r8tj|d d ddntj|d d dd}t  rltj|dd  ddntj|dd  dd}t||}t |}z | j	
||tt  W dS  ttjjfy   Y dS 0 d S )N@   F    big	byteorderT)r
   to_byteslenis_python_3int
from_bytesr   Zint_from_bytesr	   r   verifyr   ECDSAr   SHA256
ValueErrorcryptography
exceptionsZInvalidSignature)r   message	signatureZ	sig_bytesrsZasn1_sigr   r   r   r   2   s$    


zES256Verifier.verifyc                 C   s>   t |}t|v r*tj|t}| }nt	|t}| |S )ay  Construct an Verifier instance from a public key or public
        certificate string.

        Args:
            public_key (Union[str, bytes]): The public key in PEM format or the
                x509 public key certificate.

        Returns:
            Verifier: The constructed verifier.

        Raises:
            ValueError: If the public key can't be parsed.
        )
r
   r   _CERTIFICATE_MARKERr"   x509Zload_pem_x509_certificate_BACKENDr   r   Zload_pem_public_key)clsr   Zpublic_key_datacertZpubkeyr   r   r   from_stringK   s    

zES256Verifier.from_stringN)__name__
__module____qualname____doc__r   r
   copy_docstringr   Verifierr   classmethodr-   r   r   r   r   r   &   s   

r   c                   @   sT   e Zd ZdZdddZeeej	dd Z
eej	dd Zedd	d
ZdS )ES256Signera  Signs messages with an ECDSA private key.

    Args:
        private_key (
                cryptography.hazmat.primitives.asymmetric.ec.ECDSAPrivateKey):
            The private key to sign with.
        key_id (str): Optional key ID used to identify this private key. This
            can be useful to associate the private key with its associated
            public key or certificate.
    Nc                 C   s   || _ || _d S r   )_key_key_id)r   private_keykey_idr   r   r   r   t   s    zES256Signer.__init__c                 C   s   | j S r   )r7   )r   r   r   r   r9   x   s    zES256Signer.key_idc                 C   sj   t |}| j|tt }t|\}}t 	 rR|jddd|jddd S t
|dt
|d S )Nr   r   r   )r
   r   r6   signr   r   r   r    r   r   r   Zint_to_bytes)r   r$   Zasn1_signaturer&   r'   r   r   r   r:   }   s    
zES256Signer.signc                 C   s&   t |}tj|dtd}| ||dS )al  Construct a RSASigner from a private key in PEM format.

        Args:
            key (Union[bytes, str]): Private key in PEM format.
            key_id (str): An optional key id used to identify the private key.

        Returns:
            google.auth.crypt._cryptography_rsa.RSASigner: The
            constructed signer.

        Raises:
            ValueError: If ``key`` is not ``bytes`` or ``str`` (unicode).
            UnicodeDecodeError: If ``key`` is ``bytes`` but cannot be decoded
                into a UTF-8 ``str``.
            ValueError: If ``cryptography`` "Could not deserialize key data."
        N)passwordbackend)r9   )r
   r   r   Zload_pem_private_keyr*   )r+   keyr9   r8   r   r   r   r-      s
    
zES256Signer.from_string)N)N)r.   r/   r0   r1   r   propertyr
   r2   r   Signerr9   r:   r4   r-   r   r   r   r   r5   h   s   



r5   )r1   r"   r   Zcryptography.exceptionsZcryptography.hazmatr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr   r   Z/cryptography.hazmat.primitives.asymmetric.utilsr   r	   Zcryptography.x509Zgoogle.authr
   Zgoogle.auth.cryptr   r(   Zdefault_backendr*   ZPKCS1v15Z_PADDINGr3   r   r?   ZFromServiceAccountMixinr5   r   r   r   r   <module>   s"   B