U
    ;g                     @   s  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rdddlmZmZmZ nddlmZmZmZ d	d
dddddgZdZddgZedk re  ee
  dZedkree
 ddree
 dd ndZdd Zddd	Zdd ZG dd dZ dS )    )unicode_literalsdivisionabsolute_importprint_function   )ffi)buffer_from_bytesbyte_string_from_buffernull)str_clsZ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                 C   sf   zt | tW S  tk
rX   tD ]2}zt | |ddW    Y S  tk
rP   Y q X q Y nX t | ddS )Nstrict)errorsreplace)r   	_encodingUnicodeDecodeError_fallback_encodings)valueencoding r"   @/tmp/pip-unpacked-wheel-x1gypflw/oscrypto/_openssl/_libcrypto.py_try_decode5   s    r$   Nc                 C   sL   | dkrdS |dkrt }t }td}t|| t|}|t|dS )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   ZERR_error_stringr	   r$   )resultZexception_classZ	error_numbufferZerror_stringr"   r"   r#   r   F   s    c                  C   sh   t  } tdk r>t| d? d@ }t| d? d@ }t| d@ }n t| d? d@ }d}t| d@ }|||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reasonr"   r"   r#   r   e   s    c                   @   sP   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dS )r   r   r   r      i     i        i  i  i  r   N)__name__
__module____qualname__ZEVP_CTRL_SET_RC2_KEY_BITSSSLEAY_VERSIONZRSA_PKCS1_PADDINGZRSA_NO_PADDINGZRSA_PKCS1_OAEP_PADDINGZEVP_MD_CTX_FLAG_PSS_MDLENZEVP_PKEY_CTRL_RSA_PADDINGZRSA_PKCS1_PSS_PADDINGZEVP_PKEY_CTRL_RSA_PSS_SALTLENEVP_PKEY_RSAZEVP_PKEY_OP_SIGNZEVP_PKEY_OP_VERIFYZNID_X9_62_prime256v1ZNID_secp384r1ZNID_secp521r1ZOPENSSL_EC_NAMED_CURVEZDH_GENERATOR_2r"   r"   r"   r#   r   {   s"   )N)!
__future__r   r   r   r    r   _ffir   r	   r
   _typesr   Z_libcrypto_cffir   r   r   r   r   Z_libcrypto_ctypes__all__r   r   ZERR_load_crypto_stringsZOPENSSL_configr   ZOSSL_PROVIDER_availableencodeZOSSL_PROVIDER_loadr$   r   r   r   r"   r"   r"   r#   <module>   s8   

