§
    8?ÄjD  ã                   ó   — d Z ddlmZ ddl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mZ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j        ¦  «        Z G d„ dej        ej        ¦  «        ZdS )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 ]P}| ||dz   …         }t          d„ t	          t
          |¦  «        D ¦   «         ¦  «        }|                     |¦  «         ŒQt          |¦  «        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  V — Œd S ©N© )Ú.0ÚvalÚdigits      úNC:\Projects\Historical\venv\Lib\site-packages\google/auth/crypt/_python_rsa.pyú	<genexpr>z%_bit_list_to_bytes.<locals>.<genexpr>@   s*   è è € ÐKÐK¡z s¨E�s˜U‘{ÐKÐKÐKÐKÐKÐKó    )ÚlenÚ	bytearrayÚrangeÚsumÚzipÚ_POW2ÚappendÚbytes)Úbit_listÚnum_bitsÚ	byte_valsÚstartÚ	curr_bitsÚchar_vals         r   Ú_bit_list_to_bytesr+   0   s‘   € õ �8‰}Œ}€HÝ‘”€IÝ�q˜( AÑ&Ô&ð #ð #ˆØ˜U U¨Q¡YÐ.Ô/ˆ	ÝÐKÐKµS½À	Ñ5JÔ5JÐKÑKÔKÑKÔKˆØ×Ò˜Ñ"Ô"Ð"Ð"Ý�ÑÔÐr   c                   ój   — e Zd ZdZd„ Z ej        ej        ¦  «        d„ ¦   «         Z	e
d„ ¦   «         ZdS )Ú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                 óV   — t          j        t          t          d¬¦  «         || _        d S ©Nr   )ÚcategoryÚ
stacklevel)ÚwarningsÚwarnÚ_warning_msgÚDeprecationWarningÚ_pubkey)ÚselfÚ
public_keys     r   Ú__init__zRSAVerifier.__init__Q   s1   € ÝŒÝÝ'Øð	
ñ 	
ô 	
ð 	
ð
 "ˆŒˆˆr   c                 ó¼   — t          j        |¦  «        }	 t          j                             ||| j        ¦  «        S # t          t          j        j        f$ r Y dS w xY w)NF)r   Úto_bytesÚrsaÚpkcs1Úverifyr6   Ú
ValueErrorÚVerificationError)r7   ÚmessageÚ	signatures      r   r>   zRSAVerifier.verifyY   s_   € åÔ# GÑ,Ô,ˆð	Ý”9×#Ò# G¨Y¸¼ÑEÔEÐEøÝ�CœIÔ7Ð8ð 	ð 	ð 	Ø�5�5ð	øøøs   –%< ¼AÁAc                 óÞ  — t          j        |¦  «        }t          |v }|r¤t          j                             |d¦  «        }t          j        |t          ¦   «         ¬¦  «        \  }}|dk    rt          j
        d|¦  «        ‚|d         d         }t          |d         ¦  «        }t          j                             |d¦  «        }n t          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_stringa   sÝ   € õ Ô& zÑ2Ô2ˆ
Ý*¨jÐ8ˆð ð 
	AÝ”'×"Ò" :¨}Ñ=Ô=ˆCÝ#*¤>°#ÅÁÄÐ#NÑ#NÔ#NÑ ˆI�yØ˜CÒÐÝ Ô-¨n¸iÑHÔHÐHà!Ð"2Ô3Ð4JÔKˆIÝ*¨9Ð5GÔ+HÑIÔIˆIÝ”]×-Ò-¨i¸Ñ?Ô?ˆFˆFå”]×-Ò-¨j¸%Ñ@Ô@ˆFØˆs�6‰{Œ{Ðr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r9   r   Úcopy_docstringr
   ÚVerifierr>   Úclassmethodr[   r   r   r   r-   r-   E   ss   € € € € € ð	ð 	ð"ð "ð "ð €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dS )Ú	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                 ód   — t          j        t          t          d¬¦  «         || _        || _        d S r/   )r2   r3   r4   r5   Ú_keyÚ_key_id)r7   Úprivate_keyÚkey_ids      r   r9   zRSASigner.__init__�   s8   € ÝŒÝÝ'Øð	
ñ 	
ô 	
ð 	
ð
  ˆŒ	ØˆŒˆˆr   c                 ó   — | j         S r   )rg   )r7   s    r   ri   zRSASigner.key_id™   s   € ð Œ|Ðr   c                 óv   — t          j        |¦  «        }t          j                             || j        d¦  «        S )NzSHA-256)r   r;   r<   r=   Úsignrf   )r7   rA   s     r   rl   zRSASigner.signž   s,   € åÔ# GÑ,Ô,ˆÝŒy�~Š~˜g t¤y°)Ñ<Ô<Ð<r   c                 óJ  — t          j        |¦  «        }t          j        t	          j        |¦  «        t          t          ¦  «        \  }}|dk    r't          j	        j
                             |d¬¦  «        }n¡|dk    r‡t          j        |t          ¬¦  «        \  }}|dk    rt          j        d|¦  «        ‚|                     d¦  «        }t          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ÝŒK˜ÑÔ�m­]ñ 
ô  
Ñˆ	�9ð
 ˜Š>ˆ>Ýœ'Ô,×7Ò7¸	È%Ð7ÑPÔPˆKˆKà˜!Š^ˆ^Ý")¤.°Å[Ð"QÑ"QÔ"QÑˆH�iØ˜CÒÐÝ Ô-¨n¸iÑHÔHÐHØ'×:Ò:¸<ÑHÔHÐÝœ'Ô,×7Ò7Ø ×)Ò)Ñ+Ô+°Eð 8ñ ô ˆKˆKõ Ô+Ð,GÑHÔHÐHàˆs�; vÐ.Ñ.Ô.Ð.r   r   )r\   r]   r^   r_   r9   Úpropertyr   r`   r
   ÚSignerri   rl   rb   r[   r   r   r   rd   rd   ‚   s²   € € € € € ðð ðð ð ð ð Ø€XÔ˜Tœ[Ñ)Ô)ðð ñ *Ô)ñ „Xðð €XÔ˜Tœ[Ñ)Ô)ð=ð =ñ *Ô)ð=ð ð"/ð "/ð "/ñ „[ð"/ð "/ð "/r   rd   )r_   Ú
__future__r   rr   r2   r<   Úpyasn1.codec.derr   Úpyasn1_modulesr   Úpyasn1_modules.rfc2459r   Úpyasn1_modules.rfc5208r   Úgoogle.authr   r	   Úgoogle.auth.cryptr
   r"   rM   rt   ru   rx   r4   r+   ra   r-   r€   ÚFromServiceAccountMixinrd   r   r   r   ú<module>r‰      s]  ððð ð 'Ð &Ð &Ð &Ð &Ð &à 	€	€	€	Ø €€€à 
€
€
€
Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø "Ð "Ð "Ð "Ð "Ð "à%€Ø4Ð ØT€ØL€ØˆnÑÔ€ð(ð ðð ð ð*:ð :ð :ð :ð :�$”-ñ :ô :ð :ðzD/ð D/ð D/ð D/ð D/�”˜TÔ9ñ D/ô D/ð D/ð D/ð D/r   