
    עi[                        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)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                     t        |       }t               }t        d|d      D ];  }| ||dz    }t        d t	        t
        |      D              }|j                  |       = t        |      S )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   ,   K   | ]  \  }}||z    y wN ).0valdigits      ^/sites/domain-asset-master/.venv/lib/python3.12/site-packages/google/auth/crypt/_python_rsa.py	<genexpr>z%_bit_list_to_bytes.<locals>.<genexpr>A   s     KzsEsU{Ks   )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& #UUQY/	KS	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,	99##GYEECII778 		s   *A #A('A(c                    t        j                  |      }t        |v }|rt        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 IyC --niHH!"234JKI*95G+HII]]--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,yy~~gtyy)<<r+   c                 H   t        j                  |      }t        j                  t	        j
                  |      t        t              \  }}|dk(  r,t        j                  j                  j                  |d      }n|dk(  rt        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KKm] 
	9
 >'',,77	%7PK!^")..["QHiC --ni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+   