
    @f%                     Z   d Z ddlZddlZddlZddlZddlZddlZddlmZ  ej	        e
          Z ej        ej         ej        ej                   ej        ej                   ej        ej                  ej                  Zd Zd Zd Zd Zd Zd	 Zd
 Z G d de          ZdS )z]
Code for configuring client side TLS to offload the signing operation to
signing libraries.
    N)
exceptionsc                     t          j        t          t          j                                        d|                     t           j                  S )Nintptr_t)ctypescastintcffiFFIc_void_p)ssl_ctxs    w/home/panchajanya/Development/work/volatility3/lib/python3.11/site-packages/google/auth/transport/_custom_tls_signer.py_cast_ssl_ctx_to_void_pr   1   s2    ;s48::??:w??@@&/RRR    c                 L   t                               d|            t          j        dk    r&t          j        dk    rt          j        | d          nt          j        |           }t          t          j	        t          j
        g|j        _        t          j        |j        _        |S )Nzloading offload library from %s      ntr   winmode)_LOGGERdebugsysversion_infoosnamer   CDLLSIGN_CALLBACK_CTYPEc_char_pr   ConfigureSslContextargtypesc_intrestype)offload_lib_pathlibs     r   load_offload_libr&   6   s    MM35EFFF
 v%%"'T// 	$a0000[)**  	(C$
 '-lC#Jr   c                    t                               d|            t          j        dk    r&t          j        dk    rt          j        | d          nt          j        |           }t          j        t          j        t          j	        g|j
        _        t          j	        |j
        _        t          j        t          j        t          j	        t          j        t          j	        g|j        _        t          j	        |j        _        |S )Nzloading signer library from %sr   r   r   r   )r   r   r   r   r   r   r   r   r   r"   GetCertPemForPythonr!   r#   SignForPython)signer_lib_pathr%   s     r   load_signer_libr+   N   s    MM2ODDD
 v%%"'T// 	OQ////[))  )/&,'WC$&,lC# 	"C !'CJr   c                 @   t                               d|            t          j        dk    r&t          j        dk    rt          j        | d          nt          j        |           }t          j        t          j	        g|j
        _        t          j        |j
        _        |S )Nz loading provider library from %sr   r   r   r   )r   r   r   r   r   r   r   r   r   r   ECP_attach_to_ctxr!   r"   r#   )provider_lib_pathr%   s     r   load_provider_libr/   n   s    MM46GHHH
 v%%"'T// 	%q1111[*++  '-ov%GC"$*LC!Jr   c                     ddl m} t          j        | |          }|                    |                                          }|                    |           |                                S )Nr   )hashes)cryptography.hazmat.primitivesr1   r   	string_atHashSHA256updatefinalize)to_be_signedto_be_signed_lenr1   datahashs        r   _compute_sha256_digestr<      s`    555555L*:;;D;;v}}''DKK==??r   c                 0      fd}t          |          S )Nc                    t                               d           t          ||          }t          j        t          |          z  }d}t          j        |          }                                                    |	                    t          |                    t          |          ||          }|dk    rdS ||d<   t          |          }	t          |          D ]}
|	|
         | |
<   dS )Nzcalling sign callback...i  r      )r   r   r<   r   c_charlencreate_string_bufferr)   encodefrom_buffer	bytearrayrange)sigsig_lentbstbs_lendigestdigestArraysig_holder_len
sig_holdersignature_lenbsiconfig_file_path
signer_libs              r   sign_callbackz(get_sign_callback.<locals>.sign_callback   s    0111'W55mc&kk1 0@@
"00##%%##If$5$566KK
 
 A1"
z""}%% 	 	AUCFFqr   )r   )rS   rR   rT   s   `` r   get_sign_callbackrU      s2         < }---r   c                     |                      |                                d d          }|dk    rt          j        d          t	          j        |          }|                      |                                ||           t          |          S )Nr   zfailed to get certificate)r(   rC   r   MutualTLSChannelErrorr   rB   bytes)rS   rR   cert_lencert_holders       r   get_certr[      s    --!!	 H
 1}}./JKKK -h77K""!!  
 r   c                   &    e Zd Zd Zd Zd Zd ZdS )CustomTlsSignerc                 >    || _         d| _        d| _        d| _        dS )a  
        This class loads the offload and signer library, and calls APIs from
        these libraries to obtain the cert and a signing callback, and attach
        them to SSL context. The cert and the signing callback will be used
        for client authentication in TLS handshake.

        Args:
            enterprise_cert_file_path (str): the path to a enterprise cert JSON
                file. The file should contain the following field:

                    {
                        "libs": {
                            "ecp_client": "...",
                            "tls_offload": "..."
                        }
                    }
        N)_enterprise_cert_file_path_cert_sign_callback_provider_lib)selfenterprise_cert_file_paths     r   __init__zCustomTlsSigner.__init__   s*    $ +D'
"!r   c                    t          | j        d          5 }t          j        |          }|                    di           }|                    dd           }|                    dd           }|                    dd           }d d d            n# 1 swxY w Y   |rt          |          | _        d S |r@|r>t          |          | _        t          |          | _
        |                                  d S t          j        d          )Nrlibs
ecp_clienttls_offloadecp_providerzenterprise cert file is invalid)openr_   jsonloadgetr/   rb   r&   _offload_libr+   _signer_libset_up_custom_keyr   rW   )rc   fenterprise_cert_jsonrh   signer_libraryoffload_libraryprovider_librarys          r   load_librarieszCustomTlsSigner.load_libraries   s>   $1377 	>1#'9Q<< '++FB77D!XXlD99N"hh}d;;O#xx==	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>  	!23C!D!DDF  	~ 	 0 A AD.~>>D""$$$F./PQQQs   A-BBBc                     t          | j        | j                  | _        t	          | j        | j                  | _        d S )N)r[   rq   r_   r`   rU   ra   )rc   s    r   rr   z!CustomTlsSigner.set_up_custom_key   s>     d.0OPP
/d=
 
r   c                    | j         r`| j                             t          |j        j                  | j                            d                    st          j        d          d S | j	        rl| j
        re| j	                            | j        t          j        | j                  t          |j        j                            st          j        d          d S t          j        d          )Nasciiz,failed to configure ECP Provider SSL contextz+failed to configure ECP Offload SSL contextzInvalid ECP configuration.)rb   r-   r   _ctx_contextr_   rC   r   rW   rp   rq   r    ra   r   r   r`   )rc   ctxs     r   attach_to_ssl_contextz%CustomTlsSigner.attach_to_ssl_context   s    	Q%77'(9::/66w??   !6B  	   
	Q4#3 
	Q$88#
++'(9::  
 !6A    23OPPPr   N)__name__
__module____qualname__re   rx   rr   r    r   r   r]   r]      sX        " " ".R R R0
 
 
Q Q Q Q Qr   r]   )__doc__r   rm   loggingr   r   r	   google.authr   	getLoggerr   r   	CFUNCTYPEr"   POINTERc_ubytec_size_tr   r   r&   r+   r/   r<   rU   r[   objectr]   r   r   r   <module>r      su   
    				 



  " " " " " "
'
H
%
% 'f&
LFN6>""FN6?##FN6>""
O  S S S
  0  @  "  . . .L  (KQ KQ KQ KQ KQf KQ KQ KQ KQ KQr   