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
 eƒ dkrPddlmZ nddlmZ dd	d
ddgZddd„Zdd
„ Zdd„ ZG dd	„ d	ƒZdS )é    )Úunicode_literalsÚdivisionÚabsolute_importÚprint_functioné   )Úffi)ÚnewÚnullÚunwrapZcffié   )Úbcryptr   ÚBcryptConstÚclose_alg_handleÚhandle_errorÚopen_alg_handlec                 C   s,   t tdƒ}t || tƒ |¡}t|ƒ t|ƒS )NzBCRYPT_ALG_HANDLE *)r   r   ZBCryptOpenAlgorithmProviderr	   r   r
   )ZconstantÚflagsZhandle_pointerÚres© r   ú6/tmp/pip-unpacked-wheel-x1gypflw/oscrypto/_win/_cng.pyr      s    
c                 C   s   t  | d¡}t|ƒ d S )Nr   )r   ZBCryptCloseAlgorithmProviderr   )Úhandler   r   r   r   r      s    c                 C   st   | dkrdS t jdt jdt jdt jdt jdt jdt jd	t jd
i}d|  }| dk	rh| |krh|d||   7 }t	|ƒ‚dS )zÉ
    Extracts the last Windows error message into a python unicode string

    :param error_num:
        The number to get the error string for

    :return:
        A unicode string error message
    r   NzThe object was not foundz8An invalid parameter was passed to a service or functionz_Not enough virtual memory or paging file quota is available to complete the specified operationzAn invalid HANDLE was specifiedz&The cryptographic signature is invalidzThe request is not supportedz,The buffer is too small to contain the entryz=The size of the buffer is invalid for the specified operationzNTSTATUS error 0x%0.2Xz: )
r   ÚSTATUS_NOT_FOUNDÚSTATUS_INVALID_PARAMETERÚSTATUS_NO_MEMORYÚSTATUS_INVALID_HANDLEÚSTATUS_INVALID_SIGNATUREÚSTATUS_NOT_SUPPORTEDÚSTATUS_BUFFER_TOO_SMALLÚSTATUS_INVALID_BUFFER_SIZEÚOSError)Z	error_numÚmessagesÚoutputr   r   r   r   #   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/Z7d0Z8d1Z9d2Z:d3Z;d4Z<d5Z=d6Z>dZ?dZ@d7S )8r   ZRNGZ	KeyLengthZEffectiveKeyLengthZRSAPRIVATEBLOBZRSAFULLPRIVATEBLOBZRSAPUBLICBLOBZDSAPRIVATEBLOBZDSAPUBLICBLOBZECCPRIVATEBLOBZECCPUBLICBLOBiRSA1iRSA2iRSA3iDSPBiDSPViDPB2iDPV2r   r   r   é   iECS1iECS2iECS3iECS4iECS5iECS6l   %   l       l       l       l       l   »    l   #    l      iKDBMZKeyDataBlobé   Ú3DESZ3DES_112ÚAESZDESÚRC2ÚRC4ÚDSAZ
ECDSA_P256Z
ECDSA_P384Z
ECDSA_P521ÚRSAÚMD5ÚSHA1ÚSHA256ÚSHA384ÚSHA512N)AÚ__name__Ú
__module__Ú__qualname__ZBCRYPT_RNG_ALGORITHMZBCRYPT_KEY_LENGTHZBCRYPT_EFFECTIVE_KEY_LENGTHZBCRYPT_RSAPRIVATE_BLOBZBCRYPT_RSAFULLPRIVATE_BLOBZBCRYPT_RSAPUBLIC_BLOBZBCRYPT_DSA_PRIVATE_BLOBZBCRYPT_DSA_PUBLIC_BLOBZBCRYPT_ECCPRIVATE_BLOBZBCRYPT_ECCPUBLIC_BLOBZBCRYPT_RSAPUBLIC_MAGICZBCRYPT_RSAPRIVATE_MAGICZBCRYPT_RSAFULLPRIVATE_MAGICZBCRYPT_DSA_PUBLIC_MAGICZBCRYPT_DSA_PRIVATE_MAGICZBCRYPT_DSA_PUBLIC_MAGIC_V2ZBCRYPT_DSA_PRIVATE_MAGIC_V2ZDSA_HASH_ALGORITHM_SHA1ZDSA_HASH_ALGORITHM_SHA256ZDSA_HASH_ALGORITHM_SHA512ZDSA_FIPS186_2ZDSA_FIPS186_3ZBCRYPT_NO_KEY_VALIDATIONZBCRYPT_ECDSA_PUBLIC_P256_MAGICZBCRYPT_ECDSA_PRIVATE_P256_MAGICZBCRYPT_ECDSA_PUBLIC_P384_MAGICZBCRYPT_ECDSA_PRIVATE_P384_MAGICZBCRYPT_ECDSA_PUBLIC_P521_MAGICZBCRYPT_ECDSA_PRIVATE_P521_MAGICZSTATUS_SUCCESSr   r   r   r   r   r   r   r   ZBCRYPT_KEY_DATA_BLOB_MAGICZBCRYPT_KEY_DATA_BLOB_VERSION1ZBCRYPT_KEY_DATA_BLOBZBCRYPT_PAD_PKCS1ZBCRYPT_PAD_OAEPZBCRYPT_PAD_PSSZBCRYPT_3DES_ALGORITHMZBCRYPT_3DES_112_ALGORITHMZBCRYPT_AES_ALGORITHMZBCRYPT_DES_ALGORITHMZBCRYPT_RC2_ALGORITHMZBCRYPT_RC4_ALGORITHMZBCRYPT_DSA_ALGORITHMZBCRYPT_ECDSA_P256_ALGORITHMZBCRYPT_ECDSA_P384_ALGORITHMZBCRYPT_ECDSA_P521_ALGORITHMZBCRYPT_RSA_ALGORITHMZBCRYPT_MD5_ALGORITHMZBCRYPT_SHA1_ALGORITHMZBCRYPT_SHA256_ALGORITHMZBCRYPT_SHA384_ALGORITHMZBCRYPT_SHA512_ALGORITHMZBCRYPT_ALG_HANDLE_HMAC_FLAGZBCRYPT_BLOCK_PADDINGr   r   r   r   r   F   s|   N)r   )Ú
__future__r   r   r   r   Ú r   Ú_ffir   r	   r
   Z	_cng_cffir   Z_cng_ctypesÚ__all__r   r   r   r   r   r   r   r   Ú<module>   s   
û	
#