o
    •Àvhþ  ã                   @   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 g d¢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rude_dS dS )é    )Úunicode_literalsÚdivisionÚabsolute_importÚprint_functionNé   )Úffié   )Ú_try_decode)ÚSignatureError)ÚnewÚunwrapÚnull)Ústr_clsÚcffi)Úadvapi32Ú	get_error)r   Ú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r&tƒ }t j}nt j}t j	}t
tdƒ}t ||| ||¡}|sMtƒ d t jkrMt ||| |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   ÚCryptAcquireContextWr   Ú
NTE_EXISTSr   r   )ÚproviderÚverify_onlyÚprovider_typeÚcontainer_nameÚflagsÚcontext_handle_pointerÚres© r%   úU/var/www/html/hyperkenya/venv/lib/python3.10/site-packages/oscrypto/_win/_advapi32.pyÚopen_context_handle   s8   


ûûr'   c                 C   s   t  | d¡}t|ƒ d S )Nr   )r   ÚCryptReleaseContextr   )Úhandler$   r%   r%   r&   Úclose_context_handleD   s   r*   c                 C   s>   | rdS t ƒ \}}|tjkrtdƒ‚t|tƒst|ƒ}t|ƒ‚)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ÚcodeÚerror_stringr%   r%   r&   r   I   s   


r   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   ÚX509_PUBLIC_KEY_INFOÚPKCS_PRIVATE_KEY_INFOÚX509_DSS_SIGNATUREÚCRYPT_NO_SALTr   r   ÚCRYPT_EXPORTABLEr   r   ÚCALG_MD5Ú	CALG_SHA1ÚCALG_SHA_256ÚCALG_SHA_384ÚCALG_SHA_512ÚCALG_RC2ÚCALG_RC4ÚCALG_DESÚCALG_3DES_112Ú	CALG_3DESÚCALG_AES_128ÚCALG_AES_192ÚCALG_AES_256ÚCALG_DSS_SIGNÚCALG_RSA_SIGNÚCALG_RSA_KEYXÚCRYPT_MODE_CBCÚPKCS5_PADDINGÚCUR_BLOB_VERSIONÚPUBLICKEYBLOBÚPRIVATEKEYBLOBÚPLAINTEXTKEYBLOBÚKP_IVÚ
KP_PADDINGÚKP_MODEÚKP_EFFECTIVE_KEYLENÚ
CRYPT_OAEPr+   r   ÚAT_SIGNATUREÚRSA1ÚRSA2ÚDSS1ÚDSS2r%   r%   r%   r&   r   b   s^    r   )é   r   zAMicrosoft Enhanced RSA and AES Cryptographic Provider (Prototype))T)Ú
__future__r   r   r   r   ÚsysÚ r   Ú_decoder	   Úerrorsr
   Ú_ffir   r   r   Ú_typesr   Ú_advapi32_cffir   r   Ú_advapi32_ctypesÚ__all__ÚgetwindowsversionÚ_gwvÚ_win_version_infor'   r*   r   r   r   r%   r%   r%   r&   Ú<module>   s(   

'A
þ