
    bi[                        S r SSKJr  SSKrSSKrSSKJr  SSKJr  SSK	J
r
  SSKJr  SSKrSSKJr  SS	KJr  SS
KJr  SrSrSrSr\" 5       rSrS r " S S\R4                  5      r " S S\R8                  \R:                  5      rg)zPure-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                     [        U 5      n[        5       n[        SUS5       H;  nXUS-    n[        S [	        [
        U5       5       5      nUR                  U5        M=     [        U5      $ )zConverts 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   .   #    U  H  u  pX-  v   M     g 7fN ).0valdigits      H/app/.venv/lib/python3.13/site-packages/google/auth/crypt/_python_rsa.py	<genexpr>%_bit_list_to_bytes.<locals>.<genexpr>A   s     K5Jzss{5Js   )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   sg     8}HIq(A&UQY/	KS	5JKK" '     c                   r    \ rS rSrSrS r\R                  " \R                  5      S 5       r
\S 5       rSrg)RSAVerifierF   zVerifies 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                 L    [         R                  " [        [        SS9  Xl        g Nr   )category
stacklevel)warningswarn_warning_msgDeprecationWarning_pubkey)self
public_keys     r   __init__RSAVerifier.__init__R   s    '	

 "r,   c                     [         R                  " U5      n [        R                  R	                  XU R
                  5      $ ! [        [        R                  R                  4 a     gf = f)NF)r   to_bytesrsapkcs1verifyr8   
ValueErrorVerificationError)r9   message	signatures      r   rA   RSAVerifier.verifyZ   sS    ##G,	99##GEECII778 		s   )A $A)(A)c                    [         R                  " U5      n[        U;   nU(       a  [        R                  R                  US5      n[        R                  " U[        5       S9u  pEUS:w  a  [        R                  " SU5      eUS   S   n[        US   5      n[        R                  R                  US5      nO [        R                  R                  US	5      nU " U5      $ )
aR  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)	clsr:   is_x509_certder	asn1_cert	remaining	cert_info	key_bytespubkeys	            r   from_stringRSAVerifier.from_stringb   s     &&z2
*j8 ''"":}=C#*>>##N IC --niHH!"234JKI*95G+HII]]--i?F]]--j%@F6{r,   )r8   N)__name__
__module____qualname____firstlineno____doc__r;   r   copy_docstringr
   VerifierrA   classmethodr_   __static_attributes__r   r,   r   r.   r.   F   sC    	" T]]+ ,  r,   r.   c                       \ rS rSrSrS	S jr\\R                  " \	R                  5      S 5       5       r\R                  " \	R                  5      S 5       r\S	S j5       rSrg)
	RSASigner   a  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                 X    [         R                  " [        [        SS9  Xl        X l        g r1   )r4   r5   r6   r7   _key_key_id)r9   private_keykey_ids      r   r;   RSASigner.__init__   s#    '	

  	r,   c                     U R                   $ r   )ro   )r9   s    r   rq   RSASigner.key_id   s     ||r,   c                     [         R                  " U5      n[        R                  R	                  XR
                  S5      $ )NzSHA-256)r   r>   r?   r@   signrn   )r9   rD   s     r   rv   RSASigner.sign   s+    ##G,yy~~gyy)<<r,   c                 <   [         R                  " U5      n[        R                  " [        R
                  " U5      [        [        5      u  p4US:X  a)  [        R                  R                  R                  USS9nOUS:X  a  [        R                  " U[        S9u  pgUS:w  a  [        R                   " SU5      eUR#                  S5      n[        R                  R                  R                  UR%                  5       SS9nO[        R&                  " S	5      eU " XRS
9$ )aW  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   rO   )formatr   rI   r,   rK   
privateKeyzNo key could be detected.)rq   )r   
from_bytesr   readPemBlocksFromFileioStringIO_PKCS1_MARKER_PKCS8_MARKERr?   key
PrivateKeyrV   r   rS   _PKCS8_SPECr	   rT   getComponentByNameasOctetsMalformedError)	rW   r   rq   	marker_idr]   rp   key_infor[   private_key_infos	            r   r_   RSASigner.from_string   s     !!#&"88KKm] 
	
 >'',,77	%7PK!^")..["QHC --niHH'::<H'',,77 ))+E 8 K ++,GHH;..r,   )rn   ro   r   )ra   rb   rc   rd   re   r;   propertyr   rf   r
   Signerrq   rv   rh   r_   ri   r   r,   r   rk   rk      sn     T[[) *  T[[)= *= "/ "/r,   rk   )re   
__future__r   r}   r4   pyasn1.codec.derr   pyasn1_modulesr   pyasn1_modules.rfc2459r   pyasn1_modules.rfc5208r   r?   google.authr   r	   google.auth.cryptr
   r"   rQ   r   r   r   r6   r+   rg   r.   r   FromServiceAccountMixinrk   r   r,   r   <module>r      s    ' 	  $  . 1 
   " "%4 TL( *:$-- :zD/T99 D/r,   