o
    $i                     @   sD   d dl Z d dlZd dlZd dlmZmZ dd Zdd Zdd ZdS )	    N)get_localhost_ip node_ip_address_from_perspectivec                  C   sZ  z"ddl m}  ddlm} ddlm}m} ddlm} ddl	m
} W n ty-   tdw |jdd	| d
}|j|jj|jj| d }| | |jdg}| | tt | t | t | dg}	tj }
|   !|"|j#|	dd$|$ %| & '|
(|
tj)dd *||+ | }|,|jj }||fS )zwCreate self-signed key/cert pair for testing.

    This method requires the library ``cryptography`` be installed.
    r   )x509)default_backend)hashesserialization)rsa)NameOIDz_Using `Security.temporary` requires `cryptography`, please install it using either pip or condai  i   )public_exponentkey_sizebackend)encodingformatencryption_algorithmzray-internal	localhostF)criticalim  )days)-cryptographyr   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   r   )cryptography.hazmat.primitives.asymmetricr   cryptography.x509.oidr	   ImportErrorgenerate_private_keyprivate_bytesEncodingPEMPrivateFormatPKCS8NoEncryptiondecodeNameNameAttributeCOMMON_NAMESubjectAlternativeNameDNSNamesocketgethostbynamegethostnamer   r   datetimeutcnowCertificateBuildersubject_nameissuer_nameadd_extension
public_keyserial_numberrandom_serial_numbernot_valid_beforenot_valid_after	timedeltasignSHA256public_bytes)r   r   r   r   r   r	   keykey_contentsray_interalaltnamesnowcertcert_contents r?   S/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/_private/tls_utils.pygenerate_self_signed_tls_certs   sZ   





rA   c                 C   sZ   dd l }tjdd dv r(t \}}}|j||fg||d ud}| ||S | |S )Nr   RAY_USE_TLS0)1true)root_certificatesrequire_client_auth)	grpcosenvirongetlowerload_certs_from_envssl_server_credentialsadd_secure_portadd_insecure_port)serveraddressrH   server_cert_chainprivate_keyca_certcredentialsr?   r?   r@   add_port_to_grpc_serverA   s   
rW   c                  C   s   g d} t dd | D rtdttjd d}| }W d    n1 s(w   Y  ttjd d}| }W d    n1 sDw   Y  ttjd d}| }W d    n1 s`w   Y  |||fS )	N)RAY_TLS_SERVER_CERTRAY_TLS_SERVER_KEYRAY_TLS_CA_CERTc                 s   s    | ]}|t jvV  qd S )N)rI   rJ   ).0vr?   r?   r@   	<genexpr>R   s    z&load_certs_from_env.<locals>.<genexpr>zIf the environment variable RAY_USE_TLS is set to true then RAY_TLS_SERVER_CERT, RAY_TLS_SERVER_KEY and RAY_TLS_CA_CERT must also be set.rX   rbrY   rZ   )anyRuntimeErroropenrI   rJ   read)tls_env_varsfrS   rT   rU   r?   r?   r@   rM   P   s   



rM   )	r)   rI   r&   ray._common.network_utilsr   r   rA   rW   rM   r?   r?   r?   r@   <module>   s    6