U
    c                  
   @   s   d dl mZmZmZmZ ddlmZ ddlmZ ddl	m
Z
 d dlZddgZe Zejd	krhed
 ed zedZeee W n> ek
r Z z eeddkre
d W 5 dZ[X Y nX dd ZdS )    )unicode_literalsdivisionabsolute_importprint_function   )register_ffi)str_cls)LibraryNotFoundErrorNadvapi32	get_error)r   	   Tao  
    typedef HANDLE HCRYPTPROV;
    typedef HANDLE HCRYPTKEY;
    typedef HANDLE HCRYPTHASH;
    typedef unsigned int ALG_ID;

    typedef struct _CRYPTOAPI_BLOB {
        DWORD cbData;
        BYTE  *pbData;
    } CRYPT_INTEGER_BLOB, CRYPT_OBJID_BLOB, CRYPT_DER_BLOB, CRYPT_ATTR_BLOB;

    typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
        LPSTR            pszObjId;
        CRYPT_OBJID_BLOB Parameters;
    } CRYPT_ALGORITHM_IDENTIFIER;

    typedef struct _CRYPT_BIT_BLOB {
        DWORD cbData;
        BYTE  *pbData;
        DWORD cUnusedBits;
    } CRYPT_BIT_BLOB;

    typedef struct _CERT_PUBLIC_KEY_INFO {
        CRYPT_ALGORITHM_IDENTIFIER Algorithm;
        CRYPT_BIT_BLOB             PublicKey;
    } CERT_PUBLIC_KEY_INFO;

    typedef struct _CRYPT_ATTRIBUTE {
        LPSTR           pszObjId;
        DWORD           cValue;
        CRYPT_ATTR_BLOB *rgValue;
    } CRYPT_ATTRIBUTE;

    typedef struct _CRYPT_ATTRIBUTES {
        DWORD           cAttr;
        CRYPT_ATTRIBUTE *rgAttr;
    } CRYPT_ATTRIBUTES;

    typedef struct _CRYPT_PRIVATE_KEY_INFO {
        DWORD                      Version;
        CRYPT_ALGORITHM_IDENTIFIER Algorithm;
        CRYPT_DER_BLOB             PrivateKey;
        CRYPT_ATTRIBUTES           *pAttributes;
    } CRYPT_PRIVATE_KEY_INFO;

    typedef struct _PUBLICKEYSTRUC {
        BYTE   bType;
        BYTE   bVersion;
        WORD   reserved;
        ALG_ID aiKeyAlg;
    } BLOBHEADER, PUBLICKEYSTRUC;

    typedef struct _DSSPUBKEY {
        DWORD magic;
        DWORD bitlen;
    } DSSPUBKEY;

    typedef struct _DSSBLOBHEADER {
        PUBLICKEYSTRUC  publickeystruc;
        DSSPUBKEY dsspubkey;
    } DSSBLOBHEADER;

    typedef struct _RSAPUBKEY {
        DWORD magic;
        DWORD bitlen;
        DWORD pubexp;
    } RSAPUBKEY;

    typedef struct _RSABLOBHEADER {
        PUBLICKEYSTRUC  publickeystruc;
        RSAPUBKEY rsapubkey;
    } RSABLOBHEADER;

    typedef struct _PLAINTEXTKEYBLOB {
        BLOBHEADER hdr;
        DWORD      dwKeySize;
        // rgbKeyData omitted since it is a flexible array member
    } PLAINTEXTKEYBLOB;

    typedef struct _DSSSEED {
        DWORD counter;
        BYTE  seed[20];
    } DSSSEED;

    BOOL CryptAcquireContextW(HCRYPTPROV *phProv, LPCWSTR pszContainer, LPCWSTR pszProvider,
                DWORD dwProvType, DWORD dwFlags);
    BOOL CryptReleaseContext(HCRYPTPROV hProv, DWORD dwFlags);

    BOOL CryptImportKey(HCRYPTPROV hProv, BYTE *pbData, DWORD dwDataLen,
                HCRYPTKEY hPubKey, DWORD dwFlags, HCRYPTKEY *phKey);
    BOOL CryptGenKey(HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY *phKey);
    BOOL CryptGetKeyParam(HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags);
    BOOL CryptSetKeyParam(HCRYPTKEY hKey, DWORD dwParam, void *pbData, DWORD dwFlags);
    BOOL CryptExportKey(HCRYPTKEY hKey, HCRYPTKEY hExpKey, DWORD dwBlobType,
                DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen);
    BOOL CryptDestroyKey(HCRYPTKEY hKey);

    BOOL CryptCreateHash(HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey,
                DWORD dwFlags, HCRYPTHASH *phHash);
    BOOL CryptHashData(HCRYPTHASH hHash, BYTE *pbData, DWORD dwDataLen, DWORD dwFlags);
    BOOL CryptSetHashParam(HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, DWORD dwFlags);
    BOOL CryptSignHashW(HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR sDescription,
                DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen);
    BOOL CryptVerifySignatureW(HCRYPTHASH hHash, BYTE *pbSignature, DWORD dwSigLen,
                HCRYPTKEY hPubKey, LPCWSTR sDescription, DWORD dwFlags);
    BOOL CryptDestroyHash(HCRYPTHASH hHash);

    BOOL CryptEncrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags,
                BYTE *pbData, DWORD *pdwDataLen, DWORD dwBufLen);
    BOOL CryptDecrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags,
                BYTE *pbData, DWORD *pdwDataLen);
zadvapi32.dllzcannot load libraryzadvapi32.dll could not be foundc                   C   s   t  S )N)ffiZgetwinerror r   r   @/tmp/pip-unpacked-wheel-c04l8219/oscrypto/_win/_advapi32_cffi.pyr      s    )
__future__r   r   r   r   Z_ffir   _typesr   errorsr	   Zcffi__all__ZFFIr   __version_info__Zset_unicodeZcdefdlopenr
   OSErrorefindr   r   r   r   r   <module>   s&   


r
