Ë
    ùmxiS  ã                   óx  — d Z ddlmZ ddlmZmZmZ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j6                  «       Z ej:                  «       Ze G d„ d«      «       Z G d„ dej@                  «      Z! G d„ dejD                  ejF                  «      Z$y)zAECDSA verifier and signer that use the ``cryptography`` library.
é    )Ú	dataclass)ÚAnyÚDictÚOptionalÚUnionN)Úbackends)Úhashes)Úserialization)Úec)Úpadding)Údecode_dss_signature)Úencode_dss_signature)Ú_helpers)Úbases   -----BEGIN CERTIFICATE-----c                   ó¶   — e Zd ZU dZeed<   ej                  ed<   eed<   e	de
ej                  ej                  f   fd„«       Ze	dej                  fd„«       Zy	)
Ú_ESAttributeszÑA class that models ECDSA attributes.

    Attributes:
        rs_size (int): Size for ASN.1 r and s size.
        sha_algo (hashes.HashAlgorithm): Hash algorithm.
        algorithm (str): Algorithm name.
    Úrs_sizeÚsha_algoÚ	algorithmÚkeyc                 ó8   — | j                  |j                  «      S ©N)Ú
from_curveÚcurve)Úclsr   s     úK/home/htdocs/ttos/venv/lib/python3.12/site-packages/google/auth/crypt/es.pyÚfrom_keyz_ESAttributes.from_key6   s   € ð �~‰~˜cŸi™iÓ(Ð(ó    r   c                 ó¦   — t        |t        j                  «      r | dt        j                  «       d«      S  | dt        j
                  «       d«      S )Né0   ÚES384é    ÚES256)Ú
isinstancer   Ú	SECP384R1r	   ÚSHA384ÚSHA256)r   r   s     r   r   z_ESAttributes.from_curve<   s>   € ô �eœRŸ\™\Ô*Ù�rœ6Ÿ=™=›?¨GÓ4Ð4ñ �rœ6Ÿ=™=›?¨GÓ4Ð4r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__r	   ÚHashAlgorithmÚstrÚclassmethodr   r   ÚEllipticCurvePublicKeyÚEllipticCurvePrivateKeyr   ÚEllipticCurver   © r   r   r   r   (   sp   … ñð ƒLØ×"Ñ"Ó"ØƒNàð)Ø˜×1Ñ1°2×3MÑ3MÐMÑNò)ó ð)ð
 ð	5˜r×/Ñ/ò 	5ó ñ	5r   r   c                   óª   — e Zd ZdZdej
                  ddfd„Z ej                  e	j                  «      dededefd„«       Zedeeef   dd fd	„«       Zy)
Ú
EsVerifierzëVerifies ECDSA cryptographic signatures using public keys.

    Args:
        public_key (
                cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey):
            The public key used to verify signatures.
    Ú
public_keyÚreturnNc                 óF   — || _         t        j                  |«      | _        y r   )Ú_pubkeyr   r   Ú_attributes)Úselfr7   s     r   Ú__init__zEsVerifier.__init__R   s   € Ø!ˆŒÜ(×1Ñ1°*Ó=ˆÕr   ÚmessageÚ	signaturec                 óP  — t        j                  |«      }t        |«      | j                  j                  dz  k7  ryt
        j                  |d | j                  j                   d¬«      }t
        j                  || j                  j                  d  d¬«      }t        ||«      }t        j                  |«      }	 | j                  j                  ||t        j                  | j                  j                  «      «       y# t        t        j                  j                   f$ r Y yw xY w)Né   FÚbig©Ú	byteorderT)r   Úto_bytesÚlenr;   r   r,   Ú
from_bytesr   r:   Úverifyr   ÚECDSAr   Ú
ValueErrorÚcryptographyÚ
exceptionsÚInvalidSignature)r<   r>   r?   Ú	sig_bytesÚrÚsÚasn1_sigs          r   rH   zEsVerifier.verifyV   sò   € ô ×%Ñ% iÓ0ˆ	Üˆy‹>˜T×-Ñ-×5Ñ5¸Ñ9Ò9ØÜ�N‰N˜9Ð%? t×'7Ñ'7×'?Ñ'?Ð@ÈEˆNÓRˆÜ�N‰N˜9 T×%5Ñ%5×%=Ñ%=Ð%?Ð@ÈEˆNÓRˆÜ'¨¨1Ó-ˆä×#Ñ# GÓ,ˆð	Ø�L‰L×Ñ ¨'´2·8±8¸D×<LÑ<L×<UÑ<UÓ3VÔWØøÜœL×3Ñ3×DÑDÐEò 	Ùð	ús   Â:AC? Ã?#D%Ä$D%c                 ó4  — t        j                  |«      }t        |v r5t        j                  j                  |t        «      }|j                  «       }nt        j                  |t        «      }t        |t        j                  «      st        d«      ‚ | |«      S )aŠ  Construct a 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:
            google.auth.crypt.Verifier: The constructed verifier.

        Raises:
            ValueError: If the public key can't be parsed.
        z2Expected public key of type EllipticCurvePublicKey)r   rE   Ú_CERTIFICATE_MARKERrK   Úx509Úload_pem_x509_certificateÚ_BACKENDr7   r
   Úload_pem_public_keyr$   r   r1   Ú	TypeError)r   r7   Úpublic_key_dataÚcertÚpubkeys        r   Úfrom_stringzEsVerifier.from_stringg   s   € ô #×+Ñ+¨JÓ7ˆä /Ñ1Ü×$Ñ$×>Ñ>Ø¤óˆDð —_‘_Ó&‰Fô #×6Ñ6°ÌÓQˆFä˜&¤"×";Ñ";Ô<ÜÐPÓQÐQá�6‹{Ðr   )r(   r)   r*   r+   r   r1   r=   r   Úcopy_docstringr   ÚVerifierÚbytesÚboolrH   r0   r   r/   r\   r4   r   r   r6   r6   I   s…   „ ñð> 2×#<Ñ#<ð >Àó >ð €X×Ñ˜TŸ]™]Ó+ð˜eð °ð ¸$ò ó ,ðð  ð U¨3°¨:Ñ%6ð ¸<ò ó ñr   r6   c                   ób  — e Zd ZdZ	 ddej
                  dee   ddfd„Ze	defd„«       Z
e	 ej                  ej                  «      dee   fd„«       «       Z ej                  ej                  «      d	edefd
„«       Ze	 ddeeef   dee   dd fd„«       Zdeeef   fd„Zdeeef   ddfd„Zy)ÚEsSignera�  Signs messages with an ECDSA private key.

    Args:
        private_key (
                cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey):
            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.
    NÚprivate_keyÚkey_idr8   c                 óT   — || _         || _        t        j                  |«      | _        y r   )Ú_keyÚ_key_idr   r   r;   )r<   rc   rd   s      r   r=   zEsSigner.__init__“   s%   € ð  ˆŒ	ØˆŒÜ(×1Ñ1°+Ó>ˆÕr   c                 ó.   — | j                   j                  S )zkName of the algorithm used to sign messages.
        Returns:
            str: The algorithm name.
        )r;   r   ©r<   s    r   r   zEsSigner.algorithmš   s   € ð ×Ñ×)Ñ)Ð)r   c                 ó   — | j                   S r   )rg   ri   s    r   rd   zEsSigner.key_id¢   s   € ð �|‰|Ðr   r>   c                 ól  — t        j                  |«      }| j                  j                  |t	        j
                  | j                  j                  «      «      }t        |«      \  }}|j                  | j                  j                  d¬«      |j                  | j                  j                  d¬«      z   S )NrB   rC   )
r   rE   rf   Úsignr   rI   r;   r   r   r   )r<   r>   Úasn1_signaturerO   rP   s        r   rl   zEsSigner.sign§   s•   € ä×#Ñ# GÓ,ˆØŸ™Ÿ™¨´·±¸$×:JÑ:J×:SÑ:SÓ1TÓUˆô & nÓ5‰ˆˆAØ�z‰z˜$×*Ñ*×2Ñ2¸eˆzÓDÀqÇzÁzØ×Ñ×$Ñ$°ð HRó H
ñ 
ð 	
r   r   c                 óÂ   — t        j                  |«      }t        j                  |dt        ¬«      }t        |t        j                  «      st        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Úbackendz4Expected private key of type EllipticCurvePrivateKey)rd   )	r   rE   r
   Úload_pem_private_keyrV   r$   r   r2   rX   )r   r   rd   Ú	key_bytesrc   s        r   r\   zEsSigner.from_string²   sV   € ô( ×%Ñ% cÓ*ˆ	Ü#×8Ñ8Ø ¬hô
ˆô ˜+¤r×'AÑ'AÔBÜÐRÓSÐSá�; vÔ.Ð.r   c                 ó   — | j                   j                  «       }| j                  j                  t        j
                  j                  t        j                  j                  t	        j                  «       ¬«      |d<   |S )z1Pickle helper that serializes the _key attribute.)ÚencodingÚformatÚencryption_algorithmrf   )
Ú__dict__Úcopyrf   Úprivate_bytesr
   ÚEncodingÚPEMÚPrivateFormatÚPKCS8ÚNoEncryption©r<   Ústates     r   Ú__getstate__zEsSigner.__getstate__Ð   sb   € à—‘×"Ñ"Ó$ˆØŸ	™	×/Ñ/Ü"×+Ñ+×/Ñ/Ü ×.Ñ.×4Ñ4Ü!.×!;Ñ!;Ó!=ð 0ó 
ˆˆf‰ð
 ˆr   r€   c                 ór   — t        j                  |d   d«      |d<   | j                  j                  |«       y)z3Pickle helper that deserializes the _key attribute.rf   N)r
   rq   rw   Úupdater   s     r   Ú__setstate__zEsSigner.__setstate__Ú   s.   € ä%×:Ñ:¸5À¹=È$ÓOˆˆf‰Ø�‰×Ñ˜UÕ#r   r   )r(   r)   r*   r+   r   r2   r   r/   r=   Úpropertyr   r   r]   r   ÚSignerrd   r_   rl   r0   r   r\   r   r   r�   r„   r4   r   r   rb   rb   ‡   s&  „ ñ	ð PTñ?Ø×5Ñ5ð?Ø?GÈ¹}ð?à	ó?ð ð*˜3ò *ó ð*ð Ø€X×Ñ˜TŸ[™[Ó)ð˜ ™ò ó *ó ðð €X×Ñ˜TŸ[™[Ó)ð
˜Eð 
 eò 
ó *ð
ð à=Añ/Ø˜˜s˜
Ñ#ð/Ø-5°c©]ð/à	ò/ó ð/ð:˜d 3¨ 8™nó ð$ $ s¨C x¡.ð $°Tô $r   rb   )%r+   Údataclassesr   Útypingr   r   r   r   Úcryptography.exceptionsrK   Úcryptography.hazmatr   Úcryptography.hazmat.primitivesr	   r
   Ú)cryptography.hazmat.primitives.asymmetricr   r   Ú/cryptography.hazmat.primitives.asymmetric.utilsr   r   Úcryptography.x509Úgoogle.authr   Úgoogle.auth.cryptr   rS   Údefault_backendrV   ÚPKCS1v15Ú_PADDINGr   r^   r6   r†   ÚFromServiceAccountMixinrb   r4   r   r   ú<module>r•      s£   ðñõ "ß -Ó -ã Ý (Ý 1Ý 8Ý 8Ý =Ý PÝ PÛ å  Ý "ð 5Ð Ø#ˆ8×#Ñ#Ó%€Øˆ7×ÑÓ€ð ÷5ð 5ó ð5ô@;�—‘ô ;ô|V$ˆt�{‰{˜D×8Ñ8õ V$r   