File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/__pycache__/rsax931.cpython-310.pyc
o
�N�g�# � @ s� d Z ddlZddlZddlZddlZddlZddlmZmZm Z m
Z
mZmZ ddl
ZddlZdZdZdZdd� Zd d
� Zdd� Ze� Zd
ZG dd� d�ZG dd� d�ZdS )zE
Create and verify ANSI X9.31 RSA signatures using OpenSSL libcrypto
� N)�c_char_p�c_int�c_void_p�cdll�create_string_buffer�pointer� � � c C s� t j�d�r&d} t jD ]}t�tj�|d��} | r| d nd} | r# nq�n&tjj� � r�t�d�} | p7t�d�} t j
}tj�|�rGtj�|�}tj�
|�}tj�|�dkr[tj�
|�}| pdt�|� d��} t�d d
�}| pvt�tj�|d��} | p�t�tj�|d��} | p�t�d
�} t�� d �d�dd� ddgkr�| p�t�d�} ttt| ���} ntt�� d �d�d �dk r�| p�dg} | r�| d nd} n�tt dd�r�tjj�� r�t�tj�tj�
t j
�d��} | r�| d nd} n`tj�d�} | �sLtjj�� �rt�d�} | �pt�d�} | �pt�d�} | �r| d nd} n1tjj�� �rLtj�d��s0tj�d��r>t�d�} | �p<t�d�} nt�d�} | �rJ| d nd} | �sStd ��| S )!z@
Find the path (or return the short name) of libcrypto.
�winNzlibcrypto*.dllr z/opt/salt/lib/libcrypto.dylibzlib/libcrypto.dylib�binz/lib/libcrypto.dylibZHOMEBREW_PREFIXz
/usr/localzopt/openssl/lib/libcrypto.dylibz!opt/openssl@*/lib/libcrypto.dylibz/opt/local/lib/libcrypto.dylib�.� �10Z15z/usr/lib/libcrypto.*.dylib� z/usr/lib/libcrypto.dylib�frozenFz
libcrypto.so*Zcryptoz%/opt/saltstack/salt/run/libcrypto.so*z/opt/local/lib/libcrypto.so*z/opt/tools/lib/libcrypto.so*z/opt/saltstack/salt/runz
/opt/salt/libz/opt/salt/lib/libcrypto.so*z/opt/freeware/lib/libcrypto.so*zCannot locate OpenSSL libcrypto)�sys�platform�
startswith�path�glob�os�join�salt�utilsZ is_darwin�
executable�islink�realpath�dirname�basename�getenv�mac_ver�split�list�reversed�sorted�int�getattrZ
is_smartos�ctypes�utilZfind_libraryZis_sunosZis_aix�isdir�OSError)�libr Zpy_bin�targetZbrew_prefix� r. �F/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/rsax931.py�_find_libcrypto sl
��
��"
�
r0 c C s t �t� �S )z$
Attempt to load libcrypto.
)r �LoadLibraryr0 r. r. r. r/ �_load_libcrypton s r2 c C s� t � } z| j}t|�r|� }|dk r| �� W n ty( | �� | �� Y nw d| j_t | j_
t f| j_t | j_
ttf| j_t | j_
t f| j_t t t t f| j_t | j_
t t t t f| j_t | j_
tttt tf| j_tttt tf| j_| S )z>
Set up libcrypto argtypes and initialize the library
i r. )r2 ZOpenSSL_version_num�callableZOPENSSL_init_crypto�AttributeErrorZOPENSSL_no_configZ!OPENSSL_add_all_algorithms_noconf�RSA_new�argtypesr �restype�RSA_free�RSA_sizeZargtyper r �BIO_new_mem_buf�BIO_free�PEM_read_bio_RSAPrivateKey�PEM_read_bio_RSA_PUBKEY�RSA_private_encrypt�RSA_public_decrypt)� libcryptoZopenssl_version_numr. r. r/ �_init_libcryptou sN ��
���rA � c @ �( e Zd ZdZdd� Zdd� Zdd� ZdS ) �
RSAX931SignerzB
Create ANSI X9.31 RSA signatures using OpenSSL libcrypto
c C sT t jj�|d�}t�|t|��| _tt� � �| _
t�| jt| j
�dd�s(t
d��dS )zo
Init an RSAX931Signer instance
:param str keydata: The RSA private key in PEM format
�asciiNzinvalid RSA private key)r r �stringutils�to_bytesr@ r: �len�_bior r5 �_rsar<