
    gj[                        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j                  Z G d dej        ej                  ZdS )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 ]P}| ||dz            }t          d t	          t
          |          D                       }|                    |           Qt          |          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  V  d S N ).0valdigits      a/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/google/auth/crypt/_python_rsa.py	<genexpr>z%_bit_list_to_bytes.<locals>.<genexpr>A   s*      KKzsEsU{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+   1   s     8}}HIq(A&& # #UUQY./	KKS	5J5J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__R   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.verifyZ   s_    #G,,	9##GYEEECI78 	 	 	55	s   %< AAc                    t          j        |          }t          |v }|rt          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_stringb   s     &z22
*j8  
	A'"":}==C#*>##N#N#N IyC -niHHH!"234JKI*95G+HIII]--i??FF]--j%@@Fs6{{r   N)__name__
__module____qualname____doc__r9   r   copy_docstringr
   Verifierr>   classmethodr[   r   r   r   r-   r-   F   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~~gty)<<<r   c                 J   t          j        |          }t          j        t	          j        |          t          t                    \  }}|dk    r't          j	        j
                            |d          }n|dk    rt          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PKK!^^").["Q"Q"QHiC -niHHH'::<HH',77 ))++E 8  KK +,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   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      si    ' & & & & & 				  $ $ $ $ $ $       . . . . . . 1 1 1 1 1 1 



             " " " " " " " " " " " "%4 TLn(   *: : : : :$- : : :zD/ D/ D/ D/ D/T9 D/ D/ D/ D/ D/r   