
    Bwg                        d dl mZmZmZmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZ  e       dk(  rddlmZmZmZ n
ddlmZmZmZ g d	Zd
Zd
dgZedk  r ej.                           ej0                   e
              dZedk\  rQ ej4                   e
       dj7                  d            r( ej8                   e
       dj7                  d             ndZd ZddZd Z G d d      Z y)    )unicode_literalsdivisionabsolute_importprint_function   )ffi)buffer_from_bytesbyte_string_from_buffernull)str_clscffi   )	libcryptoversionversion_info)handle_openssl_errorr   libcrypto_legacy_supportlibcrypto_versionlibcrypto_version_infoLibcryptoConstpeek_openssl_errorzutf-8cp1252)r   r   T)   legacyasciiFc                     	 t        | t              S # t        $ r/ t        D ]#  }	 t        | |d      c cY S # t        $ r Y !w xY w Y nw xY wt        | d      S )Nstrict)errorsreplace)r   	_encodingUnicodeDecodeError_fallback_encodings)valueencodings     S/var/www/horilla/myenv/lib/python3.12/site-packages/oscrypto/_openssl/_libcrypto.py_try_decoder&   5   si    
ui((  + 	Huhx@@& 	 5++s/    A
7A
	A A
AA
	A
Nc                     | dkD  ry|t         }t        j                         }t        d      }t        j                  ||       t        |      } |t        |            )ah  
    Checks if an error occurred, and if so throws an OSError containing the
    last OpenSSL error message

    :param result:
        An integer result code - 1 or greater indicates success

    :param exception_class:
        The exception class to use for the exception if an error occurred

    :raises:
        OSError - when an OpenSSL error occurs
    r   Nx   )OSErrorr   ERR_get_errorr	   ERR_error_stringr
   r&   )resultexception_class	error_numbuffererror_strings        r%   r   r   F   s]     z!'')Is#Fy&1 +62L
+l3
44    c                      t        j                         } t        dk  r1t        | dz	  dz        }t        | dz	  dz        }t        | dz        }n!t        | dz	  dz        }d}t        | dz        }|||fS )	z
    Peeks into the error stack and pulls out the lib, func and reason

    :return:
        A three-element tuple of integers (lib, func, reason)
    )r   r            i     r   i )r   ERR_peek_errorr   int)errorlibfuncreasons       r%   r   r   e   s     $$&E&5B;$&'ERK5()UU]#5B;$&'UX%&vr1   c                   P    e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZd	Zd
ZdZdZdZdZdZy)r   r   r   r      i     i        i  i  i  r   N)__name__
__module____qualname__EVP_CTRL_SET_RC2_KEY_BITSSSLEAY_VERSIONRSA_PKCS1_PADDINGRSA_NO_PADDINGRSA_PKCS1_OAEP_PADDINGEVP_MD_CTX_FLAG_PSS_MDLENEVP_PKEY_CTRL_RSA_PADDINGRSA_PKCS1_PSS_PADDINGEVP_PKEY_CTRL_RSA_PSS_SALTLENEVP_PKEY_RSAEVP_PKEY_OP_SIGNEVP_PKEY_OP_VERIFYNID_X9_62_prime256v1NID_secp384r1NID_secp521r1OPENSSL_EC_NAMED_CURVEDH_GENERATOR_2 r1   r%   r   r   {   sf     !NN !# !'$*!LMMNr1   r   )N)!
__future__r   r   r   r    r   _ffir	   r
   r   _typesr   _libcrypto_cffir   r   r   r   r   _libcrypto_ctypes__all__r    r"   ERR_load_crypto_stringsOPENSSL_configr   OSSL_PROVIDER_availableencodeOSSL_PROVIDER_loadr&   r   r   r   rW   r1   r%   <module>rd      s    R R  C C 5F?   	)  F"%I%%' 	       U"(y((1IJ$	$$TVX__W-EF#( ,"5>, r1   