/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */

#ifndef _INC_BCRYPT
#define _INC_BCRYPT
#if (_WIN32_WINNT >= 0x0600)

#ifndef _NTDEF_
  typedef LONG NTSTATUS,*PNTSTATUS;
#endif

#define BCRYPT_CIPHER_OPERATION                 0x00000001
#define BCRYPT_HASH_OPERATION                   0x00000002
#define BCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION  0x00000004
#define BCRYPT_SECRET_AGREEMENT_OPERATION       0x00000008
#define BCRYPT_SIGNATURE_OPERATION              0x00000010
#define BCRYPT_RNG_OPERATION                    0x00000020

#define BCRYPT_KEY_DATA_BLOB_MAGIC              0x4d42444b
#define BCRYPT_KEY_DATA_BLOB_VERSION1           1

#define BCRYPT_DH_PARAMETERS_MAGIC              0x4d504844

#define BCRYPT_DSA_PUBLIC_MAGIC                 0x42505344
#define BCRYPT_DSA_PRIVATE_MAGIC                0x56505344

#define BCRYPT_DSA_PARAMETERS_MAGIC             0x4d505344

#define BCRYPT_ALGORITHM_NAME                   L"AlgorithmName"
#define BCRYPT_AUTH_TAG_LENGTH                  L"AuthTagLength"
#define BCRYPT_BLOCK_LENGTH                     L"BlockLength"
#define BCRYPT_BLOCK_SIZE_LIST                  L"BlockSizeList"
#define BCRYPT_CHAINING_MODE                    L"ChainingMode"
#define BCRYPT_CHAIN_MODE_CBC                   L"ChainingModeCBC"
#define BCRYPT_CHAIN_MODE_CCM                   L"ChainingModeCCM"
#define BCRYPT_CHAIN_MODE_CFB                   L"ChainingModeCFB"
#define BCRYPT_CHAIN_MODE_ECB                   L"ChainingModeECB"
#define BCRYPT_CHAIN_MODE_GCM                   L"ChainingModeGCM"
#define BCRYPT_CHAIN_MODE_NA                    L"ChainingModeN/A"
#define BCRYPT_DH_PARAMETERS                    L"DHParameters"
#define BCRYPT_DSA_PARAMETERS                   L"DSAParameters"
#define BCRYPT_EFFECTIVE_KEY_LENGTH             L"EffectiveKeyLength"
#define BCRYPT_HASH_BLOCK_LENGTH                L"HashBlockLength"
#define BCRYPT_HASH_LENGTH                      L"HashDigestLength"
#define BCRYPT_HASH_OID_LIST                    L"HashOIDList"
#define BCRYPT_INITIALIZATION_VECTOR            L"IV"
#define BCRYPT_KEY_LENGTH                       L"KeyLength"
#define BCRYPT_KEY_LENGTHS                      L"KeyLengths"
#define BCRYPT_KEY_OBJECT_LENGTH                L"KeyObjectLength"
#define BCRYPT_KEY_STRENGTH                     L"KeyStrength"
#define BCRYPT_OBJECT_LENGTH                    L"ObjectLength"
#define BCRYPT_PADDING_SCHEMES                  L"PaddingSchemes"
#define BCRYPT_SUPPORTED_PAD_ROUTER             0x00000001
#define BCRYPT_SUPPORTED_PAD_PKCS1_ENC          0x00000002
#define BCRYPT_SUPPORTED_PAD_PKCS1_SIG          0x00000004
#define BCRYPT_SUPPORTED_PAD_OAEP               0x00000008
#define BCRYPT_SUPPORTED_PAD_PSS                0x00000010
#define BCRYPT_PROVIDER_HANDLE                  L"ProviderHandle"
#define BCRYPT_SIGNATURE_LENGTH                 L"SignatureLength"

#define KDF_HASH_ALGORITHM                      0
#define KDF_SECRET_PREPEND                      1
#define KDF_SECRET_APPEND                       2
#define KDF_HMAC_KEY                            3
#define KDF_TLS_PRF_LABEL                       4
#define KDF_TLS_PRF_SEED                        5
#define KDF_SECRET_HANDLE                       6

#define BCRYPT_KDF_HASH (L"HASH")
#define BCRYPT_KDF_HASH (L"HASH")
#define BCRYPT_KDF_TLS_PRF (L"TLS_PRF")
#define BCRYPT_KDF_SP80056A_CONCAT (L"SP800_56A_CONCAT")

#define CRYPT_ALL_FUNCTIONS 1
#define CRYPT_ALL_PROVIDERS 2

typedef LPVOID BCRYPT_KEY_HANDLE;
typedef LPVOID BCRYPT_ALG_HANDLE;
typedef LPVOID BCRYPT_HASH_HANDLE;
typedef LPVOID BCRYPT_SECRET_HANDLE;
typedef LPVOID BCRYPT_HANDLE;

typedef struct _BCRYPT_ALGORITHM_IDENTIFIER {
  LPWSTR pszName;
  ULONG  dwClass;
  ULONG  dwFlags;
} BCRYPT_ALGORITHM_IDENTIFIER;

typedef struct _BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO {
  ULONG     cbSize;
  ULONG     dwInfoVersion;
  PUCHAR    pbNonce;
  ULONG     cbNonce;
  PUCHAR    pbAuthData;
  ULONG     cbAuthData;
  PUCHAR    pbTag;
  ULONG     cbTag;
  PUCHAR    pbMacContext;
  ULONG     cbMacContext;
  ULONG     cbAAD;
  ULONGLONG cbData;
  ULONG     dwFlags;
} BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO, *PBCRYPT_AUTHENTICATED_CIPHER_MODE_INFO;

typedef struct _BCRYPT_DH_KEY_BLOB {
  ULONG dwMagic;
  ULONG cbKey;
} BCRYPT_DH_KEY_BLOB, *PBCRYPT_DH_KEY_BLOB;

typedef struct _BCRYPT_DH_PARAMETER_HEADER {
  ULONG cbLength;
  ULONG dwMagic;
  ULONG cbKeyLength;
} BCRYPT_DH_PARAMETER_HEADER;

typedef struct _BCRYPT_DSA_KEY_BLOB {
  ULONG dwMagic;
  ULONG cbKey;
  UCHAR Count[4];
  UCHAR Seed[20];
  UCHAR q[20];
} BCRYPT_DSA_KEY_BLOB, *PBCRYPT_DSA_KEY_BLOB;

typedef struct _BCRYPT_DSA_PARAMETER_HEADER {
  ULONG cbLength;
  ULONG dwMagic;
  ULONG cbKeyLength;
  UCHAR Count[4];
  UCHAR Seed[20];
  UCHAR q[20];
} BCRYPT_DSA_PARAMETER_HEADER, *PBCRYPT_DSA_PARAMETER_HEADER;

typedef struct _BCRYPT_ECCKEY_BLOB {
  ULONG Magic;
  ULONG cbKey;
} BCRYPT_ECCKEY_BLOB, *PBCRYPT_ECCKEY_BLOB;

typedef struct _BCRYPT_INTERFACE_VERSION {
  USHORT MajorVersion;
  USHORT MinorVersion;
} BCRYPT_INTERFACE_VERSION, *PBCRYPT_INTERFACE_VERSION;

typedef struct _BCRYPT_KEY_BLOB {
  ULONG Magic;
} BCRYPT_KEY_BLOB;

typedef struct _BCRYPT_KEY_DATA_BLOB_HEADER {
  ULONG dwMagic;
  ULONG dwVersion;
  ULONG cbKeyData;
} BCRYPT_KEY_DATA_BLOB_HEADER, *PBCRYPT_KEY_DATA_BLOB_HEADER;

typedef struct __BCRYPT_KEY_LENGTHS_STRUCT {
  ULONG dwMinLength;
  ULONG dwMaxLength;
  ULONG dwIncrement;
} BCRYPT_KEY_LENGTHS_STRUCT, BCRYPT_AUTH_TAG_LENGTHS_STRUCT;

typedef struct _BCRYPT_OAEP_PADDING_INFO {
  LPCWSTR pszAlgId;
  PUCHAR  pbLabel;
  ULONG   cbLabel;
} BCRYPT_OAEP_PADDING_INFO;

typedef struct _BCRYPT_OID {
  ULONG  cbOID;
  PUCHAR pbOID;
} BCRYPT_OID;

typedef struct _BCRYPT_OID_LIST {
  ULONG      dwOIDCount;
  BCRYPT_OID *pOIDs;
} BCRYPT_OID_LIST;

typedef struct _BCRYPT_PKCS1_PADDING_INFO {
  LPCWSTR pszAlgId;
} BCRYPT_PKCS1_PADDING_INFO;

typedef struct _BCRYPT_PROVIDER_NAME {
  LPWSTR pszProviderName;
} BCRYPT_PROVIDER_NAME;

typedef struct _BCRYPT_PSS_PADDING_INFO {
  LPCWSTR pszAlgId;
  ULONG   cbSalt;
} BCRYPT_PSS_PADDING_INFO;

typedef struct _BCRYPT_RSAKEY_BLOB {
  ULONG Magic;
  ULONG BitLength;
  ULONG cbPublicExp;
  ULONG cbModulus;
  ULONG cbPrime1;
  ULONG cbPrime2;
} BCRYPT_RSAKEY_BLOB;

typedef struct _BCryptBuffer {
  ULONG cbBuffer;
  ULONG BufferType;
  PVOID pvBuffer;
} BCryptBuffer, *PBCryptBuffer;

typedef struct _BCryptBufferDesc {
  ULONG         ulVersion;
  ULONG         cBuffers;
  PBCryptBuffer pBuffers;
} BCryptBufferDesc, *PBCryptBufferDesc;

typedef struct _CRYPT_CONTEXTS {
  ULONG cContexts;
  PWSTR rgpszContexts;
} CRYPT_CONTEXTS, *PCRYPT_CONTEXTS;

typedef struct _CRYPT_CONTEXT_CONFIG {
  ULONG dwFlags;
} CRYPT_CONTEXT_CONFIG, *PCRYPT_CONTEXT_CONFIG;

typedef struct _CRYPT_CONTEXT_FUNCTIONS {
  ULONG cFunctions;
  PWSTR rgpszFunctions;
} CRYPT_CONTEXT_FUNCTIONS, *PCRYPT_CONTEXT_FUNCTIONS;

typedef struct _CRYPT_CONTEXT_FUNCTION_CONFIG {
  ULONG dwFlags;
} CRYPT_CONTEXT_FUNCTION_CONFIG, *PCRYPT_CONTEXT_FUNCTION_CONFIG;

typedef struct _CRYPT_CONTEXT_FUNCTION_PROVIDERS {
  ULONG cProviders;
  PWSTR *rgpszProviders;
} CRYPT_CONTEXT_FUNCTION_PROVIDERS, *PCRYPT_CONTEXT_FUNCTION_PROVIDERS;

typedef struct _CRYPT_INTERFACE_REG {
  ULONG dwInterface;
  ULONG dwFlags;
  ULONG cFunctions;
  PWSTR *rgpszFunctions;
} CRYPT_INTERFACE_REG, *PCRYPT_INTERFACE_REG;

typedef struct _CRYPT_IMAGE_REG {
  PWSTR                pszImage;
  ULONG                cInterfaces;
  PCRYPT_INTERFACE_REG *rgpInterfaces;
} CRYPT_IMAGE_REG, *PCRYPT_IMAGE_REG;

typedef struct _CRYPT_IMAGE_REF {
  PWSTR pszImage;
  ULONG dwFlags;
} CRYPT_IMAGE_REF, *PCRYPT_IMAGE_REF;

typedef struct _CRYPT_PROPERTY_REF {
  PWSTR  pszProperty;
  ULONG  cbValue;
  PUCHAR pbValue;
} CRYPT_PROPERTY_REF, *PCRYPT_PROPERTY_REF;

typedef struct _CRYPT_PROVIDERS {
  ULONG cProviders;
  PWSTR *rgpszProviders;
} CRYPT_PROVIDERS, *PCRYPT_PROVIDERS;

typedef struct _CRYPT_PROVIDER_REG {
  ULONG            cAliases;
  PWSTR            *rgpszAliases;
  PCRYPT_IMAGE_REG pUM;
  PCRYPT_IMAGE_REG pKM;
} CRYPT_PROVIDER_REG, *PCRYPT_PROVIDER_REG;

typedef struct _CRYPT_PROVIDER_REF {
  ULONG               dwInterface;
  PWSTR               pszFunction;
  PWSTR               pszProvider;
  ULONG               cProperties;
  PCRYPT_PROPERTY_REF *rgpProperties;
  PCRYPT_IMAGE_REF    pUM;
  PCRYPT_IMAGE_REF    pKM;
} CRYPT_PROVIDER_REF, *PCRYPT_PROVIDER_REF;

typedef struct _CRYPT_PROVIDER_REFS {
  ULONG               cProviders;
  PCRYPT_PROVIDER_REF *rgpProviders;
} CRYPT_PROVIDER_REFS, *PCRYPT_PROVIDER_REFS;

NTSTATUS WINAPI BCryptAddContextFunction(
  ULONG dwTable,
  LPCWSTR pszContext,
  ULONG dwInterface,
  LPCWSTR pszFunction,
  ULONG dwPosition
);

NTSTATUS WINAPI BCryptCloseAlgorithmProvider(
  BCRYPT_ALG_HANDLE hAlgorithm,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptConfigureContext(
  ULONG dwTable,
  LPCWSTR pszContext,
  PCRYPT_CONTEXT_CONFIG pConfig
);

NTSTATUS WINAPI BCryptConfigureContextFunction(
  ULONG dwTable,
  LPCWSTR pszContext,
  ULONG dwInterface,
  LPCWSTR pszFunction,
  PCRYPT_CONTEXT_FUNCTION_CONFIG pConfig
);

NTSTATUS WINAPI BCryptCreateContext(
  ULONG dwTable,
  LPCWSTR pszContext,
  PCRYPT_CONTEXT_CONFIG pConfig
);

NTSTATUS WINAPI BCryptCreateHash(
  BCRYPT_ALG_HANDLE hAlgorithm,
  BCRYPT_HASH_HANDLE *phHash,
  PUCHAR pbHashObject,
  ULONG cbHashObject,
  PUCHAR pbSecret,
  ULONG cbSecret,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptDecrypt(
  BCRYPT_KEY_HANDLE hKey,
  PUCHAR pbInput,
  ULONG cbInput,
  VOID *pPaddingInfo,
  PUCHAR pbIV,
  ULONG cbIV,
  PUCHAR pbOutput,
  ULONG cbOutput,
  ULONG *pcbResult,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptDeleteContext(
  ULONG dwTable,
  LPCWSTR pszContext
);

NTSTATUS WINAPI BCryptDeriveKey(
  BCRYPT_SECRET_HANDLE hSharedSecret,
  LPCWSTR pwszKDF,
  BCryptBufferDesc *pParameterList,
  PUCHAR pbDerivedKey,
  ULONG cbDerivedKey,
  ULONG *pcbResult,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptDestroyHash(
  BCRYPT_HASH_HANDLE hHash
);

NTSTATUS WINAPI BCryptDestroyKey(
  BCRYPT_KEY_HANDLE hKey
);

NTSTATUS WINAPI BCryptDuplicateHash(
  BCRYPT_HASH_HANDLE hHash,
  BCRYPT_HASH_HANDLE *phNewHash,
  PUCHAR pbHashObject,
  ULONG cbHashObject,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptDuplicateKey(
  BCRYPT_KEY_HANDLE hKey,
  BCRYPT_KEY_HANDLE *phNewKey,
  PUCHAR pbKeyObject,
  ULONG cbKeyObject,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptEnumAlgorithms(
  ULONG dwAlgOperations,
  ULONG *pAlgCount,
  BCRYPT_ALGORITHM_IDENTIFIER **ppAlgList,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptEnumContexts(
  ULONG dwTable,
  ULONG *pcbBuffer,
  PCRYPT_CONTEXTS *ppBuffer
);

NTSTATUS WINAPI BCryptEnumContextFunctions(
  ULONG dwTable,
  LPCWSTR pszContext,
  ULONG dwInterface,
  ULONG *pcbBuffer,
  PCRYPT_CONTEXT_FUNCTIONS *ppBuffer
);

NTSTATUS WINAPI BCryptEnumContextFunctionProviders(
  ULONG dwTable,
  LPCWSTR pszContext,
  ULONG dwInterface,
  LPCWSTR pszFunction,
  ULONG *pcbBuffer,
  PCRYPT_CONTEXT_FUNCTION_PROVIDERS *ppBuffer
);

NTSTATUS WINAPI BCryptEnumProviders(
  LPCWSTR pszAlgId,
  ULONG *pImplCount,
  BCRYPT_PROVIDER_NAME **ppImplList,
  ULONG dwFlags
);
NTSTATUS WINAPI BCryptEnumRegisteredProviders(
  ULONG *pcbBuffer,
  PCRYPT_PROVIDERS *ppBuffer
);

NTSTATUS WINAPI BCryptEncrypt(
  BCRYPT_KEY_HANDLE hKey,
  PUCHAR pbInput,
  ULONG cbInput,
  VOID *pPaddingInfo,
  PUCHAR pbIV,
  ULONG cbIV,
  PUCHAR pbOutput,
  ULONG cbOutput,
  ULONG *pcbResult,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptExportKey(
  BCRYPT_KEY_HANDLE hKey,
  BCRYPT_KEY_HANDLE hExportKey,
  LPCWSTR pszBlobType,
  PUCHAR pbOutput,
  ULONG cbOutput,
  ULONG *pcbResult,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptFinishHash(
  BCRYPT_HASH_HANDLE hHash,
  PUCHAR pbOutput,
  ULONG cbOutput,
  ULONG dwFlags
);
VOID WINAPI BCryptFreeBuffer(
  PVOID pvBuffer
);

NTSTATUS WINAPI BCryptGenerateKeyPair(
  BCRYPT_ALG_HANDLE hAlgorithm,
  BCRYPT_KEY_HANDLE *phKey,
  ULONG dwLength,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptGenerateSymmetricKey(
  BCRYPT_ALG_HANDLE hAlgorithm,
  BCRYPT_KEY_HANDLE *phKey,
  PUCHAR pbKeyObject,
  ULONG cbKeyObject,
  PUCHAR pbSecret,
  ULONG cbSecret,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptGenRandom(
  BCRYPT_ALG_HANDLE hAlgorithm,
  PUCHAR pbBuffer,
  ULONG cbBuffer,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptGetFipsAlgorithmMode(
  BOOLEAN *pfEnabled
);

NTSTATUS WINAPI BCryptGetProperty(
  BCRYPT_HANDLE hObject,
  LPCWSTR pszProperty,
  PUCHAR pbOutput,
  ULONG cbOutput,
  ULONG *pcbResult,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptHashData(
  BCRYPT_HASH_HANDLE hHash,
  PUCHAR pbInput,
  ULONG cbInput,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptImportKey(
  BCRYPT_ALG_HANDLE hAlgorithm,
  BCRYPT_KEY_HANDLE hImportKey,
  LPCWSTR pszBlobType,
  BCRYPT_KEY_HANDLE *phKey,
  PUCHAR pbKeyObject,
  ULONG cbKeyObject,
  PUCHAR pbInput,
  ULONG cbInput,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptImportKeyPair(
  BCRYPT_ALG_HANDLE hAlgorithm,
  BCRYPT_KEY_HANDLE hImportKey,
  LPCWSTR pszBlobType,
  BCRYPT_KEY_HANDLE *phKey,
  PUCHAR pbInput,
  ULONG cbInput,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptFinalizeKeyPair(
  BCRYPT_KEY_HANDLE hKey,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptOpenAlgorithmProvider(
  BCRYPT_ALG_HANDLE *phAlgorithm,
  LPCWSTR pszAlgId,
  LPCWSTR pszImplementation,
  DWORD dwFlags
);

NTSTATUS WINAPI BCryptQueryContextConfiguration(
  ULONG dwTable,
  LPCWSTR pszContext,
  ULONG *pcbBuffer,
  PCRYPT_CONTEXT_CONFIG *ppBuffer
);

NTSTATUS WINAPI BCryptQueryContextFunctionConfiguration(
  ULONG dwTable,
  LPCWSTR pszContext,
  ULONG dwInterface,
  LPCWSTR pszFunction,
  ULONG *pcbBuffer,
  PCRYPT_CONTEXT_FUNCTION_CONFIG *ppBuffer
);

NTSTATUS WINAPI BCryptQueryContextFunctionProperty(
  ULONG dwTable,
  LPCWSTR pszContext,
  ULONG dwInterface,
  LPCWSTR pszFunction,
  LPCWSTR pszProperty,
  ULONG *pcbValue,
  PUCHAR *ppbValue
);

NTSTATUS WINAPI BCryptQueryProviderRegistration(
  LPCWSTR pszProvider,
  ULONG dwMode,
  ULONG dwInterface,
  ULONG *pcbBuffer,
  PCRYPT_PROVIDER_REG *ppBuffer
);

/* Kernel mode
NTSTATUS WINAPI BCryptRegisterConfigChangeNotify(
  PRKEVENT phEvent
);

NTSTATUS WINAPI BCryptUnregisterConfigChangeNotify(
  PRKEVENT hEvent
);
*/

NTSTATUS WINAPI BCryptRegisterConfigChangeNotify(
  HANDLE *phEvent
);

NTSTATUS WINAPI BCryptUnregisterConfigChangeNotify(
  HANDLE hEvent
);

NTSTATUS WINAPI BCryptRemoveContextFunction(
  ULONG dwTable,
  LPCWSTR pszContext,
  ULONG dwInterface,
  LPCWSTR pszFunction
);

NTSTATUS WINAPI BCryptResolveProviders(
  LPCWSTR pszContext,
  ULONG dwInterface,
  LPCWSTR pszFunction,
  LPCWSTR pszProvider,
  ULONG dwMode,
  ULONG dwFlags,
  ULONG *pcbBuffer,
  PCRYPT_PROVIDER_REFS *ppBuffer
);

NTSTATUS WINAPI BCryptSecretAgreement(
  BCRYPT_KEY_HANDLE hPrivKey,
  BCRYPT_KEY_HANDLE hPubKey,
  BCRYPT_SECRET_HANDLE *phSecret,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptSetContextFunctionProperty(
  ULONG dwTable,
  LPCWSTR pszContext,
  ULONG dwInterface,
  LPCWSTR pszFunction,
  LPCWSTR pszProperty,
  ULONG cbValue,
  PUCHAR pbValue
);

NTSTATUS WINAPI BCryptSetProperty(
  BCRYPT_HANDLE hObject,
  LPCWSTR pszProperty,
  PUCHAR pbInput,
  ULONG cbInput,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptSignHash(
  BCRYPT_KEY_HANDLE hKey,
  VOID *pPaddingInfo,
  PBYTE pbInput,
  DWORD cbInput,
  PBYTE pbOutput,
  DWORD cbOutput,
  DWORD *pcbResult,
  ULONG dwFlags
);

NTSTATUS WINAPI BCryptVerifySignature(
  BCRYPT_KEY_HANDLE hKey,
  VOID *pPaddingInfo,
  PUCHAR pbHash,
  ULONG cbHash,
  PUCHAR pbSignature,
  ULONG cbSignature,
  ULONG dwFlags
);

#endif /*(_WIN32_WINNT >= 0x0600)*/
#endif /*_INC_BCRYPT*/
