o
    Œõ±j—  ã                   @   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r(ddlmZ nddlmZ g d¢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ÚunwrapÚcffié   )Úbcrypt)r   Ú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   ÚBCryptOpenAlgorithmProviderr	   r   r
   )ÚconstantÚflagsÚhandle_pointerÚres© r   ú…/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/oscrypto/_win/_cng.pyr      s   
r   c                 C   s   t  | d¡}t|ƒ d S )Nr   )r   ÚBCryptCloseAlgorithmProviderr   )Úhandler   r   r   r   r      s   r   c                 C   sp   | 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ur4| |v r4|d||   7 }t	|ƒ‚)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)Ú	error_numÚmessagesÚoutputr   r   r   r   #   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)Z1d*Z2d+Z3d,Z4d-Z5d.Z6d/Z7d0Z8d1Z9d2Z:d3Z;d4Z<d5Z=d6Z>dZ?dZ@d7S )8r   ÚRNGÚ	KeyLengthÚEffectiveKeyLengthÚRSAPRIVATEBLOBÚRSAFULLPRIVATEBLOBÚRSAPUBLICBLOBÚDSAPRIVATEBLOBÚDSAPUBLICBLOBÚECCPRIVATEBLOBÚECCPUBLICBLOBiRSA1iRSA2iRSA3iDSPBiDSPViDPB2iDPV2r   r   r   é   iECS1iECS2iECS3iECS4iECS5iECS6l   %   l       l       l       l       l   »    l   #    l      iKDBMÚKeyDataBlobé   Ú3DESÚ3DES_112ÚAESÚDESÚRC2ÚRC4ÚDSAÚ
ECDSA_P256Ú
ECDSA_P384Ú
ECDSA_P521ÚRSAÚMD5ÚSHA1ÚSHA256ÚSHA384ÚSHA512N)AÚ__name__Ú
__module__Ú__qualname__ÚBCRYPT_RNG_ALGORITHMÚBCRYPT_KEY_LENGTHÚBCRYPT_EFFECTIVE_KEY_LENGTHÚBCRYPT_RSAPRIVATE_BLOBÚBCRYPT_RSAFULLPRIVATE_BLOBÚBCRYPT_RSAPUBLIC_BLOBÚBCRYPT_DSA_PRIVATE_BLOBÚBCRYPT_DSA_PUBLIC_BLOBÚBCRYPT_ECCPRIVATE_BLOBÚBCRYPT_ECCPUBLIC_BLOBÚBCRYPT_RSAPUBLIC_MAGICÚBCRYPT_RSAPRIVATE_MAGICÚBCRYPT_RSAFULLPRIVATE_MAGICÚBCRYPT_DSA_PUBLIC_MAGICÚBCRYPT_DSA_PRIVATE_MAGICÚBCRYPT_DSA_PUBLIC_MAGIC_V2ÚBCRYPT_DSA_PRIVATE_MAGIC_V2ÚDSA_HASH_ALGORITHM_SHA1ÚDSA_HASH_ALGORITHM_SHA256ÚDSA_HASH_ALGORITHM_SHA512ÚDSA_FIPS186_2ÚDSA_FIPS186_3ÚBCRYPT_NO_KEY_VALIDATIONÚBCRYPT_ECDSA_PUBLIC_P256_MAGICÚBCRYPT_ECDSA_PRIVATE_P256_MAGICÚBCRYPT_ECDSA_PUBLIC_P384_MAGICÚBCRYPT_ECDSA_PRIVATE_P384_MAGICÚBCRYPT_ECDSA_PUBLIC_P521_MAGICÚBCRYPT_ECDSA_PRIVATE_P521_MAGICÚSTATUS_SUCCESSr   r   r   r   r   r    r!   r"   ÚBCRYPT_KEY_DATA_BLOB_MAGICÚBCRYPT_KEY_DATA_BLOB_VERSION1ÚBCRYPT_KEY_DATA_BLOBÚBCRYPT_PAD_PKCS1ÚBCRYPT_PAD_OAEPÚBCRYPT_PAD_PSSÚBCRYPT_3DES_ALGORITHMÚBCRYPT_3DES_112_ALGORITHMÚBCRYPT_AES_ALGORITHMÚBCRYPT_DES_ALGORITHMÚBCRYPT_RC2_ALGORITHMÚBCRYPT_RC4_ALGORITHMÚBCRYPT_DSA_ALGORITHMÚBCRYPT_ECDSA_P256_ALGORITHMÚBCRYPT_ECDSA_P384_ALGORITHMÚBCRYPT_ECDSA_P521_ALGORITHMÚBCRYPT_RSA_ALGORITHMÚBCRYPT_MD5_ALGORITHMÚBCRYPT_SHA1_ALGORITHMÚBCRYPT_SHA256_ALGORITHMÚBCRYPT_SHA384_ALGORITHMÚBCRYPT_SHA512_ALGORITHMÚBCRYPT_ALG_HANDLE_HMAC_FLAGÚBCRYPT_BLOCK_PADDINGr   r   r   r   r   F   s~    r   N)r   )Ú
__future__r   r   r   r   Ú r   Ú_ffir   r	   r
   Ú	_cng_cffir   Ú_cng_ctypesÚ__all__r   r   r   r   r   r   r   r   Ú<module>   s   

	#