U
    ;ßôgþ  ã                   @   sì   d dl mZmZmZmZ d dlZddlmZ ddl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 nddlmZmZ dddgZe ¡ Zed  ed fZddd„Zdd„ Zdd„ ZG dd„ dƒZedkrède_dS )é    )Úunicode_literalsÚdivisionÚabsolute_importÚprint_functionNé   )Úffié   )Ú_try_decode)ÚSignatureError)ÚnewÚunwrapÚnull)Ústr_clsZcffi)Úadvapi32Ú	get_errorr   ÚAdvapi32ConstÚhandle_errorTc                 C   sª   | t jkrt j}n| t jkr$t j}ntd|  ƒ‚|s>| t jkrLtƒ }t j}nt j}t j	}t
tdƒ}t ||| ||¡}|sštƒ d t jkršt ||| |d¡}t|ƒ t|ƒS )NzInvalid provider specified: %szHCRYPTPROV *r   )r   ÚMS_ENH_RSA_AES_PROVÚPROV_RSA_AESÚMS_ENH_DSS_DH_PROVÚPROV_DSS_DHÚ
ValueErrorr   ÚCRYPT_VERIFYCONTEXTÚCONTAINER_NAMEÚCRYPT_NEWKEYSETr   r   ZCryptAcquireContextWr   Ú
NTE_EXISTSr   r   )ZproviderZverify_onlyZprovider_typeZcontainer_nameÚflagsZcontext_handle_pointerÚres© r   ú;/tmp/pip-unpacked-wheel-x1gypflw/oscrypto/_win/_advapi32.pyÚopen_context_handle   s8    


ûûr    c                 C   s   t  | d¡}t|ƒ d S )Nr   )r   ZCryptReleaseContextr   )Úhandler   r   r   r   Úclose_context_handleD   s    r"   c                 C   sB   | rdS t ƒ \}}|tjkr$tdƒ‚t|tƒs6t|ƒ}t|ƒ‚dS )zÎ
    Extracts the last Windows error message into a python unicode string

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

    :return:
        A unicode string error message
    NzSignature is invalid)r   r   ÚNTE_BAD_SIGNATUREr
   Ú
isinstancer   r	   ÚOSError)ÚresultÚcodeZerror_stringr   r   r   r   I   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)S )*r   zoscrypto temporary DSS keyseté   é   é   é,   é(   é   z@Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Providerz5Microsoft Enhanced RSA and AES Cryptographic Providerr   l      ` i€  i€  i€  i€  i€  if  ih  if  i	f  if  if  if  if  i "  i $  i ¤  r   é   é   é   é   é   é@   i 	€i 	€iRSA1iRSA2iDSS1iDSS2N)1Ú__name__Ú
__module__Ú__qualname__r   r   r   ZX509_PUBLIC_KEY_INFOZPKCS_PRIVATE_KEY_INFOZX509_DSS_SIGNATUREZCRYPT_NO_SALTr   r   ZCRYPT_EXPORTABLEr   r   ZCALG_MD5Z	CALG_SHA1ZCALG_SHA_256ZCALG_SHA_384ZCALG_SHA_512ZCALG_RC2ZCALG_RC4ZCALG_DESZCALG_3DES_112Z	CALG_3DESZCALG_AES_128ZCALG_AES_192ZCALG_AES_256ZCALG_DSS_SIGNZCALG_RSA_SIGNZCALG_RSA_KEYXZCRYPT_MODE_CBCZPKCS5_PADDINGZCUR_BLOB_VERSIONZPUBLICKEYBLOBZPRIVATEKEYBLOBZPLAINTEXTKEYBLOBZKP_IVZ
KP_PADDINGZKP_MODEZKP_EFFECTIVE_KEYLENZ
CRYPT_OAEPr#   r   ZAT_SIGNATUREZRSA1ZRSA2ZDSS1ZDSS2r   r   r   r   r   b   s\   )é   r   zAMicrosoft Enhanced RSA and AES Cryptographic Provider (Prototype))T)Ú
__future__r   r   r   r   ÚsysÚ r   Ú_decoder	   Úerrorsr
   Ú_ffir   r   r   Ú_typesr   Z_advapi32_cffir   r   Z_advapi32_ctypesÚ__all__ÚgetwindowsversionZ_gwvZ_win_version_infor    r"   r   r   r   r   r   r   r   Ú<module>   s*   
ý
'A