o
    biM                     @   s4   d dl Z d dlZd dlZdd Zdd Zdd ZdS )    Nc                  C   s  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jtj}	|	d |	 d }
|	  | | tt  | d| |
| 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)z8.8.8.8P   z	127.0.0.1	localhostF)criticalim  )days)0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socketAF_INET
SOCK_DGRAMconnectgetsocknamecloseSubjectAlternativeNameDNSNamegethostbynamegethostname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sprivate_ip_addressaltnamesnowcertcert_contents rE   J/home/ubuntu/.local/lib/python3.10/site-packages/ray/_private/tls_utils.pygenerate_self_signed_tls_certs   sb   




rG   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addressrN   server_cert_chainprivate_keyca_certcredentialsrE   rE   rF   add_port_to_grpc_serverD   s   
r]   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)rO   rP   ).0vrE   rE   rF   	<genexpr>U   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.r^   rbr_   r`   )anyRuntimeErroropenrO   rP   read)tls_env_varsfrY   rZ   r[   rE   rE   rF   rS   S   s   



rS   )r-   rO   r#   rG   r]   rS   rE   rE   rE   rF   <module>   s    >