U
    ;g                     @   s   d dl mZmZmZmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ e dkrddd	lmZmZ ndd	lmZmZ d
ddgZddd
ZG dd dZdS )    )unicode_literalsdivisionabsolute_importprint_function   )ffi   )_try_decode)TLSError)str_clsZcffi)secur32	get_errorhandle_errorr   Secur32ConstNc                 C   s~   | dkrdS | t jkrtd| t jkr0td| t jkrBtdt \}}t|ts^t|}|dkrjt	}|d|  | dS )a5  
    Extracts the last Windows error message into a python unicode string

    :param result:
        A function result, 0 or None indicates failure

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

    :return:
        A unicode string error message
    r   Nz"A packet was received out of orderzA packet was received alteredzThe TLS session expiredzSECURITY_STATUS error 0x%0.2X: )
r   SEC_E_OUT_OF_SEQUENCEr
   SEC_E_MESSAGE_ALTEREDSEC_E_CONTEXT_EXPIREDr   
isinstancer   r	   OSError)resultZexception_class_Zerror_string r   :/tmp/pip-unpacked-wheel-x1gypflw/oscrypto/_win/_secur32.pyr      s    




c                   @   s,  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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Z'dZ(dZ)dZ*dZ+d Z,dZ-d!Z.dZ/dZ0d"Z1d#Z2d$Z3d%Z4dZ5dZ6dZ7d&Z8d'Z9d(Z:d)Z;d*Z<d+Z=d,Z>d-Z?d.Z@d/ZAd0ZBd1ZCd2ZDd3ZEd4ZFd5ZGd6ZHd7ZId8ZJd9S ):r      r   z,Microsoft Unified Security Protocol Provider       i  @    r   i	 i	 i!	 l     l     i1 l     l     l   ]  l   "  l   %  l   (  l   &  l     l   !  i 	    i   i                  r   Z   S   i   i   if  if  if  ih  if  if  i  i  i  i  i  i  i  i  i  i   i $  i"  i "  N)K__name__
__module____qualname__ZSCHANNEL_CRED_VERSIONZSECPKG_CRED_OUTBOUNDZ
UNISP_NAMEZSCH_CRED_MANUAL_CRED_VALIDATIONZSCH_CRED_AUTO_CRED_VALIDATIONZSCH_USE_STRONG_CRYPTOZSCH_CRED_NO_DEFAULT_CREDSZSECBUFFER_VERSIONZSEC_E_OKZSEC_I_CONTINUE_NEEDEDZSEC_I_CONTEXT_EXPIREDZSEC_I_RENEGOTIATEZSEC_E_INCOMPLETE_MESSAGEZSEC_E_INVALID_TOKENr   r   r   ZSEC_E_INVALID_PARAMETERZSEC_E_WRONG_PRINCIPALZSEC_E_UNTRUSTED_ROOTZSEC_E_CERT_EXPIREDZSEC_E_ILLEGAL_MESSAGEZSEC_E_INTERNAL_ERRORZSEC_E_BUFFER_TOO_SMALLZSEC_I_INCOMPLETE_CREDENTIALSZISC_REQ_REPLAY_DETECTZISC_REQ_SEQUENCE_DETECTZISC_REQ_CONFIDENTIALITYZISC_REQ_ALLOCATE_MEMORYZISC_REQ_INTEGRITYZISC_REQ_STREAMZISC_REQ_USE_SUPPLIED_CREDSZISC_RET_REPLAY_DETECTZISC_RET_SEQUENCE_DETECTZISC_RET_CONFIDENTIALITYZISC_RET_ALLOCATED_MEMORYZISC_RET_INTEGRITYZISC_RET_STREAMZSECBUFFER_ALERTZSECBUFFER_STREAM_HEADERZSECBUFFER_STREAM_TRAILERZSECBUFFER_EXTRAZSECBUFFER_TOKENZSECBUFFER_DATAZSECBUFFER_EMPTYZSECPKG_ATTR_STREAM_SIZESZSECPKG_ATTR_CONNECTION_INFOZSECPKG_ATTR_REMOTE_CERT_CONTEXTZSP_PROT_TLS1_2_CLIENTZSP_PROT_TLS1_1_CLIENTZSP_PROT_TLS1_CLIENTZSP_PROT_SSL3_CLIENTZSP_PROT_SSL2_CLIENTZCALG_AES_256ZCALG_AES_128Z	CALG_3DESZCALG_RC4ZCALG_RC2ZCALG_DESZCALG_MD5Z	CALG_SHA1ZCALG_SHA256ZCALG_SHA384ZCALG_SHA512Z
CALG_DH_SFZCALG_DH_EPHEMZ	CALG_ECDHZ
CALG_ECDHEZCALG_RSA_KEYXZCALG_RSA_SIGNZ
CALG_ECDSAZCALG_DSS_SIGNr   r   r   r   r   ;   s   )N)
__future__r   r   r   r    r   _decoder	   errorsr
   _typesr   Z_secur32_cffir   r   Z_secur32_ctypes__all__r   r   r   r   r   r   <module>   s   

%