Ë
    ùmxi[  ã                   ó  — d Z ddlmZ ddl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ZddlmZ dd	lmZ dd
lmZ dZdZdZdZ e«       ZdZd„ Z G d„ dej4                  «      Z G d„ dej8                  ej:                  «      Zy)zØPure-Python RSA cryptography implementation.

Uses the ``rsa``, ``pyasn1`` and ``pyasn1_modules`` packages
to parse PEM files storing PKCS#1 or PKCS#8 keys as well as
certificates. There is no support for p12 files.
é    )Úabsolute_importN)Údecoder)Úpem)ÚCertificate)ÚPrivateKeyInfo)Ú_helpers)Ú
exceptions)Úbase)é€   é@   é    é   é   é   é   é   s   -----BEGIN CERTIFICATE-----)z-----BEGIN RSA PRIVATE KEY-----z-----END RSA PRIVATE KEY-----)z-----BEGIN PRIVATE KEY-----z-----END PRIVATE KEY-----zjThe 'rsa' library is deprecated and will be removed in a future release. Please migrate to 'cryptography'.c                 óØ   — t        | «      }t        «       }t        d|d«      D ];  }| ||dz    }t        d„ t	        t
        |«      D «       «      }|j                  |«       Œ= t        |«      S )z÷Converts an iterable of 1s and 0s to bytes.

    Combines the list 8 at a time, treating each group of 8 bits
    as a single byte.

    Args:
        bit_list (Sequence): Sequence of 1s and 0s.

    Returns:
        bytes: The decoded bytes.
    r   r   c              3   ó,   K  — | ]  \  }}||z  –— Œ y ­w©N© )Ú.0ÚvalÚdigits      úT/home/htdocs/ttos/venv/lib/python3.12/site-packages/google/auth/crypt/_python_rsa.pyú	<genexpr>z%_bit_list_to_bytes.<locals>.<genexpr>A   s   è ø€ ÒK¡z s¨E�s˜U•{ÑKùs   ‚)ÚlenÚ	bytearrayÚrangeÚsumÚzipÚ_POW2ÚappendÚbytes)Úbit_listÚnum_bitsÚ	byte_valsÚstartÚ	curr_bitsÚchar_vals         r   Ú_bit_list_to_bytesr*   1   sn   € ô �8‹}€HÜ“€IÜ�q˜( AÓ&ò #ˆØ˜U U¨Q¡YÐ/ˆ	ÜÑK´S¼À	Ó5JÔKÓKˆØ×Ñ˜Õ"ð#ô �ÓÐó    c                   ój   — e Zd ZdZd„ Z ej                  ej                  «      d„ «       Z	e
d„ «       Zy)ÚRSAVerifiera  Verifies RSA cryptographic signatures using public keys.

    .. deprecated::
        The `rsa` library has been archived. Please migrate to
        `cryptography`.

    Args:
        public_key (rsa.key.PublicKey): The public key used to verify
            signatures.
    c                 óR   — t        j                  t        t        d¬«       || _        y ©Nr   )ÚcategoryÚ
stacklevel)ÚwarningsÚwarnÚ_warning_msgÚDeprecationWarningÚ_pubkey)ÚselfÚ
public_keys     r   Ú__init__zRSAVerifier.__init__R   s    € Ü�‰ÜÜ'Øõ	
ð
 "ˆ�r+   c                 óÖ   — t        j                  |«      }	 t        j                  j	                  ||| j
                  «      S # t        t        j                  j                  f$ r Y yw xY w)NF)r   Úto_bytesÚrsaÚpkcs1Úverifyr6   Ú
ValueErrorÚVerificationError)r7   ÚmessageÚ	signatures      r   r>   zRSAVerifier.verifyZ   sU   € ä×#Ñ# GÓ,ˆð	Ü—9‘9×#Ñ# G¨Y¸¿¹ÓEÐEøÜœCŸI™I×7Ñ7Ð8ò 	Ùð	ús   —*A Á#A(Á'A(c                 ó¸  — t        j                  |«      }t        |v }|r”t        j                  j                  |d«      }t        j                  |t        «       ¬«      \  }}|dk7  rt        j                  d|«      ‚|d   d   }t        |d   «      }t        j                  j                  |d«      }n t        j                  j                  |d	«      } | |«      S )
aš  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:
            google.auth.crypt._python_rsa.RSAVerifier: The constructed verifier.

        Raises:
            ValueError: If the public_key can't be parsed.
        ÚCERTIFICATE©Úasn1Specr+   úUnused bytesÚtbsCertificateÚsubjectPublicKeyInfoÚsubjectPublicKeyÚDERÚPEM)r   r;   Ú_CERTIFICATE_MARKERr<   r   Úload_pemr   Údecoder   r	   ÚInvalidValuer*   Ú	PublicKeyÚ
load_pkcs1)	Úclsr8   Úis_x509_certÚderÚ	asn1_certÚ	remainingÚ	cert_infoÚ	key_bytesÚpubkeys	            r   Úfrom_stringzRSAVerifier.from_stringb   sÂ   € ô ×&Ñ& zÓ2ˆ
Ü*¨jÐ8ˆñ Ü—'‘'×"Ñ" :¨}Ó=ˆCÜ#*§>¡>°#ÄÃÔ#NÑ ˆI�yØ˜CÒÜ ×-Ñ-¨n¸iÓHÐHà!Ð"2Ñ3Ð4JÑKˆIÜ*¨9Ð5GÑ+HÓIˆIÜ—]‘]×-Ñ-¨i¸Ó?‰Fä—]‘]×-Ñ-¨j¸%Ó@ˆFÙ�6‹{Ðr+   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r9   r   Úcopy_docstringr
   ÚVerifierr>   Úclassmethodr[   r   r+   r   r-   r-   F   sE   „ ñ	ò"ð €X×Ñ˜TŸ]™]Ó+ñó ,ðð ñó ñr+   r-   c                   ó¼   — e Zd ZdZdd„Ze ej                  ej                  «      d„ «       «       Z
 ej                  ej                  «      d„ «       Zedd„«       Zy)Ú	RSASignera«  Signs messages with an RSA private key.

    .. deprecated::
        The `rsa` library has been archived. Please migrate to
        `cryptography`.

    Args:
        private_key (rsa.key.PrivateKey): 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                 ó`   — t        j                  t        t        d¬«       || _        || _        y r/   )r2   r3   r4   r5   Ú_keyÚ_key_id)r7   Úprivate_keyÚkey_ids      r   r9   zRSASigner.__init__‘   s'   € Ü�‰ÜÜ'Øõ	
ð
  ˆŒ	Øˆ�r+   c                 ó   — | j                   S r   )rg   )r7   s    r   ri   zRSASigner.key_idš   s   € ð �|‰|Ðr+   c                 ó‚   — t        j                  |«      }t        j                  j	                  || j
                  d«      S )NzSHA-256)r   r;   r<   r=   Úsignrf   )r7   rA   s     r   rl   zRSASigner.signŸ   s-   € ä×#Ñ# GÓ,ˆÜ�y‰y�~‰~˜g t§y¡y°)Ó<Ð<r+   c                 óH  — t        j                  |«      }t        j                  t	        j
                  |«      t        t        «      \  }}|dk(  r,t        j                  j                  j                  |d¬«      }nž|dk(  r„t        j                  |t        ¬«      \  }}|dk7  rt        j                   d|«      ‚|j#                  d«      }t        j                  j                  j                  |j%                  «       d¬«      }nt        j&                  d	«      ‚ | ||¬
«      S )aŸ  Construct an Signer instance from a private key in PEM format.

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

        Returns:
            google.auth.crypt.Signer: The constructed signer.

        Raises:
            ValueError: If the key cannot be parsed as PKCS#1 or PKCS#8 in
                PEM format.
        r   rK   )Úformatr   rE   r+   rG   Ú
privateKeyzNo key could be detected.)ri   )r   Ú
from_bytesr   ÚreadPemBlocksFromFileÚioÚStringIOÚ_PKCS1_MARKERÚ_PKCS8_MARKERr<   ÚkeyÚ
PrivateKeyrR   r   rO   Ú_PKCS8_SPECr	   rP   ÚgetComponentByNameÚasOctetsÚMalformedError)	rS   rv   ri   Ú	marker_idrY   rh   Úkey_inforW   Úprivate_key_infos	            r   r[   zRSASigner.from_string¤   s÷   € ô ×!Ñ! #Ó&ˆÜ"×8Ñ8Ü�K‰K˜Óœm¬]ó 
Ñˆ	�9ð
 ˜Š>ÜŸ'™'×,Ñ,×7Ñ7¸	È%Ð7ÓP‰Kà˜!Š^Ü")§.¡.°Ä[Ô"QÑˆH�iØ˜CÒÜ ×-Ñ-¨n¸iÓHÐHØ'×:Ñ:¸<ÓHÐÜŸ'™'×,Ñ,×7Ñ7Ø ×)Ñ)Ó+°Eð 8ó ‰Kô ×+Ñ+Ð,GÓHÐHá�; vÔ.Ð.r+   r   )r\   r]   r^   r_   r9   Úpropertyr   r`   r
   ÚSignerri   rl   rb   r[   r   r+   r   rd   rd   ƒ   sr   „ ñóð Ø€X×Ñ˜TŸ[™[Ó)ñó *ó ðð €X×Ñ˜TŸ[™[Ó)ñ=ó *ð=ð ò"/ó ñ"/r+   rd   )r_   Ú
__future__r   rr   r2   Úpyasn1.codec.derr   Úpyasn1_modulesr   Úpyasn1_modules.rfc2459r   Úpyasn1_modules.rfc5208r   r<   Úgoogle.authr   r	   Úgoogle.auth.cryptr
   r!   rM   rt   ru   rx   r4   r*   ra   r-   r€   ÚFromServiceAccountMixinrd   r   r+   r   ú<module>r‰      s„   ðñõ 'ã 	Û å $Ý Ý .Ý 1Û 
å  Ý "Ý "à%€Ø4Ð ØT€ØL€ÙÓ€ð(ð òô*:�$—-‘-ô :ôzD/�—‘˜T×9Ñ9õ D/r+   