
    @fC                     ~    d Z ddl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
e
dz   Z G d d	ej                  ZdS )
zTools for using the Google `Cloud Identity and Access Management (IAM)
API`_'s auth-related functionality.

.. _Cloud Identity and Access Management (IAM) API:
    https://cloud.google.com/iam/docs/
    N)_helpers)crypt)
exceptionsz(https://iamcredentials.googleapis.com/v1z0/projects/-/serviceAccounts/{}:signBlob?alt=jsonc                   p    e Zd ZdZd Zd Zed             Z ej	        e
j                  d             ZdS )Signera  Signs messages using the IAM `signBlob API`_.

    This is useful when you need to sign bytes but do not have access to the
    credential's private key file.

    .. _signBlob API:
        https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts
        /signBlob
    c                 0    || _         || _        || _        dS )a  
        Args:
            request (google.auth.transport.Request): The object used to make
                HTTP requests.
            credentials (google.auth.credentials.Credentials): The credentials
                that will be used to authenticate the request to the IAM API.
                The credentials must have of one the following scopes:

                - https://www.googleapis.com/auth/iam
                - https://www.googleapis.com/auth/cloud-platform
            service_account_email (str): The service account email identifying
                which service account to use to sign bytes. Often, this can
                be the same as the service account email in the given
                credentials.
        N)_request_credentials_service_account_email)selfrequestcredentialsservice_account_emails       ^/home/panchajanya/Development/work/volatility3/lib/python3.11/site-packages/google/auth/iam.py__init__zSigner.__init__-   s!       '&;###    c                 `   t          j        |          }d}t                              | j                  }ddi}t          j        dt          j        |          	                    d          i          
                    d          }| j                            | j        |||           |                     ||||          }|j        t          j        k    r,t#          j        d                    |j                            t          j        |j        	                    d                    S )z(Makes a request to the API signBlob API.POSTzContent-Typezapplication/jsonpayloadzutf-8)urlmethodbodyheadersz&Error calling the IAM signBlob API: {})r   to_bytes_SIGN_BLOB_URIformatr   jsondumpsbase64	b64encodedecodeencoder
   before_requestr	   statushttp_clientOKr   TransportErrordataloads)r   messager   r   r   r   responses          r   _make_signing_requestzSigner._make_signing_requestA   s   #G,,##D$?@@!#56z(1188AAB
 

&// 	 	((WMMM==SdG=TT?kn,,+8??NN   z(-..w77888r   c                     dS )zOptional[str]: The key ID used to identify this private key.

        .. warning::
           This is always ``None``. The key ID used by IAM can not
           be reliably determined ahead of time.
        N )r   s    r   key_idzSigner.key_idV   s	     tr   c                 `    |                      |          }t          j        |d                   S )N
signedBlob)r,   r   	b64decode)r   r*   r+   s      r   signzSigner.sign`   s+    --g66 6777r   N)__name__
__module____qualname____doc__r   r,   propertyr/   r   copy_docstringr   r   r3   r.   r   r   r   r   "   s         < < <(9 9 9*   X XU\**8 8 +*8 8 8r   r   )r7   r   http.clientclientr%   r   google.authr   r   r   _IAM_API_ROOT_URIr   r   r.   r   r   <module>r>      s      ! ! ! ! ! !                    " " " " " "> "%WWA8 A8 A8 A8 A8U\ A8 A8 A8 A8 A8r   