
    (ph                        S 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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 S\R0                  5      r " S S\R4                  \R6                  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-----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      P/var/www/html/venv/lib/python3.13/site-packages/google/auth/crypt/_python_rsa.py	<genexpr>%_bit_list_to_bytes.<locals>.<genexpr>;   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+   +   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)RSAVerifierr   zVerifies RSA cryptographic signatures using public keys.

Args:
    public_key (rsa.key.PublicKey): The public key used to verify
        signatures.
c                     Xl         g r   _pubkey)self
public_keys     r   __init__RSAVerifier.__init__H   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verifyr1   
ValueErrorVerificationError)r2   message	signatures      r   r:   RSAVerifier.verifyK   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   r7   _CERTIFICATE_MARKERr8   r   load_pemr   decoder   r	   InvalidValuer+   	PublicKey
load_pkcs1)	clsr3   is_x509_certder	asn1_cert	remaining	cert_info	key_bytespubkeys	            r   from_stringRSAVerifier.from_stringS   s     &&z2
*j8 ''"":}=C#*>>##N IC --niHH!"234JKI*95G+HII]]--i?F]]--j%@F6{r,   r0   N)__name__
__module____qualname____firstlineno____doc__r4   r   copy_docstringr
   Verifierr:   classmethodrX   __static_attributes__r   r,   r   r.   r.   @   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)
	RSASignert   a'  Signs messages with an RSA private key.

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l         X l        g r   _key_key_id)r2   private_keykey_ids      r   r4   RSASigner.__init__~   s    	r,   c                     U R                   $ r   )ri   )r2   s    r   rk   RSASigner.key_id   s     ||r,   c                     [         R                  " U5      n[        R                  R	                  XR
                  S5      $ )NzSHA-256)r   r7   r8   r9   signrh   )r2   r=   s     r   rp   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   rH   )formatr   rB   r,   rD   
privateKeyzNo key could be detected.)rk   )r   
from_bytesr   readPemBlocksFromFileioStringIO_PKCS1_MARKER_PKCS8_MARKERr8   key
PrivateKeyrO   r   rL   _PKCS8_SPECr	   rM   getComponentByNameasOctetsMalformedError)	rP   r{   rk   	marker_idrV   rj   key_inforT   private_key_infos	            r   rX   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,   rg   r   )rZ   r[   r\   r]   r^   r4   propertyr   r_   r
   Signerrk   rp   ra   rX   rb   r   r,   r   rd   rd   t   sn     T[[) *  T[[)= *= "/ "/r,   rd   )r^   
__future__r   rw   pyasn1.codec.derr   pyasn1_modulesr   pyasn1_modules.rfc2459r   pyasn1_modules.rfc5208r   r8   google.authr   r	   google.auth.cryptr
   r"   rJ   ry   rz   r}   r+   r`   r.   r   FromServiceAccountMixinrd   r   r,   r   <module>r      su    ' 	 $  . 1 
   " "%4 TL*1$-- 1h;/T99 ;/r,   