
    Bwg                         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	Zd
 Zd Z G d d      Zy)    )unicode_literalsdivisionabsolute_importprint_function   )ffi)newnullunwrapcffi   )bcrypt)r   BcryptConstclose_alg_handlehandle_erroropen_alg_handlec                     t        t        d      }t        j                  || t               |      }t	        |       t        |      S )NzBCRYPT_ALG_HANDLE *)r	   r   BCryptOpenAlgorithmProviderr
   r   r   )constantflagshandle_pointerress       I/var/www/horilla/myenv/lib/python3.12/site-packages/oscrypto/_win/_cng.pyr   r      s:    !67N

,
,^Xtvu
UC.!!    c                 F    t        j                  | d      }t        |       y )Nr   )r   BCryptCloseAlgorithmProviderr   )handler   s     r   r   r      s    

-
-fa
8Cr   c                 T   | dk(  ry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| z  }| | |v r|d||    z   z  }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outputs      r   r   r   #   s     A~ 	$$&@,,.h$$m))+L,,.V((*H++-[..0oH &	1Fh!6$),,,
&/r   c                      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@y7)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_PADDING r   r   r   r   F   sq    #"6-!5+.,-+'(",()!+", ! !MM %/"&0#%/"&0#%/"&0#N!)!&)%(!+!+$.!(! ON" *     ".".".  "&&&",%r   r   N)r   )
__future__r   r   r   r    r   _ffir	   r
   r   	_cng_cffir   _cng_ctypes__all__r   r   r   r   r   r   r   <module>r      sF    R R  $ $5F?!#"
 FN& N&r   